Валидация моделей с Ultralytics YOLO#
Введение#
Валидация — критически важный этап в конвейере машинного обучения, который позволяет оценить качество обученных моделей. Режим 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 при запуске валидации в виде скрипта может возникнуть 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. На датасетах обнаружения она также оценивает предсказания с помощью faster-coco-eval и сообщает mAP для малых, средних и больших объектов, регистрируемый во время обучения как metrics/mAP_small(B), metrics/mAP_medium(B) и metrics/mAP_large(B) в results.csv. |
conf | float | 0.001 | Задает минимальный порог уверенности для обнаружений. Меньшие значения повышают полноту, но могут привести к появлению большего числа ложноположительных результатов. По умолчанию кривые precision-recall используют 0.001; матрицы ошибок обнаружения используют явное значение conf или 0.25, если оно не задано. Сводные значения precision и recall используют уверенность при максимальном F1, поэтому они могут отличаться от значений, рассчитанных на основе confusion_matrix.png. Для валидации OBB по умолчанию используется 0.01, чтобы снизить потребление памяти. |
iou | float | 0.7 | Задает порог пересечения по объединению для подавления немаксимумов. Управляет устранением дублирующихся обнаружений. |
max_det | int | 300 | Ограничивает максимальное количество обнаружений на изображение. Для задач детекции, сегментации, позы и OBB при значении по умолчанию 300 оно увеличивается до наибольшего количества объектов с разметкой в валидационном наборе данных, если изображение превышает его, с выводом предупреждения; любое другое значение сохраняется с предупреждением о том, что полнота (recall) может быть ограничена при превышении лимита изображением. |
quantize | int или str | None | Точность валидации: 16/"fp16" и 32/"fp32"/не задано выбирают вычисления FP16 или FP32 для моделей PyTorch и TorchScript; остальные форматы выполняют вычисления с точностью, выбранной их артефактом и средой выполнения. При 16 OpenVINO по-прежнему выполняет FP16-округление входных данных на клиенте и расширяет их обратно до 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, создает и сохраняет графики предсказаний и истинных значений, матрицы ошибок и PR-кривые для визуальной оценки производительности модели. |
classes | list[int] | None | Указывает список идентификаторов классов для оценки. Полезно для фильтрации и фокусировки только на определенных классах во время оценки. |
rect | bool | True | Если True, использует прямоугольный инференс при пакетной обработке, уменьшая дополнение и потенциально повышая скорость и эффективность за счет обработки изображений с исходным соотношением сторон. Не применяется при валидации depth, которая растягивает каждое изображение до фиксированного квадратного размера imgsz вместо дополнения. |
split | str | 'val' | Определяет раздел набора данных для валидации (val, test или train). Позволяет гибко выбирать сегмент данных для оценки производительности. |
fraction | float, int или list | 1.0 | Подмножество проверенной выборки. С помощью списка [train, val, test] применяется элемент, соответствующий split (1 = полная выборка, целые числа больше 1 = количество изображений; пропущенные элементы являются полными). Скаляр применяется только с split=train; тогда val и test используют полную выборку. |
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 | Включает классово-агностическое подавление нену максимумов, подавляя перекрывающиеся ограничивающие рамки с более низким баллом независимо от их предсказанного класса. Полезно для приложений, ориентированных на экземпляры. При выводе без NMS (nms=False на YOLO26 или YOLOv10) это предотвращает появление одного и того же детектирования только с несколькими метками классов (дубликаты IoU=1.0) и не выполняет подавление на основе порога IoU между различными рамками. |
single_cls | bool | False | Рассматривает все классы как один класс во время валидации. Полезно для оценки производительности модели в задачах бинарного обнаружения или когда различия между классами не важны. |
visualize | bool | False | Визуализирует истинные значения, истинноположительные, ложноположительные и ложноотрицательные результаты для каждого изображения. Полезно для отладки и интерпретации модели. |
show_labels | bool | True | Отображает метки классов в визуализациях валидации, если задано visualize=True. Установи False, чтобы получить более наглядное представление совпадений и ошибок. |
show_conf | bool | True | Отображает оценки уверенности в визуализациях валидации, если задано visualize=True. Установи False, чтобы получить более наглядное представление совпадений и ошибок. |
compile | bool или str | False | Включает компиляцию графа torch.compile PyTorch 2.x с помощью backend='inductor'. Принимает значения True → "default", False → отключает функцию, а также строковый режим, например "default", "reduce-overhead", "max-autotune-no-cudagraphs". Если функция не поддерживается, используется eager-режим с предупреждением. |
channels_last | bool | None | Использует формат памяти channels_last (NHWC) для нативной валидации PyTorch. None автоматически включает его в Linux и Windows на CPU x86 с oneDNN и PyTorch 1.13 или новее, False отключает его, а True запрашивает его на поддерживаемых CPU x86 или устройствах CUDA. ARM64, MPS, старые версии PyTorch, CPU без oneDNN и экспортированные форматы остаются без изменений; валидация во время обучения сохраняет формат модели обучения. |
nms | bool, необязательно | None | Запускает вывод «один ко многим» с NMS по умолчанию (None или True). Установи False, чтобы использовать голову «один к одному» без NMS, если она доступна. Подробнее см. в руководстве по сквозному детектированию. |
Каждая из этих настроек играет важную роль в процессе валидации, обеспечивая настраиваемую и эффективную оценку моделей 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 | Количество истинноположительных результатов для изображения. |
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 для получения подробной информации.