Как протестировать модели компьютерного зрения#
Введение#
Тестирование модели проверяет, как обученная модель работает на ранее невидимых реальных данных — с движущимися, плохо освещенными или частично скрытыми объектами, а не на тщательно отобранном бенчмарке. В то время как оценка модели измеряет метрики на размеченном датасете, тестирование проверяет, что усвоенное моделью поведение соответствует целям твоего приложения перед деплоем. Это руководство охватывает подготовку тестовых данных, тестирование моделей Ultralytics YOLO26 и выявление переобучения, недообучения и утечки данных.
Watch: How to Test Machine Learning Models | Avoid Data Leakage in Computer Vision 🚀
Тестирование модели в сравнении с оценкой модели#
Тестирование модели и оценка модели — это два разных этапа в проекте компьютерного зрения. Оценка измеряет производительность с помощью метрик на размеченном датасете; тестирование проверяет, сохраняется ли усвоенное моделью поведение в условиях, напоминающих деплой.
Предположим, ты обучил модель компьютерного зрения распознавать кошек и собак и хочешь развернуть ее в зоомагазине для наблюдения за животными. На этапе оценки модели ты используешь размеченный датасет для расчета таких метрик, как точность, precision и полнота. Например, модель может с точностью 98% различать кошек и собак в заданном датасете.
После оценки ты тестируешь модель, используя изображения из зоомагазина, чтобы увидеть, насколько хорошо она идентифицирует кошек и собак в более разнообразных и реалистичных условиях. Ты проверяешь, может ли она правильно маркировать животных, когда они двигаются, находятся при различном освещении или частично закрыты предметами, такими как игрушки или мебель. Тестирование модели проверяет, что модель ведет себя ожидаемым образом вне контролируемой среды оценки.
Подготовка к тестированию модели#
Датасеты компьютерного зрения обычно делятся на обучающий и тестовый наборы для симуляции реальных условий: обучающие данные обучают модель, а тестовые данные проверяют ее поведение на примерах, которые она никогда не видела. Платформа Ultralytics Platform хранит организацию датасетов и аннотации в одном месте, что помогает при создании размеченного тестового набора.
- Реалистичное представление: Ранее не виденные тестовые данные должны быть похожи на те, с которыми модель будет работать после развертывания. Это дает реалистичную картину возможностей модели.
- Достаточный размер: Тестовый набор данных должен быть достаточно большим, чтобы предоставить надежные выводы о том, насколько хорошо работает модель.
Как протестировать модель YOLO26#
Тестирование обученной модели YOLO26 включает два дополняющих друг друга рабочих процесса: валидацию на размеченной тестовой выборке для получения количественных метрик и прогнозирование на новых изображениях для качественного анализа поведения.
Валидация на размеченной тестовой выборке#
Режим валидации сравнивает предсказания модели с разметкой ground-truth и выдает precision, recall, mAP50 и mAP50-95 для моделей детектирования. Он также сохраняет визуальные материалы, такие как матрица ошибок (confusion matrix) и кривая precision-recall, которые помогают обнаружить конкретные области, где модель может работать недостаточно хорошо.
from ultralytics import YOLO
# Load a pretrained model or your own trained checkpoint, e.g. "path/to/best.pt"
model = YOLO("yolo26n.pt")
# Validate; add split="test" if your dataset YAML defines a test split
metrics = model.val(data="coco8.yaml")
print(metrics.box.map) # mAP50-95По умолчанию валидация запускается на сплите датасета val. Чтобы измерить производительность на отложенном тестовом наборе, определи сплит test: в YAML-файле твоего датасета и передай split="test".
Прогнозирование на новых изображениях#
Режим предсказания запускает модель на новых, ранее невидимых данных без требования разметки. Он не создает метрики производительности, но сохранение аннотированных результатов позволяет тебе просмотреть, как модель ведет себя на реальных изображениях — например, для целой папки тестовых изображений за один раз.
from ultralytics import YOLO
# Load a pretrained model or your own trained checkpoint, e.g. "path/to/best.pt"
model = YOLO("yolo26n.pt")
# Run predictions on a folder of test images and save annotated results
results = model.predict(source="path/to/test_images", save=True)Чтобы проверить, подходит ли YOLO26 для твоего приложения перед инвестированием в кастомное обучение, запусти режим предсказания с предобученным чекпоинтом на собственных изображениях. Модели предобучены на таких датасетах, как COCO, поэтому результаты дают быстрое представление о том, насколько хорошо модель может работать в твоем конкретном контексте.
Режим валидации в сравнении с режимом прогнозирования#
| Режим | Цель | Требуются метки | Выходные данные |
|---|---|---|---|
| Валидация | Количественная оценка производительности относительно эталона | Да | Прецизионность, полнота, mAP50, mAP50-95, матрица ошибок, PR-кривые |
| Предсказание | Анализ поведения модели на новых, неразмеченных данных | Нет | Аннотированные изображения и результаты прогнозирования, без метрик |
Как анализировать результаты тестирования#
Когда у тебя на руках есть прогнозы и метрики, разберись, где и почему модель допускает ошибки:
- Неправильно классифицированные изображения: Определи и просмотри изображения, которые модель классифицировала неверно, чтобы понять, в чем заключается ошибка.
- Анализ ошибок: Проведи тщательный анализ ошибок, чтобы понять их типы (например, ложноположительные и ложноотрицательные результаты) и их потенциальные причины.
- Предвзятость и справедливость: Проверь наличие любых искажений в предсказаниях модели. Убедись, что модель работает одинаково хорошо на разных подмножествах данных, особенно если они включают чувствительные атрибуты, такие как раса, пол или возраст.
Переобучение и недообучение в машинном обучении#
При тестировании модели машинного обучения, особенно в компьютерном зрении, важно следить за переобучением и недообучением. Эти проблемы могут существенно повлиять на то, насколько хорошо твоя модель работает с новыми данными.
| Проблема | Общие признаки | Как это исправить |
|---|---|---|
| Переобучение | Высокая точность обучения при низкой точности валидации; сверхчувствительность к незначительным изменениям или несущественным деталям на изображениях | Примени регуляризацию, такую как dropout, увеличь размер обучающего датасета, упрости архитектуру модели |
| Недообучение | Низкая точность даже на обучающем наборе; постоянная неспособность распознать очевидные признаки или объекты | Используй более сложную модель, предоставь более релевантные признаки, увеличь количество эпох обучения |
Ключ к успеху — найти баланс, чтобы модель хорошо работала как на обучающем, так и на валидационном наборе данных. Регулярный мониторинг метрик и визуальный осмотр предсказаний во время тестирования помогут тебе вовремя заметить отклонение в любую из сторон.
Утечка данных в компьютерном зрении и как её избежать#
Утечка данных происходит, когда информация извне обучающего набора данных случайно используется для обучения модели. Модель может казаться очень точной во время обучения, но она не будет работать эффективно на новых, не виденных ранее данных, если произошла утечка данных.
Утечку бывает трудно заметить, и часто она возникает из-за скрытых искажений в обучающих данных:
| Тип искажения | Как это выглядит |
|---|---|
| Искажение камеры | Различные углы обзора, освещение, тени и движения камеры создают нежелательные закономерности |
| Искажение наложения | Логотипы, временные метки или другие наложения на изображениях вводят модель в заблуждение |
| Искажение шрифтов и объектов | Определенные шрифты или объекты, которые часто появляются в конкретных классах, искажают обучение модели |
| Пространственное искажение | Дисбаланс между передним планом и фоном, распределения bounding box и расположений объектов влияют на обучение |
| Искажение меток и домена | Неверные метки или сдвиги в типах данных приводят к утечке |
Как обнаружить и избежать утечки данных#
Чтобы найти утечку данных, проверь, не являются ли результаты модели подозрительно хорошими, посмотри, не является ли один признак гораздо важнее остальных, перепроверь интуитивно, имеют ли смысл решения модели, и убедись, что данные были разделены правильно до какой-либо обработки.
Чтобы предотвратить её, используй разнообразный набор данных с изображениями или видео с разных камер и из разных сред, а также внимательно проверяй свои данные на наличие скрытых искажений — например, того, что все положительные образцы были сняты в определенное время дня. Избегание утечки данных делает твои модели компьютерного зрения более надежными в реальных ситуациях.
Что делать после тестирования модели#
После тестирования твоей модели следующие шаги зависят от результатов. Если твоя модель работает хорошо, ты можешь развернуть ее в реальном окружении. Если результаты неудовлетворительные, тебе потребуется внести улучшения. Это может включать анализ ошибок, сбор большего количества данных, улучшение качества данных, настройку гиперпараметров и повторное обучение модели.
Заключение#
Тщательное тестирование модели — валидация на отложенном тестовом сплите, предсказание на реальных изображениях и проверка на переобучение и утечку данных — это то, что превращает хорошо оцененную модель в надежную. Устрани проблемы, выявленные при тестировании, перед деплоем, и твоя модель с гораздо большей вероятностью будет работать так, как задумано в продакшене. Если по ходу дела возникают вопросы, задай их сообществу в репозитории Ultralytics GitHub или на сервере Ultralytics Discord.
FAQ#
Оценка модели измеряет производительность с помощью метрик на размеченном датасете, в то время как тестирование модели проверяет, как модель ведет себя на новых, ранее невидимых данных, напоминающих условия деплоя. Оценка выдает такие цифры, как precision и mAP из контролируемого датасета; тестирование показывает, сохраняется ли усвоенное поведение при varied освещении, движении или окклюзии. См. раздел Тестирование моделей против оценки моделей для примера с разбором.
Используй режим предсказания и передай путь к папке в качестве
source— YOLO26 запускается на каждом изображении в папке и может сохранять аннотированные результаты для проверки. Режим предсказания не вычисляет метрики; для количественной оценки производительности на размеченном наборе используй режим валидации. Оба воркфлоу показаны в руководстве Как протестировать модель YOLO26.Для моделей детектирования валидация выдает precision, recall, mAP50 и mAP50-95, а также сохраняет графики, включая матрицу ошибок и кривую precision-recall. Чтобы провести валидацию на выделенном тестовом сплите, а не на сплите по умолчанию
val, определиtest:в YAML-файле твоего датасета и передайsplit="test". См. руководство по метрикам производительности для получения информации о том, как интерпретировать каждую метрику.Для борьбы с переобучением применяй методы регуляризации, такие как dropout, увеличивай размер обучающего датасета или упрощай архитектуру модели. Для недообучения используй более сложную модель, добавляй более релевантные признаки или обучайте модель дольше (больше эпох). Признаки каждой проблемы и соответствующие исправления суммированы в разделе Переобучение и недообучение в машинном обучении.
Подозрение на утечку данных возникает, когда тестовая производительность выглядит удивительно хорошо, один признак доминирует в предсказаниях или решения модели не имеют интуитивного смысла. Предотвращай ее, используя разнообразные датасеты с разных камер и из разных сред, проверяя данные на скрытые смещения и убедившись, что разделение на train/test произошло до любой обработки. См. Утечка данных в компьютерном зрении для ознакомления с распространенными типами смещений.
Если результаты соответствуют целям твоего проекта, разверни модель; если нет, улучши ее перед деплоем. Это может означать анализ ошибок, сбор более разнообразных данных, улучшение качества данных, тюнинг гиперпараметров и повторное обучение. Повторяй тестирование после каждого раунда изменений, чтобы подтвердить, что исправления сработали.