Валидация моделей с помощью Ultralytics YOLO#
Введение#
Валидация — это важнейший этап в конвейере машинного обучения, позволяющий оценить качество обученных моделей. Режим Val в Ultralytics YOLO26 предоставляет надежный набор инструментов и метрик для оценки производительности твоих моделей обнаружения объектов. Это руководство служит полным ресурсом для понимания того, как эффективно использовать режим Val, чтобы убедиться в точности и надежности твоих моделей.
Watch: Ultralytics Modes Tutorial: Validation
Зачем проводить валидацию с помощью Ultralytics YOLO?#
Вот почему использование режима Val в YOLO26 выгодно:
- Точность: Получай точные метрики, такие как mAP50, mAP75 и mAP50-95, для всесторонней оценки своей модели.
- Удобство: Используй встроенные функции, которые запоминают настройки обучения, упрощая процесс валидации.
- Гибкость: Валидируй модель на тех же или других наборах данных и при иных размерах изображений.
- Тюнинг гиперпараметров: Используй метрики валидации для точной настройки модели с целью повышения производительности.
Ключевые особенности режима Val#
Вот примечательные функциональные возможности, предлагаемые режимом Val в YOLO26:
- Автоматизированные настройки: Модели запоминают свои конфигурации обучения для прямолинейной валидации.
- Поддержка нескольких метрик: Оценивай свою модель на основе ряда метрик точности.
- CLI и Python API: Выбирай между интерфейсом командной строки или Python API в зависимости от своих предпочтений при валидации.
- Совместимость данных: Беспрепятственно работает как с наборами данных, использованными на этапе обучения, так и с пользовательскими наборами.
- Модели YOLO26 автоматически запоминают свои параметры обучения, поэтому ты можешь легко валидировать модель с тем же размером изображения и на исходном датасете, используя просто
yolo val model=yolo26n.ptилиYOLO("yolo26n.pt").val()
Примеры использования#
Проверь точность обученной модели 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 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. |
conf | float | 0.001 | Устанавливает минимальный порог уверенности для обнаружений. Более низкие значения увеличивают полноту (recall), но могут приводить к большему количеству ложноположительных срабатываний. Кривые «точность-полнота» по умолчанию используют 0.001; матрицы ошибок обнаружения используют явное значение conf или 0.25, если оно опущено. Сводные точность и полнота используют уверенность на основе max-F1, поэтому они могут отличаться от значений, полученных из confusion_matrix.png. По умолчанию для валидации OBB используется 0.01 для снижения потребления памяти. |
iou | float | 0.7 | Устанавливает порог пересечения над объединением для немаксимального подавления. Управляет устранением дубликатов обнаружения. |
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, то используется прямоугольный вывод для батчинга, что уменьшает заполнение и потенциально повышает скорость и эффективность за счет обработки изображений в их исходном соотношении сторон. Игнорируется для валидации depth, которая растягивает каждое изображение до фиксированного квадрата imgsz вместо заполнения. |
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) при валидации, потенциально повышая точность обнаружения за счет снижения скорости инференса путем запуска инференса на преобразованных версиях входных данных. Доступно только для моделей Ultralytics PyTorch. |
agnostic_nms | bool | False | Включает классово-агностическое подавление неглавных максимумов, подавляя перекрывающиеся боксы с более низким скором независимо от их предсказанного класса. Полезно для приложений, ориентированных на инстансы. Для моделей «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) с предупреждением. |
channels_last | bool | False | Использует формат памяти channels_last (NHWC) для свёрток во время валидации, ускоряя работу GPU с CUDA Tensor Core без изменения результатов. Применяется только к нативным моделям PyTorch; игнорируется для CPU, MPS и экспортированных форматов, таких как TensorRT и ONNX. |
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())Валидация сохраняет метрики точности, полноты, 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.
Что дальше#
Доволен метриками? Экспортируй модель в формат развертывания. Если точность не устраивает, вернись и переобучи с другими гиперпараметрами или большим количеством тренировочных данных.
FAQ#
Чтобы валидировать свою модель 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 предоставляет несколько ключевых метрик для оценки производительности модели. К ним относятся:
- 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 для валидации дает несколько преимуществ:
- Точность: YOLO26 предлагает точные метрики производительности, включая mAP50, mAP75 и mAP50-95.
- Удобство: Модели запоминают свои настройки обучения, что делает валидацию простой.
- Гибкость: Ты можешь проводить валидацию на тех же или других наборах данных и размерах изображений.
- Настройка гиперпараметров: Метрики валидации помогают в тонкой настройке моделей для достижения лучшей производительности.
Эти преимущества гарантируют тщательную оценку твоих моделей и позволяют оптимизировать их для достижения наилучших результатов. Узнай больше об этих преимуществах в разделе Почему стоит проводить валидацию с Ultralytics YOLO.
Да, ты можешь валидировать свою модель YOLO26, используя пользовательский датасет. Укажи аргумент
dataс путем к YAML-файлу твоего датасета, который должен содержать путь к данным валидации. Для классификации вместо этого передается каталог датасета или встроенное имя датасета (например,imagenet10).ПримечаниеВалидация выполняется с использованием собственных имен классов модели, которые ты можешь посмотреть с помощью
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, при запуске валидации ты можешь установить аргумент
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.