Link to this sectionВалидация моделей с помощью Ultralytics YOLO#
Link to this sectionВведение#
Валидация — это критически важный этап в пайплайне машинного обучения, позволяющий оценить качество обученных моделей. Режим Val в Ultralytics YOLO26 предоставляет мощный набор инструментов и метрик для оценки производительности твоих моделей обнаружения объектов. Это руководство послужит полным ресурсом для понимания того, как эффективно использовать режим Val, чтобы убедиться, что твои модели точны и надежны.
Watch: Ultralytics Modes Tutorial: Validation
Link to this sectionЗачем проводить валидацию с помощью Ultralytics YOLO?#
Вот почему использование режима Val в YOLO26 выгодно:
- Точность: Получай точные метрики, такие как mAP50, mAP75 и mAP50-95, для всесторонней оценки своей модели.
- Удобство: Используй встроенные функции, которые запоминают настройки обучения, упрощая процесс валидации.
- Гибкость: Валидируй модель на тех же или других наборах данных и при иных размерах изображений.
- Настройка гиперпараметров: Используй метрики валидации для тонкой настройки модели для достижения лучшей производительности.
Link to this sectionКлючевые особенности режима Val#
Вот примечательные функциональные возможности, предлагаемые режимом Val в YOLO26:
- Автоматизированные настройки: Модели запоминают свои конфигурации обучения для прямолинейной валидации.
- Поддержка нескольких метрик: Оценивай свою модель на основе ряда метрик точности.
- CLI и Python API: Выбирай между интерфейсом командной строки или Python API в зависимости от своих предпочтений при валидации.
- Совместимость данных: Беспрепятственно работает как с наборами данных, использованными на этапе обучения, так и с пользовательскими наборами.
- Модели YOLO26 автоматически запоминают свои настройки обучения, поэтому ты можешь легко валидировать модель при том же размере изображения и на исходном наборе данных с помощью команды
yolo val model=yolo26n.ptили методаYOLO("yolo26n.pt").val().
Link to this sectionПримеры использования#
Валидируй точность обученной модели YOLO26n на наборе данных 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 FNLink to this sectionАргументы для валидации моделей 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), но могут привести к большему количеству ложноположительных результатов. Используется во время валидации для вычисления кривых точности-полноты. По умолчанию 0.01 для валидации OBB для снижения использования памяти. |
iou | float | 0.7 | Устанавливает порог Intersection Over Union для немаксимального подавления. Контролирует устранение дублирующихся обнаружений. |
max_det | int | 300 | Ограничивает максимальное количество обнаружений на изображение. Полезно в плотных сценах для предотвращения чрезмерного количества обнаружений и управления вычислительными ресурсами. |
quantize | int или str | None | Точность валидации: 16/"fp16" включает валидацию в формате FP16 на поддерживаемых GPU; 32/"fp32"/не задано — это 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, генерирует и сохраняет графики предсказаний по сравнению с эталонными данными (ground truth), матрицы ошибок и PR-кривые для визуальной оценки производительности модели. |
classes | list[int] | None | Указывает список ID классов для оценки. Полезно для фильтрации и концентрации внимания только на определенных классах во время оценки. |
rect | bool | True | Если True, использует прямоугольный вывод (rectangular inference) для формирования батчей, что уменьшает дополнение (padding) и потенциально увеличивает скорость и эффективность за счет обработки изображений в их исходном соотношении сторон. |
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 | Включает класс-агностическое Non-Maximum Suppression, которое объединяет перекрывающиеся рамки независимо от их предсказанного класса. Полезно для задач, сфокусированных на экземплярах. Для моделей end-to-end (YOLO26, YOLOv10) это предотвращает появление одной и той же детекции с разными метками классов (дубликаты при IoU=1.0) и не выполняет подавление на основе IoU-порога между различными рамками. |
single_cls | bool | False | Во время валидации рассматривает все классы как один единственный класс. Полезно для оценки производительности модели на задачах бинарной детекции или когда различия между классами не важны. |
visualize | bool | False | Визуализирует ground truths, true positives, false positives и false negatives для каждого изображения. Полезно для отладки и интерпретации модели. |
show_labels | bool | True | Отображает метки классов на визуализациях валидации, если visualize=True. Установи False для более чистого вида совпадений и ошибок. |
show_conf | bool | True | Отображает оценки уверенности на визуализациях валидации, если visualize=True. Установи False для более чистого вида совпадений и ошибок. |
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-free вывод (YOLO26, YOLOv10). Установка значения False позволяет выполнять валидацию с использованием традиционного NMS-конвейера, дополнительно позволяя использовать аргумент iou. |
Каждая из этих настроек играет жизненно важную роль в процессе валидации, позволяя выполнять гибкую и эффективную оценку моделей YOLO. Корректировка этих параметров в соответствии с твоими конкретными потребностями и ресурсами поможет достичь наилучшего баланса между точностью и производительностью.
Link to this sectionПример валидации с аргументами#
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())Валидация сохраняет метрики точности, полноты, 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 | Оценка точности для изображения (tp / (tp + fp)). |
recall | Оценка полноты для изображения (tp / (tp + fn)). |
f1 | Гармоническое среднее точности и полноты. |
tp | Количество истинно положительных результатов для изображения. |
fp | Количество ложно положительных результатов для изображения. |
fn | Количество ложно отрицательных результатов для изображения. |
Эта функция доступна для задач обнаружения, сегментации, позы и OBB.
| Метод | Тип возвращаемого значения | Описание |
|---|---|---|
summary() | List[Dict[str, Any]] | Преобразует результаты валидации в сводный словарь. |
to_df() | DataFrame | Возвращает результаты валидации в виде структурированного Polars DataFrame. |
to_csv() | str | Экспортирует результаты валидации в формат CSV и возвращает строку CSV. |
to_json() | str | Экспортирует результаты валидации в формат JSON и возвращает строку JSON. |
Для получения более подробной информации смотри документацию по классу DataExportMixin.
Link to this sectionFAQ#
Link to this sectionКак мне валидировать свою модель 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 для получения полного списка параметров.
Link to this sectionКакие метрики я могу получить при валидации модели 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.
Link to this sectionВ чем преимущества использования Ultralytics YOLO для валидации?#
Использование Ultralytics YOLO для валидации дает несколько преимуществ:
- Точность: YOLO26 предлагает точные метрики производительности, включая mAP50, mAP75 и mAP50-95.
- Удобство: Модели запоминают свои настройки обучения, что делает валидацию простой.
- Гибкость: Ты можешь проводить валидацию на тех же или других наборах данных и размерах изображений.
- Настройка гиперпараметров: Метрики валидации помогают в тонкой настройке моделей для достижения лучшей производительности.
Эти преимущества гарантируют, что твои модели будут тщательно оценены и могут быть оптимизированы для достижения превосходных результатов. Узнай больше об этих преимуществах в разделе Зачем проводить валидацию с помощью Ultralytics YOLO.
Link to this sectionМогу ли я валидировать свою модель YOLO26 с помощью пользовательского набора данных?#
Да, ты можешь валидировать свою модель YOLO26 с помощью пользовательского набора данных. Укажи аргумент 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Для получения более широких возможностей настройки во время валидации см. раздел Пример валидации с аргументами.
Link to this sectionКак мне сохранить результаты валидации в файл 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 для получения более подробной информации.