Ultralytics YOLO27:

Обучение моделей с Ultralytics YOLO#

Ultralytics YOLO ecosystem and integrations

Введение#

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

Ознакомься с невыпущенным предварительным просмотром YOLO27 для запланированных примеров обучения.



Watch: How to Train a YOLO model on Your Custom Dataset in Google Colab.

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

Вот несколько веских причин выбрать режим Train в YOLO26:

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

Ключевые возможности режима Train#

Ниже перечислены некоторые важные возможности режима Train в YOLO26:

  • Автоматическая загрузка наборов данных: Конфигурации наборов данных с источником загрузки автоматически загружаются при первом использовании, например yolo train data=coco8.yaml. Поддерживаемые форматы и наборы данных см. в обзоре наборов данных.
  • Поддержка нескольких GPU: Плавно масштабируй обучение на несколько GPU, чтобы ускорить процесс.
  • Настройка гиперпараметров: Возможность изменять гиперпараметры с помощью конфигурационных файлов YAML или аргументов CLI.
  • Визуализация и мониторинг: Отслеживание метрик обучения в реальном времени и визуализация процесса обучения для более глубокого анализа.

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

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

Ошибка многопроцессорной обработки в Windows

В Windows при запуске обучения в виде скрипта может появиться ошибка RuntimeError. Чтобы устранить её, добавь блок if __name__ == "__main__": перед кодом обучения.

Пример обучения на одном GPU и CPU

Устройство определяется автоматически. Если доступен GPU, он будет использован (по умолчанию — устройство CUDA 0); в противном случае обучение начнётся на CPU.

from ultralytics import YOLO

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

# Train the model
results = model.train(data="coco8.yaml", epochs=100, imgsz=640)

Обучение на нескольких GPU#

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

Пример обучения на нескольких GPU

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

from ultralytics import YOLO

# Load a model
model = YOLO("yolo26n.pt")  # load a pretrained model (recommended for training)

# Train the model with 2 GPUs
results = model.train(data="coco8.yaml", epochs=100, imgsz=640, device=[0, 1])

# Train the model with the two most idle GPUs
results = model.train(data="coco8.yaml", epochs=100, imgsz=640, device=[-1, -1])
Поддержка нескольких GPU в Windows

Обучение на нескольких GPU не работает в Windows с официальными пакетами PyTorch для torch>=2.4. Ultralytics запускает DDP через torch.distributed.run, этап установления соединения которого создаёт TCPStore; начиная с PyTorch 2.4 он использует по умолчанию бэкенд libuv, а официальные пакеты для Windows собраны без libuv. Обучение немедленно завершается с сообщением:

RuntimeError: use_libuv was requested but PyTorch was built without libuv support

Установка USE_LIBUV=0 не решает проблему, поскольку механизм установления соединения напрямую создаёт TCPStore, а этот путь выполнения не считывает переменную. Чтобы использовать несколько GPU, обучай модель в Linux или WSL2, либо обучай на одном GPU в Windows с помощью device=0.

Обучение на нескольких GPU с пользовательским кодом

Если указать несколько устройств (например, device=[0, 1]), Ultralytics внутренне создаёт новый экземпляр тренера и выполняет torch.distributed.run в фоновом режиме. Это работает без дополнительных действий при стандартном использовании CLI и неизменённых скриптах Python.

Однако если скрипт содержит пользовательские компоненты, такие как пользовательский тренер, валидатор, набор данных или конвейер аугментации, эти объекты нельзя автоматически сериализовать и передать дочерним процессам DDP. В этом случае необходимо напрямую запустить скрипт с помощью torch.distributed.run:

python -m torch.distributed.run --nproc_per_node 2 your_training_script.py

Обучение на GPU AMD использует сборку PyTorch ROCm со стандартным синтаксисом device=0 или device=cuda:0. Инструкции по установке и текущий статус поддержки MIGraphX, DirectML и Ryzen AI NPU см. в руководстве по интеграции с AMD.

Для обучения на GPU Intel используется device=xpu:0 или несколько идентификаторов XPU с помощью сборки PyTorch, предоставляющей XCCL.

Обучение на NPU Huawei Ascend#

Ultralytics поддерживает обучение и валидацию на NPU Huawei Ascend с помощью torch_npu. Установи совместимые друг с другом версии CANN, PyTorch и torch_npu, следуя руководству по установке Ascend Extension for PyTorch, а затем активируй окружение CANN перед запуском Ultralytics:

source /usr/local/Ascend/ascend-toolkit/set_env.sh
Пример обучения на NPU Ascend
from ultralytics import YOLO

model = YOLO("yolo26n.pt")

# Train on one Ascend NPU
results = model.train(data="coco8.yaml", epochs=100, imgsz=640, device="npu:0")

# Train across two Ascend NPUs with HCCL
results = model.train(data="coco8.yaml", epochs=100, imgsz=640, device="npu:0,1")

Стандартные функции обучения, включая AMP, валидацию, сохранение контрольных точек и возобновление, используют активный NPU. Функция AutoBatch доступна для обучения на одном NPU, в то время как несколько идентификаторов NPU запускают распределенное обучение через HCCL. Инструкции по экспорту и развертыванию моделей после обучения см. в руководстве по интеграции с Huawei Ascend.

Обучение на незанятом GPU#

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

Пример обучения на незанятом GPU

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

from ultralytics import YOLO

# Load a model
model = YOLO("yolo26n.pt")  # load a pretrained model (recommended for training)

# Train using the single most idle GPU
results = model.train(data="coco8.yaml", epochs=100, imgsz=640, device=-1)

# Train using the two most idle GPUs
results = model.train(data="coco8.yaml", epochs=100, imgsz=640, device=[-1, -1])

Алгоритм автоматического выбора отдаёт приоритет GPU со следующими характеристиками:

  1. Меньший текущий процент загрузки
  2. Больший объём доступной памяти (свободная VRAM)
  3. Более низкая температура и меньшее энергопотребление

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

Обучение на Apple Silicon с использованием MPS#

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

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

Пример обучения с MPS
from ultralytics import YOLO

# Load a model
model = YOLO("yolo26n.pt")  # load a pretrained model (recommended for training)

# Train the model with MPS
results = model.train(data="coco8.yaml", epochs=100, imgsz=640, device="mps")

Использование вычислительной мощности чипов Apple silicon позволяет эффективнее выполнять задачи обучения. Более подробные рекомендации и расширенные параметры конфигурации см. в документации PyTorch по MPS.

Возобновление прерванного обучения#

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

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

Ты можешь легко возобновить обучение в 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=True функция train продолжит обучение с места остановки, используя состояние, сохранённое в файле 'path/to/last.pt'. Если аргумент resume не указан или установлен в значение False, функция train начнёт новый сеанс обучения.

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

Настройки обучения#

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

Оптимизатор MuSGD#

В YOLO26 MuSGD — это гибридный оптимизатор, который объединяет стандартные обновления SGD с ортогонализованными обновлениями в стиле Muon.

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

Только двумерные линейные веса и четырёхмерные свёрточные фильтры (изменённые до двумерной формы) получают обновление в стиле Muon вместе с SGD, тогда как все остальные параметры, например веса пакетной нормализации и смещения, остаются на стандартном SGD.

При использовании optimizer=auto Ultralytics автоматически выбирает MuSGD для длительных запусков обучения (обычно при числе итераций > 10000). Для коротких запусков тренер переключается на AdamW.

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

yolo train model=yolo26n.pt data=coco8.yaml optimizer=MuSGD

См. реализацию в ultralytics/optim/muon.py и логику автоматического выбора оптимизатора в BaseTrainer.build_optimizer.

АргументТипПо умолчаниюОписание
modelstrNoneУказывает файл модели для обучения. Принимает путь либо к предварительно обученной модели .pt, либо к конфигурационному файлу .yaml. Необходим для определения структуры модели или инициализации весов.
datastrNoneПуть к YAML-файлу набора данных (например, coco8.yaml), в котором указаны пути к данным для обучения и валидации, имена классов и количество классов. Для классификации вместо этого указывается каталог набора данных или имя встроенного набора данных (например, imagenet10).
epochsint100Общее количество эпох обучения. Каждая эпоха представляет собой полный проход по всему набору данных. Изменение этого значения может повлиять на продолжительность обучения и производительность модели.
timefloatNoneМаксимальная продолжительность обучения в часах. Если задана, она переопределяет аргумент epochs, позволяя автоматически остановить обучение по истечении указанного времени. Полезно для сценариев обучения с ограничением по времени.
patienceint100Количество эпох, в течение которых нужно ожидать улучшения метрик валидации перед досрочной остановкой обучения. Помогает предотвратить переобучение, останавливая обучение, когда производительность перестаёт улучшаться.
batchint или float16Размер пакета с тремя режимами: целое число (например, batch=16), автоматический режим с использованием 60% памяти GPU (batch=-1) или автоматический режим с указанной долей использования (batch=0.70).
imgszint640Целевой размер изображения для обучения. Изображения изменяются до квадратов со сторонами указанного размера (если rect=False), при этом соотношение сторон сохраняется для моделей YOLO, но не для RT-DETR. Влияет на точность модели и вычислительную сложность.
saveboolTrueВключает сохранение контрольных точек обучения и финальных весов модели. Полезно для возобновления обучения или развёртывания модели.
save_periodint-1Частота сохранения контрольных точек модели, указанная в эпохах. Значение -1 отключает эту возможность. Полезно для сохранения промежуточных моделей во время длительных сеансов обучения.
cacheboolFalseВключает кэширование изображений набора данных в памяти (True/ram), на диске (disk) или отключает его (False). Ускоряет обучение за счёт сокращения дисковых операций ввода-вывода, но увеличивает потребление памяти.
deviceint или str или listNoneУказывает вычислительное устройство или устройства для обучения: один GPU (device=0), несколько GPU (device=[0,1]), CPU (device=cpu), MPS для Apple silicon (device=mps), NPU Huawei Ascend (device=npu:0 или device=npu:0,1), автоматический выбор незанятого GPU (device=-1) или нескольких незанятых GPU (device=[-1,-1]).
workersint8Количество рабочих потоков для загрузки данных (на каждый RANK при обучении на нескольких GPU). Влияет на скорость предварительной обработки данных и их подачи в модель, особенно в конфигурациях с несколькими GPU.
projectstrNoneИмя каталога проекта, в котором сохраняются результаты обучения. Позволяет организованно хранить разные эксперименты.
namestrNoneИмя запуска обучения. Используется для создания подкаталога в папке проекта, где хранятся журналы и результаты обучения.
exist_okboolFalseЕсли установлено значение True, разрешает перезаписывать существующий каталог проекта и запуска. Полезно для итеративных экспериментов без необходимости вручную удалять предыдущие результаты.
save_dirstrNoneУказывает точный каталог, в котором сохраняются результаты запуска, переопределяя комбинацию project/name. Путь используется как есть, без автоматического увеличения номера, поэтому последовательные запуски используют один и тот же каталог.
pretrainedbool или strTrueОпределяет, начинать ли обучение с предварительно обученных весов. Может иметь логическое значение или содержать строковый путь к загружаемым весам. pretrained=False выполняет обучение со случайно инициализированными весами, сохраняя архитектуру модели.
cls_remapboolTrueПри дообучении на разных наборах данных копирует строки предварительно обученной классификационной головы в новую модель там, где имена классов совпадают, поэтому пересекающиеся классы сохраняют изученное смещение, а также свои веса, если ширина головы не изменилась. Применяется независимо от того, различается ли количество классов или совпадает при другом порядке классов.
optimizerstr'auto'Выбор оптимизатора для обучения. Доступны варианты SGD, MuSGD, Adam, Adamax, AdamW, NAdam, RAdam, RMSProp или auto, чтобы выбрать AdamW или MuSGD на основе количества итераций обучения. Влияет на скорость и стабильность сходимости.
seedint0Задаёт случайное начальное значение для обучения, обеспечивая воспроизводимость результатов при запусках с одинаковыми конфигурациями.
deterministicboolTrueПринудительно использует детерминированные алгоритмы, обеспечивая воспроизводимость, но потенциально снижая производительность и скорость из-за ограничения на недетерминированные алгоритмы.
verboseboolTrueВключает подробный вывод во время обучения: индикаторы выполнения, метрики для каждой эпохи и дополнительная информация об обучении отображаются в консоли.
single_clsboolFalseВо время обучения рассматривает все классы в многоклассовых наборах данных как один класс. Полезно для задач бинарной классификации или когда важно наличие объекта, а не его классификация.
classeslist[int]NoneЗадаёт список идентификаторов классов для обучения. Полезно для фильтрации и выбора только определённых классов во время обучения.
rectboolFalseВключает стратегию минимального заполнения: изображения в пакете минимально дополняются до общего размера, при этом длина самой длинной стороны равна imgsz. Это может повысить эффективность и скорость, но повлиять на точность модели.
multi_scalefloat0.0Случайно изменяет imgsz в каждом пакете на +/- multi_scale (например, 0.25 -> от 0.75x до 1.25x), округляя значение до кратного шагу модели; 0.0 отключает многошкальное обучение.
cos_lrboolFalseИспользует косинусный планировщик скорости обучения, изменяя скорость обучения по косинусной кривой на протяжении эпох. Помогает управлять скоростью обучения для улучшения сходимости.
close_mosaicint10Отключает мозаичную аугментацию данных в последние N эпох, чтобы стабилизировать обучение перед завершением. Значение 0 отключает эту функцию.
resumeboolFalseПродолжает обучение с последней сохранённой контрольной точки. Автоматически загружает веса модели, состояние оптимизатора и номер эпохи, плавно продолжая обучение.
ampbool или strTrueЗадаёт точность обучения: True или "fp16" используют FP16, "bf16" использует BF16 на поддерживаемых устройствах CUDA, а False или "fp32" используют FP32.
quantizeint или strNoneУстанови значение 8 (или "int8") для обучения с учетом квантования (QAT), при котором выполняется точная настройка с искусственным квантованием в цикле, чтобы веса выдерживали экспорт в INT8. Смотри обучение с учетом квантования.
fractionfloat, int или list1.0Подмножество набора данных в виде доли/количества или списка [train, val, test]. 1 означает полное подмножество, целые числа больше 1 — количество изображений, а только необязательная запись для тестирования принимает 0/0.0 в значении «нет». Списки из двух элементов сохраняют полное тестовое подмножество.
profileboolFalseВключает профилирование скорости ONNX и TensorRT во время обучения, что полезно для оптимизации развёртывания модели.
freezeint или listNoneЗамораживает первые N слоёв модели или определённые слои по индексу либо имени модуля (23.cv2, без начального model.), уменьшая число обучаемых параметров. Полезно для дообучения или переноса обучения.
lr0float0.01Начальная скорость обучения (то есть SGD=1E-2, Adam=1E-3). Настройка этого значения критически важна для процесса оптимизации, поскольку влияет на скорость обновления весов модели.
lrffloat0.01Конечная скорость обучения как доля начальной скорости = (lr0 * lrf), используемая вместе с планировщиками для изменения скорости обучения с течением времени.
momentumfloat0.937Коэффициент момента для SGD или beta1 для оптимизаторов Adam, влияющий на учёт прошлых градиентов при текущем обновлении.
weight_decayfloat0.0005Член L2-регуляризации, штрафующий большие веса для предотвращения переобучения.
warmup_epochsfloat3.0Количество эпох для разогрева скорости обучения, при котором скорость обучения постепенно увеличивается от низкого значения до начальной скорости, чтобы стабилизировать обучение на раннем этапе.
warmup_momentumfloat0.8Начальный момент для фазы разогрева, который постепенно изменяется до заданного момента в течение периода разогрева.
warmup_bias_lrfloat0.1Скорость обучения параметров смещения во время фазы разогрева, помогающая стабилизировать обучение модели в первых эпохах. При значении по умолчанию optimizer='auto' автоматически устанавливается в 0.0, поэтому для его использования явно укажи оптимизатор.
distill_modelstrNoneПуть к контрольной точке модели-учителя (например, yolo26x.pt) для дистилляции знаний. Если значение задано, модель-ученик обучается с дополнительной функцией потерь дистилляции под руководством замороженной модели-учителя.
disfloat6.0Вес потерь дистилляции, добавляемых к стандартным потерям обнаружения. Более высокие значения усиливают влияние подсказок по признакам от модели-учителя.
boxfloat7.5Вес компонента потерь для рамок в функции потерь, влияющий на степень акцента на точном предсказании координат ограничивающих рамок.
clsfloat0.5Вес потерь классификации в общей функции потерь, влияющий на важность правильного предсказания класса относительно других компонентов.
cls_pwfloat0.0Степень взвешивания классов для обработки дисбаланса классов с использованием обратной частоты классов. 0.0 отключает взвешивание классов, 1.0 применяет полное взвешивание по обратной частоте. Значения от 0 до 1 обеспечивают частичное взвешивание.
dflfloat1.5Вес члена регрессии расстояния до рамки: distribution focal loss (DFL), если голова обнаружения использует reg_max > 1, или потери L1 для нормализованных расстояний до рамок в YOLO26 без DFL (reg_max: 1).
posefloat12.0Вес потерь позы в моделях, обучаемых для оценки позы, влияющий на степень акцента на точном предсказании ключевых точек позы.
kobjfloat1.0Вес потерь объектности ключевых точек в моделях оценки позы, обеспечивающий баланс между уверенностью обнаружения и точностью позы.
rlefloat1.0Вес потерь оценки остаточного логарифма правдоподобия в моделях оценки позы, влияющий на точность локализации ключевых точек.
anglefloat1.0Вес потерь угла в моделях OBB, влияющий на точность предсказания углов ориентированных ограничивающих рамок.
dlogfloat1.0Вес масштабно-инвариантных логарифмических потерь (SILog) в моделях оценки глубины — основного члена, определяющего точность глубины.
dgradfloat0.5Вес градиентных потерь в моделях оценки глубины, штрафующих ошибки на границах глубины и способствующих формированию более чётких границ поверхностей.
dlamfloat1.0Коэффициент фокусировки на дисперсии для потерь SILog в моделях оценки глубины. 1.0 делает потери полностью масштабно-инвариантными, а 0.0 сводит их к обычным логарифмическим потерям RMSE.
nbsint64Номинальный размер пакета для нормализации потерь.
overlap_maskboolTrueОпределяет, следует ли объединять маски объектов в одну маску для обучения или сохранять их отдельными для каждого объекта. При перекрытии меньшая маска накладывается поверх большей во время объединения.
mask_ratioint4Коэффициент уменьшения размера масок сегментации, влияющий на разрешение масок, используемых во время обучения.
dropoutfloat0.0Коэффициент dropout для регуляризации в задачах классификации, предотвращающий переобучение за счёт случайного исключения блоков во время обучения.
valboolTrueВключает валидацию во время обучения, позволяя периодически оценивать производительность модели на отдельном наборе данных.
nmsbool, необязательноNoneВыбирает голову вывода, используемую для валидации эпох, выбора контрольных точек и ранней остановки. None или True использует схему «один ко многим» с NMS; False использует голову без NMS, если она доступна. Обе головы сохраняют свои потери при обучении.
plotsboolTrueСоздаёт и сохраняет графики метрик обучения и валидации, а также примеры предсказаний, предоставляя визуальное представление о производительности модели и ходе обучения.
compilebool или strFalseВключает компиляцию графа torch.compile PyTorch 2.x с помощью backend='inductor'. Принимает значения True"default", False → отключает функцию, а также строковый режим, например "default", "reduce-overhead", "max-autotune-no-cudagraphs". Если функция не поддерживается, используется eager-режим с предупреждением.
channels_lastboolNoneИспользует формат памяти channels_last (NHWC) для сверток во время обучения. None автоматически включает его на CUDA с PyTorch 1.11 или новее, за исключением Windows, где он показал меньшую скорость. False отключает его, а True явно запрашивает его. В PyTorch 1.10 и более старых версиях, на CPU и MPS по умолчанию остается NCHW.
max_detint300Максимальное количество обнаружений на изображение во время валидации при обучении. Для задач детекции, сегментации, позы и OBB значение по умолчанию 300 увеличивается до наибольшего количества объектов с разметкой в train/val только тогда, когда это количество превышает 300. Другие значения остаются фиксированными; превышение лимита вызывает предупреждение.
Примечание о настройках размера пакета

Аргумент batch можно настроить тремя способами:

  • Фиксированный размер пакета: задай целочисленное значение (например, batch=16), напрямую определяющее число изображений в пакете.
  • Автоматический режим (60% памяти GPU): используй batch=-1, чтобы автоматически настроить размер пакета примерно на 60% использования памяти CUDA.
  • Автоматический режим с долей использования: задай дробное значение (например, batch=0.70), чтобы настроить размер пакета на основе указанной доли использования памяти GPU.
  • Автоматический повтор после OOM: если в первой эпохе возникает ошибка нехватки памяти CUDA, тренер автоматически уменьшает размер пакета вдвое и повторяет попытку (до 3 раз). Это применяется только при обучении на одном GPU; при обучении на нескольких GPU (DDP) ошибка возникает немедленно.
  • Подходящий размер не найден: если ни один кандидат на размер пакета не создаёт пригодный профиль, AutoBatch выдаёт понятную ошибку RuntimeError, а не молча использует несвязанный с этим вариант по умолчанию.

Настройки аугментации и гиперпараметры#

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

АргументТипПо умолчаниюПоддерживаемые задачиДиапазонОписание
hsv_hfloat0.015detect, segment, semantic, depth, classify, pose, obb0.0 - 1.0Изменяет оттенок изображения на долю цветового круга, добавляя вариативность цветов. Помогает модели обобщать данные при разных условиях освещения. Для classify применяется только при auto_augment=None.
hsv_sfloat0.7detect, segment, semantic, depth, classify, pose, obb0.0 - 1.0Изменяет насыщенность изображения на указанную долю, влияя на интенсивность цветов. Полезно для имитации различных условий окружающей среды. Для classify применяется только при auto_augment=None.
hsv_vfloat0.4detect, segment, semantic, depth, classify, pose, obb0.0 - 1.0Изменяет значение (яркость) изображения на указанную долю, помогая модели хорошо работать при различных условиях освещения. Для classify применяется только при auto_augment=None.
degreesfloat0detect, segment, semantic, depth, pose, obb0.0 - 180Случайно поворачивает изображение в пределах указанного диапазона градусов, улучшая способность модели распознавать объекты в различных ориентациях.
translatefloat0.1detect, segment, semantic, depth, pose, obb0.0 - 1.0Сдвигает изображение по горизонтали и вертикали на долю его размера, помогая модели учиться обнаруживать частично видимые объекты.
scalefloat | tuple0.5detect, segment, semantic, depth, classify, pose, obb0 - 1 или явный кортеж (min, max) (не для classify)Масштабирует изображение с коэффициентом усиления, имитируя объекты на разных расстояниях от камеры.
shearfloat0detect, segment, semantic, depth, pose, obb-180 - +180Сдвигает части изображения под заданным углом, имитируя вид объектов с разных ракурсов.
perspectivefloat0detect, segment, semantic, depth, pose, obb0.0 - 0.001Применяет к изображению случайное перспективное преобразование, улучшая способность модели понимать объекты в трёхмерном пространстве.
flipudfloat0detect, segment, semantic, depth, classify, pose, obb0.0 - 1.0Переворачивает изображение вверх ногами с указанной вероятностью, увеличивая разнообразие данных без изменения характеристик объекта.
fliplrfloat0.5detect, segment, semantic, depth, classify, pose, obb0.0 - 1.0Отражает изображение слева направо с указанной вероятностью, что полезно для обучения распознаванию симметричных объектов и повышения разнообразия набора данных.
bgrfloat0detect, segment, semantic, depth, pose, obb0.0 - 1.0Меняет порядок каналов изображения с RGB на BGR с указанной вероятностью, что полезно для повышения устойчивости к неправильному порядку каналов.
mosaicfloat1detect, segment, semantic, pose, obb0.0 - 1.0Объединяет четыре обучающих изображения в одно, имитируя различные композиции сцен и взаимодействия объектов. Особенно эффективно для понимания сложных сцен.
mixupfloat0detect, segment, semantic, pose, obb0.0 - 1.0Смешивает два изображения и их метки, создавая составное изображение. Повышает способность модели к обобщению за счёт добавления шума в метки и визуального разнообразия.
cutmixfloat0detect, segment, pose, obb0.0 - 1.0Объединяет части двух изображений, создавая частичное смешение при сохранении отдельных областей. Повышает устойчивость модели за счёт создания сценариев с перекрытием объектов.
copy_pastefloat0segment, obb0.0 - 1.0Доля подходящих объектов, которые вставляются; flip отражает их внутри изображения, а mixup также использует это значение как вероятность применения между изображениями.
copy_paste_modestrflipsegment, obb-Задаёт стратегию copy-paste, которую следует использовать. Доступные варианты: 'flip' и 'mixup'.
auto_augmentstrrandaugmentclassify-Применяет заданную политику аугментации ('randaugment', 'autoaugment' или 'augmix') для повышения производительности модели за счёт визуального разнообразия.
erasingfloat0.4classify0.0 - 1.0Случайно стирает области изображения во время обучения, побуждая модель сосредоточиться на менее очевидных признаках.
augmentationslistNonedetect, segment, semantic, depth, pose, obb-Пользовательские преобразования Albumentations для расширенной аугментации данных (только Python API). Принимает список объектов преобразований для специализированных задач аугментации.

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

Информация

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

Журналирование#

Метрики обучения, графики и контрольные точки всегда записываются в каталог запуска, а Ultralytics также передает их в потоковом режиме в любой установленный и включенный трекер экспериментов: Comet, ClearML, TensorBoard, MLflow, Weights & Biases и DVCLive. Каждый ведение логов переключается через настройки Ultralytics, например yolo settings tensorboard=True. Ниже показаны три наиболее распространенные настройки.

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 локально, выполни приведённую ниже команду и просматривай результаты в localhost:6006.

Пример
tensorboard --logdir ultralytics/runs # replace with 'runs' directory

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

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

Что дальше#

Проверь обученную модель на отложенных данных, чтобы оценить её точность в реальных условиях, а затем экспортируй её в ONNX, TensorRT или другой формат развёртывания. Обучаешь модель на собственных данных, а не на COCO8? Сначала приведи их к нужному формату с помощью руководства по датасетам.

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

  • Да. Облачное обучение на платформе Ultralytics включает бесплатные кредиты для начала работы. Загрузи свой датасет, выбери модель и GPU и запусти обучение прямо в браузере.

  • Чтобы обучить модель для обнаружения объектов с использованием Ultralytics YOLO26, можно воспользоваться Python API или CLI. Ниже приведён пример для обоих вариантов:

    Пример обучения на одном GPU и CPU
    from ultralytics import YOLO
    
    # Load a model
    model = YOLO("yolo26n.pt")  # load a pretrained model (recommended for training)
    
    # Train the model
    results = model.train(data="coco8.yaml", epochs=100, imgsz=640)

    Подробнее см. в разделе Настройки обучения.

  • К основным возможностям режима Train в Ultralytics YOLO26 относятся:

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

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

  • Чтобы возобновить обучение после прерванной сессии, установи аргумент resume в значение True и укажи путь к последней сохранённой контрольной точке.

    Пример возобновления обучения
    from ultralytics import YOLO
    
    # Load the partially trained model
    model = YOLO("path/to/last.pt")
    
    # Resume training
    results = model.train(resume=True)

    Подробнее см. в разделе Возобновление прерванного обучения.

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

    Аргумент cls_pw управляет степенью взвешивания классов на основе обратной частоты классов:

    • cls_pw=0.0 (по умолчанию): отключает взвешивание классов
    • cls_pw=1.0: применяет полное взвешивание по обратной частоте
    • Значения между 0.0 и 1.0: обеспечивают частичное взвешивание при умеренном дисбалансе

    Веса классов вычисляются как (1.0 / class_counts) ^ cls_pw и нормализуются так, чтобы их среднее значение равнялось 1.0.

    Обучение на несбалансированном датасете
    from ultralytics import YOLO
    
    # Load a pretrained model
    model = YOLO("yolo26n.pt")
    
    # Train with full class weighting for severely imbalanced data
    results = model.train(data="custom.yaml", epochs=100, imgsz=640, cls_pw=1.0)
    
    # Or use partial weighting (0.25) for moderate imbalance
    results = model.train(data="custom.yaml", epochs=100, imgsz=640, cls_pw=0.25)
    Совет

    Начни с cls_pw=0.25 для умеренно несбалансированных датасетов и увеличь значение до 1.0, если редкие классы по-прежнему показывают низкие результаты. Вычисленные веса классов можно проверить в логах обучения, чтобы убедиться в корректном распределении весов.

  • Да, Ultralytics YOLO26 поддерживает обучение на чипах Apple silicon с использованием фреймворка шейдеров производительности Metal (MPS). Укажи 'mps' в качестве устройства для обучения.

    Пример обучения с MPS
    from ultralytics import YOLO
    
    # Load a pretrained model
    model = YOLO("yolo26n.pt")
    
    # Train the model on Apple silicon chip (M1/M2/M3/M4)
    results = model.train(data="coco8.yaml", epochs=100, imgsz=640, device="mps")

    Подробнее см. в разделе Обучение на Apple Silicon с использованием MPS.

  • Ultralytics YOLO26 позволяет настраивать различные параметры обучения, такие как размер пакета, скорость обучения, количество эпох и другие, с помощью аргументов. Ниже приведён краткий обзор:

    АргументПо умолчаниюОписание
    modelNoneПуть к файлу модели для обучения.
    dataNoneПуть к YAML-файлу датасета (например, coco8.yaml) или к каталогу либо имени датасета (например, imagenet10) для классификации.
    epochs100Общее количество эпох обучения.
    batch16Размер пакета, задаваемый целым числом или в автоматическом режиме.
    imgsz640Целевой размер изображения для обучения.
    deviceNoneВычислительное устройство или устройства для обучения, например cpu, 0, 0,1 или mps.
    saveTrueВключает сохранение контрольных точек обучения и финальных весов модели.

    Подробное руководство по настройкам обучения см. в разделе Настройки обучения.

Комментарии