Обучение моделей с Ultralytics YOLO#
Введение#
Обучение модели глубокого обучения предполагает передачу ей данных и настройку параметров, чтобы модель могла делать точные предсказания. Режим обучения в 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 при запуске обучения в виде скрипта может возникнуть ошибка RuntimeError. Чтобы устранить ее, добавь блок if __name__ == "__main__": перед кодом обучения.
Устройство определяется автоматически. Если доступна 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, устройствах 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 с официальными сборками 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.
Если указать несколько устройств (например, 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.shfrom 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 для обучения, используй параметр устройства -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 со следующими характеристиками:
- Более низкий текущий процент загрузки
- Больше доступной памяти (свободной видеопамяти)
Эта функция особенно полезна в общих вычислительных средах и при одновременном запуске нескольких задач обучения для разных моделей. Она автоматически адаптируется к меняющимся условиям системы и обеспечивает оптимальное распределение ресурсов без вмешательства пользователя.
Обучение на Apple Silicon с MPS#
Благодаря встроенной в модели Ultralytics YOLO поддержке чипов Apple Silicon теперь можно обучать модели на устройствах с использованием высокопроизводительной платформы Metal Performance Shaders (MPS). MPS позволяет эффективно выполнять вычисления и обработку изображений на фирменных чипах Apple.
Чтобы включить обучение на чипах Apple Silicon, укажи 'mps' в качестве устройства при запуске обучения. Ниже приведен пример для Python и командной строки:
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.
| Аргумент | Тип | По умолчанию | Описание |
|---|---|---|---|
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 или str | 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), Intel XPU (device=xpu:0), автоматический выбор свободного 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. Это может повысить эффективность и скорость, но повлиять на точность модели. Стандартный тренер YOLO использует rect=True для валидации задач обнаружения, сегментации, оценки позы и OBB независимо от этой настройки. |
multi_scale | float | 0.0 | Случайным образом изменяет imgsz для каждого пакета на +/- multi_scale (например, 0.25 -> 0.75x to 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"), чтобы включить обучение с учётом квантования INT8 (QAT). При дообучении применяется имитация квантования, чтобы веса подходили для экспорта в INT8. См. обучение с учётом квантования. |
fraction | float, int или list | 1.0 | Подмножество набора данных в виде доли/количества или списка [train, val, test]. 1 означает полное разбиение; целые числа больше 1 задают количество изображений. Только необязательный параметр test принимает 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). Не учитывается при использовании оптимизатора optimizer='auto' по умолчанию; чтобы применить этот параметр, укажи оптимизатор явно. |
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 | Вес компонента регрессии расстояний до рамки: распределённая фокальная функция потерь (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 использует схему one-to-many с 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 включает принудительно. При обучении на CPU или MPS всегда используется NCHW (True игнорируется с предупреждением). |
max_det | int | 300 | Максимальное количество обнаружений на изображение при валидации во время обучения. Для 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_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 | Применяет к изображению случайное перспективное преобразование, улучшая способность модели понимать объекты в 3D-пространстве. |
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, semantic, pose, obb | 0.0 - 1.0 | Объединяет фрагменты двух изображений, создавая частичное смешение при сохранении отдельных областей. Повышает устойчивость модели за счёт создания сценариев с перекрытием объектов. |
copy_paste | float | 0 | segment, semantic, obb | 0.0 - 1.0 | Доля подходящих объектов, которые вставляются; flip зеркально отражает их внутри изображения, а mixup также использует это значение как вероятность применения между изображениями. |
copy_paste_mode | str | flip | segment, semantic, 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.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' directoryTensorBoard запустится и откроет каталог, в котором сохранены журналы обучения.
Настроив журналатор, можно приступать к обучению модели. Все метрики обучения будут автоматически записываться на выбранной платформе. Ты сможешь просматривать журналы, чтобы отслеживать производительность модели с течением времени, сравнивать разные модели и находить возможности для улучшения.
Что дальше#
Проверь обученную модель на отложенных данных, чтобы оценить её точность в реальных условиях, а затем экспортируй её в ONNX, TensorRT или другой формат для развёртывания. Обучаешь модель на собственных данных, а не на COCO8? Сначала подготовь их, воспользовавшись руководством по наборам данных.
Часто задаваемые вопросы#
Да. Облачное обучение на платформе Ultralytics включает бесплатные кредиты для начала работы. Загрузи набор данных, выбери модель и GPU и обучай её прямо в браузере.
Для обучения модели обнаружения объектов с помощью Ultralytics YOLO26 можно использовать Python API или CLI. Ниже приведены примеры обоих способов:
Пример обучения на одной GPU и CPUfrom 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' в качестве устройства для обучения.
Пример обучения с MPSfrom 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Включает сохранение контрольных точек обучения и итоговых весов модели. Подробное руководство по настройкам обучения см. в разделе Настройки обучения.