Аугментация данных с использованием Ultralytics YOLO
Введение
Аугментация данных — это важный метод в компьютерном зрении, который искусственно расширяет ваш обучающий набор данных, применяя различные преобразования к существующим изображениям. При обучении моделей глубокого обучения, таких как Ultralytics YOLO, аугментация данных помогает повысить устойчивость модели, снизить переобучение и улучшить обобщение на реальные сценарии.
Смотреть: Как использовать Mosaic, MixUp и другие методы аугментации данных, чтобы помочь моделям Ultralytics YOLO лучше обобщать 🚀
Почему важна аугментация данных
Аугментация данных служит нескольким важным целям при обучении моделей компьютерного зрения:
Расширенный набор данных: Создавая вариации существующих изображений, вы можете эффективно увеличить размер своего обучающего набора данных без сбора новых данных.
Улучшенная генерализация: Модели учатся распознавать объекты в различных условиях, что делает их более надежными в реальных приложениях.
Уменьшение переобучения: Благодаря внесению изменений в обучающие данные модели с меньшей вероятностью запоминают конкретные характеристики изображения.
Улучшенная производительность: Модели, обученные с правильной аугментацией, обычно достигают лучшей точности на проверочных и тестовых наборах.
Реализация Ultralytics YOLO предоставляет полный набор методов расширения данных, каждый из которых служит определенным целям и по-разному влияет на производительность модели. В этом руководстве подробно рассматривается каждый параметр расширения данных, что поможет вам понять, когда и как эффективно использовать их в своих проектах.
Примеры конфигураций
Вы можете настроить каждый параметр с помощью Python API, интерфейса командной строки (CLI) или файла конфигурации. Ниже приведены примеры того, как настроить увеличение данных в каждом методе.
Примеры конфигурации
fromultralyticsimportYOLO# Load a modelmodel=YOLO("yolo11n.pt")# Training with custom augmentation parametersmodel.train(data="coco.yaml",epochs=100,hsv_h=0.03,hsv_s=0.6,hsv_v=0.5)# Training without any augmentations (disabled values omitted for clarity)model.train(data="coco.yaml",epochs=100,hsv_h=0.0,hsv_s=0.0,hsv_v=0.0,translate=0.0,scale=0.0,fliplr=0.0,mosaic=0.0,erasing=0.0,auto_augment=None,)
# Training with custom augmentation parameters
yolodetecttraindata=coco8.yamlmodel=yolo11n.ptepochs=100hsv_h=0.03hsv_s=0.6hsv_v=0.5
Использование файла конфигурации
Вы можете определить все параметры обучения, включая аугментации, в YAML-файле конфигурации (например, train_custom.yaml). Аргумент mode параметр требуется только при использовании CLI. Этот новый YAML-файл затем переопределит тот, что по умолчанию находится в ultralytics пакет.
# train_custom.yaml# 'mode' is required only for CLI usagemode:traindata:coco8.yamlmodel:yolo11n.ptepochs:100hsv_h:0.03hsv_s:0.6hsv_v:0.5
Затем запустите обучение с помощью Python API:
Пример обучения
fromultralyticsimportYOLO# Load a COCO-pretrained YOLO11n modelmodel=YOLO("yolo11n.pt")# Train the model with custom configurationmodel.train(cfg="train_custom.yaml")
# Train the model with custom configuration
yolodetecttrainmodel="yolo11n.pt"cfg=train_custom.yaml
Аугментации цветового пространства
Регулировка оттенка (hsv_h)
Диапазон: 0.0 - 1.0
По умолчанию: 0.015
Использование: Сдвигает цвета изображения, сохраняя их взаимосвязи. hsv_h Гиперпараметр определяет величину сдвига, при этом окончательная корректировка выбирается случайным образом между -hsv_h и hsv_h. Например, при hsv_h=0.3, смещение выбирается случайным образом в пределах-0.3 в 0.3. Для значений выше 0.5, сдвиг оттенка оборачивается вокруг цветового круга, поэтому аугментации выглядят одинаково между 0.5 и -0.5.
Назначение: Особенно полезно для сценариев на открытом воздухе, где условия освещения могут существенно влиять на внешний вид объекта. Например, банан может выглядеть более желтым при ярком солнечном свете, но более зеленоватым в помещении.
Использование: Изменяет интенсивность цветов на изображении. Параметр hsv_h Гиперпараметр определяет величину сдвига, при этом окончательная корректировка выбирается случайным образом между -hsv_s и hsv_s. Например, при hsv_s=0.7, интенсивность выбирается случайным образом в пределах-0.7 в 0.7.
Назначение: Помогает моделям справляться с различными погодными условиями и настройками камеры. Например, красный дорожный знак может выглядеть очень ярким в солнечный день, но тусклым и выцветшим в туманную погоду.
Использование: Изменяет яркость изображения. The hsv_v Гиперпараметр определяет величину сдвига, при этом окончательная корректировка выбирается случайным образом между -hsv_v и hsv_v. Например, при hsv_v=0.4, интенсивность выбирается случайным образом в пределах-0.4 в 0.4.
Назначение: Необходим для обучения моделей, которые должны работать в различных условиях освещения. Например, красное яблоко может выглядеть ярко на солнце, но гораздо темнее в тени.
Использование: Случайным образом вращает изображения в пределах указанного диапазона. Параметр degrees Гиперпараметр определяет угол поворота, при этом окончательная корректировка выбирается случайным образом между -degrees и degrees. Например, при degrees=10.0, поворот выбирается случайным образом в пределах-10.0 в 10.0.
Назначение: Имеет решающее значение для приложений, где объекты могут появляться в разных ориентациях. Например, на аэрофотоснимках с дронов транспортные средства могут быть ориентированы в любом направлении, что требует от моделей распознавания объектов независимо от их поворота.
Использование: Сдвигает изображения по горизонтали и вертикали на случайную долю размера изображения. translate Гиперпараметр определяет величину сдвига, при этом окончательная корректировка выбирается случайным образом дважды (один раз для каждой оси) в пределах диапазона -translate и translate. Например, при translate=0.5, сдвиг выбирается случайным образом в пределах-0.5 в 0.5 по оси x, и другое независимое случайное значение выбирается в том же диапазоне по оси y.
Назначение: Помогает моделям научиться обнаруживать частично видимые объекты и повышает устойчивость к положению объекта. Например, в приложениях для оценки повреждений транспортных средств части автомобиля могут отображаться полностью или частично в кадре в зависимости от положения и расстояния фотографа, аугментация сдвига научит модель распознавать эти признаки независимо от их полноты или положения.
Примечание: Для простоты, переводы, применяемые ниже, каждый раз одинаковы для обоих x и y оси. Значения -1.0 и 1.0не отображаются, так как они полностью вывели бы изображение за пределы кадра.
-0.5
-0.25
0.0
0.25
0.5
Масштаб (Шкала) (scale)
Диапазон: ≥0.0
По умолчанию: 0.5
Использование: Изменяет размер изображений на случайный коэффициент в пределах указанного диапазона. Параметр scale Гиперпараметр определяет коэффициент масштабирования, при этом окончательная корректировка выбирается случайным образом между 1-scale и 1+scale. Например, при scale=0.5, масштабирование выбирается случайным образом в пределах0.5 в 1.5.
Назначение: Позволяет моделям обрабатывать объекты на разных расстояниях и размеров. Например, в приложениях для автономного вождения транспортные средства могут находиться на разном расстоянии от камеры, что требует от модели распознавания их независимо от размера.
Значение -1.0 не отображается, так как это приведет к исчезновению изображения, в то время как 1.0 просто приводит к 2-кратному увеличению.
Значения, отображаемые в таблице ниже, применяются через гиперпараметр scale, а не окончательный масштабный коэффициент.
Если scale больше, чем 1.0, изображение может быть очень маленьким или перевернутым, так как коэффициент масштабирования выбирается случайным образом между 1-scale и 1+scale. Например, при scale=3.0, масштабирование выбирается случайным образом в пределах-2.0 в 4.0Если выбрано отрицательное значение, изображение переворачивается.
-0.5
-0.25
0.0
0.25
0.5
Сдвиг (shear)
Диапазон: -180 в +180
По умолчанию: 0.0
Использование: Вводит геометрическое преобразование, которое искажает изображение по осям x и y, эффективно сдвигая части изображения в одном направлении, сохраняя при этом параллельные линии. The shear Гиперпараметр определяет угол сдвига, при этом окончательная корректировка выбирается случайным образом между -shear и shear. Например, при shear=10.0, сдвиг выбирается случайным образом в пределах-10 в 10 по оси x, и другое независимое случайное значение выбирается в том же диапазоне по оси y.
Назначение: Помогает моделям обобщать изменения углов обзора, вызванные небольшими наклонами или наклонными точками обзора. Например, при мониторинге дорожного движения такие объекты, как автомобили и дорожные знаки, могут казаться наклонными из-за неперпендикулярного размещения камеры. Применение аугментации сдвига гарантирует, что модель научится распознавать объекты, несмотря на такие искажения.
shear значения могут быстро исказить изображение, поэтому рекомендуется начинать с малых значений и постепенно их увеличивать.
В отличие от перспективных преобразований, сдвиг не вводит глубину или точки схода, а вместо этого искажает форму объектов, изменяя их углы, сохраняя при этом противоположные стороны параллельными.
-10
-5
0.0
5
10
Перспектива (perspective)
Диапазон: 0.0 - 0.001
По умолчанию: 0.0
Использование: Применяет полную перспективную трансформацию по осям x и y, имитируя то, как объекты выглядят при просмотре с разных глубин или углов. The perspective гиперпараметр определяет величину перспективы, при этом окончательная корректировка выбирается случайным образом между -perspective и perspective. Например, при perspective=0.001, перспектива выбирается случайным образом в пределах-0.001 в 0.001 по оси x, и другое независимое случайное значение выбирается в том же диапазоне по оси y.
Назначение: Перспективная аугментация имеет решающее значение для обработки экстремальных изменений точки обзора, особенно в сценариях, когда объекты кажутся укороченными или искаженными из-за перспективных сдвигов. Например, при обнаружении объектов с помощью дронов здания, дороги и транспортные средства могут казаться растянутыми или сжатыми в зависимости от наклона и высоты дрона. Применяя перспективные преобразования, модели учатся распознавать объекты, несмотря на эти перспективные искажения, повышая их устойчивость в реальных условиях.
Использование: Выполняет вертикальный переворот, инвертируя изображение по оси y. Это преобразование зеркально отображает все изображение вверх ногами, но сохраняет все пространственные взаимосвязи между объектами. Гиперпараметр flipud определяет вероятность применения преобразования, со значением flipud=1.0 обеспечивая отражение всех изображений и значение flipud=0.0 полностью отключая преобразование. Например, с flipud=0.5, для каждого изображения существует 50% вероятность переворота вверх ногами.
Назначение: Полезно для сценариев, когда объекты могут появляться вверх ногами. Например, в системах машинного зрения роботов объекты на конвейерных лентах или роботизированных манипуляторах могут быть подняты и размещены в различных ориентациях. Вертикальное отражение помогает модели распознавать объекты независимо от их верхнего и нижнего положения.
Использование: Выполняет горизонтальный переворот, зеркально отражая изображение по оси x. Это преобразование меняет местами левую и правую стороны, сохраняя пространственную согласованность, что помогает модели обобщать объекты, появляющиеся в зеркальном отображении. Параметр fliplr гиперпараметр определяет вероятность применения преобразования со значением fliplr=1.0 обеспечивая отражение всех изображений и значение fliplr=0.0 полностью отключая преобразование. Например, с fliplr=0.5, для каждого изображения существует 50% вероятность отражения слева направо.
Назначение: Горизонтальное отражение широко используется в обнаружении объектов, оценке позы и распознавании лиц для повышения устойчивости к лево-правосторонним вариациям. Например, в автономном вождении транспортные средства и пешеходы могут появляться с обеих сторон дороги, и горизонтальное отражение помогает модели одинаково хорошо распознавать их в обеих ориентациях.
Использование: Меняет местами цветовые каналы изображения из RGB в BGR, изменяя порядок представления цветов. bgr гиперпараметр определяет вероятность применения преобразования, с bgr=1.0 обеспечивая выполнение перестановки каналов для всех изображений и bgr=0.0 отключая его. Например, с bgr=0.5, для каждого изображения существует 50% вероятность преобразования из RGB в BGR.
Назначение: Повышает устойчивость к различным порядкам цветовых каналов. Например, при обучении моделей, которые должны работать с различными системами камер и библиотеками обработки изображений, где форматы RGB и BGR могут использоваться непоследовательно, или при развертывании моделей в средах, где входной цветовой формат может отличаться от обучающих данных.
Использование: Объединяет четыре тренировочных изображения в одно. The mosaic гиперпараметр определяет вероятность применения преобразования, с mosaic=1.0 обеспечивая объединение всех изображений и mosaic=0.0 отключая преобразование. Например, с mosaic=0.5, для каждого изображения существует 50% вероятность объединения с тремя другими изображениями.
Назначение: Высокоэффективен для улучшения обнаружения мелких объектов и понимания контекста. Например, в проектах по сохранению дикой природы, где животные могут появляться на разных расстояниях и в разных масштабах, мозаичная аугментация помогает модели научиться распознавать один и тот же вид в разных размерах, частичных окклюзиях и экологических контекстах, искусственно создавая разнообразные обучающие выборки из ограниченных данных.
Даже если mosaic Аугментация делает модель более устойчивой, но также может усложнить процесс обучения.
Параметр mosaic аугментацию можно отключить ближе к концу обучения, установив close_mosaic к количеству эпох до завершения, когда его следует отключить. Например, если epochs установлено значение 200 и close_mosaic установлено значение 20, функция mosaic Аугментация будет отключена после 180 эпох. Если close_mosaic установлено значение 0, функция mosaic Аугментация будет включена на протяжении всего процесса обучения.
Центр сгенерированной мозаики определяется с использованием случайных значений и может находиться как внутри изображения, так и за его пределами.
Текущая реализация mosaic Аугментация объединяет 4 изображения, выбранных случайным образом из набора данных. Если набор данных небольшой, одно и то же изображение может использоваться несколько раз в одном мозаичном изображении.
mosaic off
mosaic на
Mixup (mixup)
Диапазон: 0.0 - 1.0
По умолчанию: 0.0
Использование: Смешивает два изображения и их метки с заданной вероятностью. The mixup гиперпараметр определяет вероятность применения преобразования, с mixup=1.0 обеспечивая смешивание всех изображений и mixup=0.0 отключая преобразование. Например, с mixup=0.5, для каждого изображения существует 50% вероятность смешивания с другим изображением.
Назначение: Повышает устойчивость модели и снижает переобучение. Например, в системах распознавания розничных товаров mixup помогает модели изучать более надежные признаки, смешивая изображения различных продуктов, обучая ее идентифицировать товары, даже если они частично видны или закрыты другими продуктами на переполненных полках магазинов.
Параметр mixup ratio — это случайное значение, выбранное из np.random.beta(32.0, 32.0) бета-распределение, то есть каждое изображение вносит примерно 50% с небольшими отклонениями.
Первое изображение, mixup off
Второе изображение, mixup off
mixup на
CutMix (cutmix)
Диапазон: 0.0 - 1.0
По умолчанию: 0.0
Использование: Вырезает прямоугольную область из одного изображения и вставляет ее на другое изображение с заданной вероятностью. The cutmix гиперпараметр определяет вероятность применения преобразования, с cutmix=1.0 обеспечивая применение этого преобразования ко всем изображениям и cutmix=0.0 полностью отключая его. Например, с cutmix=0.5, для каждого изображения существует 50% вероятность замены области фрагментом из другого изображения.
Назначение: Повышает производительность модели, создавая реалистичные сценарии окклюзии, сохраняя при этом целостность локальных признаков. Например, в системах автономного вождения cutmix помогает модели научиться распознавать транспортные средства или пешеходов, даже если они частично закрыты другими объектами, что повышает точность обнаружения в сложных реальных условиях с перекрывающимися объектами.
Размер и положение вырезаемой области определяются случайным образом для каждого применения.
В отличие от mixup, который смешивает значения пикселей глобально, cutmix сохраняет исходную интенсивность пикселей в пределах вырезанных областей, сохраняя локальные особенности.
Область вставляется в целевое изображение, только если она не перекрывается с существующими ограничивающими рамками. Кроме того, только ограничивающие рамки, которые сохраняют хотя бы 0.1 (10%) от их первоначальной площади в пределах вставленной области.
Этот минимальный порог площади ограничивающего прямоугольника нельзя изменить в текущей реализации, и он установлен на 0.1 по умолчанию.
Первое изображение, cutmix off
Второе изображение, cutmix off
cutmix на
Специфичные для сегментации аугментации
Copy-Paste (copy_paste)
Диапазон: 0.0 - 1.0
По умолчанию: 0.0
Использование: Работает только для задач сегментации. Эта аугментация копирует объекты внутри изображений или между ними на основе указанной вероятности, контролируемой параметром copy_paste_mode. copy_paste гиперпараметр определяет вероятность применения преобразования, с copy_paste=1.0 обеспечивая копирование всех изображений и copy_paste=0.0 отключая преобразование. Например, с copy_paste=0.5, для каждого изображения существует 50% вероятность копирования объектов из другого изображения.
Назначение: Особенно полезно для задач сегментации экземпляров и редких классов объектов. Например, при обнаружении промышленных дефектов, когда определенные типы дефектов появляются редко, аугментация copy-paste может искусственно увеличить частоту этих редких дефектов, копируя их с одного изображения на другое, помогая модели лучше изучать эти недостаточно представленные случаи без необходимости в дополнительных дефектных образцах.
Как показано на GIF-изображении ниже, copy_paste аугментация может использоваться для копирования объектов из одного изображения в другое.
После копирования объекта, независимо от copy_paste_mode, его Intersection over Area (IoA) вычисляется со всеми объектами исходного изображения. Если все IoA ниже 0.3 (30%), объект вставляется в целевое изображение. Если только IoA выше 0.3, объект не вставляется в целевое изображение.
Порог IoA нельзя изменить при текущей реализации, он установлен на 0.3 по умолчанию.
copy_paste off
copy_paste on with copy_paste_mode=flip
Визуализировать copy_paste процесс
Copy-Paste Mode (copy_paste_mode)
Опции: 'flip', 'mixup'
По умолчанию: 'flip'
Использование: Определяет метод, используемый для copy-paste аугментация. Если установлено значение 'flip', объекты берутся из одного и того же изображения, в то время как 'mixup' позволяет копировать объекты с разных изображений.
Назначение: Обеспечивает гибкость в том, как скопированные объекты интегрируются в целевые изображения.
Использование: Применяет автоматизированные политики расширения для классификации. The 'randaugment' опция использует RandAugment, 'autoaugment' использует AutoAugment, и 'augmix' использует AugMix. Установка в None отключает автоматическое увеличение.
Цель: Автоматически оптимизирует стратегии аугментации для задач классификации. Различия заключаются в следующем:
AutoAugment: Этот режим применяет предопределенные политики аугментации, полученные из таких наборов данных, как ImageNet, CIFAR10 и SVHN. Пользователи могут выбирать эти существующие политики, но не могут обучать новые в Torchvision. Для обнаружения оптимальных стратегий аугментации для конкретных наборов данных потребуются внешние библиотеки или пользовательские реализации. Ссылка на статью об AutoAugment.
RandAugment: Применяет случайный выбор преобразований с равномерной величиной. Этот подход снижает необходимость в обширной фазе поиска, что делает его более эффективным с вычислительной точки зрения, при этом повышая устойчивость модели. Ссылка на статью о RandAugment.
AugMix: AugMix – это метод увеличения данных, который повышает устойчивость модели за счет создания разнообразных вариаций изображений посредством случайных комбинаций простых преобразований. Ссылка на статью об AugMix.
По сути, основное различие между тремя методами заключается в способе определения и применения политик аугментации.
Вы можете обратиться к этой статье, в которой подробно сравниваются три метода.
Случайное стирание (erasing)
Диапазон: 0.0 - 0.9
По умолчанию: 0.4
Использование: Случайным образом стирает части изображения во время обучения классификации. Параметр erasing гиперпараметр определяет вероятность применения преобразования, с erasing=0.9 обеспечивая удаление почти всех изображений и erasing=0.0 отключая преобразование. Например, с erasing=0.5, для каждого изображения существует 50% вероятность стирания части.
Назначение: Помогает моделям изучать надежные признаки и предотвращает чрезмерную зависимость от определенных областей изображения. Например, в системах распознавания лиц случайное стирание помогает моделям стать более устойчивыми к частичным окклюзиям, таким как солнцезащитные очки, маски для лица или другие объекты, которые могут частично закрывать черты лица. Это улучшает производительность в реальных условиях, заставляя модель идентифицировать людей, используя несколько характеристик лица, а не полагаясь исключительно на отличительные признаки, которые могут быть скрыты.
Параметр erasing Аугментация поставляется с scale, ratioи value Гиперпараметры, которые нельзя изменить с помощью текущая реализацияИх значения по умолчанию (0.02, 0.33), (0.3, 3.3)и 0, соответственно, как указано в PyTorch документацию.
Верхний предел для erasing Гиперпараметр установлен на 0.9 чтобы избежать применения преобразования ко всем изображениям.
erasing off
erasing on (пример 1)
erasing on (пример 2)
erasing on (пример 3)
Часто задаваемые вопросы
Существует слишком много вариантов расширения набора данных. Как узнать, какие из них использовать?
Выбор правильных расширений зависит от вашего конкретного случая использования и набора данных. Вот несколько общих рекомендаций, которые помогут вам принять решение:
В большинстве случаев небольшие изменения цвета и яркости полезны. Значения по умолчанию для hsv_h, hsv_sи hsv_v являются хорошей отправной точкой.
Если точка обзора камеры является постоянной и не изменится после развертывания модели, вы, вероятно, можете пропустить геометрические преобразования, такие как rotation, translation, scale, shear, или perspectiveОднако, если угол обзора камеры может меняться, и вам нужна более устойчивая модель, лучше сохранить эти аугментации.
Используйте mosaic Аугментацию только в том случае, если частично скрытые объекты или несколько объектов на изображении допустимы и не изменяют значение метки. В качестве альтернативы, вы можете сохранить mosaic активны, но увеличивают close_mosaic значение, чтобы отключить его раньше в процессе обучения.
Короче говоря: сохраняйте простоту. Начните с небольшого набора аугментаций и постепенно добавляйте больше по мере необходимости. Цель состоит в том, чтобы улучшить обобщение и устойчивость модели, а не переусложнять процесс обучения. Кроме того, убедитесь, что применяемые вами аугментации отражают то же распределение данных, с которым ваша модель столкнется в рабочей среде.
Когда начинаю обучение, вижу albumentations: Blur[...] reference. Означает ли это, что Ultralytics YOLO выполняет дополнительную аугментацию, например, размытие?
Если albumentations package установлен, Ultralytics автоматически применяет набор дополнительных аугментаций изображений, используя его. Эти аугментации обрабатываются внутри и не требуют дополнительной настройки.
Вы можете найти полный список примененных преобразований в нашем техническая документация, а также в нашем Руководство по интеграции AlbumentationsОбратите внимание, что только аугментации с вероятностью p больше, чем 0 активны. Они намеренно применяются на низких частотах, чтобы имитировать визуальные артефакты реального мира, такие как размытие или эффекты оттенков серого.
Когда начинаю обучение, я не вижу никаких ссылок на albumentations. Почему?
Проверьте, если albumentations package установлен. Если нет, вы можете установить его, выполнив pip install albumentationsПосле установки пакет должен быть автоматически обнаружен и использован Ultralytics.
Как настроить аугментации?
Вы можете настроить аугментации, создав собственный класс набора данных и тренажер. Например, вы можете заменить аугментации классификации Ultralytics по умолчанию на torchvision.transforms.Resize из PyTorch или другие преобразования. Подробности реализации см. в примере пользовательской тренировки в документации по классификации.
📅 Создано 4 месяца назад
✏️ Обновлено 1 месяц назад