Ultralytics YOLO27:
Get Started

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

Ultralytics YOLO ecosystem and integrations

Введение#

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

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



Смотри: Как обучить модель YOLO на собственном датасете в Google Colab.

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

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

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

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

Вот некоторые примечательные возможности режима обучения 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

# Загрузить модель
model = YOLO("yolo26n.yaml")  # создать новую модель из YAML
model = YOLO("yolo26n.pt")  # загрузить предварительно обученную модель (рекомендуется для обучения)
model = YOLO("yolo26n.yaml").load("yolo26n.pt")  # создать модель из YAML и перенести веса

# Обучить модель
results = model.train(data="coco8.yaml", epochs=100, imgsz=640)

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

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

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

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

from ultralytics import YOLO

# Загрузить модель
model = YOLO("yolo26n.pt")  # загрузить предварительно обученную модель (рекомендуется для обучения)

# Обучи модель на двух GPU
results = model.train(data="coco8.yaml", epochs=100, imgsz=640, device=[0, 1])

# Обучи модель на двух наименее загруженных GPU
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 с device=0 в Windows.

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

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

Однако если скрипт содержит пользовательские компоненты — например, собственный Trainer, валидатор, датасет или конвейер аугментации, — эти объекты нельзя автоматически сериализовать и передать подпроцессам 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. Инструкции по установке ROCm, обучению на нескольких GPU, AMP и инференсу MIGraphX для экспортированных моделей см. в руководстве по интеграции с 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")

# Обучай модель на одном NPU Ascend
results = model.train(data="coco8.yaml", epochs=100, imgsz=640, device="npu:0")

# Обучай модель на двух NPU Ascend с помощью 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

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

from ultralytics import YOLO

# Загрузить модель
model = YOLO("yolo26n.pt")  # загрузить предварительно обученную модель (рекомендуется для обучения)

# Обучай модель на одной наименее загруженной GPU
results = model.train(data="coco8.yaml", epochs=100, imgsz=640, device=-1)

# Обучай модель на двух наименее загруженных GPU
results = model.train(data="coco8.yaml", epochs=100, imgsz=640, device=[-1, -1])

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

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

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

Обучение на Apple Silicon с MPS#

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

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

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

# Загрузить модель
model = YOLO("yolo26n.pt")  # загрузить предварительно обученную модель (рекомендуется для обучения)

# Обучи модель с помощью MPS
results = model.train(data="coco8.yaml", epochs=100, imgsz=640, device="mps")

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

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

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

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

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

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

Пример возобновления обучения
from ultralytics import YOLO

# Загрузить модель
model = YOLO("path/to/last.pt")  # загрузи частично обученную модель

# возобнови обучение
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 применяются только к линейным весам размерности 2D и свёрточным фильтрам размерности 4D (преобразованным в 2D). Все остальные параметры, например веса пакетной нормализации и члены смещения, остаются на стандартном SGD.

Если используется optimizer=auto, Ultralytics автоматически выбирает MuSGD для длительного обучения (обычно при количестве итераций > 10000). Для коротких запусков тренер переключается на AdamW. В режиме auto тренер также выбирает скорость обучения, поэтому заданное пользователем значение lr0 игнорируется. Чтобы управлять этими настройками вручную, явно выбери оптимизатор, например optimizer=AdamW lr0=0.001.

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

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 отключает эту функцию. Полезно для сохранения промежуточных моделей при длительном обучении.
cachebool или strFalseВключает кэширование изображений набора данных в памяти (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), Intel XPU (device=xpu:0), автоматический выбор свободного 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. Это может повысить эффективность и скорость, но повлиять на точность модели. Стандартный тренер YOLO использует rect=True для валидации задач обнаружения, сегментации, оценки позы и OBB независимо от этой настройки.
multi_scalefloat0.0Случайным образом изменяет imgsz для каждого пакета на +/- multi_scale (например, 0.25 -> 0.75x to 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"), чтобы включить обучение с учётом квантования INT8 (QAT). При дообучении применяется имитация квантования, чтобы веса подходили для экспорта в INT8. См. обучение с учётом квантования.
fractionfloat, int или list1.0Подмножество набора данных в виде доли/количества или списка [train, val, test]. 1 означает полное разбиение; целые числа больше 1 задают количество изображений. Только необязательный параметр test принимает 0/0.0 в значении «нет». В списках из двух элементов тестовый набор остаётся полным.
profileboolFalseВключает профилирование скорости ONNX и TensorRT во время обучения; полезно для оптимизации развёртывания модели.
freezeint или listNoneЗамораживает первые N слоёв модели или определённые слои по индексу или имени модуля (23.cv2, без начального model.), уменьшая количество обучаемых параметров. Полезно для дообучения или переноса обучения.
lr0float0.01Начальная скорость обучения (то есть SGD=1E-2, Adam=1E-3). Не учитывается при использовании оптимизатора optimizer='auto' по умолчанию; чтобы применить этот параметр, укажи оптимизатор явно.
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Вес компонента регрессии расстояний до рамки: распределённая фокальная функция потерь (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 использует схему one-to-many с 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 включает принудительно. При обучении на CPU или MPS всегда используется NCHW (True игнорируется с предупреждением).
max_detint300Максимальное количество обнаружений на изображение при валидации во время обучения. Для detect, segment, pose и OBB значение по умолчанию 300 увеличивается до наибольшего количества размеченных объектов в train/val только в том случае, если это количество превышает 300. Другие значения остаются без изменений; при превышении лимита выводится предупреждение.
Примечание о настройках размера пакета

Аргумент batch можно настроить одним из трёх способов:

  • Фиксированный размер пакета: укажи целое число (например, batch=16), задающее количество изображений в пакете.
  • Автоматический режим (60% памяти GPU): используй batch=-1, чтобы автоматически подобрать размер пакета для загрузки примерно 60% памяти CUDA.
  • Автоматический режим с указанием доли использования: задай дробное значение (например, batch=0.70), чтобы подобрать размер пакета на основе указанной доли используемой памяти GPU.
  • Автоматический повтор при нехватке памяти: если в течение первой эпохи возникает ошибка нехватки памяти 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Применяет к изображению случайное перспективное преобразование, улучшая способность модели понимать объекты в 3D-пространстве.
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, semantic, pose, obb0.0 - 1.0Объединяет фрагменты двух изображений, создавая частичное смешение при сохранении отдельных областей. Повышает устойчивость модели за счёт создания сценариев с перекрытием объектов.
copy_pastefloat0segment, semantic, obb0.0 - 1.0Доля подходящих объектов, которые вставляются; flip зеркально отражает их внутри изображения, а mixup также использует это значение как вероятность применения между изображениями.
copy_paste_modestrflipsegment, semantic, 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.login()

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

ClearML#

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

Чтобы использовать 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
    
    # Загрузить модель
    model = YOLO("yolo26n.pt")  # загрузить предварительно обученную модель (рекомендуется для обучения)
    
    # Обучить модель
    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
    
    # Загрузи частично обученную модель
    model = YOLO("path/to/last.pt")
    
    # возобнови обучение
    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
    
    # Загрузи предварительно обученную модель
    model = YOLO("yolo26n.pt")
    
    # Обучай с полным взвешиванием классов при сильном дисбалансе данных
    results = model.train(data="custom.yaml", epochs=100, imgsz=640, cls_pw=1.0)
    
    # Или используй частичное взвешивание (0.25) при умеренном дисбалансе
    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 Performance Shaders (MPS). Укажи 'mps' в качестве устройства для обучения.

    Пример обучения с MPS
    from ultralytics import YOLO
    
    # Загрузи предварительно обученную модель
    model = YOLO("yolo26n.pt")
    
    # Обучи модель на чипе Apple silicon (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Включает сохранение контрольных точек обучения и итоговых весов модели.

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

Комментарии