You Only Look Once (YOLO) — это серия систем обнаружения объектов в реальном времени , основанных на сверточных нейронных сетях . Впервые представленная Джозефом Редмоном и др. в 2015 году, [1] YOLO претерпела несколько итераций и улучшений, став одной из самых популярных платформ обнаружения объектов. [2]
Название «Вы смотрите только один раз» связано с тем, что алгоритму требуется только один проход прямого распространения через нейронную сеть для составления прогнозов, в отличие от предыдущих методов, основанных на предложениях областей, таких как R-CNN , которым для одного изображения требовались тысячи проходов.
Обзор
По сравнению с предыдущими методами, такими как R-CNN и OverFeat, [3] вместо применения модели к изображению в нескольких местах и масштабах, YOLO применяет одну нейронную сеть к полному изображению. Эта сеть делит изображение на регионы и предсказывает ограничивающие рамки и вероятности для каждого региона. Эти ограничивающие рамки взвешиваются по предсказанным вероятностям.
OverFeat
OverFeat была одной из первых влиятельных моделей для одновременной классификации и локализации объектов. [3] [4] Ее архитектура выглядит следующим образом:
Обучить нейронную сеть только для классификации изображений («сеть, обученная классификации»). Это может быть что-то вроде AlexNet .
Последний слой обученной сети удаляется, и для каждого возможного класса объектов инициализируется сетевой модуль на последнем слое («сеть регрессии»). Базовая сеть имеет замороженные параметры. Сеть регрессии обучается предсказывать координаты двух углов ограничивающего прямоугольника объекта.
Во время вывода обученная по классификации сеть запускается на одном и том же изображении с использованием множества различных уровней масштабирования и обрезки. Для каждого из них она выводит метку класса и вероятность для этой метки класса. Затем каждый вывод обрабатывается регрессионной сетью соответствующего класса. Это приводит к тысячам ограничивающих рамок с метками класса и вероятностью. Эти рамки объединяются до тех пор, пока не останется только одна рамка с одной меткой класса.
Версии
Серия YOLO состоит из двух частей. Оригинальная часть содержала YOLOv1, v2 и v3, все они были опубликованы на веб-сайте, поддерживаемом Джозефом Редмоном. [5]
ЙОЛОв1
Оригинальный алгоритм YOLO, представленный в 2015 году, [1] делит изображение на сетку ячеек. Если центр ограничивающего прямоугольника объекта попадает в ячейку сетки, то говорят, что эта ячейка «содержит» этот объект. Каждая ячейка сетки предсказывает B ограничивающих прямоугольников и баллы уверенности для этих прямоугольников. Эти баллы уверенности отражают, насколько модель уверена в том, что прямоугольник содержит объект, и насколько точным она считает прямоугольник, который она предсказывает.
Более подробно, сеть выполняет одну и ту же операцию свертки над каждым из патчей. Выход сети на каждом патче представляет собой кортеж следующим образом: где
— условная вероятность того, что ячейка содержит объект класса , при условии, что ячейка содержит хотя бы один объект.
являются координатами центра, шириной и высотой -го предсказанного ограничивающего прямоугольника, который центрирован в ячейке. Несколько ограничивающих прямоугольников предсказаны, чтобы позволить каждому предсказанию специализироваться на одном виде ограничивающего прямоугольника. Например, тонкие объекты могут быть предсказаны с помощью , а толстые объекты могут быть предсказаны с помощью .
— это прогнозируемое пересечение по объединению (IoU) каждого ограничивающего прямоугольника с соответствующим ему истинным значением.
Архитектура сети имеет 24 сверточных слоя, за которыми следуют 2 полностью связанных слоя.
Во время обучения для каждой ячейки, если она содержит ограничивающий прямоугольник истинности, то для градиентного спуска используются только предсказанные ограничивающие прямоугольники с наивысшим IoU с ограничивающими прямоугольниками истинности. Конкретно, пусть будет предсказанным ограничивающим прямоугольником, а пусть будет меткой класса истинности, затем обучаются градиентным спуском, чтобы приблизиться к истинности, обучаются к , другие обучаются к нулю.
Если ячейка не содержит истинных данных, то она обучается только методом градиентного спуска для приближения к нулю.
YOLOv2
Выпущенный в 2016 году, YOLOv2 (также известный как YOLO9000) [6] [7] улучшил исходную модель, включив пакетную нормализацию, классификатор с более высоким разрешением и используя якорные рамки для прогнозирования ограничивающих рамок. Он мог обнаружить более 9000 категорий объектов. Он также был выпущен на GitHub под лицензией Apache 2.0. [8]
YOLOv3
YOLOv3, представленный в 2018 году, содержал только «постепенные» улучшения, включая использование более сложной магистральной сети, множественных шкал для обнаружения и более сложной функции потерь. [9]
YOLOv4 и далее
Последующие версии YOLO (v4, v5 и т. д.) [10] [11] [12] [13] были разработаны разными исследователями, еще больше улучшив производительность и внедрив новые функции. Эти версии официально не связаны с первоначальными авторами YOLO, но основываются на их работе. [5] По состоянию на 2023 год [обновлять]существует до YOLOv8. [2]
^ ab Редмон, Джозеф; Диввала, Сантош; Гиршик, Росс; Фархади, Али (2016-05-09). «Вы смотрите только один раз: унифицированное обнаружение объектов в реальном времени». arXiv : 1506.02640 [cs.CV].
^ ab Terven, Juan; Córdova-Esparza, Diana-Margarita; Romero-González, Julio-Alejandro (2023-11-20). «Комплексный обзор архитектур YOLO в компьютерном зрении: от YOLOv1 до YOLOv8 и YOLO-NAS». Машинное обучение и извлечение знаний . 5 (4): 1680–1716. arXiv : 2304.00501 . doi : 10.3390/make5040083 . ISSN 2504-4990.
^ ab Sermanet, Pierre; Eigen, David; Zhang, Xiang; Mathieu, Michael; Fergus, Rob; LeCun, Yann (2014-02-23), OverFeat: Интегрированное распознавание, локализация и обнаружение с использованием сверточных сетей , arXiv : 1312.6229