Руководство Ultralytics YOLO по настройке гиперпараметров
Введение
Настройка гиперпараметров — это не просто разовая настройка, а итеративный процесс, направленный на оптимизацию метрик производительности машинного обучения, таких как точность, прецизионность и полнота. В контексте Ultralytics YOLO эти гиперпараметры могут варьироваться от скорости обучения до архитектурных деталей, таких как количество слоев или типы используемых функций активации.
Смотреть: Как настроить гиперпараметры для повышения производительности модели 🚀
Что такое гиперпараметры?
Гиперпараметры — это высокоуровневые структурные настройки алгоритма. Они устанавливаются до этапа обучения и остаются постоянными в течение него. Вот некоторые часто настраиваемые гиперпараметры в Ultralytics YOLO:
- Скорость обучения
lr0
: Определяет размер шага на каждой итерации при движении к минимуму в функция потерь. - Размер пакета
batch
: Количество изображений, обрабатываемых одновременно за один проход. - Количество эпох
epochs
: Эпоха — это один полный прямой и обратный проход всех обучающих примеров. - Особенности архитектуры: Такие как количество каналов, количество слоев, типы функций активации и т. д.
Полный список гиперпараметров увеличения, используемых в YOLO11, см. на странице конфигураций.
Генетическая эволюция и мутация
Ultralytics YOLO использует генетические алгоритмы для оптимизации гиперпараметров. Генетические алгоритмы вдохновлены механизмом естественного отбора и генетики.
- Мутация: В контексте Ultralytics YOLO мутация помогает локально искать пространство гиперпараметров, применяя небольшие случайные изменения к существующим гиперпараметрам, создавая новых кандидатов для оценки.
- Кроссовер: Хотя кроссовер является популярным методом генетического алгоритма, в Ultralytics YOLO он в настоящее время не используется для настройки гиперпараметров. Основное внимание уделяется мутации для создания новых наборов гиперпараметров.
Подготовка к настройке гиперпараметров
Прежде чем начать процесс настройки, важно:
- Определите метрики: Определите метрики, которые вы будете использовать для оценки производительности модели. Это может быть AP50, F1-score или другие.
- Установите бюджет настройки: Определите, сколько вычислительных ресурсов вы готовы выделить. Настройка гиперпараметров может потребовать больших вычислительных затрат.
Задействованные шаги
Инициализировать гиперпараметры
Начните с разумного набора начальных гиперпараметров. Это могут быть гиперпараметры по умолчанию, установленные Ultralytics YOLO, или параметры, основанные на ваших знаниях предметной области или предыдущих экспериментах.
Мутация гиперпараметров
Используйте _mutate
метод для создания нового набора гиперпараметров на основе существующего набора. The Класс Tuner обрабатывает этот процесс автоматически.
Обучить модель
Обучение выполняется с использованием измененного набора гиперпараметров. Затем производительность обучения оценивается с использованием выбранных вами метрик.
Оценка модели
Используйте метрики, такие как AP50, F1-score или пользовательские метрики, для оценки производительности модели. Процесс оценки помогает определить, лучше ли текущие гиперпараметры предыдущих.
Регистрация результатов
Крайне важно регистрировать как метрики производительности, так и соответствующие гиперпараметры для дальнейшего использования. Ultralytics YOLO автоматически сохраняет эти результаты в формате CSV.
Повторить
Процесс повторяется до тех пор, пока не будет достигнуто установленное количество итераций или пока показатель производительности не станет удовлетворительным. Каждая итерация основывается на знаниях, полученных в предыдущих запусках.
Описание пространства поиска по умолчанию
В следующей таблице перечислены параметры пространства поиска по умолчанию для настройки гиперпараметров в YOLO11. Каждый параметр имеет определенный диапазон значений, определяемый кортежем (min, max)
.
Параметр | Тип | Диапазон значений | Описание |
---|---|---|---|
lr0 |
float |
(1e-5, 1e-1) |
Начальная скорость обучения в начале тренировки. Более низкие значения обеспечивают более стабильное обучение, но более медленную сходимость |
lrf |
float |
(0.01, 1.0) |
Коэффициент конечной скорости обучения как доля от lr0. Контролирует, насколько уменьшается скорость обучения во время тренировки |
momentum |
float |
(0.6, 0.98) |
Фактор импульса SGD. Более высокие значения помогают поддерживать постоянное направление градиента и могут ускорить сходимость |
weight_decay |
float |
(0.0, 0.001) |
Коэффициент L2-регуляризации для предотвращения переобучения. Большие значения обеспечивают более сильную регуляризацию |
warmup_epochs |
float |
(0.0, 5.0) |
Количество эпох для линейного разогрева скорости обучения. Помогает предотвратить нестабильность на ранних этапах обучения. |
warmup_momentum |
float |
(0.0, 0.95) |
Начальный импульс во время фазы прогрева. Постепенно увеличивается до конечного значения импульса |
box |
float |
(0.02, 0.2) |
Вес потерь ограничивающего прямоугольника в общей функции потерь. Балансирует регрессию ограничивающего прямоугольника и классификацию |
cls |
float |
(0.2, 4.0) |
Вес потерь классификации в общей функции потерь. Более высокие значения подчеркивают правильное предсказание класса |
hsv_h |
float |
(0.0, 0.1) |
Диапазон случайного изменения оттенка в цветовом пространстве HSV. Помогает модели обобщать данные при различных вариациях цвета |
hsv_s |
float |
(0.0, 0.9) |
Диапазон случайного изменения насыщенности в пространстве HSV. Имитирует различные условия освещения |
hsv_v |
float |
(0.0, 0.9) |
Диапазон случайного изменения значения (яркости). Помогает модели обрабатывать различные уровни экспозиции |
degrees |
float |
(0.0, 45.0) |
Максимальное увеличение вращения в градусах. Помогает модели стать инвариантной к ориентации объекта |
translate |
float |
(0.0, 0.9) |
Максимальное увеличение трансляции в виде доли размера изображения. Повышает устойчивость к положению объекта |
scale |
float |
(0.0, 0.9) |
Диапазон случайного изменения масштаба. Помогает модели обнаруживать объекты разных размеров |
shear |
float |
(0.0, 10.0) |
Максимальное увеличение сдвига в градусах. Добавляет искажения, подобные перспективе, к обучающим изображениям |
perspective |
float |
(0.0, 0.001) |
Диапазон случайного изменения перспективы. Имитирует различные углы обзора |
flipud |
float |
(0.0, 1.0) |
Вероятность вертикального отражения изображения во время обучения. Полезна для аэрофотосъемки. |
fliplr |
float |
(0.0, 1.0) |
Вероятность горизонтального отражения изображения. Помогает модели стать инвариантной к направлению объекта |
mosaic |
float |
(0.0, 1.0) |
Вероятность использования аугментации mosaic, которая объединяет 4 изображения. Особенно полезна для обнаружения мелких объектов. |
mixup |
float |
(0.0, 1.0) |
Вероятность использования аугментации mixup, которая смешивает два изображения. Может повысить устойчивость модели. |
copy_paste |
float |
(0.0, 1.0) |
Вероятность использования аугментации copy-paste. Помогает улучшить производительность сегментации экземпляров. |
Пример пользовательского пространства поиска
Вот как определить пространство поиска и использовать model.tune()
метод для использования Tuner
класс для настройки гиперпараметров YOLO11n на COCO8 в течение 30 эпох с оптимизатором AdamW и пропуском построения графиков, сохранения контрольных точек и проверки, кроме как в последнюю эпоху, для более быстрой настройки.
Пример
from ultralytics import YOLO
# Initialize the YOLO model
model = YOLO("yolo11n.pt")
# Define search space
search_space = {
"lr0": (1e-5, 1e-1),
"degrees": (0.0, 45.0),
}
# Tune hyperparameters on COCO8 for 30 epochs
model.tune(
data="coco8.yaml",
epochs=30,
iterations=300,
optimizer="AdamW",
space=search_space,
plots=False,
save=False,
val=False,
)
Возобновление прерванного сеанса настройки гиперпараметров
Вы можете возобновить прерванную сессию настройки гиперпараметров, передав resume=True
Вы можете дополнительно передать каталог name
используется под runs/{task}
чтобы возобновить обучение. В противном случае будет возобновлена последняя прерванная сессия. Также необходимо предоставить все предыдущие аргументы обучения, включая data
, epochs
, iterations
и space
.
Используя resume=True
с model.tune()
from ultralytics import YOLO
# Define a YOLO model
model = YOLO("yolo11n.pt")
# Define search space
search_space = {
"lr0": (1e-5, 1e-1),
"degrees": (0.0, 45.0),
}
# Resume previous run
results = model.tune(data="coco8.yaml", epochs=50, iterations=300, space=search_space, resume=True)
# Resume tuning run with name 'tune_exp'
results = model.tune(data="coco8.yaml", epochs=50, iterations=300, space=search_space, name="tune_exp", resume=True)
Results
После успешного завершения процесса настройки гиперпараметров вы получите несколько файлов и каталогов, которые содержат результаты настройки. Ниже описано каждое из них:
Структура файла
Вот как будет выглядеть структура каталогов результатов. Каталоги обучения, такие как train1/
содержат отдельные итерации настройки, то есть одну модель, обученную с одним набором гиперпараметров. The tune/
каталог содержит результаты настройки всех отдельных обучений модели:
runs/
└── detect/
├── train1/
├── train2/
├── ...
└── tune/
├── best_hyperparameters.yaml
├── best_fitness.png
├── tune_results.csv
├── tune_scatter_plots.png
└── weights/
├── last.pt
└── best.pt
Описание файлов
best_hyperparameters.yaml
Этот YAML-файл содержит лучшие гиперпараметры, найденные в процессе настройки. Вы можете использовать этот файл для инициализации будущих тренировок с этими оптимизированными настройками.
- Формат: YAML
- Использование: Результаты гиперпараметров
-
Пример:
# 558/900 iterations complete ✅ (45536.81s) # Results saved to /usr/src/ultralytics/runs/detect/tune # Best fitness=0.64297 observed at iteration 498 # Best fitness metrics are {'metrics/precision(B)': 0.87247, 'metrics/recall(B)': 0.71387, 'metrics/mAP50(B)': 0.79106, 'metrics/mAP50-95(B)': 0.62651, 'val/box_loss': 2.79884, 'val/cls_loss': 2.72386, 'val/dfl_loss': 0.68503, 'fitness': 0.64297} # Best fitness model is /usr/src/ultralytics/runs/detect/train498 # Best fitness hyperparameters are printed below. lr0: 0.00269 lrf: 0.00288 momentum: 0.73375 weight_decay: 0.00015 warmup_epochs: 1.22935 warmup_momentum: 0.1525 box: 18.27875 cls: 1.32899 dfl: 0.56016 hsv_h: 0.01148 hsv_s: 0.53554 hsv_v: 0.13636 degrees: 0.0 translate: 0.12431 scale: 0.07643 shear: 0.0 perspective: 0.0 flipud: 0.0 fliplr: 0.08631 mosaic: 0.42551 mixup: 0.0 copy_paste: 0.0
best_fitness.png
Это график, отображающий соответствие (обычно метрика производительности, такая как AP50) количеству итераций. Он помогает визуализировать, насколько хорошо генетический алгоритм работал с течением времени.
- Формат: PNG
- Использование: Визуализация производительности
tune_results.csv
CSV-файл, содержащий подробные результаты каждой итерации во время настройки. Каждая строка в файле представляет одну итерацию и включает в себя такие метрики, как оценка соответствия, точность, полнота, а также используемые гиперпараметры.
- Формат: CSV
- Использование: Отслеживание результатов каждой итерации.
- Пример:
fitness,lr0,lrf,momentum,weight_decay,warmup_epochs,warmup_momentum,box,cls,dfl,hsv_h,hsv_s,hsv_v,degrees,translate,scale,shear,perspective,flipud,fliplr,mosaic,mixup,copy_paste 0.05021,0.01,0.01,0.937,0.0005,3.0,0.8,7.5,0.5,1.5,0.015,0.7,0.4,0.0,0.1,0.5,0.0,0.0,0.0,0.5,1.0,0.0,0.0 0.07217,0.01003,0.00967,0.93897,0.00049,2.79757,0.81075,7.5,0.50746,1.44826,0.01503,0.72948,0.40658,0.0,0.0987,0.4922,0.0,0.0,0.0,0.49729,1.0,0.0,0.0 0.06584,0.01003,0.00855,0.91009,0.00073,3.42176,0.95,8.64301,0.54594,1.72261,0.01503,0.59179,0.40658,0.0,0.0987,0.46955,0.0,0.0,0.0,0.49729,0.80187,0.0,0.0
tune_scatter_plots.png
Этот файл содержит диаграммы рассеяния, сгенерированные из tune_results.csv
, помогая визуализировать взаимосвязи между различными гиперпараметрами и метриками производительности. Обратите внимание, что гиперпараметры, инициализированные 0, не будут настроены, например, degrees
и shear
ниже.
- Формат: PNG
- Использование: Разведочный анализ данных
weights/
Этот каталог содержит сохраненные модели PyTorch для последней и лучшей итераций в процессе настройки гиперпараметров.
last.pt
: last.pt — это веса из последней эпохи обучения.best.pt
: best.pt веса для итерации, которая достигла наилучшего значения fitness.
Используя эти результаты, вы можете принимать более обоснованные решения для будущих обучений и анализов вашей модели. Не стесняйтесь обращаться к этим артефактам, чтобы понять, насколько хорошо работает ваша модель и как вы можете улучшить ее в дальнейшем.
Заключение
Процесс настройки гиперпараметров в Ultralytics YOLO упрощен, но при этом эффективен благодаря подходу на основе генетического алгоритма, ориентированному на мутацию. Следуя шагам, изложенным в этом руководстве, вы сможете систематически настраивать свою модель для достижения лучших результатов.
Дополнительная литература
- Оптимизация гиперпараметров в Википедии
- Руководство по эволюции гиперпараметров YOLOv5
- Эффективная настройка гиперпараметров с помощью Ray Tune и YOLO11
Для более глубокого понимания вы можете изучить Tuner
класс исходный код и сопроводительную документацию. Если у вас возникнут какие-либо вопросы, пожелания или потребуется дополнительная помощь, обращайтесь к нам на GitHub или Discord.
Часто задаваемые вопросы
Как оптимизировать скорость обучения для Ultralytics YOLO во время настройки гиперпараметров?
Чтобы оптимизировать скорость обучения для Ultralytics YOLO, начните с установки начальной скорости обучения с помощью: lr0
параметр. Общие значения варьируются от 0.001
в 0.01
. В процессе настройки гиперпараметров это значение будет изменяться для поиска оптимальных параметров. Вы можете использовать model.tune()
метод для автоматизации этого процесса. Например:
Пример
from ultralytics import YOLO
# Initialize the YOLO model
model = YOLO("yolo11n.pt")
# Tune hyperparameters on COCO8 for 30 epochs
model.tune(data="coco8.yaml", epochs=30, iterations=300, optimizer="AdamW", plots=False, save=False, val=False)
Для получения более подробной информации ознакомьтесь со страницей конфигурации Ultralytics YOLO.
Каковы преимущества использования генетических алгоритмов для настройки гиперпараметров в YOLO11?
Генетические алгоритмы в Ultralytics YOLO11 предоставляют надежный метод для исследования пространства гиперпараметров, что приводит к высокооптимизированной производительности модели. Ключевые преимущества включают в себя:
- Эффективный поиск: Генетические алгоритмы, такие как мутация, могут быстро исследовать большой набор гиперпараметров.
- Избежание локальных минимумов: Внося случайность, они помогают избежать локальных минимумов, обеспечивая лучшую глобальную оптимизацию.
- Метрики производительности: Они адаптируются на основе показателей производительности, таких как AP50 и F1-score.
Чтобы узнать, как генетические алгоритмы могут оптимизировать гиперпараметры, ознакомьтесь с руководством по эволюции гиперпараметров.
Сколько времени занимает процесс настройки гиперпараметров для Ultralytics YOLO?
Время, необходимое для настройки гиперпараметров с помощью Ultralytics YOLO, во многом зависит от нескольких факторов, таких как размер набора данных, сложность архитектуры модели, количество итераций и доступные вычислительные ресурсы. Например, настройка YOLO11n на наборе данных, таком как COCO8, в течение 30 эпох может занять от нескольких часов до нескольких дней, в зависимости от оборудования.
Чтобы эффективно управлять временем настройки, заранее определите четкий бюджет настройки (внутренняя ссылка на раздел). Это помогает сбалансировать распределение ресурсов и цели оптимизации.
Какие метрики следует использовать для оценки производительности модели во время настройки гиперпараметров в YOLO?
При оценке производительности модели во время настройки гиперпараметров в YOLO можно использовать несколько ключевых метрик:
- AP50: Средняя точность при пороговом значении IoU 0.50.
- F1-Score: Гармоническое среднее точности и полноты.
- Точность и полнота: Индивидуальные метрики, указывающие на точность модели в определении истинно положительных результатов по сравнению с ложноположительными и ложноотрицательными.
Эти метрики помогают понять различные аспекты производительности вашей модели. Обратитесь к руководству Метрики производительности Ultralytics YOLO для получения всестороннего обзора.
Могу ли я использовать Ray Tune для расширенной оптимизации гиперпараметров с YOLO11?
Да, Ultralytics YOLO11 интегрируется с Ray Tune для расширенной оптимизации гиперпараметров. Ray Tune предлагает сложные алгоритмы поиска, такие как байесовская оптимизация и Hyperband, а также возможности параллельного выполнения для ускорения процесса настройки.
Чтобы использовать Ray Tune с YOLO11, просто установите use_ray=True
параметр в вашем model.tune()
вызов метода. Для получения более подробной информации и примеров ознакомьтесь с Руководство по интеграции Ray Tune.