ar
Feedback
Запрети мне псевдолейблить

Запрети мне псевдолейблить

الذهاب إلى القناة على Telegram

Канал о пути к Kaggle competitions (теперь уже) GrandMaster и поте, которым обливаешься в процессе Последний авторский канал про мл, претендующий на искренность и позволяющий ставить клоунов Для контакта пишите в сообщения канала, они бесплатные

إظهار المزيد
4 143
المشتركون
+524 ساعات
+207 أيام
+13730 أيام
أرشيف المشاركات
Топ-1 в #BirdClef2025 от Никиты Бабича запретите ему псевдолйблить Никита всё соревнование доминировал — был на первом или вт
Топ-1 в #BirdClef2025 от Никиты Бабича запретите ему псевдолйблить Никита всё соревнование доминировал — был на первом или втором месте. Я лично не видел его ниже чем на втором. Данные Дополнительные птицы Докачал из архива Xeno ещё 5 489 записей по тем же классам, что и в трейне. Дополнительные лягушки и насекомые из других таксонов 17 197 записей насекомых и амфибий, в том числе не входящих в лейблы для соревнования. Амфибии и насекомые имеют высокую частоту повторяющихся специфичных звуков, что сильно отличается от птиц — отлично прокачивает модель на низкочастотных и “других” классах. SED-модели (Sound Event Detection). Прошлые участники тоже их использовали, но я хотел именно тут объяснить что за SED такой. Классическая классификация говорит «что это за звук», а SED ещё и «где он начинается и где кончается». На шумных данных, где вокруг слышно несколько видов на одной записи, это был ключ к успеху вместе с псевдолейблингом. По сути это мост от per-sample к per-frame разметке, похожий на MIL-задачу. Сильно мне напоминает MIL модели, которые делают что-то похожее, но на картинках На картинке пример инференса SED: как и почему он помогает на шуме. Валидация Нормальной валидации не нашлось, поэтому Никита валидировался по ЛБ. :chad: Многоэтапное обучение Бейзлайн 15 эпох, Cross-Entropy, AdamW, Cosine Scheduler backbone’ы: EfficientNet-0 + RegNetY-8 LB: 0.872 Псевдолейблинг I + MixUp Генерим псевдолейблы на неразмеченной части. Смешиваем MixUp: настоящие лейблы + псевдолейблы (малый вес последних). Добавляем StochasticDepth (drop whole conv-блоки, p=0.15). StochasticDepth- это когда у нас есть дропауты, которые выкидывают целые блоки из бекбона и глубина получается недетерминированной. Тренируем 25–35 эпох. LB: 0.872 → 0.898 Power Scaling + псевдолейблинг II Просто в лоб вторая итерация давала слишком шумные псевдолейблы, которые нельзя было повторно переиспользовать. Решение: new_preds_i = preds_i^(1/power_c) / sum(preds_j^(1/power_c)) Это позволило пройти 4 раунда псевдолейблинга с улучшением качества. LB: 0.898 → 0.930 Отдельный пайплайн для насекомых и амфибий Тренируем классификатор на этих данных. Берём предикты по нужным классам из трейна и заменяем ими результаты в основном ансамбле. LB: 0.930 → 0.933 В конечно итоге собираем ансамбль: EfficientNet-l0, B4, B3 (3 раунда псевдолейблинга) RegNetY-016 (2 штуки, 4 раунда) RegNetY-008 (1 штука, 1 раунд) Отдельный EfficientNet-B0 для классификации насекомых и амфибий Из этого решения наверно для себя самыми горячими идеям вынесу: 1. PowerTransform для псевдолейблов, чтобы идти в несколько раундов. Идея будто даже похожая на жесткие псевдолейблы чем-то 2. SED как способ уточнить разметку на псевдолейблах

Топ-2 в #BirdClef2025 В этот раз опытне птичники, у которых в команде чел с первым местом в 2022 и 2023 годах! 📊 Данные Испо
Топ-2 в #BirdClef2025 В этот раз опытне птичники, у которых в команде чел с первым местом в 2022 и 2023 годах! 📊 Данные Использовали данные из прошлых соревнований, что собственно и помогала в прошлые года + Подтянули дополнительно записи из Xeno Archive. Тут помог баг, который был обнаружен еще в 2023: API Xeno Archive выдаёт максимум 500 семплов на вид — большинство команд этого не учли. Багу два года, и его никто не чинит. Кто знает- тот знает 🎛️ Предобработка Для обучения берём первые 7 секунд каждого файла и рандомно вырезаем 5 секунд. Баланс между разнообразием данных и интуицией: голос птицы чаще слышен в начале записи. 🛠️ Архитектура и оптимизация tf_efficientnetv2_s + RAdam eca_nfnet_l0 + AdamW Обе модели тренировали 50 эпох Loss: Focal + BCE Scheduller: Cosine LR ⚖️ Веса семплов Учли с весами, чтобы компенсировать дисбаланс классов:

python
sample_weights = (
    all_primary_labels.value_counts() / 
    all_primary_labels.value_counts().sum()
) ** (-0.5)

🚀 Ключевые бусты 1. Предтренинг на всём Xeno Archive Вычистили низкочастотные классы и текущее тесто-трейн Предобучили на задаче классификации и получили бекбон с глубоким пониманием спектрограмм записей животных Результат: 0.84 → 0.87 2. Псевдолейблинг (запрещенная техника) Предсказываем на неразмеченных данных → pseudo1 Оставляем только скоры > 0.5 → pseudo2 Зануляем слабые метки (< 0.1): pseudo2[pseudo2 < 0.1] = 0 Обучаем модель на таргет pseudo2 и повторяем цикл После двух итераций: 0.87 → 0.89 → 0.91 (третий круг не даёт профита) 3. TTA Сдвигали записи в Test time augmentation на 2.5 секунды влево и вправо, а потом усредняли предсказания. 0.91 -> 0.922

Без багов кстати не обошлось: Из-за изменения системы учета лайков на ноутбук, циферки теперь расходятся: В профиле я бывал м
+1
Без багов кстати не обошлось: Из-за изменения системы учета лайков на ноутбук, циферки теперь расходятся: В профиле я бывал максимум 283, а судя по графику бывал и повыше

Вчера все верно догадались: Кагл убрал дискашны насовсем. Теперь осталась только ачивка Kaggle Legacy discussion Master/GM. А
+1
Вчера все верно догадались: Кагл убрал дискашны насовсем. Теперь осталась только ачивка Kaggle Legacy discussion Master/GM. А еще он убрал Novice/Contributor и оставил просто Unranked/Expert/master/GM И это отлично. Каглу уже давно пора воровать элементы вовлечения у другого популярного сайта и толкать аналитику катализируюшую гиперфокус. Только не за подписку, а ради вовлечения пользователей и удержания. Теперь можно посмотреть, как менялся ваш рейтинг во времени. Верю, что ASI построят все равно кагглеры, а не резерчеры. Из открытий- ранкинг не так быстро падает, как я ожидал. Все еще есть смысл концентрироваться на циферках. А еще теперь апвоуты ноутбуков считаются только от экспертов и форк ноутбуков автоматически ставит на него палец вверх.

А еще, видимо из-за наплыва Индийских грандмастеров в дискашнах, медальки в дискашнах исчезли
А еще, видимо из-за наплыва Индийских грандмастеров в дискашнах, медальки в дискашнах исчезли

Теперь на каггле дают 'предупреждения' за то, что выкладываешь даталик в паблик. Два предупреждения- бан https://www.kaggle.com/competitions/neurips-open-polymer-prediction-2025/discussion/588565 🤡️️️️🤡️️️️🤡️️️️

У вас вообще появились продакты потому, что Мэнти Кейган написал о том, какие они полезные в книге »Inspired«. При этом он опирался на свой десятилетний опыт работы инженером в HP с 1980 по 1990. После этого он еще 10 лет совмещал роли CTO и CPO в Netscape и Ebay. И в 2002 (за 15 лет до публикации), он ушел в консалтеры и продает свой ценнейший опыт за почасовую оплату. Смог бы ваш продакт буквально придумать объекто-ориентированное программирование в лабе HP? Надеюсь, да Скелетрон пока не вернется, я так книжки не успеваю быстро читать

Ваш проект называют стартапом-внутри-компании не из-за его перспективности и инновационности, а потому что Эрику Рису в »Lean Startup« нужно было продать свою книжку не только предпринимателям, но и менеджерам среднего звена без специального образования. Скелетрон вернется с умными мыслями завтра

У вас митинги на работе не полчаса, а 25 минут, не для экономии времени, а потому, что в книжке »Сам себе MBA. Самообразование на 100%. Джош Кауфман« написано, что это способ сэкономить время менеджеров. Причем вообще-то эта идея предложена для оптимизации кастдева и сапорта Скелетрон вернется с умными мыслями завтра

3 место в #BirdClef2025 Данные: 1. Выкорчевали человеческий голос с помощью паблик кернела с каггла. 2. Взяли весь датасет 2025 года и к нему доложили 80% датасета 2023 года, добавив 112 новы классов. Оставшиеся 20% данных 2023 использовали для валидации. Локальная валидация не билась с ЛБ, но такая схема давала лучшую оценку сходимости модели. 3. Дополнительно вытянули еще данных из обоих открытых источнико, Xeno-Canto и INaturalist. 4. Запсевдолейбили всю неразмеченную часть, чтобы еще немного улучшить итоговые модели Модели: Обучили зоопарк моделей на двух видах спектрограмм. Вообще почти всегда есть смысл покрутить параметы построения спектрограмм для того, чтобы увеличить разнообразие и не потерять в качестве. Главное одну модель не учить на двух видах. Список моделей tf_efficientnet_b0_ns tf_efficientnetv2_b3 tf_efficientnetv2_s.in21k_ft_in1k mnasnet_100 spnasnet_100 Интересные приемы для обучения: 1. Семплировали случайные отрезки, а не честную нарезку по 5 сек. Говорят, так лучше училось 2. Добавляли человеческий голос для аугментации. На мой взгляд не сильно вяжется с удалением голоса из изначального датасета, но видимо использовали этот прием чтобы голос 'равномерно' размазать по всему датасету 3. Учились на FocalLoss 4. Использовали Model Soup. Это способ 'ужать' в одну модель несколько чекпоинтов. Усредняем веса например 20 resnet c одинаковой архитектурой и обученных на одних данных. Получаем почти ту же стабильность, что и усреднение 20 отдельных предикшнов этих моделей, но со скоростью инференса и весом одного resnet. Кстати, тут можно обычно докрутить и делать только GreedySoup: пробовать в ансамбль добавлять только те модели, которые делают предикты лучше. Но опять же, тут надо верить в свой CV, а в этом соревновании наверно никто не верил в свой CV. Для сабмита использовали Post-processing with power adjustment. Берем предикты, из них выбираем n самых 'уверенных' и усиливаем их, занижая скоры для прочих классов.

У вас каждый день дейли не потому, что дейли эффективны. У вас дейли потому, что в книжке »Scrum. Революционный метод управления проектами. Джефф Сазерленд« написано, что их можно делать. Скелетрон вернется с умными мыслями завтра

#соревнование Обзор международных соревнований в DS за прошлый год: на каких платформах, что используют победители, какие кон
#соревнование Обзор международных соревнований в DS за прошлый год: на каких платформах, что используют победители, какие конкурсы проходят и т.п. Такие отчёты каждый год выходят (но тут ни разу ссылок на них не давал). https://mlcontests.com/state-of-machine-learning-competitions-2024/

4 место в #BirdClef2025 Коротко, но ценно: иногда простота выигрывает. Поскольку на BirdCLEF нас оценивают именно по AUC, логично оптимизировать его напрямую. AUC-лосс устойчив к переобучению, но не поддерживает soft labels, как, например, кросс-энтропия.

class SoftAUCLoss(nn.Module):
    def __init__(self, margin=1.0, pos_weight=1.0, neg_weight=1.0):
        super().__init__()
        self.margin = margin
        self.pos_weight = pos_weight
        self.neg_weight = neg_weight

    def forward(self, preds, labels, sample_weights=None):
        # Разделяем положительные и отрицательные предсказания
        pos_mask = labels > 0.5
        neg_mask = labels < 0.5
        pos_preds, pos_labels = preds[pos_mask], labels[pos_mask]
        neg_preds, neg_labels = preds[neg_mask], labels[neg_mask]

        if pos_preds.numel() == 0 or neg_preds.numel() == 0:
            return torch.tensor(0., device=preds.device)

        # Веса отражают уверенность soft-label
        pos_w = self.pos_weight * (pos_labels - 0.5)
        neg_w = self.neg_weight * (0.5 - neg_labels)
        if sample_weights is not None:
            sw = sample_weights.unsqueeze(1).expand_as(labels)
            pos_w *= sw[pos_mask]
            neg_w *= sw[neg_mask]

        # Считаем pairwise-разности и лог-лосс
        diff = pos_preds.unsqueeze(1) - neg_preds.unsqueeze(0)
        loss_matrix = torch.log1p(torch.exp(-self.margin * diff))

        # Усредняем по всем парам с учётом весов
        return (loss_matrix * pos_w.unsqueeze(1) * neg_w.unsqueeze(0)).mean()
Что еще работало и не работало: Semi-supervised learning на неразмеченном датасете: Сначала обучил 10 моделей EfficientNet на размеченной части. Сгенерировал «псевдо-лейблы» для неразмеченных данных. Обучил следующий раунд моделей уже на объединённом наборе. Отказался от самодистилляции и сложных схем — не заводилось. Лотерея или мастерство? Автор поднялся с 11 места на 4-е на прайвете! Возможно, дело не только в удаче.

Пятое место #Birdclef2025 Мануальная обработка данных Это вообще та самая 'секретная техника', которую все ленятся делать. Да
Пятое место #Birdclef2025 Мануальная обработка данных Это вообще та самая 'секретная техника', которую все ленятся делать. Данные полезно ковырять/слушать смотреть руками Использовали Silero для того, чтобы найти записи с человеческим голосом, затем слушали их уже своими ушами и вырезали все фрагменты, где слышен человек. Вообще у Silero есть бот, так что я им пожалуй и озвучу этот раздел поста. Для классов с низкой частотностью (меньше 30 семплов в трейне) дополнительно послушали все записи и из каждой вычистили участки, где птиц не слышно. Для трейна брали только первые 30 сек записи, а для низкочастотных 60 сек. Там, где семплов было меньше 20 для класса- апсемплили, чтобы 'разудть' трейн. Модели Стакали кучу эффишентнетов. Благо они с легкостью влезали в ограничения по CPU • 4x tf_efficientnetv2_s • 3x tf_efficientnetv2_b3 • 4x tf_efficient_b3_ns • 2x tf_efficient_b0_ns Но важно что тренировали в три стейджа. В каждом FocalLoss, Adam, Cosine Annealing + warmup Первый стейдж: только основной набор данных, только основной таргет Второй стейдж: Основной таргет + псевдолейблы, только основные размеченные данные + двухэтапная самодистилляция Третий стейдж: Использовали все данные. Для каждого батча брали половину из размеченных данных, половину из неразмеченных. Для основного набора испольовали основные лейблы + псевдолейблы с второго этапа, для неразмеченных- только псевдолейблы Ну и еще дважды самодистилляция. Если вы шарите, то объясните плз в комментах почему самодистилл работает и почему его есть смысл больше двух раз делать? Там еще и перфоманс на самодистиллах растет. В комментах есть график того, какие резульатты получаются от уровня дистилла

Ну я пост про решение написал, вот вам тизер

BirdCLEF+ 2025 Очередная часть ежегодного соревнования от Cornell Lab of Ornithology. Дано: – 12 ГБ аудиозаписей птиц, насеко
BirdCLEF+ 2025 Очередная часть ежегодного соревнования от Cornell Lab of Ornithology. Дано: – 12 ГБ аудиозаписей птиц, насекомых, рептилий и т. д. – Источники (около–опенсорс): 1. xeno-canto.org 2. iNaturalist 3. Colombian Sound Archive (CSA) института Гумбольдта в Колумбии Первые два источника — чистый краудсорс, разметка «грязная»: 1. у части семплов встречаются продолжительные комментарии колубийского натуралиста на испанском; 2. муха залетает в микрофон и гудит 40 секунд из 50 секунд записи вообще-то птицы; 3. мой любимый фейл — запись птицы, где звук обрывается громким «бултых», а дальше — полная тишина на 90 сек. Видимо не все микрофоны пережили сборку датасета Разметка (для всех семплов): 1. Основной лейбл — целевая живность, которую нужно предсказывать. 2. Вторичный лейбл — какие ещё виды могут быть слышны. Конечно же не гарантирует то, что все виды на записи хотя бы отмечены 3. Координаты 4. Автор записи 5. Оценка качества (только для xeno-canto) 6. Источник данных (одна из трёх библиотек) Трейн/тест сплит: Общий пул разбит по записям, но обработан по-разному: В train — полные аудиофайлы. В test — нарезки записей по 5 с. Например, из записей длительностью 30 сек и 20 сек получится 10 тест-семплов: первые 6 — с основным лейблом первой записи; остальные 4 — с лейблом второй. Метрика: Macro-ROC-AUC — сортировка вероятностей внутри каждого класса и усреднение без учёта частоты встречаемости. Ну и конечно же ограничения на железо: 90 минут CPU-only Тут кстати тренд: 2025- 90 min CPU-only 2024- 120 min CPU-only 2023- 120 min CPU-only 2022- 9 hours с доступом к GPU 2021- 9 CPU часов или 3 GPU часа Как решать будете?

Птичное соревнование закончилось, так что на этой неделе будут разборы птичного соревнования. Удивительно, но оно птичное даже в UMAP эмбедах, как можно увидеть выше