Валидация моделей с Ultralytics YOLO
Введение
Валидация — это важный этап конвейера 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 ты можешь получить 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 можно настроить несколько аргументов для оптимизации процесса оценки. Эти аргументы управляют такими аспектами, как размер входного изображения, пакетная обработка и пороги производительности. Ниже приведена подробная разбивка каждого аргумента, которая поможет тебе эффективно настроить параметры валидации.
| Аргумент | Тип | По умолчанию | Описание |
|---|---|---|---|
data | str | None | Указывает путь к файлу конфигурации датасета (например, coco8.yaml). Этот файл должен содержать путь к валидационным данным. |
imgsz | int | 640 | Определяет размер входных изображений. Все изображения масштабируются до этого размера перед обработкой. Большие размеры могут повысить точность для мелких объектов, но увеличить время вычислений. |
batch | int | 16 | Задает количество изображений в батче. Более высокие значения эффективнее используют память GPU, но требуют больше VRAM. Регулируй в зависимости от ресурсов оборудования. |
save_json | bool | False | Если True, сохраняет результаты в JSON-файл для дальнейшего анализа, интеграции с другими инструментами или отправки на серверы оценки, такие как COCO. |
conf | float | 0.001 | Устанавливает минимальный порог уверенности для обнаружений. Низкие значения повышают полноту (recall), но могут увеличить количество ложных срабатываний. Используется во время валидации для вычисления кривых precision-recall. |
iou | float | 0.7 | Задает порог IoU (Intersection Over Union) для NMS. Управляет устранением дубликатов обнаружений. |
max_det | int | 300 | Ограничивает максимальное количество обнаружений на изображение. Полезно в перегруженных сценах для предотвращения избыточных обнаружений и управления вычислительными ресурсами. |
half | bool | False | Включает вычисления в половинной точности (FP16), снижая использование памяти и потенциально увеличивая скорость при минимальном влиянии на точность. |
device | str | None | Указывает устройство для валидации (cpu, cuda:0, npu, npu:0 и т.д.). Если None, автоматически выбирается лучшее доступное устройство. Несколько CUDA-устройств можно указать через запятую. |
dnn | bool | False | Если True, использует модуль OpenCV DNN для инференса ONNX-моделей, предоставляя альтернативу методам инференса PyTorch. |
plots | bool | True | Если True, создает и сохраняет графики предсказаний относительно ground truth, матрицы ошибок и PR-кривые для визуальной оценки работы модели. |
classes | list[int] | None | Указывает список ID классов для оценки. Полезно для фильтрации и фокусировки только на определенных классах при оценке. |
rect | bool | True | Если True, использует прямоугольный инференс для формирования батчей, сокращая паддинг и потенциально увеличивая скорость и эффективность за счет обработки изображений в их исходном соотношении сторон. |
split | str | 'val' | Определяет часть датасета для валидации (val, test или train). Позволяет гибко выбирать сегмент данных для оценки производительности. |
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 во время валидации, потенциально повышая точность обнаружения ценой скорости, выполняя инференс на трансформированных версиях входных данных. |
agnostic_nms | bool | False | Включает классово-независимый NMS, который объединяет перекрывающиеся рамки независимо от их предсказанного класса. Полезно для задач, сфокусированных на экземплярах объектов. Для end-to-end моделей (YOLO26, YOLOv10) это лишь предотвращает отображение одного и того же обнаружения с разными метками классов (дубликаты IoU=1.0) и не выполняет подавление на основе порога IoU между разными рамками. |
single_cls | bool | False | Рассматривает все классы как один при валидации. Полезно для оценки производительности модели в задачах бинарного обнаружения или когда различия между классами не важны. |
visualize | bool | False | Визуализирует ground truth, true positives, false positives и false negatives для каждого изображения. Полезно для отладки и интерпретации работы модели. |
compile | bool или str | False | Включает компиляцию графа PyTorch 2.x torch.compile с backend='inductor'. Принимает True → "default", False → отключает, или строковый режим, такой как "default", "reduce-overhead", "max-autotune-no-cudagraphs". При отсутствии поддержки возвращается к режиму eager с предупреждением. |
end2end | bool | None | Переопределяет 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
Приведенные ниже примеры демонстрируют валидацию моделей 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 в разных форматах, используя предоставленный код.
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
# 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 для получения дополнительной информации.