Ultralytics YOLO27: Встать в лист ожидания.
Get Started
Урокначинающий

Используй аугментацию осознанно

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

Представь сортировочную линию, где отделяют красные капсулы от оранжевых, а модель обучают со стандартным изменением оттенка. В каждой эпохе модель видит красные капсулы, окрашенные в оранжевый, и усваивает, что цвет не важен, хотя именно это ей и нужно было выучить. Аугментация повышает устойчивость модели, только если каждое преобразование может действительно возникнуть при съёмке целевой камерой. В этом уроке ты узнаешь, как определить, какие преобразования оставить.

Результат

Выбери профиль аугментации и одной строкой обоснуй каждое изменённое значение параметра с учётом условий развёртывания. Обучи модель с выбранным профилем и проверь результат в train_batch0.jpg.

Ускоренное прохождение
Если ты уже освоился, вот краткая версия.
  1. Сначала обучи модель со стандартной аугментацией и зафиксируй базовый результат.

  2. Отключи преобразования, которые камера не может создать, например изменение оттенка, если класс определяется цветом.

  3. Включи преобразования, которые может создавать камера, например flipud для съёмки сверху.

  4. Открой train_batch0.jpg и убедись, что рамки точно охватывают объекты, а признаки классов сохраняются.

Практические занятия

Что даёт аугментация#

Аугментации одной фотографии ары: отражение по горизонтали, кадрирование, медианное размытие, контрастность, изменение оттенка, насыщенности и значения яркости, гамма-коррекция

Аугментация данных преобразует обучающие изображения на лету, поэтому в каждой эпохе модель видит немного изменённую версию каждого изображения. При грамотном применении она повышает устойчивость к изменениям освещения, масштаба и ориентации, а также уменьшает переобучение, поскольку модель не может запоминать постоянно меняющиеся изображения. При неправильном применении аугментация учит модель распознавать физически невозможные сцены и скрывает недостатки датасета, которые нужно устранить.

Посмотри на панель оттенка выше: красная ара становится жёлтой. Для задачи «ара или не ара» это безвредно, но разрушительно, если именно цвет отличает друг от друга два твоих класса.

Важные параметры по умолчанию#

Ниже приведены значения по умолчанию в Ultralytics 8.4; в справочнике по параметрам аугментации перечислены все аргументы:

АргументПо умолчаниюНазначениеКогда менять
hsv_h0.015Изменение оттенкаЗадай 0, если класс определяется цветом
hsv_s / hsv_v0.7 / 0.4Изменение насыщенности и яркостиУменьши значения при фиксированном и контролируемом освещении
degrees0.0Случайный поворот (± градусов)Увеличь значение, если объекты могут быть под любым углом
translate / scale0.1 / 0.5Смещение и масштабированиеУменьши значения, если обрезка может удалить части, определяющие класс
fliplr0.5Вероятность отражения по горизонталиЗадай 0, если важны левая и правая стороны, как, например, в тексте
flipud0.0Вероятность отражения по вертикалиУвеличь значение для съёмки сверху, аэрофотосъёмки или изображений под микроскопом
mosaic1.0Объединяет четыре изображения в одноРедко; см. close_mosaic
close_mosaic10Отключает мозаику на последних N эпохахУменьши значение для очень коротких запусков
mixup / cutmix0.0 / 0.0Смешивает два изображения или накладывает фрагмент одного на другоеПопробуй на небольших датасетах после получения базового результата
copy_paste0.0Переносит экземпляры объектов между изображениямиДатасеты для сегментации, семантической сегментации и OBB с редкими классами

Исключение — датасеты глубины: mosaic, mixup, cutmix и copy_paste создавали бы некорректные парные карты глубины, поэтому загрузчик данных глубины автоматически устанавливает для них значение 0.

Проверка с учётом условий развёртывания#

Для каждого включённого преобразования нужно ответить на один вопрос, а затем на второй:

ПреобразованиеРеалистично?Вердикт
Изменение яркости на ±30% для уличной камерыДа: время сутокОставить
Отражение по горизонтали для камеры наблюденияДа: люди ходят в обоих направленияхОставить
Отражение по вертикали для камеры на стенеНет: пол всегда внизуОтключить
Вертикальное отражение для камеры над конвейеромДа: в кадре нет понятия «верх»Включить
Поворот на 90° для стационарной дорожной камерыНет: камера никогда не поворачиваетсяОтключить
Сдвиг оттенка, если красные и зелёные детали относятся к разным классамНет: это уничтожает информативный сигналОтключить

Аугментация поворотом на 180 градусов: перевёрнутый ара, вид, который никогда не создаёт неподвижная камера, установленная вертикально

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

Пример профиля#

Камера над конвейером сортирует детали, классы которых различаются только цветом. Сдвиг оттенка нужно отключить, а вертикальные отражения и небольшие повороты становятся реалистичными. Запусти обучение, как показано, на демонстрационном наборе COCO8; подставь YAML-файл своих данных и укажи реальное число эпох:

from ultralytics import YOLO

model = YOLO("yolo26n.pt")
model.train(
    data="coco8.yaml",
    epochs=1,
    imgsz=320,
    hsv_h=0.0,  # цвет задаёт класс: сохраняй исходные оттенки
    flipud=0.5,  # вид сверху: в кадре нет понятия «вверх»
    degrees=10.0,  # детали располагаются под любым небольшим углом
)

Открой train_batch0.jpg в папке запуска и проверь три вещи: после преобразования рамки остаются точными, признаки, определяющие класс (цвет, форма, текст), сохраняются, а изображения не выглядят физически невозможными. Ослабь любое преобразование, которое нарушает одно из этих условий. В материале Обучи свою первую модель рассматривается сам процесс обучения.

Mosaic и close_mosaic#

Аугментация Mosaic объединяет четыре фотографии попугаев в одно обучающее изображение

Mosaic объединяет четыре изображения в одно и включена по умолчанию. Для детекции это самая эффективная аугментация: каждое обучающее изображение содержит несколько сцен, масштабов и контекстов объектов. Но изображения Mosaic не похожи на кадры при развёртывании, поэтому close_mosaic=10 отключает её на последние 10 эпох, и модель завершает обучение на реалистичных входных данных. Отключение Mosaic также выключает mixup, cutmix и copy_paste, а отражения, HSV и геометрические преобразования продолжают применяться.

При коротком обучении мозаика не используется

При запусках длительностью не более close_mosaic эпох, включая профиль на одну эпоху выше, мозаичное дополнение отключено уже с первой эпохи. Оценивай мозаичное дополнение по train_batch0.jpg полного запуска, а не по короткому тесту.

Чего не исправить аугментацией#

Аугментация усиливает то, что уже есть. Если в наборе данных нет ночных изображений, никакая настройка не создаст ночь: она создаст более светлые и более тёмные варианты дневных изображений. Если класс распознаётся только при агрессивной аугментации, этого класса недостаточно. Вернись к материалу Собери качественные и репрезентативные данные.

Если выкрутить все настройки на максимум, реальная проблема останется незаметной

При обучении на небольшом наборе данных с максимальными значениями всех параметров аугментации изображения всё сильнее отличаются от тех, что встретятся при развёртывании модели, и mAP на val часто снижается. Меняй по одному параметру, обосновывая каждое изменение, и сравнивай результат с базовой конфигурацией на том же разбиении.

Когда обрезка уничтожает класс

Если класс определяется небольшой частью объекта, например символом в углу игральной карты, mosaic, translate и scale могут обрезать эту часть, создав обучающее изображение, неотличимое от изображения другого класса. Уменьши эти значения для такого набора данных и проверь результат в train_batch0.jpg.

Попробовать

Для каждого аргумента в таблице значений по умолчанию укажи, оставить его, изменить или отключить для своего сценария развёртывания; каждое изменение обоснуй одной строкой. Один раз обучи модель со значениями по умолчанию, а второй — со своим профилем, используя одно и то же разбиение, и запиши val mAP50-95 для обоих запусков. Результат: таблица с пометками, обе метрики и train_batch0.jpg пользовательского запуска.

Критерии готовности
Урок считается завершённым, если выполнены все условия ниже.
  • У каждого изменённого аргумента есть однострочное обоснование с учётом развёртывания.

  • Профили по умолчанию и пользовательский сравниваются на одном и том же разбиении val.

  • train_batch0.jpg пользовательского запуска показывает точные рамки и сохранённые признаки классов.

Показать решение

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

АргументВыборОбоснование
flipud0.5При виде сверху изображение выглядит одинаково и после вертикального отражения
degrees180Корабли встречаются с любым направлением носа
hsv_hпо умолчаниюЦвет корпуса различается и не служит признаком класса
mosaicпо умолчаниюНа каждом изображении много мелких объектов; Mosaic помогает

На демонстрационном аэрофотоснимочном наборе DOTA8:

yolo obb train data=dota8.yaml model=yolo26n-obb.pt epochs=1 imgsz=320 flipud=0.5 degrees=180

Для стационарной уличной камеры те же два изменения не пройдут проверку для развёртывания: на изображении с камеры, закреплённой на стене, автомобили никогда не бывают перевёрнутыми.

Что дальше

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

Войди, чтобы сохранять прогресс