Link to this sectionВалидация моделей с помощью Ultralytics YOLO#
Link to this sectionВведение#
Валидация — это критически важный этап в конвейере machine learning, позволяющий оценить качество твоих обученных моделей. Режим Val в Ultralytics YOLO26 предоставляет мощный набор инструментов и метрик для оценки производительности твоих моделей object detection. Это руководство служит полным ресурсом для понимания того, как эффективно использовать режим Val, чтобы убедиться в точности и надежности твоих моделей.
Watch: Ultralytics Modes Tutorial: Validation
Link to this sectionЗачем использовать валидацию с Ultralytics YOLO?#
Вот почему использование режима Val в YOLO26 дает преимущество:
- Точность: Получай такие метрики, как mAP50, mAP75 и mAP50-95, для всесторонней оценки твоей модели.
- Удобство: Используй встроенные функции, которые запоминают настройки обучения, упрощая процесс валидации.
- Гибкость: Валидируй свою модель на тех же или других наборах данных и размерах изображений.
- Hyperparameter Tuning: Используй метрики валидации для точной настройки модели с целью повышения производительности.
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Примеры использования#
Проведи accuracy обученной модели 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). Этот файл должен включать путь к validation data. |
imgsz | int | 640 | Определяет размер входных изображений. Перед обработкой все изображения изменяются до этого размера. Большие размеры могут повысить точность для мелких объектов, но увеличить время вычислений. |
batch | int | 16 | Устанавливает количество изображений в пакете (batch). Более высокие значения эффективнее используют память GPU, но требуют больше VRAM. Регулируй в зависимости от доступных аппаратных ресурсов. |
save_json | bool | False | Если True, сохраняет результаты в JSON-файл для дальнейшего анализа, интеграции с другими инструментами или отправки на серверы оценки, такие как COCO. |
conf | float | 0.001 | Устанавливает минимальный порог уверенности для обнаружений. Более низкие значения повышают полноту (recall), но могут привести к увеличению числа ложных срабатываний. Используется во время validation для вычисления кривых точности-полноты. По умолчанию равно 0.01 для валидации OBB, чтобы уменьшить использование памяти. |
iou | float | 0.7 | Устанавливает порог Intersection Over Union для Non-Maximum Suppression. Управляет исключением дублирующихся обнаружений. |
max_det | int | 300 | Ограничивает максимальное количество обнаружений на одно изображение. Полезно в плотных сценах для предотвращения избыточных обнаружений и управления вычислительными ресурсами. |
half | bool | False | Включает вычисления с половинной precision (FP16), уменьшая использование памяти и потенциально увеличивая скорость с минимальным влиянием на accuracy. |
device | str | None | Указывает устройство для валидации (cpu, cuda:0, npu, npu:0 и т. д.). Когда значение None, автоматически выбирает лучшее доступное устройство. Несколько устройств CUDA можно указать через запятую. |
dnn | bool | False | Если True, использует модуль OpenCV DNN для вывода модели ONNX, предлагая альтернативу методам вывода PyTorch. |
plots | bool | True | Если установлено в True, генерирует и сохраняет графики предсказаний по сравнению с реальными данными (ground truth), матрицы ошибок и PR-кривые для визуальной оценки производительности модели. |
classes | list[int] | None | Указывает список ID классов для оценки. Полезно для фильтрации и фокусировки только на определенных классах во время оценки. |
rect | bool | True | Если True, использует прямоугольный вывод для пакетной обработки, уменьшая дополнение (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), истинно положительные, ложноположительные и ложноотрицательные результаты для каждого изображения. Полезно для отладки и интерпретации модели. |
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 (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 для получения более подробной информации.