Автор: Антон Броиловский

Редактура: Дмитрий Раков

Введение

Авторы YOLO подвели итоги первой версии модели и подробно разобрали все ее слабые места. Анализ предсказаний показал, что модель плохо локализует маленькие объекты и отделяет друг от друга группы объектов, следовательно, recall модели страдает. Анализ ошибок помог авторам найти способы улучшения модели и всего через полгода (в декабре 2016 года) выпустить следующую версию YOLO — YOLO9000. Она во всем превосходила предшественника, да еще могла распознавать 9000 классов (отсюда и название).

Что позволило авторам значительно улучшить качество модели и при этом не потерять в точности? Давайте разбираться.

YOLOv2 (YOLO9000: Better, Faster, Stronger)

Можно выделить два основных достижения этой работы:

Общие изменения

Изменения детекционной головы

В YOLOv1 детекционная голова состояла из нескольких полносвязных слоев. В этой версии авторы решили удалить все полносвязные слои и заменить их на сверточные, а также удалить один пуллинг слой, чтобы увеличить размер выходного тензора в 2 раза. Еще они заметили, что большие объекты обычно располагаются в центре изображения, и если сделать нечетное количество ячеек, то в центре объекта будет всего одна ячейка вместо 4-х. Поэтому вход модели был изменен с 448х448 на 416х416 для уменьшения выходного тензора с 14х14 до 13х13.

Помимо увеличения пространственной размерности выходного тензора авторы решили уйти от общего предсказания классов для всех ббоксов к предсказаниям вероятностей для каждого ббокса по отдельности. Таким образом, для обучения на VOC выходной тензор увеличился до 13х13х125, где для каждого ббокса предсказывается 5 чисел координат, конфиденс и 20 классов. Всего ббоксов 5 (чуть дальше будет объяснение), поэтому 25 * 5 = 125.

Для улучшения распознавания маленьких объектов был добавлен скипконнекшен со слоя размером фичей 26х26 к последнему слою модели. Такой скипконекшен называется passthrough layer. Он не имеет сверточных слоев. Для соблюдения размерностей исходные фичи размером 26х26 делятся на 4 части и добавляются в конец к фичам, полученным после предпоследнего слоя модели. Затем полученный вектор отправляется в последний сверточный слой.

Рисунок 1. Визуализация passthrough слоя: тензоры промежуточного слоя размером 26х26 делятся на 4 блока размером 13х13 и добавляются в конец к выходу предпоследнего слоя модели

Рисунок 1. Визуализация passthrough слоя: тензоры промежуточного слоя размером 26х26 делятся на 4 блока размером 13х13 и добавляются в конец к выходу предпоследнего слоя модели