Перейти к содержимому

Тренировка модели с Ultralytics YOLO

Ultralytics YOLO Экосистема и интеграции

Введение

Обучение модели глубокого обучения заключается в подаче ей данных и настройке ее параметров таким образом, чтобы она могла делать точные прогнозы. Режим Train в Ultralytics YOLOv8 разработан для эффективного и результативного обучения моделей обнаружения объектов, полностью использующих современные аппаратные возможности. Это руководство призвано рассказать тебе обо всех деталях, необходимых для того, чтобы начать обучение собственных моделей с помощью надежного набора функций YOLOv8.



Смотри: Как обучить модель YOLOv8 на твоем пользовательском наборе данных в Google Colab.

Почему ты выбираешь Ultralytics YOLO для обучения?

Вот несколько убедительных причин, по которым стоит выбрать YOLOv8'Train mode:

  • Эффективность: Используй максимум возможностей своего оборудования, будь то установка с одним GPU или масштабирование на несколько GPU.
  • Универсальность: Обучайся на пользовательских наборах данных, а также на легкодоступных, таких как COCO, VOC и ImageNet.
  • Удобство для пользователя: простые, но мощные интерфейсы CLI и Python обеспечивают простоту обучения.
  • Гибкость гиперпараметров: Широкий спектр настраиваемых гиперпараметров для тонкой настройки производительности модели.

Ключевые особенности режима поезда

Ниже перечислены некоторые примечательные особенности режима YOLOv8'Train:

  • Автоматическая загрузка данных: Стандартные наборы данных, такие как COCO, VOC и ImageNet, загружаются автоматически при первом использовании.
  • Поддержка нескольких GPU: Масштабируй свои тренировочные усилия без проблем на нескольких GPU, чтобы ускорить процесс.
  • Конфигурация гиперпараметров: Возможность изменять гиперпараметры через конфигурационные файлы YAML или аргументы CLI .
  • Визуализация и мониторинг: Отслеживание показателей обучения в реальном времени и визуализация процесса обучения для более глубокого понимания.

Наконечник

  • YOLOv8 Такие наборы данных, как COCO, VOC, ImageNet и многие другие, автоматически загружаются при первом использовании, то есть yolo train data=coco.yaml

Примеры использования

Обучи YOLOv8n на наборе данных COCO128 в течение 100 эпох при размере изображения 640. Устройство для тренировки можно задать с помощью параметра device аргумент. Если ни один аргумент не передан GPU device=0 будет использоваться, если он доступен, в противном случае device=cpu будет использоваться. Полный список аргументов для тренировки смотри в разделе "Аргументы" ниже.

Пример тренировки на одном GPU и процессоре

Устройство определяется автоматически. Если доступен GPU, то он будет использован, в противном случае тренировка начнется на CPU.

from ultralytics import YOLO

# Load a model
model = YOLO('yolov8n.yaml')  # build a new model from YAML
model = YOLO('yolov8n.pt')  # load a pretrained model (recommended for training)
model = YOLO('yolov8n.yaml').load('yolov8n.pt')  # build from YAML and transfer weights

# Train the model
results = model.train(data='coco128.yaml', epochs=100, imgsz=640)
# Build a new model from YAML and start training from scratch
yolo detect train data=coco128.yaml model=yolov8n.yaml epochs=100 imgsz=640

# Start training from a pretrained *.pt model
yolo detect train data=coco128.yaml model=yolov8n.pt epochs=100 imgsz=640

# Build a new model from YAML, transfer pretrained weights to it and start training
yolo detect train data=coco128.yaml model=yolov8n.yaml pretrained=yolov8n.pt epochs=100 imgsz=640

Обучение работе с несколькими графическими процессорами

Обучение на нескольких GPU позволяет более эффективно использовать доступные аппаратные ресурсы, распределяя тренировочную нагрузку между несколькими GPU. Эта функция доступна как через Python API, так и через интерфейс командной строки. Чтобы включить мульти-GPU тренировку, укажи идентификаторы GPU-устройств, которые ты хочешь использовать.

Пример тренировки на нескольких процессорах

Чтобы тренироваться с 2 GPU, CUDA-устройствами 0 и 1, используй следующие команды. По мере необходимости расширяйся на дополнительные GPU.

from ultralytics import YOLO

# Load a model
model = YOLO('yolov8n.pt')  # load a pretrained model (recommended for training)

# Train the model with 2 GPUs
results = model.train(data='coco128.yaml', epochs=100, imgsz=640, device=[0, 1])
# Start training from a pretrained *.pt model using GPUs 0 and 1
yolo detect train data=coco128.yaml model=yolov8n.pt epochs=100 imgsz=640 device=0,1

Обучение Apple M1 и M2 MPS

Благодаря поддержке чипов Apple M1 и M2, интегрированных в модели Ultralytics YOLO , теперь можно обучать свои модели на устройствах, использующих мощный фреймворк Metal Performance Shaders (MPS). MPS предлагает высокопроизводительный способ выполнения задач по вычислению и обработке изображений на пользовательском кремнии Apple.

Чтобы включить обучение на чипах Apple M1 и M2, тебе следует указать 'mps' в качестве своего устройства при запуске процесса обучения. Ниже приведен пример того, как это можно сделать в Python и через командную строку:

Пример тренировки MPS

from ultralytics import YOLO

# Load a model
model = YOLO('yolov8n.pt')  # load a pretrained model (recommended for training)

# Train the model with 2 GPUs
results = model.train(data='coco128.yaml', epochs=100, imgsz=640, device='mps')
# Start training from a pretrained *.pt model using GPUs 0 and 1
yolo detect train data=coco128.yaml model=yolov8n.pt epochs=100 imgsz=640 device=mps

Используя вычислительную мощность чипов M1/M2, это позволяет эффективнее обрабатывать учебные задачи. За более подробным руководством и расширенными возможностями настройки обращайся к документацииPyTorch MPS.

Возобновление прерванных тренировок

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

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

Ты можешь легко возобновить тренировки в Ultralytics YOLO , установив resume аргумент в пользу True при вызове train и укажи путь к .pt файл, содержащий частично обученные веса модели.

Ниже приведен пример того, как возобновить прерванную тренировку с помощью Python и через командную строку:

Пример подготовки резюме

from ultralytics import YOLO

# Load a model
model = YOLO('path/to/last.pt')  # load a partially trained model

# Resume training
results = model.train(resume=True)
# Resume an interrupted training
yolo train resume model=path/to/last.pt

По настройке resume=True, the train Функция продолжит тренировку с того места, где она остановилась, используя состояние, сохраненное в файле 'path/to/last.pt'. Если в процессе тренировки не было достигнуто resume аргумент опущен или установлен в значение False, the train Функция начнет новую тренировку.

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

Настройки поезда

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

Аргумент По умолчанию Описание
model None Указывает файл модели для обучения. Принимает путь либо к .pt предварительно обученная модель или .yaml файл конфигурации. Необходим для определения структуры модели или инициализации весов.
data None Путь к файлу конфигурации набора данных (например, coco128.yaml). Этот файл содержит специфические для набора данных параметры, включая пути к тренировочным и валидационным данным, названия классов и их количество.
epochs 100 Общее количество тренировочных эпох. Каждая эпоха представляет собой полный проход по всему набору данных. Настройка этого значения может повлиять на продолжительность обучения и производительность модели.
time None Максимальное время тренировки в часах. Если установлено, то оно отменяет значение epochs аргумент, позволяющий автоматически прекратить тренировку по истечении указанной продолжительности. Полезно для сценариев тренировок с ограниченным временем.
patience 100 Количество эпох, которое нужно подождать, пока не улучшатся показатели валидации, чтобы досрочно прекратить обучение. Помогает предотвратить чрезмерную подгонку, останавливая обучение, когда производительность достигает плато.
batch 16 Размер партии для обучения, указывающий, сколько изображений обрабатывается перед обновлением внутренних параметров модели. AutoBatch (batch=-1) динамически регулирует размер партии в зависимости от доступности памяти GPU.
imgsz 640 Целевой размер изображения для обучения. Перед подачей в модель все изображения изменяются до этого размера. Влияет на точность модели и вычислительную сложность.
save True Включает сохранение контрольных точек тренировки и финальных весов модели. Полезно для возобновления тренировки или развертывания модели.
save_period -1 Частота сохранения контрольных точек модели, указывается в эпохах. Значение -1 отключает эту функцию. Полезно для сохранения промежуточных моделей во время длительных тренировок.
cache False Включает кэширование изображений наборов данных в памяти (True/ram), на диске (disk), или отключить его (False). Повышает скорость тренировок за счет снижения дискового ввода-вывода ценой увеличения использования памяти.
device None Указывается вычислительное устройство (устройства) для обучения: один GPU (device=0), несколько графических процессоров (device=0,1), ПРОЦЕССОР (device=cpu), или MPS для кремния Apple (device=mps).
workers 8 Количество рабочих потоков для загрузки данных (на RANK если тренировка на нескольких процессорах). Влияет на скорость предварительной обработки данных и подачи их в модель, особенно полезно при работе на нескольких GPU.
project None Имя директории проекта, в которой сохраняются результаты тренировок. Позволяет организовать хранение различных экспериментов.
name None Название тренировочного прогона. Используется для создания подкаталога в папке проекта, где будут храниться журналы тренировок и результаты.
exist_ok False Если значение True, это позволяет перезаписать существующий каталог с проектом/именем. Полезно для итеративных экспериментов без необходимости вручную очищать предыдущие результаты.
pretrained True Определяет, начинать ли обучение с предварительно обученной модели. Может быть булевым значением или строковым путем к конкретной модели, из которой загружаются веса. Повышает эффективность обучения и производительность модели.
optimizer 'auto' Выбери оптимизатор для тренировки. Варианты включают в себя SGD, Adam, AdamW, NAdam, RAdam, RMSProp и т.д., или auto для автоматического выбора на основе конфигурации модели. Влияет на скорость сходимости и стабильность.
verbose False Включает подробный вывод информации во время тренировки, предоставляя подробные журналы и обновления прогресса. Полезно для отладки и тщательного контроля процесса тренировки.
seed 0 Задает случайное зерно для тренировки, обеспечивая воспроизводимость результатов в прогонах с одинаковыми конфигурациями.
deterministic True Принуждает использовать детерминированные алгоритмы, что обеспечивает воспроизводимость, но может повлиять на производительность и скорость из-за ограничения на недетерминированные алгоритмы.
single_cls False Во время обучения все классы в многоклассовых наборах данных рассматриваются как один класс. Полезно для задач бинарной классификации или когда внимание сосредоточено на присутствии объекта, а не на классификации.
rect False Включает прямоугольную тренировку, оптимизируя состав партии для минимальной набивки. Это может повысить эффективность и скорость, но может повлиять на точность модели.
cos_lr False Использует косинусный планировщик скорости обучения, настраивая скорость обучения по косинусной кривой в течение эпох. Помогает управлять скоростью обучения для лучшей сходимости.
close_mosaic 10 Отключает увеличение мозаичных данных в последние N эпох, чтобы стабилизировать тренировку перед завершением. Установка значения 0 отключает эту функцию.
resume False Возобнови тренировку с последней сохраненной контрольной точки. Автоматически загружает веса модели, состояние оптимизатора и количество эпох, продолжая тренировку без проблем.
amp True Включает автоматическое обучение со смешанной точностью (AMP), что уменьшает расход памяти и, возможно, ускоряет обучение с минимальным влиянием на точность.
fraction 1.0 Указывает, какую часть набора данных использовать для обучения. Позволяет тренироваться на подмножестве полного набора данных, что полезно для экспериментов или при ограниченных ресурсах.
profile False Позволяет профилировать скорости ONNX и TensorRT во время тренировки, что полезно для оптимизации развертывания модели.
freeze None Замораживай первые N слоев модели или указанные слои по индексу, уменьшая количество обучаемых параметров. Полезно для тонкой настройки или трансферного обучения.
lr0 0.01 Начальная скорость обучения (т.е. SGD=1E-2, Adam=1E-3) . Настройка этого значения имеет решающее значение для процесса оптимизации, влияя на то, как быстро обновляются веса моделей.
lrf 0.01 Конечная скорость обучения как доля от начальной скорости = (lr0 * lrf), используемые вместе с планировщиками для регулировки скорости обучения с течением времени.
momentum 0.937 Момент-фактор для SGD или beta1 для оптимизаторов Адама, влияющий на включение прошлых градиентов в текущее обновление.
weight_decay 0.0005 Член регуляризации L2, штрафующий большие веса, чтобы предотвратить перебор.
warmup_epochs 3.0 Количество эпох для разогрева скорости обучения, постепенно увеличивая скорость обучения от низкого значения до начальной скорости обучения, чтобы стабилизировать обучение на ранних этапах.
warmup_momentum 0.8 Начальный импульс для фазы разминки, постепенно подстраиваясь под заданный импульс в течение всего периода разминки.
warmup_bias_lr 0.1 Скорость обучения параметров смещения во время фазы разминки, помогающая стабилизировать обучение модели в начальных эпохах.
box 7.5 Вес компонента box loss в функции потерь, влияющий на то, насколько большое внимание уделяется точному предсказанию координат bounding box.
cls 0.5 Вес классификационных потерь в общей функции потерь, влияющий на важность правильного предсказания класса относительно других компонентов.
dfl 1.5 Вес фокусной потери распределения, используемый в некоторых версиях YOLO для более тонкой классификации.
pose 12.0 Вес потери позы в моделях, обученных для оценки позы, влияет на акцент на точное предсказание ключевых точек позы.
kobj 2.0 Вес потери объектности ключевой точки в моделях оценки позы, балансирующий между уверенностью в обнаружении и точностью позы.
label_smoothing 0.0 Применяет сглаживание меток, смягчая жесткие метки до смеси целевой метки и равномерного распределения по меткам, что может улучшить обобщение.
nbs 64 Номинальный размер партии для нормализации потерь.
overlap_mask True Определяет, должны ли маски сегментации накладываться друг на друга во время обучения, что применимо в задачах сегментации экземпляров.
mask_ratio 4 Коэффициент понижения дискретизации для масок сегментации, влияющий на разрешение масок, используемых во время обучения.
dropout 0.0 Показатель отсева для регуляризации в задачах классификации, предотвращающий перебор с помощью случайного исключения единиц во время обучения.
val True Включает валидацию во время обучения, позволяя периодически оценивать производительность модели на отдельном наборе данных.
plots False Генерирует и сохраняет графики метрик обучения и проверки, а также примеры предсказаний, обеспечивая визуальное представление о производительности модели и прогрессе обучения.

Настройки дополнения и гиперпараметры

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

Аргумент Тип По умолчанию Диапазон Описание
hsv_h float 0.015 0.0 - 1.0 Корректирует оттенок изображения на долю цветового круга, внося вариативность цвета. Помогает модели обобщать различные условия освещения.
hsv_s float 0.7 0.0 - 1.0 Изменяет насыщенность изображения на доли, влияя на интенсивность цветов. Полезно для имитации различных условий окружающей среды.
hsv_v float 0.4 0.0 - 1.0 Изменяет значение (яркость) изображения на долю, помогая модели хорошо проявить себя при различных условиях освещения.
degrees float 0.0 -180 - +180 Произвольно поворачивает изображение в заданном диапазоне градусов, улучшая способность модели распознавать объекты с различной ориентацией.
translate float 0.1 0.0 - 1.0 Переводит изображение по горизонтали и вертикали на долю размера изображения, помогая научиться обнаруживать частично видимые объекты.
scale float 0.5 >=0.0 Масштабируй изображение по коэффициенту усиления, имитируя объекты на разных расстояниях от камеры.
shear float 0.0 -180 - +180 Обрезай изображение на заданный градус, имитируя эффект предметов, рассматриваемых под разными углами.
perspective float 0.0 0.0 - 0.001 Применяет к изображению случайное преобразование перспективы, улучшая способность модели понимать объекты в трехмерном пространстве.
flipud float 0.0 0.0 - 1.0 Переворачивает изображение с заданной вероятностью, увеличивая вариативность данных без ущерба для характеристик объекта.
fliplr float 0.5 0.0 - 1.0 Переворачивай изображение слева направо с заданной вероятностью, что полезно для изучения симметричных объектов и увеличения разнообразия датасетов.
mosaic float 1.0 0.0 - 1.0 Объединяет четыре тренировочных изображения в одно, имитируя различные композиции сцены и взаимодействие объектов. Высокоэффективно для понимания сложных сцен.
mixup float 0.0 0.0 - 1.0 Смешивай два изображения и их метки, создавая составное изображение. Усиливает способность модели к обобщению, вводя шум от меток и визуальную изменчивость.
copy_paste float 0.0 0.0 - 1.0 Копирует объекты с одного изображения и вставляет их на другое, что полезно для увеличения количества экземпляров объектов и изучения окклюзии объектов.
auto_augment str randaugment - Автоматическое применение предопределенной политики аугментации (randaugment, autoaugment, augmix), оптимизируя для задач классификации за счет разнообразия визуальных признаков.
erasing float 0.4 0.0 - 1.0 Случайно стирает часть изображения во время обучения классификации, побуждая модель сосредоточиться на менее очевидных признаках для распознавания.

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

Информация

Подробнее о тренировочных операциях с аугментацией читай в справочном разделе.

Запись в журнале

При обучении модели YOLOv8 тебе может показаться ценным отслеживать ее работу в течение определенного времени. Вот тут-то и вступает в игру логирование. Ultralytics' YOLO обеспечивает поддержку трех типов логгеров - Comet, ClearML и TensorBoard.

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

Comet

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

Чтобы использовать Comet:

Пример

# pip install comet_ml
import comet_ml

comet_ml.init()

Не забудь войти в свой аккаунт Comet на их сайте и получить свой API-ключ. Тебе нужно будет добавить его в переменные окружения или в свой скрипт для регистрации экспериментов.

ClearML

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

Чтобы использовать ClearML:

Пример

# pip install clearml
import clearml

clearml.browser_login()

После запуска этого скрипта тебе нужно будет войти в свой аккаунт ClearML в браузере и аутентифицировать свою сессию.

TensorBoard

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

Чтобы использовать TensorBoard в Google Colab:

Пример

load_ext tensorboard
tensorboard --logdir ultralytics/runs  # replace with 'runs' directory

Чтобы использовать TensorBoard локально, выполни приведенную ниже команду и просмотри результаты на сайте http://localhost:6006/.

Пример

tensorboard --logdir ultralytics/runs  # replace with 'runs' directory

Это загрузит TensorBoard и направит его в директорию, где сохранены твои журналы тренировок.

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



Создано 2023-11-12, Обновлено 2024-02-25
Авторы: Burhan-Q (1), Laughing-q (1), glenn-jocher (9)

Комментарии