Назад
45

Prepare your data

45

Датасеты — то, на чем держится весь DL. Многие компании сохраняют их в тайне и не выкладывают в открытый доступ. Подбор архитектур, лоссов и оптимизаторов не имеет смысла без хороших данных для обучения. Качество датасета складывается из нескольких основных критериев:

  • объёма и разнообразия;
  • баланса классов;
  • соответствия целевому домену;
  • чистоты разметки.

Разберем каждый пункт по отдельности.

Объём и разнообразие

Чем больше реальных примеров модель увидит во время обучения, тем выше ее обобщающая способность: она с большей вероятностью адекватно отработает на новых данных. С ростом количества уникальных примеров снижается риск переобучения — адаптации под обучающую выборку.

Но! Большой набор данных не всегда приводит к большей точности из-за потенциального шума, выбросов и нерелевантной информации.

Стоит учитывать: объём складывается из разнообразия. Например, при кадрах из одного и того же видео с разницей в 0.1 сек модель получит мало новой информации, только дублирующее изображение.

Больше — не значит лучше, но количество разнообразных данных важно.

Баланс классов

При существенном дисбалансе в датасете (1к примеров одного класса и 100к примеров другого) модель будет переобучаться под класс с большим количеством примеров (то есть под второй) в случае, когда классы одинаково сложны. Это можно исправить семплированием, заданием веса в функции потерь каждому классу, увеличением количества аугментаций для первого класса, либо использованием Focal Loss (о нем мы писали в нашей статье). Но мы ничего не сможем сделать, если захотим обучить модель на классификацию при наличии в датасете всего 2 кошек и 98 собак (тут придется добирать примеры в первый класс).

Важно соблюдать баланс и наполненность классов.

Домен

Для более понятного объяснения давайте обратимся к примеру.

Допустим, мы обучили сетку на детекцию людей в офисе (см. Рисунок 1), но для обучения использовали датасет для детекции пешеходов (см. Рисунок 2). Как можно заметить, ракурс фотографий и освещение значительно отличаются, следовательно, модель будет работать на целевом домене хуже, чем на обучающем.

Рисунок 1. Целевой домен (target domain)

Рисунок 2. Исходный домен (source domain)

Нужно стремиться к тому, чтобы обучающий датасет (source domain) был максимально приближен к данным, на которых будет использоваться модель (target domain).

Чистота разметки

Чем чище датасет, тем быстрее и лучше обучится модель. Наличие выбросов уводит траекторию градиентного спуска с оптимальной, что замедляет процесс обучения и ухудшает сходимость. К тому же валидация на шумных данных не отражает действительных метрик.

На рисунке 3 представлен пример плохой разметки детекции транспорта. Мы видим неточные боксы, неразмеченные автомобили — все это будет вводить негативный шум в обучающий процесс.

Рисунок 3. Пример плохой разметки

Как понять, что датасет содержит грязные лейблы? Можно вручную просмотреть все изображения и разметку к ним, выбросить или переразметить плохие семплы (или воспользоваться label smoothing, если не уверены в чистоте датасета). Но когда размер датасета переваливает за несколько тысяч, мануальный перебор становится слишком трудоемким. Рассмотрим подход, позволяющий выявить плохие примеры в разметке.

Hard negative mining — подход, предназначенный для поиска сложных примеров в данных. Он поможет выявить:

  • семплы, на которых модель сильно ошибается;
  • плохую разметку.

Давайте посмотрим на график лосса во время обучения:

Рисунок 4. График лосса при обучении модели

Итак, мы замечаем “выбросы”. Для некоторых задач, выбросы — норма (обучение GAN, LLM), но в большинстве случаев это может свидетельствовать о том, что модель плохо справилась с предсказанием на данном примере, либо ей попался семпл с битой разметкой.

Что нужно сделать, если график лосса выглядит подобным образом, и в нем периодически встречаются пики?

  • Обучить легкую бейзлайн-модель до вменяемых метрик на имеющемся датасете.
  • Прогнать весь датасет (и трейн, и тест) через модель в режиме инференса, посчитать лосс отдельно для каждого изображения.
  • Отрисовать лосс на графике, визуально оценить лучшее пороговое значение для отделения выбросов от остальных предиктов (см. Рисунок 5).
  • Просмотреть ground-truth метки и изображения, лосс которых будет выше заданного значения.
  • Если замечена ошибка разметки — переразметить, либо выбросить такой семпл.
Рисунок 5. Пример выбора порогового значения

Итоги

Ничто не бустанет ваши метрики так, как правильная подготовка датасета. Если нет уверенности в его чистоте — подбирать гиперпараметры рано. Уделив внимание каждому описанному пункту, можно смело приступать к обучению, выбирать SOTA модель и прикручивать хайповый лосс и оптимизатор.

Телеграм-канал

DeepSchool

Короткие посты по теории ML/DL, полезные
библиотеки и фреймворки, вопросы с собеседований
и советы, которые помогут в работе

Открыть Телеграм

Увидели ошибку?

Напишите нам в Telegram!