Валидация моделей с Ultralytics YOLO

Ultralytics YOLO ecosystem and integrations

Введение

Валидация — это важный этап конвейера machine learning, позволяющий оценить качество обученных моделей. Режим Val в Ultralytics YOLO26 предоставляет мощный набор инструментов и метрик для оценки производительности твоих моделей object detection. Это руководство послужит полным ресурсом для понимания того, как эффективно использовать режим Val, чтобы убедиться в точности и надежности твоих моделей.



Watch: Ultralytics Modes Tutorial: Validation

Почему стоит проводить валидацию с Ultralytics YOLO?

Вот почему использование режима Val в YOLO26 выгодно:

  • Точность (Precision): Получай точные метрики, такие как mAP50, mAP75 и mAP50-95, для всесторонней оценки своей модели.
  • Удобство: Используй встроенные функции, которые запоминают настройки обучения, упрощая процесс валидации.
  • Гибкость: Проводи валидацию модели на тех же или других наборах данных и размерах изображений.
  • Hyperparameter Tuning: Используй метрики валидации для донастройки модели для достижения лучшей производительности.

Ключевые особенности режима Val

Вот заметные функциональные возможности, предлагаемые режимом Val в YOLO26:

  • Автоматизированные настройки: Модели запоминают свои конфигурации обучения для упрощенной валидации.
  • Поддержка нескольких метрик: Оценивай свою модель на основе ряда метрик точности.
  • CLI и Python API: Выбирай между интерфейсом командной строки или Python API в зависимости от своих предпочтений для валидации.
  • Совместимость данных: Отлично работает как с наборами данных, использованными во время фазы обучения, так и с пользовательскими наборами.
Совет
  • Модели YOLO26 автоматически запоминают свои настройки обучения, поэтому ты можешь легко провести валидацию модели при том же размере изображения и на исходном наборе данных с помощью команды yolo val model=yolo26n.pt или метода YOLO("yolo26n.pt").val()

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

Проведи валидацию обученной модели YOLO26n на предмет accuracy на наборе данных COCO8. Никакие аргументы не требуются, так как model сохраняет свои data обучения и аргументы в качестве атрибутов модели. Смотри раздел «Аргументы» ниже для получения полного списка аргументов валидации.

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

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

Пример
from ultralytics import YOLO

# Load a model
model = YOLO("yolo26n.pt")  # load an official model
model = YOLO("path/to/best.pt")  # load a custom model

# Validate the model
metrics = model.val()  # no arguments needed, dataset and settings remembered
metrics.box.map  # map50-95
metrics.box.map50  # map50
metrics.box.map75  # map75
metrics.box.maps  # a list containing mAP50-95 for each category
metrics.box.image_metrics  # per-image metrics dictionary with precision, recall, F1, TP, FP, and FN

Аргументы для валидации моделей YOLO

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

АргументТипПо умолчаниюОписание
datastrNoneУказывает путь к файлу конфигурации датасета (например, coco8.yaml). Этот файл должен содержать путь к валидационным данным.
imgszint640Определяет размер входных изображений. Все изображения масштабируются до этого размера перед обработкой. Большие размеры могут повысить точность для мелких объектов, но увеличить время вычислений.
batchint16Задает количество изображений в батче. Более высокие значения эффективнее используют память GPU, но требуют больше VRAM. Регулируй в зависимости от ресурсов оборудования.
save_jsonboolFalseЕсли True, сохраняет результаты в JSON-файл для дальнейшего анализа, интеграции с другими инструментами или отправки на серверы оценки, такие как COCO.
conffloat0.001Устанавливает минимальный порог уверенности для обнаружений. Низкие значения повышают полноту (recall), но могут увеличить количество ложных срабатываний. Используется во время валидации для вычисления кривых precision-recall.
ioufloat0.7Задает порог IoU (Intersection Over Union) для NMS. Управляет устранением дубликатов обнаружений.
max_detint300Ограничивает максимальное количество обнаружений на изображение. Полезно в перегруженных сценах для предотвращения избыточных обнаружений и управления вычислительными ресурсами.
halfboolFalseВключает вычисления в половинной точности (FP16), снижая использование памяти и потенциально увеличивая скорость при минимальном влиянии на точность.
devicestrNoneУказывает устройство для валидации (cpu, cuda:0, npu, npu:0 и т.д.). Если None, автоматически выбирается лучшее доступное устройство. Несколько CUDA-устройств можно указать через запятую.
dnnboolFalseЕсли True, использует модуль OpenCV DNN для инференса ONNX-моделей, предоставляя альтернативу методам инференса PyTorch.
plotsboolTrueЕсли True, создает и сохраняет графики предсказаний относительно ground truth, матрицы ошибок и PR-кривые для визуальной оценки работы модели.
classeslist[int]NoneУказывает список ID классов для оценки. Полезно для фильтрации и фокусировки только на определенных классах при оценке.
rectboolTrueЕсли True, использует прямоугольный инференс для формирования батчей, сокращая паддинг и потенциально увеличивая скорость и эффективность за счет обработки изображений в их исходном соотношении сторон.
splitstr'val'Определяет часть датасета для валидации (val, test или train). Позволяет гибко выбирать сегмент данных для оценки производительности.
projectstrNoneИмя директории проекта, куда сохраняются результаты валидации. Помогает организовать результаты разных экспериментов или моделей.
namestrNoneИмя запуска валидации. Используется для создания подпапки в директории проекта, где хранятся логи и результаты валидации.
verboseboolTrueЕсли True, отображает подробную информацию в процессе валидации, включая метрики по классам, прогресс по батчам и дополнительную отладочную информацию.
save_txtboolFalseЕсли True, сохраняет результаты обнаружения в текстовые файлы (по одному файлу на изображение), что полезно для анализа, обработки или интеграции с другими системами.
save_confboolFalseЕсли True, включает показатели уверенности в сохраненные текстовые файлы при включенном save_txt, предоставляя более подробный вывод для анализа и фильтрации.
workersint8Количество рабочих потоков для загрузки данных. Более высокие значения могут ускорить препроцессинг, но увеличить нагрузку на CPU. Установка 0 использует основной поток, что в некоторых окружениях стабильнее.
augmentboolFalseВключает TTA во время валидации, потенциально повышая точность обнаружения ценой скорости, выполняя инференс на трансформированных версиях входных данных.
agnostic_nmsboolFalseВключает классово-независимый NMS, который объединяет перекрывающиеся рамки независимо от их предсказанного класса. Полезно для задач, сфокусированных на экземплярах объектов. Для end-to-end моделей (YOLO26, YOLOv10) это лишь предотвращает отображение одного и того же обнаружения с разными метками классов (дубликаты IoU=1.0) и не выполняет подавление на основе порога IoU между разными рамками.
single_clsboolFalseРассматривает все классы как один при валидации. Полезно для оценки производительности модели в задачах бинарного обнаружения или когда различия между классами не важны.
visualizeboolFalseВизуализирует ground truth, true positives, false positives и false negatives для каждого изображения. Полезно для отладки и интерпретации работы модели.
compilebool или strFalseВключает компиляцию графа PyTorch 2.x torch.compile с backend='inductor'. Принимает True"default", False → отключает, или строковый режим, такой как "default", "reduce-overhead", "max-autotune-no-cudagraphs". При отсутствии поддержки возвращается к режиму eager с предупреждением.
end2endboolNoneПереопределяет end-to-end режим в моделях YOLO, поддерживающих инференс без NMS (YOLO26, YOLOv10). Установка False позволяет запустить валидацию через традиционный NMS-конвейер, дополнительно позволяя использовать аргумент iou.

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

Пример валидации с аргументами



Watch: How to Export Model Validation Results in CSV, JSON, SQL, Polars DataFrame & More

Explore model validation and different export methods in Google Colab

Приведенные ниже примеры демонстрируют валидацию моделей YOLO с пользовательскими аргументами в Python и CLI.

Пример
from ultralytics import YOLO

# Load a model
model = YOLO("yolo26n.pt")

# Customize validation settings
metrics = model.val(data="coco8.yaml", imgsz=640, batch=16, conf=0.25, iou=0.7, device="0")
Экспорт ConfusionMatrix

Ты также можешь сохранить результаты 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 для каждого изображения

Валидация сохраняет метрики 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

# Load a model
model = YOLO("yolo26n.pt")

# Validate and access per-image metrics
results = model.val(data="coco8.yaml")

# image_metrics is a dictionary with image filenames as keys
print(results.box.image_metrics)
# Output: {'image1.jpg': {'precision': 0.85, 'recall': 0.92, 'f1': 0.88, 'tp': 17, 'fp': 3, 'fn': 1}, ...}

# Access metrics for a specific image
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Количество true positives для изображения.
fpКоличество false positives для изображения.
fnКоличество false negatives для изображения.

Эта функция доступна для задач детекции, сегментации, позы и OBB.

МетодТип возвращаемого значенияОписание
summary()List[Dict[str, Any]]Преобразует результаты валидации в обобщенный словарь.
to_df()DataFrameВозвращает результаты валидации в виде структурированного Polars DataFrame.
to_csv()strЭкспортирует результаты валидации в формате CSV и возвращает строку CSV.
to_json()strЭкспортирует результаты валидации в формате JSON и возвращает строку JSON.

Для получения более подробной информации смотри документацию класса DataExportMixin.

Часто задаваемые вопросы (FAQ)

Как мне проверить мою модель YOLO26 с помощью Ultralytics?

Чтобы проверить свою модель YOLO26, ты можешь использовать режим Val, предоставляемый Ultralytics. Например, используя Python API, ты можешь загрузить модель и запустить валидацию с помощью:

from ultralytics import YOLO

# Load a model
model = YOLO("yolo26n.pt")

# Validate the model
metrics = model.val()
print(metrics.box.map)  # map50-95

Альтернативно ты можешь использовать интерфейс командной строки (CLI):

yolo val model=yolo26n.pt

Для дополнительной настройки ты можешь изменять различные аргументы, такие как imgsz, batch и conf как в Python, так и в режимах CLI. Проверь раздел Аргументы для валидации моделей YOLO для получения полного списка параметров.

Какие метрики я могу получить при валидации модели YOLO26?

Валидация моделей YOLO26 предоставляет несколько ключевых метрик для оценки производительности модели. К ним относятся:

  • mAP50 (средняя точность при пороге IoU 0.5)
  • mAP75 (средняя точность при пороге IoU 0.75)
  • mAP50-95 (средняя точность по нескольким порогам IoU от 0.5 до 0.95)

Используя Python API, ты можешь получить доступ к этим метрикам следующим образом:

metrics = model.val()  # assumes `model` has been loaded
print(metrics.box.map)  # mAP50-95
print(metrics.box.map50)  # mAP50
print(metrics.box.map75)  # mAP75
print(metrics.box.maps)  # list of mAP50-95 for each category
print(metrics.box.image_metrics)  # per-image metrics dictionary with precision, recall, F1, TP, FP, and FN

Для полной оценки производительности важно рассмотреть все эти метрики. Для получения более подробной информации обратись к разделу Ключевые особенности режима Val.

Каковы преимущества использования Ultralytics YOLO для валидации?

Использование Ultralytics YOLO для валидации дает несколько преимуществ:

  • Precision: YOLO26 предлагает точные метрики производительности, включая mAP50, mAP75 и mAP50-95.
  • Удобство: Модели запоминают свои настройки обучения, что делает валидацию простой.
  • Гибкость: Ты можешь проводить валидацию на тех же или других наборах данных и размерах изображений.
  • Настройка гиперпараметров: Метрики валидации помогают в донастройке моделей для достижения лучшей производительности.

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

Могу ли я проверить свою модель YOLO26, используя собственный набор данных?

Да, ты можешь проверить свою модель YOLO26, используя custom dataset. Укажи аргумент data с путем к файлу конфигурации твоего набора данных. Этот файл должен включать путь к validation data.

Примечание

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

Пример на Python:

from ultralytics import YOLO

# Load a model
model = YOLO("yolo26n.pt")

# Validate with a custom dataset
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 в YOLO26?

Чтобы сохранить результаты валидации в файл JSON, ты можешь установить аргумент save_json в значение True при запуске валидации. Это можно сделать как в Python API, так и в CLI.

Пример на Python:

from ultralytics import YOLO

# Load a model
model = YOLO("yolo26n.pt")

# Save validation results to JSON
metrics = model.val(save_json=True)

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

yolo val model=yolo26n.pt save_json=True

Эта функциональность особенно полезна для дальнейшего анализа или интеграции с другими инструментами. Проверь Аргументы для валидации моделей YOLO для получения дополнительной информации.

Комментарии