Все, что вам нужно знать о знаменитом алгоритме обнаружения объектов
Возможно, вы слышали, как ваш друг говорил об обнаружении объектов и, возможно, произносил такие слова, как 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 из приведенных ниже ресурсов.
Отлично, если вы зашли так далеко. Привет 😇💖