Валидация моделей с Ultralytics YOLO#
Введение#
Валидация — важный этап конвейера машинного обучения, позволяющий оценить качество обученных моделей. Режим Val в Ultralytics YOLO26 предоставляет широкий набор инструментов и метрик для оценки производительности моделей обнаружения объектов. Это подробное руководство поможет разобраться, как эффективно использовать режим Val и убедиться, что модели точны и надёжны.
Предварительные результаты валидации см. в предварительном обзоре ещё не выпущенной YOLO27.
Смотри: Руководство по режимам Ultralytics: валидация
Зачем проводить валидацию с Ultralytics YOLO?#
Вот почему выгодно использовать режим Val в YOLO26:
- Точность: Получай точные метрики, такие как mAP50, mAP75 и mAP50-95, для всесторонней оценки модели.
- Удобство: Используй встроенные функции, которые запоминают настройки обучения и упрощают процесс валидации.
- Гибкость: Валидируй модель на тех же или других наборах данных и изображениях другого размера.
- Настройка гиперпараметров: Используй метрики валидации для точной настройки модели и повышения её производительности.
Ключевые возможности режима Val#
Вот основные функции режима Val в YOLO26:
- Автоматические настройки: Модели запоминают конфигурации обучения, что упрощает валидацию.
- Поддержка нескольких метрик: Оценивай модель по различным метрикам точности.
- CLI и Python API: Для валидации выбери интерфейс командной строки или Python API — в зависимости от своих предпочтений.
- Совместимость с данными: Работает с наборами данных, использовавшимися на этапе обучения, а также с пользовательскими наборами данных.
- Модели YOLO26 автоматически запоминают настройки обучения, поэтому
yolo val model=path/to/best.ptилиYOLO("path/to/best.pt").val()выполняет валидацию с размером изображения, использовавшимся при обучении, на исходном наборе данных. Для официальных весов используется набор данных по умолчанию для соответствующей задачи; передайdata, чтобы переопределить его.
Примеры использования#
Проверь точность обученной модели YOLO26n. Аргументы не нужны: model хранит настройки data и аргументы обучения в атрибутах модели, поэтому path/to/best.pt выполняет валидацию на наборе данных, на котором модель обучалась. В официальных весах записан путь к набору данных для обучения, которого нет на твоём компьютере, поэтому при появлении предупреждения используется coco8.yaml по умолчанию для соответствующей задачи. Передай data, чтобы выполнить валидацию на другом наборе данных. Полный список аргументов для валидации см. в разделе «Аргументы» ниже.
В Windows при запуске валидации в виде скрипта может появиться RuntimeError. Чтобы устранить эту проблему, добавь блок if __name__ == "__main__": перед кодом валидации.
from ultralytics import YOLO
# Загрузить модель
model = YOLO("yolo26n.pt") # загрузить официальную модель
model = YOLO("path/to/best.pt") # загрузить пользовательскую модель
# Валидировать модель
metrics = model.val() # аргументы не нужны, набор данных и настройки сохранены
metrics.box.map # map50-95
metrics.box.map50 # map50
metrics.box.map75 # map75
metrics.box.maps # список значений mAP50-95 для каждой категории
metrics.box.image_metrics # словарь метрик для каждого изображения: precision, recall, F1, TP, FP и FNАргументы для валидации модели YOLO#
При валидации моделей YOLO можно настроить несколько аргументов, чтобы оптимизировать процесс оценки. Эти аргументы задают такие параметры, как размер входного изображения, пакетная обработка и пороговые значения производительности. Ниже подробно разобран каждый аргумент, чтобы ты мог эффективно настроить валидацию.
| Аргумент | Тип | По умолчанию | Описание |
|---|---|---|---|
data | str | None | Задаёт путь к YAML-файлу датасета (например, coco8.yaml), в котором должен быть указан путь к валидационным данным. Для классификации вместо этого указывается каталог датасета или встроенное имя датасета (например, imagenet10). |
imgsz | int | 640 | Задаёт размер входных изображений. Перед обработкой все изображения приводятся к этому размеру. Большие размеры могут повысить точность для мелких объектов, но увеличивают время вычислений. |
batch | int | 16 | Задаёт количество изображений в пакете. Большие значения позволяют эффективнее использовать память GPU, но требуют больше VRAM. Выбирай значение с учётом доступных аппаратных ресурсов. |
save_json | bool | False | Если True, сохраняет результаты в файл JSON для дальнейшего анализа, интеграции с другими инструментами или отправки на серверы оценки, например COCO. Для датасетов детекции также оценивает предсказания с помощью faster-coco-eval и сообщает mAP для мелких, средних и крупных объектов; во время обучения эти значения записываются как metrics/mAP_small(B), metrics/mAP_medium(B) и metrics/mAP_large(B) в results.csv. |
conf | float | 0.001 | Задаёт минимальный порог уверенности для детекций. Низкие значения повышают полноту, но могут привести к большему количеству ложноположительных результатов. Кривые «точность–полнота», mAP и матрицы ошибок детекции используют это значение; более высокий conf, например 0.25, даёт матрицу, более близкую к выходу предсказания, но может снизить mAP. Итоговые показатели точности и полноты используют порог уверенности с максимальным F1, поэтому они могут отличаться от значений, рассчитанных по confusion_matrix.png. Для валидации OBB по умолчанию используется 0.01, чтобы снизить расход памяти. |
iou | float | 0.7 | Задаёт порог пересечения над объединением для подавления немаксимумов. Управляет удалением дублирующих детекций. |
max_det | int | 300 | Ограничивает максимальное количество детекций на изображение. Для detect, segment, pose и OBB, если оставить значение 300, оно увеличивается до наибольшего количества размеченных объектов в проверяемой части датасета, когда изображение содержит больше объектов; при этом выводится предупреждение. Любое другое значение сохраняется, а если на изображении объектов больше, выводится предупреждение о возможном ограничении полноты. |
quantize | int или str | None | Точность валидации: 16/"fp16" и 32/"fp32"/unset задают вычисления в FP16 или FP32 для моделей PyTorch и TorchScript (FP32 на CPU); для других форматов точность определяется артефактом модели и средой выполнения. На 16 OpenVINO по-прежнему округляет входные данные до FP16 на клиенте, а затем расширяет их обратно до FP32, не меняя точность среды выполнения. Квантование INT8/PTQ настраивается при экспорте, а затем применяется при валидации экспортированной модели. Заменяет устаревший флаг half. |
device | str | None | Задаёт устройство для валидации (cpu, cuda:0, npu, npu:0 и т. д.). Если указано None, автоматически выбирается лучшее доступное устройство. Несколько устройств CUDA можно указать через запятую. |
dnn | bool | False | Если True, использует модуль DNN OpenCV для инференса ONNX-модели — альтернативу методам инференса PyTorch. |
plots | bool | True | Если установлено значение True, создаёт и сохраняет графики предсказаний и эталонных данных, матрицы ошибок и PR-кривые для визуальной оценки производительности модели. |
classes | list[int] | None | Задаёт список ID классов для оценки. Полезно, если при оценке нужно отфильтровать классы и сосредоточиться только на некоторых из них. |
rect | bool | True | Если True, изображения с близкими соотношениями сторон группируются в прямоугольные батчи. Перед округлением каждого размера вверх до кратного шага добавляется половина шага (для semantic дополнительная половина шага не добавляется). При шаге 32 изображение размером 640×640 при imgsz=640 становится размером 672×672 со смещением 16 px, а в режиме predict используется размер 640×640, поэтому метрики могут различаться. rect=False соответствует режиму predict для квадратных изображений. Не применяется при depth, который растягивает изображения до квадрата размером imgsz. |
split | str | 'val' | Определяет часть датасета, используемую для валидации (val, test или train). Позволяет выбрать сегмент данных для оценки производительности. |
fraction | float, int или list | 1.0 | Подмножество проверяемой части датасета. Для списка [train, val, test] применяется элемент, соответствующий split (1 = вся часть датасета, целые числа больше 1 = количество изображений; для пропущенных элементов используется вся часть). Скалярное значение применяется только к split=train; тогда val и test используют всю часть датасета. |
project | str | None | Имя каталога проекта, в котором сохраняются результаты валидации. Помогает упорядочить результаты разных экспериментов или моделей. |
name | str | None | Имя запуска валидации. Используется для создания подкаталога в папке проекта, где хранятся журналы и результаты валидации. |
verbose | bool | True | Если True, показывает подробную информацию о процессе валидации, включая метрики по классам, прогресс обработки пакетов и дополнительные сведения для отладки. |
save_txt | bool | False | Если True, сохраняет результаты детекции в текстовые файлы — по одному файлу на изображение. Полезно для дальнейшего анализа, пользовательской постобработки или интеграции с другими системами. |
save_conf | bool | False | Если True, добавляет значения уверенности в сохраняемые текстовые файлы, когда включён параметр save_txt, предоставляя больше данных для анализа и фильтрации. |
workers | int | 8 | Количество рабочих потоков для загрузки данных. Большие значения могут ускорить предобработку данных, но повышают нагрузку на CPU. Значение 0 использует основной поток и может быть стабильнее в некоторых средах. |
augment | bool | False | Включает аугментацию во время тестирования (TTA) при валидации. Инференс на преобразованных версиях входных данных может повысить точность детекции, но замедляет работу. Доступно только для моделей Ultralytics на PyTorch. |
agnostic_nms | bool | False | Включает зависящее от класса подавление немаксимумов, подавляя перекрывающиеся рамки с более низкими оценками независимо от предсказанного класса. Полезно для приложений, ориентированных на отдельные объекты. При инференсе без NMS (nms=False на YOLO26 или YOLOv10) этот параметр только предотвращает появление одной и той же детекции с несколькими метками классов (дубликаты с IoU=1.0) и не подавляет разные рамки на основе порога IoU. |
single_cls | bool | False | Во время валидации рассматривает все классы как один класс. Полезно для оценки модели в задачах бинарной детекции или когда различия между классами не важны. |
visualize | bool | False | Визуализирует эталонные объекты, истинно-положительные, ложноположительные и ложноотрицательные результаты для каждого изображения. Полезно для отладки и интерпретации модели. |
show_labels | bool | True | Показывает метки классов на визуализациях валидации, если включён параметр visualize=True. Укажи False, чтобы нагляднее отображались совпадения и ошибки. |
show_conf | bool | True | Показывает оценки уверенности на визуализациях валидации, если включён параметр visualize=True. Укажи False, чтобы нагляднее отображались совпадения и ошибки. |
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) для нативной валидации PyTorch. None автоматически включает его на процессорах x86 с oneDNN в Linux и Windows при PyTorch 1.13 или новее, False отключает его, а True запрашивает его на поддерживаемых процессорах x86 или устройствах CUDA. Для ARM64, MPS, более старых версий PyTorch, процессоров без oneDNN и экспортированных форматов ничего не меняется; при валидации во время обучения сохраняется формат модели, используемый для обучения. |
nms | bool, необязательно | None | По умолчанию выполняет инференс по схеме «один ко многим» с NMS (None или True). Укажи False, чтобы использовать голову «один к одному» без NMS, если она доступна. Подробности см. в руководстве по сквозной детекции. |
Каждая из этих настроек играет важную роль в процессе валидации, позволяя гибко и эффективно оценивать модели YOLO. Настройка параметров с учётом твоих задач и ресурсов поможет найти оптимальный баланс между точностью и производительностью.
Пример валидации с аргументами#
Смотри: Как экспортировать результаты валидации модели в CSV, JSON, SQL, DataFrame Polars и другие форматы
В примерах ниже показана валидация модели YOLO с пользовательскими аргументами в Python и CLI.
from ultralytics import YOLO
# Загрузить модель
model = YOLO("yolo26n.pt")
# Настроить параметры валидации
metrics = model.val(data="coco8.yaml", imgsz=640, batch=16, conf=0.25, iou=0.7, device="0")Результаты ConfusionMatrix также можно сохранить в разных форматах с помощью приведённого кода.
from ultralytics import YOLO
model = YOLO("yolo26n.pt")
results = model.val(data="coco8.yaml", plots=True)
print(results.confusion_matrix.to_df())При валидации сохраняются метрики precision, recall, F1, TP, FP и FN для каждого изображения (при пороге IoU 0.5) во всех задачах, кроме классификации. После завершения валидации получи к ним доступ через results.box.image_metrics для детекции и OBB, через results.seg.image_metrics для сегментации и через results.pose.image_metrics для поз.
from ultralytics import YOLO
# Загрузить модель
model = YOLO("yolo26n.pt")
# Валидировать модель и получить метрики для каждого изображения
results = model.val(data="coco8.yaml")
# image_metrics — это словарь, в котором ключами служат имена файлов изображений
print(results.box.image_metrics)
# Output: {'image1.jpg': {'precision': 0.85, 'recall': 0.92, 'f1': 0.88, 'tp': 17, 'fp': 3, 'fn': 1}, ...}
# Получить метрики для конкретного изображения
results.box.image_metrics["image1.jpg"] # {'precision': 0.85, 'recall': 0.92, 'f1': 0.88, 'tp': 17, 'fp': 3, 'fn': 1}Каждая запись в image_metrics содержит следующие ключи:
| Ключ | Описание |
|---|---|
precision | Оценка precision для изображения (tp / (tp + fp)). |
recall | Оценка recall для изображения (tp / (tp + fn)). |
f1 | Гармоническое среднее precision и recall. |
tp | Количество истинно положительных результатов для изображения. |
fp | Количество ложноположительных результатов для изображения. |
fn | Количество ложноотрицательных результатов для изображения. |
Эта функция доступна для задач детекции, сегментации, поз и OBB.
Объект возвращаемых метрик также предоставляет вспомогательные методы экспорта для дальнейшего анализа:
| Метод | Тип возвращаемого значения | Описание |
|---|---|---|
summary() | List[Dict[str, Any]] | Преобразует результаты валидации в сводный словарь. |
to_df() | DataFrame | Возвращает результаты валидации в виде структурированного DataFrame Polars. |
to_csv() | str | Экспортирует результаты валидации в формате CSV и возвращает строку CSV. |
to_json() | str | Экспортирует результаты валидации в формате JSON и возвращает строку JSON. |
Подробнее см. в документации класса DataExportMixin.
Что дальше#
Устраивают метрики? Экспортируй модель в формат для развёртывания. Если точность недостаточна, вернись к обучению, использовав другие гиперпараметры или больше обучающих данных.
Часто задаваемые вопросы#
Чтобы валидировать модель YOLO26, используй режим Val от Ultralytics. Например, с помощью Python API можно загрузить модель и запустить валидацию:
from ultralytics import YOLO # Загрузить модель model = YOLO("yolo26n.pt") # Валидировать модель metrics = model.val() print(metrics.box.map) # map50-95Вместо этого можно воспользоваться интерфейсом командной строки (CLI):
yolo detect val model=yolo26n.pt data=coco8.yamlЧтобы дополнительно настроить валидацию, можно изменить различные аргументы, например
imgsz,batchиconf, как в режиме Python, так и в CLI. Полный список параметров см. в разделе «Аргументы для валидации модели YOLO».Для оценки производительности модели валидация YOLO26 предоставляет несколько ключевых метрик. К ним относятся:
- mAP50 (средняя точность при пороге IoU 0.5)
- mAP75 (средняя точность при пороге IoU 0.75)
- mAP50-95 (средняя точность по нескольким порогам IoU от 0.5 до 0.95)
С помощью Python API получить эти метрики можно так:
metrics = model.val() # предполагается, что `model` уже загружена print(metrics.box.map) # mAP50-95 print(metrics.box.map50) # mAP50 print(metrics.box.map75) # mAP75 print(metrics.box.maps) # список значений mAP50-95 для каждой категории print(metrics.box.image_metrics) # словарь метрик для каждого изображения: precision, recall, F1, TP, FP и FNДля полной оценки производительности важно проанализировать все эти метрики. Подробнее см. в разделе «Ключевые возможности режима Val».
Использование Ultralytics YOLO для валидации даёт несколько преимуществ:
- Точность: YOLO26 предоставляет точные метрики производительности, включая mAP50, mAP75 и mAP50-95.
- Удобство: Модели запоминают настройки обучения, что упрощает валидацию.
- Гибкость: Можно проводить валидацию на тех же или других наборах данных и изображениях другого размера.
- Настройка гиперпараметров: Метрики валидации помогают точнее настраивать модели для повышения производительности.
Эти преимущества позволяют тщательно оценивать модели и оптимизировать их для достижения лучших результатов. Подробнее о преимуществах читай в разделе «Зачем проводить валидацию с Ultralytics YOLO».
Да, модель YOLO26 можно валидировать на пользовательском наборе данных. Укажи аргумент
dataсо ссылкой на YAML-файл набора данных, в котором должен быть указан путь к данным для валидации. Для классификации вместо этого укажи каталог набора данных или название встроенного набора данных (например,imagenet10).ПримечаниеВалидация выполняется с использованием имён классов самой модели, которые можно посмотреть с помощью
model.names; они могут отличаться от имён, заданных в самом наборе данных.Пример на Python:
from ultralytics import YOLO # Загрузить модель model = YOLO("yolo26n.pt") # Валидировать на пользовательском наборе данных metrics = model.val(data="path/to/your/custom_dataset.yaml") print(metrics.box.map) # map50-95Пример с использованием CLI:
yolo val model=yolo26n.pt data=path/to/your/custom_dataset.yamlДругие параметры настройки валидации см. в разделе «Пример валидации с аргументами».
Чтобы сохранить результаты валидации в файл JSON, при запуске валидации задай аргумент
save_jsonравнымTrue. Это можно сделать как через Python API, так и через CLI.Пример на Python:
from ultralytics import YOLO # Загрузить модель model = YOLO("yolo26n.pt") # Сохранить результаты валидации в JSON metrics = model.val(save_json=True)Пример с использованием CLI:
yolo val model=yolo26n.pt save_json=TrueДля наборов данных детекции
save_json=Trueтакже сообщает mAP для маленьких, средних и больших объектов с помощьюfaster-coco-eval. Подробнее см. в разделе «Аргументы для валидации модели YOLO».