Обнаружение объектов с 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 меток.
Ограничения:
Не всегда хорошо справляется с мелкими предметами.
Использованная литература:
Оригинальная исследовательская работа: