Репозитории с настройками YOLO и утилитой генерации синтетических данных

Aug 31, 2024 05:24


Столкнулся с определёнными проблемами и без сообщества это никак не решить.

Прошу присоединяться и развивать.

Репозиторий с настройками YOLO для установки в Windows + настройки YOLO для тренировки моделей:


GitHub - nikitaevstatera/yolo_settings: Best yolo settings


Best yolo settings. Contribute to nikitaevstatera/yolo_settings development by creating an account on GitHub.

github.com

Утилита для создания синтетических данных в формате YOLO:


GitHub - nikitaevstatera/FontImageGenerator: YOLO labeling for fonts and sizes and colors


YOLO labeling for fonts and sizes and colors. Contribute to nikitaevstatera/FontImageGenerator development by creating an account on GitHub.

github.com

Утилита для выполнения детекции


GitHub - nikitaevstatera/yolo_detect_program


Contribute to nikitaevstatera/yolo_detect_program development by creating an account on GitHub.

github.com

Возникают эффекты переобучения на синтетических данных.

Особенно неприятно, когда на исходных картинках всё распознаётся без проблем на 5-10 эпохе, а на куда более реальных картинках, где символы расположены близко - может начать распознаваться начиная с 100-200 эпохи, а то и вообще никогда.

Так выглядит переобучение:





Модель, пытается детектировать близко расположенные символы:



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



Если дружно взяться и найти способ создания синтетических данных + настройки YOLO, чтобы не возникало переобучение - то всех победим.

Общая теория.

Описание настроек YOLO можно найти тут:


Train

Learn how to efficiently train object detection models using YOLOv8 with comprehensive instructions on settings, augmentation, and hardware utilization.

docs.ultralytics.com


Конфигурация


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

docs.ultralytics.com

Предпочитаю запуск в режиме командной строки - CLI:

yolo task=detect mode=train model=yolov8s.pt name=wagnumbers_1280_s data=coco8.yaml epochs=300 patience=10000 batch=0.95 imgsz=1280 save=True save_period=100 cache=True device=0 pretrained=True deterministic=False rect=True close_mosaic=100 amp=True label_smoothing=0.5 overlap_mask=True lr0=0.1 lrf=0.001 momentum=0.5 warmup_epochs=30.0 box=10 cls=1 conf=0.05 iou=0.5 max_det=300 augment=False mixup=0 auto_augment='autoaugment' agnostic_nms=True show_labels=False show_conf=False show_boxes=False nms=True hsv_h=0.015 hsv_s=0.7 hsv_v=0.4 degrees=0 translate=0 scale=0 shear=0 perspective=0 flipud=0 fliplr=0 bgr=0 mosaic=0 copy_paste=0.0 erasing=0 crop_fraction=1 dropout=0

что тут важно и на что влияет:

task=detect - задача детекции

mode=train - обучение

model=yolov8s.pt - тут выбираем модель. Список стандартных предобученных моделей можно найти тут:


Models Supported by Ultralytics


Discover a variety of models supported by Ultralytics, including YOLOv3 to YOLOv10, NAS, SAM, and RT-DETR for detection, segmentation, and more.

docs.ultralytics.com

нажимаете по ссылке на версию YOLO и там будут в табличках ссылки на файлы:



качать их не обязательно - yolo CLI сам выкачивает нужный файл модели.

Можно подставить свой ранее обученный файл модели и дообучить его.

name=wagnumbers_1280_s - просто имя проекта, которое появится в папке runs

data=coco8.yaml - файл с путями. Тут надо будет править пути к нужным папкам, если вы захотите переместить папку с исходными данными.

epochs=300 - количество эпох обучения. Если всё настроить правильно, то можно влезть в 1000 эпох с достаточным качеством детекции. Но если нет сваливания в переобучение (больше относится к реальным данным) - то можно установить и 5000 эпох.

patience=10000 - этот параметр устанавливает максимальное допустимое количество эпох, которые были пройдены без улучшения (т.е., не обновлён файл best.pt). Предпочитаю его такой большой цифрой отключать.

batch=0.95 - объём видеопамяти, который может быть использован YOLO. Устанавливаю 95%.

imgsz=1280 - размер изображения, которое ожидается на вход. Сам YOLO имеет размер 640x640, а потому - увеличенный размер будет ужиматься. Но в любом случае, объекты маленького размера начинают детектироваться лучше, но существенно падает скорость обучения.

save=True - флаг регулярного сохранения промежуточных вычислений.

save_period=100 - каждые 100 эпох будут создаваться промежуточные файлы, которые сразу можно использовать

cache=True

device=0 - индексы графических ускорителей

pretrained=True - исходная модель была предобучена

deterministic=False - использовать не только стандартные методы улучшения модели

rect=True - масштабирование картинки и её использование как прямоугольника. Пишут, что так быстрее всё работает, но это даёт ещё и более качественный результат по субъективному мнению

close_mosaic=100 - если используется аугментация - то на последних 100 эпохах картинки станут обычного размера (без трёх дополнительных квадратов с аугментированными данными)

amp=True - Automatic Mixed Precision (AMP). Позволяет экономить данные. Аппаратная штука.

label_smoothing=0.5 - это один из важных параметров, влияющих на распознавание неизвестных объектов. Если «смягчать» - то возникают эффекты обобщения и происходит более качественная детекция. Надо искать оптимальные цифры.

overlap_mask=True - маски перекрытия. Тоже как и аугментация добавляет квадратики. Надо изучать для задачи детекции. И надо изучать параметр mask_ratio.

lr0=0.1 - коэффициент, на который умножается вектор градиентного спуска. Чем он больше - тем быстрее модель оптимизируется. Слишком большой мешает.

lrf=0.001 - коэффициент, на который умножается lr0 для вычисления длины вектора градиентного спуска в конце вычислений.

momentum=0.5 - влияние предыдущего вектора градиентного спуска на текущий вектор. Тоже важный параметр, влияющий на скорость обучения.

warmup_epochs=30.0 - сколько первых эпох коэффициенты при градиентах будут очень большими.

box=10 - коэффициент вклада ошибки по прямоугольнику при вычислении общей ошибки. Можно оставить по умолчанию.

cls=1 - коэффициент вклада ошибки по классу при вычислении общей ошибки. Можно оставить по умолчанию.

conf=0.05 - порог детекции объектов. Всегда хочется установить побольше, но обычно приходится ставить поменьше.

iou=0.5 - сложный для понимания параметр, но 0,5 отключает детекцию прямоугольников, один из которых целиком лежит внутри другого (останется самый вероятный).

max_det=300 - максимальное количество детекций.

augment=False - включить/выключить аугментацию. Без неё синтетические данные очень слабые. Реальные данные также желательно использовать с аугментацией.

mixup=0 - при включённой аугментации отвечает за дополнение изображения ещё тремя изображениями с различными вариантами отрисовки объектов.



даже может быть 16 картинок вместо одной

auto_augment='autoaugment' - тут надо разбираться как работает

agnostic_nms=True - Включает независимую от класса функцию Non-Maximum Suppression (NMS), которая объединяет перекрывающиеся блоки разных классов. Полезно в сценариях обнаружения нескольких классов, где перекрытие классов является обычным явлением. Лучше включить, наверное.

nms=True - Добавляет подавление немаксимальных значений (NMS) в экспорт CoreML, необходимое для точной и эффективной постобработки обнаружения. Лучше включить, наверное.

hsv_h=0.015 - Регулирует оттенок изображения на часть цветового круга, вводя цветовую изменчивость. Помогает модели обобщать в различных условиях освещения.

hsv_s=0.7 - Изменяет насыщенность изображения на долю, влияя на интенсивность цветов. Полезно для имитации различных условий окружающей среды.

hsv_v=0.4 - Изменяет значение (яркость) изображения на часть, помогая модели хорошо работать в различных условиях освещения.

degrees=0 - Поворачивает изображение случайным образом в указанном диапазоне градусов, улучшая способность модели распознавать объекты в различных ориентациях.

translate=0 - Смещает изображение по горизонтали и вертикали на часть размера изображения, помогая научиться обнаруживать частично видимые объекты.

scale=0 - Масштабирует изображение с помощью коэффициента усиления, имитируя объекты, находящиеся на разном расстоянии от камеры.

shear=0 - Сдвигает изображение на заданную величину, имитируя эффект просмотра объектов под разными углами.

perspective=0 - Применяет к изображению случайное перспективное преобразование, улучшая способность модели распознавать объекты в трехмерном пространстве.

flipud=0 - Переворачивает изображение вверх ногами с заданной вероятностью, увеличивая изменчивость данных, не влияя на характеристики объекта.

fliplr=0 - Переворачивает изображение слева направо с указанной вероятностью, полезно для изучения симметричных объектов и увеличения разнообразия наборов данных.

bgr=0 - Переворачивает каналы изображения из RGB в BGR с указанной вероятностью, что полезно для повышения устойчивости к неправильному порядку каналов.

mosaic=0 - Объединяет четыре учебных изображения в одно, имитируя различные композиции сцены и взаимодействия объектов. Очень эффективно для понимания сложной сцены.

copy_paste=0.0 - Копирует объекты с одного изображения и вставляет их на другое, что полезно для увеличения количества экземпляров объектов и изучения окклюзии объектов.

erasing=0 - Случайным образом стирает часть изображения во время обучения классификации, побуждая модель сосредоточиться на менее очевидных особенностях распознавания.

crop_fraction=1 - Обрезает изображение классификации до части его размера, чтобы подчеркнуть центральные особенности и адаптировать его к масштабам объекта, уменьшая отвлекающие факторы заднего плана.

dropout=0 - Коэффициент отсева для регуляризации в задачах классификации, предотвращающий переобучение за счет случайного исключения единиц во время обучения.

yolov8, детекция объектов, yolo

Previous post Next post
Up