Открыть сервис

YOLOv3

YOLOv3 — это третья версия алгоритма компьютерного зрения для обнаружения объектов в реальном времени, основанная на свёрточных нейронных сетях. Разработана Джозефом Редмоном (Joseph Redmon) и Али Фархади (Ali Farhadi) в 2018 году. YOLOv3 является частью семейства детекторов YOLO (You Only Look Once), которые отличаются высокой скоростью обработки изображений при сохранении приемлемой точности. Алгоритм выполняет предсказание ограничивающих рамок (bounding boxes) и вероятностей классов объектов за один проход нейронной сети, что делает его пригодным для задач, требующих обработки видеопотока в реальном времени, например, в системах видеонаблюдения, автономных транспортных средствах и робототехнике.

История

Первая версия YOLO была представлена Джозефом Редмоном в 2015 году. Она предложила принципиально иной подход к детекции объектов: вместо скользящего окна или региональных предложений (как в R-CNN) изображение делилось на сетку, и каждая ячейка отвечала за предсказание нескольких объектов. YOLOv2 (2016) улучшила точность и скорость за счёт использования более глубокой архитектуры Darknet-19, пакетной нормализации и привязок (anchor boxes).

YOLOv3, опубликованная в апреле 2018 года, стала значительным эволюционным шагом. Основные нововведения включали:

  • Использование более глубокой сети Darknet-53, состоящей из 53 свёрточных слоёв, с остаточными связями (residual connections), что позволило повысить точность без существенного замедления.
  • Применение многомасштабного предсказания (на трёх различных уровнях признаков), что улучшило обнаружение мелких объектов.
  • Замена функции активации Leaky ReLU на более эффективную в некоторых слоях.
  • Улучшенная стратегия обучения с использованием логистической регрессии для предсказания объектности (objectness) и мультиклассовой классификации с помощью бинарной кросс-энтропии.

После выхода YOLOv3 Джозеф Редмон объявил о прекращении разработки алгоритмов компьютерного зрения из-за этических соображений, связанных с возможным военным применением. Однако сообщество продолжило развитие YOLO, создав такие модификации, как YOLOv4, YOLOv5, YOLOX и другие, которые не являются прямыми наследниками оригинальной работы Редмона.

Архитектура

YOLOv3 использует свёрточную нейронную сеть Darknet-53 в качестве основы. Эта сеть была обучена на наборе данных ImageNet для классификации изображений, а затем дообучена для детекции на наборе COCO (Common Objects in Context). Darknet-53 состоит из 53 свёрточных слоёв, организованных с использованием остаточных блоков, что позволяет эффективно обучать глубокие сети, избегая проблемы затухающих градиентов.

Основные компоненты

  1. Сеть-экстрактор признаков (Backbone) — Darknet-53. Она преобразует входное изображение в карты признаков различного разрешения.
  2. Шея (Neck) — в YOLOv3 роль шеи выполняет Feature Pyramid Network (FPN), построенная на основе пирамиды признаков. Она объединяет карты признаков с разных уровней сети, что позволяет детектору лучше распознавать объекты разного размера.
  3. Голова (Head) — выходные слои, которые предсказывают ограничивающие рамки, объектность и классы для каждой ячейки сетки на трёх масштабах.

Многомасштабное предсказание

YOLOv3 выполняет предсказание на трёх различных масштабах (stride 32, 16 и 8). Для каждого масштаба используется своя сетка: крупные объекты предсказываются на грубой сетке (13×13), средние — на средней (26×26), мелкие — на мелкой (52×52). Это достигается за счёт использования карт признаков с разных уровней сети и их объединения через повышающую дискретизацию (upsampling).

Принцип работы

YOLOv3 работает в три этапа:

  1. Входное изображение делится на сетку из ячеек (например, 13×13, 26×26 или 52×52).
  2. Для каждой ячейки сетка предсказывает:
  • Ограничивающие рамки (bounding boxes) — каждая рамка описывается четырьмя координатами (tx, ty, tw, th) относительно ячейки и привязки (anchor box).
  • Объектность (objectness score) — вероятность того, что в рамке находится объект.
  • Вероятности классов — для каждого класса (например, «человек», «машина», «собака») предсказывается вероятность принадлежности к этому классу.
  1. После предсказания применяется подавление немаксимумов (Non-Maximum Suppression, NMS) для удаления дублирующихся рамок, оставляя только наиболее вероятные.

YOLOv3 использует привязки (anchor boxes) — заранее заданные формы рамок, которые были получены кластеризацией набора данных COCO. Для каждого масштаба используется по три привязки, всего девять привязок.

Обучение

Обучение YOLOv3 проводится на размеченных наборах данных, таких как COCO, PASCAL VOC или пользовательских. Процесс включает:

  • Функция потерь — комбинация трёх компонентов:
  • Потери координат (сумма квадратов ошибок для tx, ty, tw, th).
  • Потери объектности (бинарная кросс-энтропия для предсказания наличия объекта).
  • Потери классов (бинарная кросс-энтропия для каждого класса).
  • Аугментация данных — случайные изменения яркости, контраста, масштаба, поворота и отражения изображений для улучшения обобщения.
  • Оптимизаторстохастический градиентный спуск (SGD) с импульсом и затуханием весов.

Обучение может занимать несколько дней на мощных графических процессорах (GPU). Готовая модель может быть экспортирована в форматы, совместимые с фреймворками глубокого обучения (TensorFlow, PyTorch, OpenCV DNN).

Характеристики

YOLOv3 демонстрирует баланс между скоростью и точностью. На наборе данных COCO (2017) при разрешении входного изображения 416×416 пикселей она достигает:

  • mAP (mean Average Precision) — около 57,9% (при пороге IoU 0,5).
  • Скорость — до 30 кадров в секунду (FPS) на GPU NVIDIA Titan X (при размере пакета 1).

По сравнению с предшественниками, YOLOv3 значительно превосходит YOLOv2 по точности (на 10–15% по mAP) при незначительном снижении скорости. Однако она уступает более поздним версиям (YOLOv4, YOLOv5) и некоторым двухэтапным детекторам (Faster R-CNN) по точности, особенно при обнаружении мелких объектов.

Применение

YOLOv3 широко используется в различных областях, требующих быстрой и точной детекции объектов:

Критика и ограничения

Несмотря на популярность, YOLOv3 имеет ряд недостатков:

  • Сложность настройки — требует тщательной настройки гиперпараметров и аугментации для достижения оптимальной точности.
  • Чувствительность к масштабу — мелкие объекты могут быть обнаружены хуже, чем в двухэтапных детекторах.
  • Высокие вычислительные затраты — для работы в реальном времени требуется мощное оборудование (GPU).
  • Отсутствие поддержки сегментации — YOLOv3 предназначена только для детекции, а не для семантической или инстанс-сегментации.

Интересные факты

  • Исходный код YOLOv3 написан на языке C с использованием фреймворка Darknet, созданного Джозефом Редмоном.
  • YOLOv3 стала последней версией, выпущенной автором оригинального YOLO. После ухода Редмона из компьютерного зрения сообщество создало множество форков и улучшений.
  • Модель YOLOv3 может быть запущена на мобильных устройствах и встраиваемых системах (например, Raspberry Pi) с использованием оптимизированных библиотек, таких как TensorFlow Lite или OpenVINO.

Источники

  • Redmon, J., & Farhadi, A. (2018). YOLOv3: An Incremental Improvement. arXiv:1804.02767.
  • Redmon, J., & Farhadi, A. (2017). YOLO9000: Better, Faster, Stronger. arXiv:1612.08242.
  • Redmon, J., et al. (2016). You Only Look Once: Unified, Real-Time Object Detection. arXiv:1506.02640.
  • Lin, T.-Y., et al. (2014). Microsoft COCO: Common Objects in Context. arXiv:1405.0312.
  • Документация фреймворка Darknet (pjreddie.com/darknet/).

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →