Обнаружение объектов с YOLO

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

Скорость, распознавание и совершенство - главные критерии для обнаружения и обработки изображения, видео или прямой трансляции. Ни в коем случае не могут быть выполнены все эти критерии. Как минимум два возможных критерия могут дать максимальную пользу.

YOLOv3 и другие:

  • R-CNN, быстрый R-CNN и более быстрый R-CNN
  • Детектор одиночного выстрела (SSD)

R-CNN являются одними из первых детекторов объектов на основе глубокого обучения, которые обладают такими функциями, как точное обнаружение объектов и семантическая сегментация. Однако R-CNN был точным и ужасно медленным (5 кадров в секунду) и поэтому не может использоваться для обнаружения объектов в реальном или близком к реальному времени.

Fast R-CNN повысил точность и время обработки с помощью алгоритма предложения внешней области.

R-CNN быстрее внедрила Сеть предложений региона. Это полностью CNN, и концепция ограничивающего / якорного блока объекта была реализована с помощью оценок и метки класса. Желтая линия вокруг собаки и розовая линия вокруг человека - это ограничивающая рамка. Метка в верхней части ограничивающей рамки - это метка класса, определяющая метку изображения или имя объекта.

Что такое Йоло? Почему Йоло?

YOLO - один из самых быстрых алгоритмов обнаружения объектов, основанный на сверточной нейронной сети.

Чтобы увеличить скорость обнаружения объектов, как Single Shot Detectors (SSD), так и YOLO используют одноступенчатую стратегию обнаружения, когда все происходит за один проход. Этот алгоритм основан на регрессии, и алгоритм одновременно изучает координаты ограничивающего прямоугольника и соответствующие вероятности меток классов.

Single Shot Detector не имеет сети предложений делегированных регионов и прогнозирует граничные рамки и классы непосредственно из карт объектов за один проход.

Как работает Ёло:

YOLO делит изображение на сетку 13 на 13 ячеек (левое изображение). Каждая ячейка способна предсказывать 5 ограничивающих рамок, и каждая ячейка также предсказывает класс.

Следовательно, 13 * 13 * 5 = всего 845 ограничивающих рамок (среднее изображение вверху).

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

Оценка достоверности и прогноз класса объединяются для получения окончательной оценки, которая сообщает вероятность того, что ограничивающий прямоугольник содержит объект определенного типа, измеренный в сравнении с помеченными и обученными весами. Например, значение синего поля слева составляет 75%, что подтверждает, что объект является «собакой»:

Области изображения с высокими оценками считаются обнаружениями (порог более 30%)

На следующем рисунке показана общая архитектура YOLO V3:

В этом примере нейронная сеть использует только стандартные типы слоев: свертку с ядром 3x3 и max-pooling с ядром 2x2.

Последний сверточный слой имеет ядро ​​1 × 1 и существует для уменьшения данных до формы 13 × 13 × 125.

Таким образом, мы нашли 125 каналов на каждую ячейку сетки. Эти 125 каналов содержат данные для ограничивающей рамки и прогнозов класса. Каждая ячейка сетки предсказывает 5 ограничивающих рамок, а ограничивающая рамка описывается 25 элементами данных:

  • x, y, ширина, высота прямоугольника ограничивающей рамки
  • оценка уверенности
  • распределение вероятностей по классам

Входное изображение (416 × 416 пикселей) подается в сверточную сеть за один вход.

На другом конце выводится тензор 13 × 13 × 125, описывающий ограничивающие рамки для ячеек сетки. Все оценки ниже 30% удаляются.

Строительные блоки YOLO:

darknet - платформа с открытым исходным кодом, написанная на C и CUDA

Реализация YOLO:

Код ниже вызывает YOLO из командной строки:

shiv @ shiv-VirtualBox: ~ / darknet $ ./darknet обнаружение cfg / yolov3.cfg yolov3.weights data / dogauto2.jpg

Ниже приведен уверенный результат:

Загрузка гирь из yolov3.weights… Готово!
data / dogauto2.jpg: Прогноз за 26.626181 секунду.
dog: 99%
dog: 80%
person: 98 %

Позже он будет дополнен полноценным кодом с реализацией CUDA и OpenCV. Это упростит обработку видео, а также прямые трансляции.

Важная статистика:

YOLOv1 Обнаружение объектов в реальном времени 45 FPS на графическом процессоре.

Fast YOLO заявляет о достижении 155 кадров в секунду на графическом процессоре.

YOLO9000: (т.е. YOLOv2) способен обнаруживать более 9000 детекторов объектов со средней точностью 16% и обучен на 156 этикетках.

YOLOv3 обучен на наборе данных COCO, содержащем 80 меток.

Ограничения:

Не всегда хорошо справляется с мелкими предметами.

Использованная литература:

Оригинальная исследовательская работа: