Вы только посмотрите один раз (YOLO) - это современная система обнаружения объектов в реальном времени. Он использует сверточную нейронную сеть (CNN) для обнаружения объектов.

Классификация изображений и обнаружение объектов

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

Давайте возьмем исходное изображение 28X28. При использовании шкалы RGB вход будет векторным размером 28X28X3. Это будут процессы через сверточную нейронную сеть - комбинацию свертки, максимального объединения и полностью подключенного уровня. Конечным результатом будет вектор 3X1 (это будет вероятность для каждого класса животных). Применение функции SoftMax к этому вектору даст точную прогнозируемую классификацию изображения. Для получения дополнительной информации о CNN перейдите по ссылке ниже.



Обнаружение объекта, с другой стороны, предсказывает местоположение объекта вместе с типом объекта. Используя тот же пример, что и выше, CNN выдаст вектор, который будет иметь

  1. Есть ли какой-либо из интересующих нас объектов, т.е. 0,1.
  2. Расположение объекта с использованием координаты центра и высоты и ширины рамки, окружающей объект.
  3. c1, c2, c3 обозначают, что это за объект (ищем тигра, слона и зебру)

Ниже представлен вектор параметров. Это будет объяснено в разделе Выходной вектор.

YOLO: фон

YOLO стал результатом опубликованной в 2015 году статьи Вы только посмотрите один раз: унифицированное обнаружение объектов в реальном времени.

Официальная реализация сделана DarkNet и доступна на github.

Обзор

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

YOLO: шаги

  1. Принимает входное изображение. Предположим, что входное изображение имеет размер 256X256. Таким образом, в масштабе RGB он будет представлен как вектор 256X256X3.
  2. Это входное изображение передается через CNN.
  3. Чтобы понять, как работает окончательный прогноз, давайте разберемся, какой результат мы ищем.

Выходной вектор:

Изображение будет разделено на регионы. В этом примере мы предположим, что на выходе получается разделение на 9 областей (т.е. 3 X 3). Предполагая, что мы хотим обнаружить корабль и птиц - 2 класса объектов на изображениях

Итак, для каждой из 9 ячеек в сетке изображений выше нам нужны следующие выходные данные:

На изображении ниже показана ограничивающая рамка и соответствующая информация.

Поскольку в сетке G нет изображения, связанные метрики будут

В таблице D на изображении ниже показаны числа.

h и b нормализованы, принимая их как доли высоты и ширины полного изображения. Итак, если h = 0,15 и b равно 0,3 на изображении выше после его нормализации

h (нормализованный) = .15 / 3 = .05 и b = .3 / 3 = .1 (общий размер изображения 3,3)

Высота и вес бокса может быть больше, чем сетка, до которой они ниже, но при нормировании с использованием ширины и ширины изображения - всегда меньше 1.

В приведенном выше случае размер вывода будет 3X3X7.

То, что мы видели до сих пор, - это сетка, которая захватывает изображение одного класса. Но это не всегда так. Например, в сетке E. В нем есть и корабль, и птица. Для обработки используются такие «якорные боксы».

Якорь

Допустим, мы хотим предсказать 2 объекта на сетку. В этом случае размер вектора out изменится на 2X7 = 14. Метрикс будет похож на

Для каждой сетки может быть определено любое количество якорных ящиков, но обычно не более 5. В нормальном случае мы делим выходное изображение по сетке 19X19, поэтому достаточно 5 якорных ящиков.

Резюме

  1. У нас есть входное изображение, скажем, 265X256. Входной вектор в CNN равен 256X256X3.
  2. Об этом сообщает CNN.
  3. Предположение: мы хотим, чтобы изображение было сеткой 3x3 (обычно для хорошего предсказания это 19X19), максимум 2 объекта на сетку (т. Е. 2 ​​якорных блока) и 3 типа объектов, которые нужно идентифицировать.
  4. Слой CNN должен создавать выходной вектор размерности 3X3X (2X (1 + 4 + 3)) = 3X3X (2X8) = 3X3X16.

5. Пересечение по объединению (IoU) и подавление без максимума: перед окончательной гибелью мы можем удалить некоторую ограничивающую рамку, предсказанную в выходном слое.

IoU:

Он использует блок предсказаний площади объекта и фактический блок объекта, чтобы исключить предсказания. Если области пересечения прогнозируемого и фактического прямоугольников равны i, то

IoU = i / (сумма прогнозируемой площади + фактическая площадь)

Если этот IoU ‹некоторый порог, мы можем удалить этот блок. Этот порог обычно составляет 0,5 или выше.

Подавление без максимальных значений

Мы исключаем поле, вероятность которого меньше определенного порога.

Для оставшегося ящика мы выбираем ящик с самой высокой вероятностью и удаляем все ящики с высоким IoU с этим ящиком с самой высокой вероятностью.

Тот же процесс повторяется для блока со следующим блоком с наибольшей вероятностью.

Это делается до тех пор, пока объект не будет окружен одним прямоугольником.

Настоящая сила YOLO - это скорость, с которой он может обнаруживать объекты. Видео ниже демонстрирует возможности YOLO для обнаружения объектов в реальном времени.

Дополнительная информация

Для обнаружения объектов и YOLO deep Dive пройдите курс CNN Эндрю Нг (Неделя 3 - Обнаружение объектов)

Https://www.coursera.org/learn/convolutional-neural-networks