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

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

Введение

“Sometimes you just kinda phone it in for a year, you know?” — а **так начинается третья статья про YOLO.

Уже по первому предложению нам становится понятен тон повествования — автор общается с нами, как с другом. Почему вместо сухой научной статьи мы читаем эмоциональный текст? Дело в том, что это заключительная часть YOLO, в написании которой принимал участие ее создатель — Джозаф Редмон. Это своего рода отчет, подведение итогов полуторагодовой работы сообщества и его личных наработок, а еще исправление ошибок предыдущих версий.

А сейчас давайте посмотрим на то, что авторы и сообщество предложили нам на этот раз.

YOLOv3 (YOLOv3: An Incremental Improvement)

Как и в предыдущих статьях, изменения затронули всю архитектуру:

От Darknet-19 к Darknet-53

Первым делом авторы решили повысить точность модели, отвечающей за извлечение признаков из входного изображения (или feature extractor’a). Для удобства мы будем называть ее базовой моделью. С целью повышения точности этой модели авторы придумали специальную архитектуру — что-то между небольшим Darknet-19, который использовался в YOLOv2, и громоздкими ResNet’ами со 101 и более слоями. Больше всего Darknet-53 похожа на ResNet-52: в ней примерно столько же слоев, плюс конволюции только 3х3 и 1х1.

Рисунок 1. Архитектура Darknet-53. Каждый Convolutional на рисунке — последовательность из Conv2d (1x1 or 3x3) → batch norm → LeakyReLU

Рисунок 1. Архитектура Darknet-53. Каждый Convolutional на рисунке — последовательность из Conv2d (1x1 or 3x3) → batch norm → LeakyReLU

Главное отличие Darknet-53 от ResNet-52 — качество. На ImageNet’е Darknet-53 показал результат где-то между ResNet-101 и ResNet-152 (хотя он меньше первой в 2 раза и меньше второй в 3 раза!). А еще, несмотря на размер, Darknet-53 способна работать в 78 FPS. Такая точная и быстрая модель в основании — это именно то, что нужно!

Добавление шеи в архитектуру

Авторы вдохновились архитектурой Feature Pyramid Network (FPN) и решили добавить neck (шею) после базовой модели. Теперь модель все больше напоминает скелет человека, ведь у нее есть и шея, и голова 🙂

Добавление шеи позволило улучшить распознавание объектов любого размера и хорошо отделять их друг от друга. В результате получилась следующая архитектура:

Рисунок 2. Архитектура детекционной головы YOLOv3

Рисунок 2. Архитектура детекционной головы YOLOv3