YOLO history (Part 2)
YOLOv1 стал первым single-shot детектором, достигшим скорости 45 FPS, что сделало его заметным шагом в области обнаружения объектов.[1] Эта модель позволяла обрабатывать изображения в реальном времени, но страдала от недостатков в локализации маленьких объектов и низкого recall.[1] Пользователи часто замечали, что система пропускала мелкие детали или неверно группировала элементы сцены.
Развитие привело к YOLOv2, также известному как YOLO9000, где архитектура претерпела ключевые изменения для повышения точности.[1] Авторы учли слабости первой версии, внедрив улучшения, вдохновленные предшественниками, чтобы сохранить скорость при росте качества детекции.[1]
YOLOv2 (YOLO9000)
В YOLOv2 отказались от полносвязных слоев в пользу полносверточной сети, что повысило гибкость модели.[1] Перешли на анкерный метод для предсказания bounding boxes, а backbone заменен с GoogLeNet на Darknet-19, увеличив размер выходного тензора.[1] Эти шаги позволили лучше справляться с разнообразием объектов.
Общие изменения коснулись архитектуры: удалили полносвязные слои и один pooling layer, изменили вход с 448x448 на 416x416.[1] Добавили passthrough layer для улучшения распознавания маленьких объектов и отдельные предсказания вероятностей для каждого бокса.[1]
Изменения в подходе к детекции
Подход к детекции в YOLOv2 усилили за счет anchor boxes, где начальные боксы выбирались с помощью k-means кластеризации.[1] Для предсказания положения применялась сложная формула, учитывающая смещения и масштабы.[1] Это помогло модели точнее локализовать объекты различного размера.
Изменения в обучении
Обучение включало этап label and anchor assignment, где определялась ячейка и анкер для каждого объекта.[1] Модель тренировали на изображениях разного размера, что повысило устойчивость и точность в реальных сценариях.[1] Пользователь мог ожидать более надежных результатов на varied входах.
YOLO9000
YOLO9000 объединил 9000 классов из ImageNet и COCO через WordTree, расширив возможности классификации.[1] Количество анкеров сократили до 3, уменьшив размерность выходного тензора, а лосс вычисляли по-разному для датасетов COCO и ImageNet.[1]
Подготовка данных
Для изображений из ImageNet брали бокс с максимальным confidence, включая в лосс только его класс и положение.[1] Предсказанный бокс учитывался при IOU с истинным не менее 0.3, что фильтровало шумные предсказания.[1]
Инференс
В смешанном датасете лейблы имели уровни из WordTree, поэтому софтмакс применяли по группам классов.[1] Алгоритм спускался от корня дерева к уровню с вероятностью выше 0.5, обеспечивая иерархическую классификацию.[1]
Итоги
На PASCAL VOC2007 YOLOv2 достиг 78.4% точности в одной оценке и 73.4% в другой.[1] На других датасетах результаты составили 21.6%, 26.8% и 23.2%, показав вариативность производительности.[1]
Забавный факт
Модель лучше справлялась с животными, чем с одеждой, из-за отсутствия классов одежды в COCO — только "person".[1] Система иногда путалась в интерпретации подобных объектов, что подчеркивает вызовы в обучении.
Заключение
YOLOv2 закрепил успехи YOLOv1 по скорости, значительно улучшив качество детекции.[1] Авторы разобрали ошибки первой модели и интегрировали идеи предшественников, заняв SOTA на датасетах VOC.[1] В следующих материалах разберут завершение трилогии и эволюцию YOLO, где yolo продолжает развиваться в обнаружении объектов.