Ultralytics YOLO27:

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

Ultralytics YOLO ecosystem and integrations

Введение#

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

Смотри предварительный просмотр невыпущенного YOLO27 для получения предварительных результатов валидации.



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. На датасетах обнаружения она также оценивает предсказания с помощью faster-coco-eval и сообщает mAP для малых, средних и больших объектов, регистрируемый во время обучения как metrics/mAP_small(B), metrics/mAP_medium(B) и metrics/mAP_large(B) в results.csv.
conffloat0.001Задает минимальный порог уверенности для обнаружений. Меньшие значения повышают полноту, но могут привести к появлению большего числа ложноположительных результатов. По умолчанию кривые precision-recall используют 0.001; матрицы ошибок обнаружения используют явное значение conf или 0.25, если оно не задано. Сводные значения precision и recall используют уверенность при максимальном F1, поэтому они могут отличаться от значений, рассчитанных на основе confusion_matrix.png. Для валидации OBB по умолчанию используется 0.01, чтобы снизить потребление памяти.
ioufloat0.7Задает порог пересечения по объединению для подавления немаксимумов. Управляет устранением дублирующихся обнаружений.
max_detint300Ограничивает максимальное количество обнаружений на изображение. Для задач детекции, сегментации, позы и OBB при значении по умолчанию 300 оно увеличивается до наибольшего количества объектов с разметкой в валидационном наборе данных, если изображение превышает его, с выводом предупреждения; любое другое значение сохраняется с предупреждением о том, что полнота (recall) может быть ограничена при превышении лимита изображением.
quantizeint или strNoneТочность валидации: 16/"fp16" и 32/"fp32"/не задано выбирают вычисления FP16 или FP32 для моделей PyTorch и TorchScript; остальные форматы выполняют вычисления с точностью, выбранной их артефактом и средой выполнения. При 16 OpenVINO по-прежнему выполняет FP16-округление входных данных на клиенте и расширяет их обратно до FP32, не меняя то, с какой точностью выполняет вычисления среда выполнения. Квантование INT8/PTQ настраивается во время экспорта, а затем используется путем валидации экспортированной модели. Заменяет устаревший флаг half.
devicestrNoneУказывает устройство для валидации (cpu, cuda:0, npu, npu:0 и т. д.). Если задано None, автоматически выбирается лучшее доступное устройство. Несколько устройств CUDA можно указать через запятую.
dnnboolFalseЕсли True, использует модуль DNN OpenCV для инференса моделей ONNX, предоставляя альтернативу методам инференса PyTorch.
plotsboolTrueЕсли задано True, создает и сохраняет графики предсказаний и истинных значений, матрицы ошибок и PR-кривые для визуальной оценки производительности модели.
classeslist[int]NoneУказывает список идентификаторов классов для оценки. Полезно для фильтрации и фокусировки только на определенных классах во время оценки.
rectboolTrueЕсли True, использует прямоугольный инференс при пакетной обработке, уменьшая дополнение и потенциально повышая скорость и эффективность за счет обработки изображений с исходным соотношением сторон. Не применяется при валидации depth, которая растягивает каждое изображение до фиксированного квадратного размера imgsz вместо дополнения.
splitstr'val'Определяет раздел набора данных для валидации (val, test или train). Позволяет гибко выбирать сегмент данных для оценки производительности.
fractionfloat, int или list1.0Подмножество проверенной выборки. С помощью списка [train, val, test] применяется элемент, соответствующий split (1 = полная выборка, целые числа больше 1 = количество изображений; пропущенные элементы являются полными). Скаляр применяется только с split=train; тогда val и test используют полную выборку.
projectstrNoneИмя каталога проекта, в котором сохраняются результаты валидации. Помогает организовать результаты разных экспериментов или моделей.
namestrNoneИмя запуска валидации. Используется для создания подкаталога в папке проекта, где хранятся журналы и результаты валидации.
verboseboolTrueЕсли True, отображает подробную информацию в процессе валидации, включая метрики по классам, прогресс обработки пакетов и дополнительные сведения для отладки.
save_txtboolFalseЕсли True, сохраняет результаты обнаружения в текстовых файлах — по одному файлу на изображение. Это полезно для дальнейшего анализа, пользовательской постобработки или интеграции с другими системами.
save_confboolFalseЕсли True, включает значения уверенности в сохраняемые текстовые файлы, когда включен save_txt, предоставляя более подробные данные для анализа и фильтрации.
workersint8Количество рабочих потоков для загрузки данных. Большие значения могут ускорить предварительную обработку данных, но увеличить нагрузку на CPU. Значение 0 использует основной поток, что в некоторых средах может обеспечить большую стабильность.
augmentboolFalseВключает аугментацию во время тестирования (TTA) при валидации, потенциально повышая точность обнаружения за счет скорости инференса, поскольку инференс выполняется на преобразованных версиях входных данных. Доступно только для моделей Ultralytics PyTorch.
agnostic_nmsboolFalseВключает классово-агностическое подавление нену максимумов, подавляя перекрывающиеся ограничивающие рамки с более низким баллом независимо от их предсказанного класса. Полезно для приложений, ориентированных на экземпляры. При выводе без NMS (nms=False на YOLO26 или YOLOv10) это предотвращает появление одного и того же детектирования только с несколькими метками классов (дубликаты IoU=1.0) и не выполняет подавление на основе порога IoU между различными рамками.
single_clsboolFalseРассматривает все классы как один класс во время валидации. Полезно для оценки производительности модели в задачах бинарного обнаружения или когда различия между классами не важны.
visualizeboolFalseВизуализирует истинные значения, истинноположительные, ложноположительные и ложноотрицательные результаты для каждого изображения. Полезно для отладки и интерпретации модели.
show_labelsboolTrueОтображает метки классов в визуализациях валидации, если задано visualize=True. Установи False, чтобы получить более наглядное представление совпадений и ошибок.
show_confboolTrueОтображает оценки уверенности в визуализациях валидации, если задано visualize=True. Установи False, чтобы получить более наглядное представление совпадений и ошибок.
compilebool или strFalseВключает компиляцию графа torch.compile PyTorch 2.x с помощью backend='inductor'. Принимает значения True"default", False → отключает функцию, а также строковый режим, например "default", "reduce-overhead", "max-autotune-no-cudagraphs". Если функция не поддерживается, используется eager-режим с предупреждением.
channels_lastboolNoneИспользует формат памяти channels_last (NHWC) для нативной валидации PyTorch. None автоматически включает его в Linux и Windows на CPU x86 с oneDNN и PyTorch 1.13 или новее, False отключает его, а True запрашивает его на поддерживаемых CPU x86 или устройствах CUDA. ARM64, MPS, старые версии PyTorch, CPU без oneDNN и экспортированные форматы остаются без изменений; валидация во время обучения сохраняет формат модели обучения.
nmsbool, необязательноNoneЗапускает вывод «один ко многим» с NMS по умолчанию (None или True). Установи False, чтобы использовать голову «один к одному» без NMS, если она доступна. Подробнее см. в руководстве по сквозному детектированию.

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

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

Возвращенный объект метрик также предоставляет вспомогательные функции экспорта для последующего анализа:

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

Подробнее см. в документации класса DataExportMixin.

Что дальше#

Доволен метриками? Экспортируй модель в формат для развертывания. Если точность недостаточна, вернись и переобучи модель с другими гиперпараметрами или большим объемом обучающих данных.

Часто задаваемые вопросы#

  • Чтобы выполнить валидацию модели 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

    На датасетах детекции save_json=True также сообщает mAP для маленьких, средних и больших объектов с помощью faster-coco-eval. Ознакомься с Аргументами валидации моделей YOLO для получения подробной информации.

Комментарии