Обучение моделей с Ultralytics YOLO#
Введение#
Обучение модели глубокого обучения включает подачу ей данных и настройку её параметров, чтобы она могла делать точные прогнозы. Режим 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 при запуске обучения в виде скрипта может появиться ошибка RuntimeError. Чтобы устранить её, добавь блок if __name__ == "__main__": перед кодом обучения.
Устройство определяется автоматически. Если доступен 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, которые хочешь использовать.
Чтобы обучать модель на 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 с официальными пакетами 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.
Если указать несколько устройств (например, 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.shfrom 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 для обучения, используй параметр устройства -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 со следующими характеристиками:
- Меньший текущий процент загрузки
- Больший объём доступной памяти (свободная VRAM)
- Более низкая температура и меньшее энергопотребление
Эта возможность особенно полезна в общих вычислительных средах или при одновременном запуске нескольких задач обучения для разных моделей. Она автоматически адаптируется к изменяющимся условиям системы, обеспечивая оптимальное распределение ресурсов без ручного вмешательства.
Обучение на Apple Silicon с использованием MPS#
Благодаря интегрированной в модели Ultralytics YOLO поддержке чипов Apple silicon теперь можно обучать модели на устройствах, использующих мощную среду Metal Performance Shaders (MPS). MPS обеспечивает высокопроизводительное выполнение вычислений и задач обработки изображений на специализированном кремнии Apple.
Чтобы включить обучение на чипах Apple silicon, при запуске процесса обучения укажи 'mps' в качестве устройства. Ниже приведён пример того, как это можно сделать в Python и через командную строку:
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.
| Аргумент | Тип | По умолчанию | Описание |
|---|---|---|---|
model | str | None | Указывает файл модели для обучения. Принимает путь либо к предварительно обученной модели .pt, либо к конфигурационному файлу .yaml. Необходим для определения структуры модели или инициализации весов. |
data | str | None | Путь к YAML-файлу набора данных (например, coco8.yaml), в котором указаны пути к данным для обучения и валидации, имена классов и количество классов. Для классификации вместо этого указывается каталог набора данных или имя встроенного набора данных (например, imagenet10). |
epochs | int | 100 | Общее количество эпох обучения. Каждая эпоха представляет собой полный проход по всему набору данных. Изменение этого значения может повлиять на продолжительность обучения и производительность модели. |
time | float | None | Максимальная продолжительность обучения в часах. Если задана, она переопределяет аргумент epochs, позволяя автоматически остановить обучение по истечении указанного времени. Полезно для сценариев обучения с ограничением по времени. |
patience | int | 100 | Количество эпох, в течение которых нужно ожидать улучшения метрик валидации перед досрочной остановкой обучения. Помогает предотвратить переобучение, останавливая обучение, когда производительность перестаёт улучшаться. |
batch | int или float | 16 | Размер пакета с тремя режимами: целое число (например, batch=16), автоматический режим с использованием 60% памяти GPU (batch=-1) или автоматический режим с указанной долей использования (batch=0.70). |
imgsz | int | 640 | Целевой размер изображения для обучения. Изображения изменяются до квадратов со сторонами указанного размера (если rect=False), при этом соотношение сторон сохраняется для моделей YOLO, но не для RT-DETR. Влияет на точность модели и вычислительную сложность. |
save | bool | True | Включает сохранение контрольных точек обучения и финальных весов модели. Полезно для возобновления обучения или развёртывания модели. |
save_period | int | -1 | Частота сохранения контрольных точек модели, указанная в эпохах. Значение -1 отключает эту возможность. Полезно для сохранения промежуточных моделей во время длительных сеансов обучения. |
cache | bool | False | Включает кэширование изображений набора данных в памяти (True/ram), на диске (disk) или отключает его (False). Ускоряет обучение за счёт сокращения дисковых операций ввода-вывода, но увеличивает потребление памяти. |
device | int или str или list | None | Указывает вычислительное устройство или устройства для обучения: один 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]). |
workers | int | 8 | Количество рабочих потоков для загрузки данных (на каждый RANK при обучении на нескольких GPU). Влияет на скорость предварительной обработки данных и их подачи в модель, особенно в конфигурациях с несколькими GPU. |
project | str | None | Имя каталога проекта, в котором сохраняются результаты обучения. Позволяет организованно хранить разные эксперименты. |
name | str | None | Имя запуска обучения. Используется для создания подкаталога в папке проекта, где хранятся журналы и результаты обучения. |
exist_ok | bool | False | Если установлено значение True, разрешает перезаписывать существующий каталог проекта и запуска. Полезно для итеративных экспериментов без необходимости вручную удалять предыдущие результаты. |
save_dir | str | None | Указывает точный каталог, в котором сохраняются результаты запуска, переопределяя комбинацию project/name. Путь используется как есть, без автоматического увеличения номера, поэтому последовательные запуски используют один и тот же каталог. |
pretrained | bool или str | True | Определяет, начинать ли обучение с предварительно обученных весов. Может иметь логическое значение или содержать строковый путь к загружаемым весам. pretrained=False выполняет обучение со случайно инициализированными весами, сохраняя архитектуру модели. |
cls_remap | bool | True | При дообучении на разных наборах данных копирует строки предварительно обученной классификационной головы в новую модель там, где имена классов совпадают, поэтому пересекающиеся классы сохраняют изученное смещение, а также свои веса, если ширина головы не изменилась. Применяется независимо от того, различается ли количество классов или совпадает при другом порядке классов. |
optimizer | str | 'auto' | Выбор оптимизатора для обучения. Доступны варианты SGD, MuSGD, Adam, Adamax, AdamW, NAdam, RAdam, RMSProp или auto, чтобы выбрать AdamW или MuSGD на основе количества итераций обучения. Влияет на скорость и стабильность сходимости. |
seed | int | 0 | Задаёт случайное начальное значение для обучения, обеспечивая воспроизводимость результатов при запусках с одинаковыми конфигурациями. |
deterministic | bool | True | Принудительно использует детерминированные алгоритмы, обеспечивая воспроизводимость, но потенциально снижая производительность и скорость из-за ограничения на недетерминированные алгоритмы. |
verbose | bool | True | Включает подробный вывод во время обучения: индикаторы выполнения, метрики для каждой эпохи и дополнительная информация об обучении отображаются в консоли. |
single_cls | bool | False | Во время обучения рассматривает все классы в многоклассовых наборах данных как один класс. Полезно для задач бинарной классификации или когда важно наличие объекта, а не его классификация. |
classes | list[int] | None | Задаёт список идентификаторов классов для обучения. Полезно для фильтрации и выбора только определённых классов во время обучения. |
rect | bool | False | Включает стратегию минимального заполнения: изображения в пакете минимально дополняются до общего размера, при этом длина самой длинной стороны равна imgsz. Это может повысить эффективность и скорость, но повлиять на точность модели. |
multi_scale | float | 0.0 | Случайно изменяет imgsz в каждом пакете на +/- multi_scale (например, 0.25 -> от 0.75x до 1.25x), округляя значение до кратного шагу модели; 0.0 отключает многошкальное обучение. |
cos_lr | bool | False | Использует косинусный планировщик скорости обучения, изменяя скорость обучения по косинусной кривой на протяжении эпох. Помогает управлять скоростью обучения для улучшения сходимости. |
close_mosaic | int | 10 | Отключает мозаичную аугментацию данных в последние N эпох, чтобы стабилизировать обучение перед завершением. Значение 0 отключает эту функцию. |
resume | bool | False | Продолжает обучение с последней сохранённой контрольной точки. Автоматически загружает веса модели, состояние оптимизатора и номер эпохи, плавно продолжая обучение. |
amp | bool или str | True | Задаёт точность обучения: True или "fp16" используют FP16, "bf16" использует BF16 на поддерживаемых устройствах CUDA, а False или "fp32" используют FP32. |
quantize | int или str | None | Установи значение 8 (или "int8") для обучения с учетом квантования (QAT), при котором выполняется точная настройка с искусственным квантованием в цикле, чтобы веса выдерживали экспорт в INT8. Смотри обучение с учетом квантования. |
fraction | float, int или list | 1.0 | Подмножество набора данных в виде доли/количества или списка [train, val, test]. 1 означает полное подмножество, целые числа больше 1 — количество изображений, а только необязательная запись для тестирования принимает 0/0.0 в значении «нет». Списки из двух элементов сохраняют полное тестовое подмножество. |
profile | bool | False | Включает профилирование скорости ONNX и TensorRT во время обучения, что полезно для оптимизации развёртывания модели. |
freeze | int или list | None | Замораживает первые N слоёв модели или определённые слои по индексу либо имени модуля (23.cv2, без начального model.), уменьшая число обучаемых параметров. Полезно для дообучения или переноса обучения. |
lr0 | float | 0.01 | Начальная скорость обучения (то есть SGD=1E-2, Adam=1E-3). Настройка этого значения критически важна для процесса оптимизации, поскольку влияет на скорость обновления весов модели. |
lrf | float | 0.01 | Конечная скорость обучения как доля начальной скорости = (lr0 * lrf), используемая вместе с планировщиками для изменения скорости обучения с течением времени. |
momentum | float | 0.937 | Коэффициент момента для SGD или beta1 для оптимизаторов Adam, влияющий на учёт прошлых градиентов при текущем обновлении. |
weight_decay | float | 0.0005 | Член L2-регуляризации, штрафующий большие веса для предотвращения переобучения. |
warmup_epochs | float | 3.0 | Количество эпох для разогрева скорости обучения, при котором скорость обучения постепенно увеличивается от низкого значения до начальной скорости, чтобы стабилизировать обучение на раннем этапе. |
warmup_momentum | float | 0.8 | Начальный момент для фазы разогрева, который постепенно изменяется до заданного момента в течение периода разогрева. |
warmup_bias_lr | float | 0.1 | Скорость обучения параметров смещения во время фазы разогрева, помогающая стабилизировать обучение модели в первых эпохах. При значении по умолчанию optimizer='auto' автоматически устанавливается в 0.0, поэтому для его использования явно укажи оптимизатор. |
distill_model | str | None | Путь к контрольной точке модели-учителя (например, yolo26x.pt) для дистилляции знаний. Если значение задано, модель-ученик обучается с дополнительной функцией потерь дистилляции под руководством замороженной модели-учителя. |
dis | float | 6.0 | Вес потерь дистилляции, добавляемых к стандартным потерям обнаружения. Более высокие значения усиливают влияние подсказок по признакам от модели-учителя. |
box | float | 7.5 | Вес компонента потерь для рамок в функции потерь, влияющий на степень акцента на точном предсказании координат ограничивающих рамок. |
cls | float | 0.5 | Вес потерь классификации в общей функции потерь, влияющий на важность правильного предсказания класса относительно других компонентов. |
cls_pw | float | 0.0 | Степень взвешивания классов для обработки дисбаланса классов с использованием обратной частоты классов. 0.0 отключает взвешивание классов, 1.0 применяет полное взвешивание по обратной частоте. Значения от 0 до 1 обеспечивают частичное взвешивание. |
dfl | float | 1.5 | Вес члена регрессии расстояния до рамки: distribution focal loss (DFL), если голова обнаружения использует reg_max > 1, или потери L1 для нормализованных расстояний до рамок в YOLO26 без DFL (reg_max: 1). |
pose | float | 12.0 | Вес потерь позы в моделях, обучаемых для оценки позы, влияющий на степень акцента на точном предсказании ключевых точек позы. |
kobj | float | 1.0 | Вес потерь объектности ключевых точек в моделях оценки позы, обеспечивающий баланс между уверенностью обнаружения и точностью позы. |
rle | float | 1.0 | Вес потерь оценки остаточного логарифма правдоподобия в моделях оценки позы, влияющий на точность локализации ключевых точек. |
angle | float | 1.0 | Вес потерь угла в моделях OBB, влияющий на точность предсказания углов ориентированных ограничивающих рамок. |
dlog | float | 1.0 | Вес масштабно-инвариантных логарифмических потерь (SILog) в моделях оценки глубины — основного члена, определяющего точность глубины. |
dgrad | float | 0.5 | Вес градиентных потерь в моделях оценки глубины, штрафующих ошибки на границах глубины и способствующих формированию более чётких границ поверхностей. |
dlam | float | 1.0 | Коэффициент фокусировки на дисперсии для потерь SILog в моделях оценки глубины. 1.0 делает потери полностью масштабно-инвариантными, а 0.0 сводит их к обычным логарифмическим потерям RMSE. |
nbs | int | 64 | Номинальный размер пакета для нормализации потерь. |
overlap_mask | bool | True | Определяет, следует ли объединять маски объектов в одну маску для обучения или сохранять их отдельными для каждого объекта. При перекрытии меньшая маска накладывается поверх большей во время объединения. |
mask_ratio | int | 4 | Коэффициент уменьшения размера масок сегментации, влияющий на разрешение масок, используемых во время обучения. |
dropout | float | 0.0 | Коэффициент dropout для регуляризации в задачах классификации, предотвращающий переобучение за счёт случайного исключения блоков во время обучения. |
val | bool | True | Включает валидацию во время обучения, позволяя периодически оценивать производительность модели на отдельном наборе данных. |
nms | bool, необязательно | None | Выбирает голову вывода, используемую для валидации эпох, выбора контрольных точек и ранней остановки. None или True использует схему «один ко многим» с NMS; False использует голову без NMS, если она доступна. Обе головы сохраняют свои потери при обучении. |
plots | bool | True | Создаёт и сохраняет графики метрик обучения и валидации, а также примеры предсказаний, предоставляя визуальное представление о производительности модели и ходе обучения. |
compile | bool или str | False | Включает компиляцию графа torch.compile PyTorch 2.x с помощью backend='inductor'. Принимает значения True → "default", False → отключает функцию, а также строковый режим, например "default", "reduce-overhead", "max-autotune-no-cudagraphs". Если функция не поддерживается, используется eager-режим с предупреждением. |
channels_last | bool | None | Использует формат памяти channels_last (NHWC) для сверток во время обучения. None автоматически включает его на CUDA с PyTorch 1.11 или новее, за исключением Windows, где он показал меньшую скорость. False отключает его, а True явно запрашивает его. В PyTorch 1.10 и более старых версиях, на CPU и MPS по умолчанию остается NCHW. |
max_det | int | 300 | Максимальное количество обнаружений на изображение во время валидации при обучении. Для задач детекции, сегментации, позы и 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_h | float | 0.015 | detect, segment, semantic, depth, classify, pose, obb | 0.0 - 1.0 | Изменяет оттенок изображения на долю цветового круга, добавляя вариативность цветов. Помогает модели обобщать данные при разных условиях освещения. Для classify применяется только при auto_augment=None. |
hsv_s | float | 0.7 | detect, segment, semantic, depth, classify, pose, obb | 0.0 - 1.0 | Изменяет насыщенность изображения на указанную долю, влияя на интенсивность цветов. Полезно для имитации различных условий окружающей среды. Для classify применяется только при auto_augment=None. |
hsv_v | float | 0.4 | detect, segment, semantic, depth, classify, pose, obb | 0.0 - 1.0 | Изменяет значение (яркость) изображения на указанную долю, помогая модели хорошо работать при различных условиях освещения. Для classify применяется только при auto_augment=None. |
degrees | float | 0 | detect, segment, semantic, depth, pose, obb | 0.0 - 180 | Случайно поворачивает изображение в пределах указанного диапазона градусов, улучшая способность модели распознавать объекты в различных ориентациях. |
translate | float | 0.1 | detect, segment, semantic, depth, pose, obb | 0.0 - 1.0 | Сдвигает изображение по горизонтали и вертикали на долю его размера, помогая модели учиться обнаруживать частично видимые объекты. |
scale | float | tuple | 0.5 | detect, segment, semantic, depth, classify, pose, obb | 0 - 1 или явный кортеж (min, max) (не для classify) | Масштабирует изображение с коэффициентом усиления, имитируя объекты на разных расстояниях от камеры. |
shear | float | 0 | detect, segment, semantic, depth, pose, obb | -180 - +180 | Сдвигает части изображения под заданным углом, имитируя вид объектов с разных ракурсов. |
perspective | float | 0 | detect, segment, semantic, depth, pose, obb | 0.0 - 0.001 | Применяет к изображению случайное перспективное преобразование, улучшая способность модели понимать объекты в трёхмерном пространстве. |
flipud | float | 0 | detect, segment, semantic, depth, classify, pose, obb | 0.0 - 1.0 | Переворачивает изображение вверх ногами с указанной вероятностью, увеличивая разнообразие данных без изменения характеристик объекта. |
fliplr | float | 0.5 | detect, segment, semantic, depth, classify, pose, obb | 0.0 - 1.0 | Отражает изображение слева направо с указанной вероятностью, что полезно для обучения распознаванию симметричных объектов и повышения разнообразия набора данных. |
bgr | float | 0 | detect, segment, semantic, depth, pose, obb | 0.0 - 1.0 | Меняет порядок каналов изображения с RGB на BGR с указанной вероятностью, что полезно для повышения устойчивости к неправильному порядку каналов. |
mosaic | float | 1 | detect, segment, semantic, pose, obb | 0.0 - 1.0 | Объединяет четыре обучающих изображения в одно, имитируя различные композиции сцен и взаимодействия объектов. Особенно эффективно для понимания сложных сцен. |
mixup | float | 0 | detect, segment, semantic, pose, obb | 0.0 - 1.0 | Смешивает два изображения и их метки, создавая составное изображение. Повышает способность модели к обобщению за счёт добавления шума в метки и визуального разнообразия. |
cutmix | float | 0 | detect, segment, pose, obb | 0.0 - 1.0 | Объединяет части двух изображений, создавая частичное смешение при сохранении отдельных областей. Повышает устойчивость модели за счёт создания сценариев с перекрытием объектов. |
copy_paste | float | 0 | segment, obb | 0.0 - 1.0 | Доля подходящих объектов, которые вставляются; flip отражает их внутри изображения, а mixup также использует это значение как вероятность применения между изображениями. |
copy_paste_mode | str | flip | segment, obb | - | Задаёт стратегию copy-paste, которую следует использовать. Доступные варианты: 'flip' и 'mixup'. |
auto_augment | str | randaugment | classify | - | Применяет заданную политику аугментации ('randaugment', 'autoaugment' или 'augmix') для повышения производительности модели за счёт визуального разнообразия. |
erasing | float | 0.4 | classify | 0.0 - 1.0 | Случайно стирает области изображения во время обучения, побуждая модель сосредоточиться на менее очевидных признаках. |
augmentations | list | None | detect, 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 и CPUfrom 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' в качестве устройства для обучения.
Пример обучения с MPSfrom 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Включает сохранение контрольных точек обучения и финальных весов модели. Подробное руководство по настройкам обучения см. в разделе Настройки обучения.