Ultralytics YOLO27:
Get Started

Методы предварительной обработки размеченных данных для компьютерного зрения#

Предварительная обработка данных преобразует исходные размеченные изображения в чистые и согласованные входные данные, необходимые модели компьютерного зрения для эффективного обучения. В Ultralytics YOLO26 основные операции с пикселями — преобразование в RGB, масштабирование до [0, 1] и изменение размера — автоматически выполняются в конвейере обучения, поэтому остаётся правильно разделить датасет, сбалансировать классы и выбрать аугментации. В этом руководстве рассматриваются основные методы: изменение размера, нормализация, разделение датасета, аугментация данных и разведочный анализ данных (EDA).



Смотри: Как повысить точность модели в реальных сценариях с помощью предварительной обработки и аугментации данных 🚀

Этот этап следует за тем, как ты определил цели проекта и собрал и разметил данные, и находится в начале рабочего процесса проекта компьютерного зрения.

Почему предварительная обработка важна#

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

  • Шум: Нерелевантные или случайные отклонения в данных.
  • Несогласованность: Различия в размерах, форматах и качестве изображений.
  • Дисбаланс: Неравномерное распределение классов или категорий в датасете.

Методы предварительной обработки#

Основные методы — изменение размера, нормализация, разделение датасета и аугментация. В YOLO26 первые два выполняются автоматически, а наиболее важны твои решения о разделении данных и аугментации.

Изменение размера изображений#

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

  • Билинейная интерполяция: Сглаживает значения пикселей, вычисляя взвешенное среднее для четырёх ближайших пикселей.
  • Интерполяция методом ближайшего соседа: Копирует значение ближайшего пикселя без усреднения. Этот метод быстрее, но изображение получается более пиксельным.

Такие библиотеки, как OpenCV и PIL (Pillow), предоставляют эти функции, но для YOLO26 обычно не нужно менять размер изображений вручную. Это делает аргумент imgsz. При обработке изображений по фиксированному квадратному шаблону валидация и инференс приводят их к входному размеру imgsz × imgsz, например 640 × 640, сохраняя соотношение сторон и добавляя серые поля (значение 114). Большие изображения уменьшаются, а маленькие не увеличиваются, если увеличение отключено. При стандартном режиме обучения вместо этого mosaic=1.0 размещает четыре изображения на увеличенном холсте и обрезает его до imgsz. Когда для последних эпох параметр close_mosaic отключает мозаику, изображения приводятся к нужному размеру с помощью полей, а затем всё равно случайным образом преобразуются, а не передаются без изменений. Для прямоугольных пакетов (rect=True) и multi_scale используются другие формы входных данных.

Нормализация значений пикселей#

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

  • Масштабирование min-max: Приводит значения пикселей к диапазону от 0 до 1.
  • Нормализация по z-оценке: Масштабирует значения пикселей с учётом среднего значения и стандартного отклонения.

YOLO26 автоматически выполняет нормализацию в рамках конвейера предварительной обработки: преобразует изображения в RGB и масштабирует значения пикселей до диапазона [0, 1], разделив их на 255 (масштабирование min-max). По умолчанию YOLO не применяет нормализацию по среднему значению и стандартному отклонению, как в ImageNet (z-оценку), поэтому вручную нормализовать данные не нужно.

Разделение датасета#

Разделение данных на обучающую, валидационную и тестовую выборки позволяет оценить модель на ранее не встречавшихся данных и измерить её способность к обобщению. Часто используют такое соотношение: 70% для обучения, 20% для валидации и 10% для тестирования. Упростить этот процесс помогут инструменты вроде scikit-learn или TensorFlow.

При разделении данных учитывай следующие моменты:

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

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

Аугментация датасета#

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

  • Более устойчивые модели: Различия в освещении, ориентации и масштабе помогают модели противостоять искажениям, встречающимся в реальных условиях.
  • Экономичность: Ты увеличиваешь обучающую выборку, не собирая и не размечая новые данные.
  • Эффективное использование данных: Каждое размеченное изображение даёт несколько вариантов для обучения.

Examples of data augmentation techniques including flips, rotations, scaling, and color adjustments applied to a sample image

В YOLO26 интенсивность аугментации задаётся через аргументы обучения, передаваемые в model.train(), или соответствующие флаги CLI, а не через редактирование YAML-файла датасета, в котором указаны такие метаданные, как пути, названия классов и разделение данных. Единственное исключение — flip_idx: в YAML-файле датасета позы указывают этот параметр для сопоставления пар ключевых точек слева и справа. Если параметр отсутствует, YOLO полностью отключает fliplr и flipud. Встроенные методы аугментации:

  • Мозаика, MixUp и CutMix (mosaic, mixup, cutmix): Объединяют несколько изображений в один обучающий пример.
  • Отражения (fliplr, flipud): Отражают изображения по горизонтали или вертикали.
  • Геометрические преобразования (degrees, translate, scale, shear, perspective): Поворачивают, сдвигают, масштабируют и деформируют изображения.
  • Изменение цветов HSV (hsv_h, hsv_s, hsv_v): Меняет оттенок, насыщенность и яркость.
  • Копирование и вставка (copy_paste): Добавляет копии сегментированных объектов. По умолчанию они отражаются внутри того же изображения, но их можно взять из другого изображения с помощью copy_paste_mode=mixup.
  • Перестановка каналов (bgr): Меняет порядок цветовых каналов с RGB на BGR.
  • Преобразования для классификации (auto_augment, erasing): Применяют автоматическую политику аугментации и случайное удаление областей при обучении классификатора.
Задавай интенсивность аугментации при обучении
from ultralytics import YOLO

model = YOLO("yolo26n.pt")

# Аугментация настраивается с помощью аргументов обучения, а не YAML-файла датасета
model.train(data="coco8.yaml", epochs=10, hsv_h=0.015, fliplr=0.5, mosaic=1.0, degrees=10.0)

Полный список аргументов аугментации и их значений по умолчанию смотри в справочнике настроек аугментации и отдельном руководстве по аугментации данных YOLO. Если установлен пакет albumentations, YOLO также автоматически включает встроенные аугментации на базе Albumentations.

Пример: предварительная обработка данных для детекции транспортных средств#

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

  • Изменение размера: Вручную ничего делать не нужно — во время обучения YOLO26 меняет размер до imgsz.
  • Нормализация: Вручную ничего делать не нужно — YOLO26 автоматически масштабирует значения пикселей до [0, 1].
  • Разделение: Раздели датасет: 70% для обучения, 20% для валидации и 10% для тестирования. Сохраняй распределение классов во всех выборках.
  • Аугментация: Задай аргументы обучения с учётом особенностей дорожных сцен — например, fliplr для независимости от направления, hsv_v для имитации дневного и ночного освещения и mosaic для изменения плотности объектов.

После этого датасет готов к разведочному анализу данных (EDA).

Разведочный анализ данных (EDA)#

EDA использует статистику и визуализации, чтобы выявлять закономерности и распределения в данных. Это помогает обнаружить такие проблемы, как дисбаланс классов и выбросы, до начала обучения.

Методы статистического EDA#

Статистический EDA начинается с расчёта базовых метрик — среднего значения, медианы, стандартного отклонения и диапазона — для таких характеристик, как распределение интенсивности пикселей. Эти метрики дают общее представление о качестве датасета и помогают заранее выявить отклонения.

Методы визуального EDA#

Визуализации показывают закономерности, которые не видны в сводной статистике, например дисбаланс классов и выбросы. Среди распространённых инструментов:

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

Платформа Ultralytics для EDA#

Чтобы выполнить EDA без программирования, загрузи датасет на платформу Ultralytics. Вкладка датасета Charts автоматически создаёт основные визуализации для EDA: распределение данных по выборкам, количество примеров в самых многочисленных классах, гистограммы ширины и высоты изображений и двумерные тепловые карты расположения аннотаций и размеров изображений. На вкладке Images можно просматривать данные в виде сетки, компактного списка или таблицы с наложенными аннотациями. Так легко находить ошибочно размеченные примеры и несбалансированные классы без написания кода.

Заключение#

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

Часто задаваемые вопросы#

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

  • Настраивай аугментацию с помощью аргументов обучения, а не YAML-файла датасета. Передавай в model.train() (или указывай соответствующие флаги CLI) такие аргументы, как fliplr, mosaic, hsv_h и degrees, чтобы задать вероятность и интенсивность каждого преобразования. Их описание приведено в настройках аугментации и руководстве по аугментации данных YOLO. Исключение — датасеты поз: сопоставление ключевых точек flip_idx указывается в YAML-файле датасета, а без него отражения отключены.

  • Два наиболее распространённых метода — масштабирование min-max (приведение значений пикселей к диапазону от 0 до 1) и нормализация по z-оценке (масштабирование с учётом среднего значения и стандартного отклонения). YOLO26 автоматически применяет масштабирование min-max: преобразует изображения в RGB и делит значения пикселей на 255. Поэтому вручную нормализовать данные не нужно. По умолчанию нормализация по z-оценке не применяется.

  • Часто данные разделяют так: 70% для обучения, 20% для валидации и 10% для тестирования. Сохраняй распределение классов во всех трёх выборках и избегай утечки данных: применяй аугментацию только к обучающей выборке и только после разделения. Инструменты вроде scikit-learn или TensorFlow эффективно выполняют разделение. Информацию о предварительной подготовке датасета смотри в руководстве по сбору и разметке данных.

  • Да. Аргумент imgsz задаёт целевой размер входных данных, поэтому вручную ничего делать не нужно. При обработке изображений по фиксированному квадратному шаблону валидация и инференс приводят изображения к указанному размеру с помощью полей, сохраняя соотношение сторон; большие изображения уменьшаются, а маленькие не увеличиваются, если увеличение отключено. Во время обучения стандартная мозаичная аугментация достигает целевого размера, размещая четыре изображения на одном холсте и обрезая их. Для прямоугольных пакетов (rect=True) и multi_scale используются другие формы входных данных. Подробности смотри в документации по обучению моделей.

Комментарии