Изучение алгоритмов обнаружения объектов и лежащих в их основе концепций

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

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

Давайте начнем!

Гистограмма ориентированных градиентов

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

Обычно дескриптор признака преобразует изображение размером ширина x высота x 3 (количество каналов) в вектор / массив признаков длиной n. В случае дескриптора признака HOG входное изображение имеет размер 64 x 128 x 3, а выходной вектор признака имеет длину 3780, которые были размерами исходной статьи, в которой был введен HOG.

Подробнее читайте в этом исследовании.

Реализация дескриптора HOG:

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

Как упоминалось ранее, дескриптор функции HOG рассчитывается для фрагмента изображения размером 64 × 128, и вам необходимо поддерживать соотношение сторон 1: 2.

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

Шаг 2- Расчет градиента

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

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

Градиентное изображение удаляет много ненужной и посторонней информации, такой как фон, но выделяет контуры основных объектов.

В каждом пикселе градиент имеет величину и направление.

Примечание. Градиенты трех каналов оцениваются для цветного изображения.

Шаг 3 - Расчет гистограммы градиентов

Патч изображения 8 × 8 содержит значения 8x8x3 = 192 пикселей. Градиент этого патча содержит 2 значения (величину и направление) на пиксель, что в сумме дает 8x8x2 = 128.

Гистограмма представляет собой вектор из 9 интервалов (чисел), соответствующих углам 0, 20, 40, 60… 160.

Вклады всех пикселей в ячейках 8 × 8 складываются в режиме скользящего окна для создания гистограммы с 9 ячейками.

Шаг 4 - нормализовать и визуализировать результат

Градиенты изображения чувствительны к вариациям световых эффектов. В идеале мы хотим, чтобы наш дескриптор не зависел от вариаций освещения. Таким образом, мы должны «нормализовать» гистограмму, чтобы градиенты не зависели от вариаций освещения.

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

Чтобы вычислить окончательный вектор признаков для всего фрагмента изображения, векторы 36 × 1 объединяются в один гигантский вектор.

Простую реализацию HOG можно найти в пакете Python под названием «skimage». Всего две строчки. Это так просто! Посмотри:

from skimage.feature import hog
#creating hog features
fd, hog_image = hog(resized_img, orientations=9, pixels_per_cell=(8, 8),cells_per_block=(2, 2), visualize=True, multichannel=True)

Подводя итог:

  1. Разделите изображение на небольшие участки, называемые ячейками или сетками, и для каждой ячейки вычислите гистограмму градиентов для пикселей внутри ячейки.
  2. Разделите каждую ячейку на угловые интервалы в соответствии с ориентацией градиента.
  3. Пиксель каждой ячейки вносит взвешенный градиент в соответствующий угловой интервал.
  4. Нормализованная группа гистограмм представляет гистограмму блоков. Набор этих гистограмм блоков представляет собой дескриптор.

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

Глубокое обучение - для экспертов, экспертами. Мы используем наш многолетний опыт, чтобы еженедельно доставлять в ваш почтовый ящик лучшие ресурсы для глубокого обучения.

Алгоритмы обнаружения объектов для нейронных сетей

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

Чтобы познакомиться с CNN, прочтите эту статью.

R-CNN (региональные CNN)

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

Проблемы с R-CNN

Обучение модели R-CNN является дорогостоящим и медленным, потому что:

  • Мы должны извлечь 2000 регионов для каждого изображения на основе выборочного поиска.
  • Мы также должны извлекать функции, используя CNN для каждой области изображения. Предположим, у нас есть N изображений - количество функций CNN будет N * 2000.

Эти процессы в совокупности делают R-CNN очень медленным. Прогнозирование каждого нового изображения занимает около 40–50 секунд, что существенно делает модель громоздкой и практически невозможной для построения при работе с гигантским набором данных.

Лучшая альтернатива: YOLO

Архитектура YOLO основана на CNN с использованием якорных ящиков и зарекомендовала себя как метод обнаружения объектов для широкого круга задач, таких как обнаружение транспортных средств на дороге для мониторинга трафика, обнаружение людей на изображении и т. Д. YOLO использует F -CNN (полностью сверточная нейронная сеть). Он передает входное изображение (nxn) один раз через F-CNN и выводит прогноз (mxm).

Таким образом, архитектура разделяет входное изображение на сетку mxm и для каждой сетки генерирует 2 ограничивающих прямоугольника и вероятности классов для этих ограничивающих прямоугольников.

Граничные рамки содержат потенциальные объекты и вероятности классов, которые соответствуют классу объекта.

Из оригинальной статьи-

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

Области изображения с высокими показателями считаются обнаружениями.

Для справки здесь ссылка на оригинал статьи.

Функция потери YOLO

YOLO прогнозирует несколько ограничивающих рамок для каждой ячейки сетки. Чтобы вычислить потери для истинного положительного результата, мы хотим, чтобы только один из них отвечал за объект. Для этого выбираем ящик с наибольшим значением IoU (I ntersection Over Union) с наземной истиной.

YOLO использует сумму квадратов ошибок между предсказаниями и истиной для расчета потерь. Функция потерь состоит из:

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

Утрата классификации

Для каждого обнаруженного объекта потеря классификации в каждой ячейке является квадратом ошибки условных вероятностей класса для каждого класса:

Потеря локализации

Потеря локализации измеряет разницу между предсказанными местоположениями и размерами ограничивающей рамки.

Утрата уверенности

Если объект обнаружен в коробке, потеря достоверности (измерение объектности коробки) составляет:

Если объект не обнаружен в поле, потеря уверенности составляет:

Из-за проблемы дисбаланса, т.е. поскольку большинство прямоугольников не содержат каких-либо объектов или большинство ограничивающих прямоугольников будут иметь только часть объекта или только фоновый шум, мы обучаем модель обнаруживать фон чаще, чем объекты. Чтобы исправить это, мы уменьшаем эту потерю с коэффициентом λ noobj (по умолчанию: 0,5).

Окончательное поражение

Окончательная потеря добавляет вместе потери локализации, достоверности и классификации.

Преимущества YOLO

  1. YOLO является быстрым и эффективным для обработки в реальном времени.
  2. YOLO обнаруживает один объект на каждую ячейку сетки. Таким образом, он вводит пространственное разнесение при прогнозировании, и все прогнозы делаются за один проход сети.
  3. Прогнозы или обнаружения делаются из одной сети. Таким образом, YOLO можно обучать от начала до конца для повышения точности.

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

  1. YOLO накладывает строгие пространственные ограничения на предсказания ограничивающей рамки. Каждая сетка может предсказать только два блока и один класс. Таким образом, становится трудно обнаруживать более мелкие объекты, которые появляются группами.
  2. В сети сложно найти новые или необычные соотношения сторон для ограничивающих рамок.
  3. Небольшая ошибка в большом поле, как правило, нормально, но небольшая ошибка в маленьком поле имеет гораздо большее влияние на долговые расписки (Intersection Over Union). Таким образом, наш основной источник ошибок - неправильная локализация.

Интересные источники для начала работы с этими алгоритмами

Для HOG-

  1. Https://github.com/preethampaul/HOG
  2. Https://www.learnopencv.com/histogram-of-oriated-gradients/

Для ЙОЛО-

  1. Https://www.pyimagesearch.com/2018/11/12/yolo-object-detection-with-opencv/

Заключение

В этом посте мы обрисовали в общих чертах два наиболее часто применяемых алгоритма обнаружения объектов - HOG и YOLO. HOG - это дескриптор функции, который, как было доказано, хорошо работает с SVM и аналогичными моделями машинного обучения, тогда как YOLO используется нейронными сетями на основе глубокого обучения. Бывают случаи, когда эти алгоритмы работают хорошо - с другой стороны, ведутся тщательные исследования в области обнаружения объектов, чтобы более эффективно использовать их в реальном времени.

Все эти усилия для того, чтобы машина смотрела нашими глазами!

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

Являясь независимой редакцией, Heartbeat спонсируется и публикуется Comet, платформой MLOps, которая позволяет специалистам по данным и группам машинного обучения отслеживать, сравнивать, объяснять и оптимизировать свои эксперименты. Мы платим участникам и не продаем рекламу.

Если вы хотите внести свой вклад, отправляйтесь на наш призыв к участникам. Вы также можете подписаться на наши еженедельные информационные бюллетени (Deep Learning Weekly и Comet Newsletter), присоединиться к нам в » «Slack и подписаться на Comet в Twitter и LinkedIn для получения ресурсов, событий и гораздо больше, что поможет вам быстрее создавать лучшие модели машинного обучения.