YOLO Vision 2026:

Валидация моделей с помощью Ultralytics YOLO#

Ultralytics YOLO ecosystem and integrations

Введение#

Валидация — это важнейший этап в конвейере машинного обучения, позволяющий оценить качество обученных моделей. Режим 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

В 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Указывает путь к YAML-файлу датасета (например, coco8.yaml), который должен включать путь к данным валидации. Для классификации вместо этого указывается каталог датасета или встроенное имя датасета (например, imagenet10).
imgszint640Определяет размер входных изображений. Все изображения изменяются до этого размера перед обработкой. Большие размеры могут улучшить точность для маленьких объектов, но увеличивают время вычислений.
batchint16Устанавливает количество изображений на пакет. Более высокие значения более эффективно используют память GPU, но требуют больше VRAM. Регулируй в зависимости от имеющихся аппаратных ресурсов.
save_jsonboolFalseЕсли True, сохраняет результаты в файл JSON для дальнейшего анализа, интеграции с другими инструментами или отправки на сервера оценки, такие как COCO.
conffloat0.001Устанавливает минимальный порог уверенности для обнаружений. Более низкие значения увеличивают полноту (recall), но могут приводить к большему количеству ложноположительных срабатываний. Кривые «точность-полнота» по умолчанию используют 0.001; матрицы ошибок обнаружения используют явное значение conf или 0.25, если оно опущено. Сводные точность и полнота используют уверенность на основе max-F1, поэтому они могут отличаться от значений, полученных из confusion_matrix.png. По умолчанию для валидации OBB используется 0.01 для снижения потребления памяти.
ioufloat0.7Устанавливает порог пересечения над объединением для немаксимального подавления. Управляет устранением дубликатов обнаружения.
max_detint300Ограничивает максимальное количество обнаружений на изображение. Полезно в плотных сценах для предотвращения чрезмерного количества обнаружений и управления вычислительными ресурсами.
quantizeint или strNoneТочность валидации: 16/"fp16" включает валидацию FP16 на поддерживаемых GPU; 32/"fp32"/не задано — это FP32. Квантование INT8/PTQ настраивается при экспорте, а затем используется путем валидации экспортированной модели. Заменяет устаревший флаг half.
devicestrNoneЗадает устройство для валидации (cpu, cuda:0, npu, npu:0 и т.д.). Когда None, автоматически выбирает лучшее из доступных устройств. Несколько устройств CUDA можно указать через запятую.
dnnboolFalseЕсли True, использует модуль DNN OpenCV для инференса моделей ONNX, предлагая альтернативу методам инференса PyTorch.
plotsboolTrueЕсли установлено значение True, генерирует и сохраняет графики предсказаний по сравнению с истинными данными (ground truth), матрицы ошибок и PR-кривые для визуальной оценки производительности модели.
classeslist[int]NoneУказывает список ID классов для оценки. Полезно для фильтрации и концентрации внимания только на определенных классах во время оценки.
rectboolTrueЕсли True, то используется прямоугольный вывод для батчинга, что уменьшает заполнение и потенциально повышает скорость и эффективность за счет обработки изображений в их исходном соотношении сторон. Игнорируется для валидации depth, которая растягивает каждое изображение до фиксированного квадрата imgsz вместо заполнения.
splitstr'val'Определяет сплит датасета для использования при валидации (val, test или train). Обеспечивает гибкость в выборе сегмента данных для оценки производительности.
projectstrNoneИмя директории проекта, куда сохраняются результаты валидации. Помогает упорядочить результаты разных экспериментов или моделей.
namestrNoneИмя прогона валидации. Используется для создания подпапки внутри папки проекта, где хранятся логи и результаты валидации.
verboseboolTrueЕсли True, отображает подробную информацию в процессе валидации, включая метрики по классам, прогресс батча и дополнительную отладочную информацию.
save_txtboolFalseЕсли True, сохраняет результаты обнаружения в текстовых файлах (по одному файлу на изображение), что полезно для дальнейшего анализа, пользовательской постобработки или интеграции с другими системами.
save_confboolFalseЕсли True, включает значения уверенности в сохраняемые текстовые файлы при включенном save_txt, обеспечивая более подробный вывод для анализа и фильтрации.
workersint8Количество рабочих потоков для загрузки данных. Более высокие значения могут ускорить предварительную обработку данных, но могут увеличить нагрузку на CPU. Установка значения 0 использует основной поток, что в некоторых средах может быть стабильнее.
augmentboolFalseВключает аугментацию во время тестирования (TTA) при валидации, потенциально повышая точность обнаружения за счет снижения скорости инференса путем запуска инференса на преобразованных версиях входных данных. Доступно только для моделей Ultralytics PyTorch.
agnostic_nmsboolFalseВключает классово-агностическое подавление неглавных максимумов, подавляя перекрывающиеся боксы с более низким скором независимо от их предсказанного класса. Полезно для приложений, ориентированных на инстансы. Для моделей «end-to-end» (YOLO26, YOLOv10) это лишь предотвращает появление одного и того же детектирования с несколькими метками классов (дубликаты с IoU=1.0) и не выполняет подавление на основе порога IoU между различными боксами.
single_clsboolFalseВо время валидации рассматривает все классы как один единственный класс. Полезно для оценки производительности модели на задачах бинарной детекции или когда различия между классами не важны.
visualizeboolFalseВизуализирует ground truths, true positives, false positives и false negatives для каждого изображения. Полезно для отладки и интерпретации модели.
show_labelsboolTrueОтображает метки классов в визуализациях валидации при visualize=True. Установите False для более чистого просмотра совпадений и ошибок.
show_confboolTrueОтображает оценки уверенности в визуализациях валидации при visualize=True. Установите False для более чистого просмотра совпадений и ошибок.
compilebool или strFalseВключает компиляцию графа PyTorch 2.x torch.compile с помощью backend='inductor'. Принимает True"default", False → отключает или строковый режим, такой как "default", "reduce-overhead", "max-autotune-no-cudagraphs". При неподдерживаемости возвращается к жадному режиму (eager) с предупреждением.
channels_lastboolFalseИспользует формат памяти channels_last (NHWC) для свёрток во время валидации, ускоряя работу GPU с CUDA Tensor Core без изменения результатов. Применяется только к нативным моделям PyTorch; игнорируется для CPU, MPS и экспортированных форматов, таких как TensorRT и ONNX.
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())
Точность, полнота и F1 для каждого изображения

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

Комментарии