Все, что вам нужно знать о знаменитом алгоритме обнаружения объектов

Возможно, вы слышали, как ваш друг говорил об обнаружении объектов и, возможно, произносил такие слова, как YOLO и Faster-RCNN. Если вы задаетесь вопросом, что означает YOLO и почему вам вообще нужно об этом заботиться, не смотрите дальше.

В этом блоге будет проведено исчерпывающее исследование YOLOv3 (вы посмотрите только один раз, версия 3), который является одной из самых популярных моделей глубокого обучения, широко используемых для обнаружения объектов, семантической сегментации и классификации изображений.

Я объясню архитектуру модели YOLOv3 с ее различными слоями, и мы увидим некоторые результаты для обнаружения объектов, которые я получил при запуске программы логического вывода на некоторых тестовых изображениях с использованием модели.

Так что продолжайте читать блог, чтобы узнать больше о YOLOv3.

Что такое ЙОЛО?

  • You Only Look Once или YOLO - это семейство моделей глубокого обучения, разработанных для быстрого обнаружения объектов.
  • Существует три основных варианта YOLO: YOLOv1, YOLOv2 и YOLOv3.
  • В первой версии была предложена общая архитектура, во второй версии был усовершенствован дизайн и использовались предопределенные якорные блоки для улучшения предложения ограничивающей рамки, а в третьей версии была дополнительно усовершенствована архитектура модели и процесс обучения.
  • В его основе лежит идея, что:

" A single neural network predicts bounding boxes and class probabilities directly from full images in one evaluation. Since the whole detection pipeline is a single network, it can be optimized end-to-end directly on detection performance. "

1. Схема сетевой архитектуры YOLOv3

2. Описание архитектуры

Шаги по обнаружению объектов с помощью YOLO v3:

  • Входные данные - это пакет изображений формы (m, 416, 416, 3).
  • YOLO v3 передает это изображение в сверточную нейронную сеть (CNN).
  • Последние два измерения вышеприведенного вывода сглаживаются, чтобы получить объем вывода (19, 19, 425):
  • Здесь каждая ячейка сетки 19 x 19 возвращает 425 чисел.
  • 425 = 5 * 85, где 5 - количество якорей на сетку.
  • 85 = 5 + 80, где 5 - это (pc, bx, by, bh, bw), а 80 - количество классов, которые мы хотим обнаружить.
  • Результатом является список ограничивающих рамок вместе с распознанными классами. Каждая ограничивающая рамка представлена ​​6 числами (pc, bx, by, bh, bw, c). Если мы расширим c до 80-мерного вектора, каждый ограничивающий прямоугольник будет представлен 85 числами.
  • Наконец, мы выполняем IoU (Intersection over Union) и Non-Max Suppression, чтобы не выбирать перекрывающиеся поля.

По поводу архитектуры:

  • YOLO v3 использует вариант Darknet, в котором изначально была 53-слойная сеть, обученная на Imagenet.
  • Для задачи обнаружения на него накладываются еще 53 слоя, что дает нам 106-слойную полностью сверточную базовую архитектуру для YOLO v3.
  • В YOLO v3 обнаружение осуществляется путем применения ядер обнаружения 1 x 1 на картах функций трех разных размеров в трех разных местах сети.
  • Форма ядра обнаружения: 1 x 1 x (B x (5 + C)). Здесь B - это количество ограничивающих прямоугольников, которые ячейка на карте объектов может предсказать, '5' - для 4 атрибутов ограничивающего прямоугольника и достоверности одного объекта и C это нет. занятий.
  • YOLO v3 использует двоичную кросс-энтропию для расчета потери классификации для каждой метки, в то время как достоверность объекта и прогнозы класса предсказываются с помощью логистической регрессии.

Используемые гиперпараметры

  • class_threshold - определяет порог вероятности для прогнозируемого объекта.
  • Не максимальный порог подавления - помогает решить проблему многократного обнаружения объекта на изображении. Это достигается за счет использования ящиков с максимальной вероятностью и подавления ближайших ящиков с не максимальными вероятностями (меньше предопределенного порога).
  • input_height & input_shape - размер изображения для ввода.

CNN архитектура Darknet-53

  • Darknet-53 используется как средство извлечения функций.
  • Darknet-53 в основном состоит из фильтров 3 x 3 и 1 x 1 с пропускаемыми соединениями, как остаточная сеть в ResNet.

2. Архитектурная схема YOLOv3

3. Детали слоев

  • YOLO использует только сверточные слои, что делает его полностью сверточной сетью (FCN).
  • В YOLOv3 используется более глубокая архитектура экстрактора функций под названием Darknet-53.

Свертки слоев в YOLOv3

  • Он содержит 53 сверточных слоя, за каждым из которых следует слой пакетной нормализации и активация Leaky ReLU.
  • Слой свертки используется для свертки нескольких фильтров на изображениях и создания нескольких карт функций.
  • Никакая форма объединения не используется, а сверточный слой с шагом 2 используется для уменьшения дискретизации карт признаков.
  • Это помогает предотвратить потерю низкоуровневых функций, часто приписываемых объединению.

4. Различные слои внутри YOLO.

  • Код для уровней с 1 по 53 в Tensorflow: рассмотрите метод res_block () для кода ниже
def res_block(inputs, filters):  
    shortcut = inputs  
    net = conv2d(inputs, filters * 1, 1)  
    net = conv2d(net, filters * 2, 3)  
    net = net + shortcut  
    return net

Первые два слоя conv2d с 32 и 64 фильтрами

net = conv2d(inputs, 32,  3, strides=1)
net = conv2d(net, 64,  3, strides=2)

res_block * 1

net = res_block(net, 32)
# Convolutional block with 128 filters
net = conv2d(net, 128, 3, strides=2)

res_block * 2

for i in range(2):
        net = res_block(net, 64)
# Convolutional layer with 256 filters
net = conv2d(net, 256, 3, strides=2)

res_block * 8

for i in range(8):
    net = res_block(net, 128)
# Convolutional layer with 512 filters
route_1 = net
net = conv2d(net, 512, 3, strides=2)

res_block * 8

for i in range(8):
    net = res_block(net, 256)
# Convolutional layer with 1024 filters
route_2 = net
net = conv2d(net, 1024, 3, strides=2)

res_block * 4

for i in range(4):
    net = res_block(net, 512)
route_3 = net

5. Входные данные для вывода модели

я. Предварительная обработка ввода:

Размер изображений необходимо изменить до 416 x 416 пикселей, прежде чем загружать их в нашу модель, или размеры также можно указать при запуске файла python.

II. Входные размеры:

Модель ожидает, что входными данными будут цветные изображения с квадратной формой 416 x 416 пикселей, или это также может быть указано пользователем.

6. Подробная информация о программе вывода модели и ее результатах.

1. Выход модели

  • Результатом является список ограничивающих рамок вместе с распознанными классами.
  • Каждая ограничивающая рамка представлена ​​6 числами (pc, bx, by, bh, bw, c). Здесь c - 80-мерный вектор, эквивалентный количеству классов, которые мы хотим предсказать, каждый ограничивающий прямоугольник представлен 85 числами.

2. Результат постобработки

  • Программа вывода создает список numpy массивов, форма которого отображается как результат. Эти массивы предсказывают как ограничивающие прямоугольники, так и метки классов, но кодируются.
  • Далее мы возьмем каждый из массивов numpy и декодируем ограничивающие прямоугольники кандидатов и предсказания классов. Если есть какие-либо ограничивающие прямоугольники, которые неуверенно описывают объект (с вероятностью класса меньше порогового значения 0,3), мы их игнорируем.
  • Здесь в изображении можно рассматривать максимум 200 ограничивающих рамок.
  • Я использовал функцию corre_yolo_boxes (), чтобы выполнить преобразование координат ограничивающего прямоугольника, чтобы мы могли построить исходное изображение и нарисовать ограничивающие прямоугольники.
  • Опять же, чтобы удалить те ограничивающие рамки-кандидаты, которые могут относиться к одному и тому же объекту, мы определяем степень перекрытия как не максимальный порог подавления = 0,45.
  • Также существует необходимость изменить масштаб координат ограничивающих прямоугольников до исходного изображения вместе с отображением метки и оценок поверх каждого из них.
  • Все эти шаги постобработки необходимо выполнить до того, как мы получим ограничивающие рамки вместе с распознанными классами в нашем выходном изображении.

3. Вывод программы вывода для модели.

7. Скорость и точность YOLOv3

  • Скорость модели (в кадрах в секунду) - на Pascal Titan X изображения обрабатываются со скоростью 30 кадров в секунду.
  • Точность модели (по набору данных тестирования) - у нее есть MAP (средняя средняя точность) 87,54% на тестовом наборе VOC.

8. Запустите модель.

Найдите ссылку на мой Dockerfile: afrozchakure / yolov3-tensorflow

Чтобы запустить модель с помощью докера (докер должен быть предварительно установлен) на вашем компьютере, используйте следующие команды в терминале :)

xhost +
sudo docker run --rm -ti --net=host --ipc=host -e DISPLAY=$DISPLAY -v /tmp/.X11-unix:/tmp/.X11-unix --env="QT_X11_NO_MITSHM=1" afrozchakure/yolov3-tensorflow

9. Узнайте больше о принципах работы YOLOv3 из приведенных ниже ресурсов.

Ссылка 1

Ссылка 2

Отлично, если вы зашли так далеко. Привет 😇💖