Быстрое R-CNN обнаружение объектов с помощью PyTorch

МЕНЮ


Искусственный интеллект
Поиск
Регистрация на сайте
Помощь проекту

ТЕМЫ


Новости ИИРазработка ИИВнедрение ИИРабота разума и сознаниеМодель мозгаРобототехника, БПЛАТрансгуманизмОбработка текстаТеория эволюцииДополненная реальностьЖелезоКиберугрозыНаучный мирИТ индустрияРазработка ПОТеория информацииМатематикаЦифровая экономика

Авторизация



RSS


RSS новости

Новостная лента форума ailab.ru


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

Отличие классификации изображений и распознавания объектов

Классификация изображений — мы присваиваем метку класса входному изображению. Например, если задано входное изображение кошки, то выходным сигналом алгоритма классификации изображений является метка "кошка".

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

На рисунке выше показана разница между классификацией изображений и обнаружением объектов.

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

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

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

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

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

Мы можем рассматривать обнаружение объекта как двухэтапный процесс:

  1. Установить ограничительные рамки, содержащие объекты, такие, что каждая ограничительная рамка имеет только один объект.
  2. Классифицируйте изображение внутри каждого ограничивающего прямоугольника и назначьте ему метку.

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

Метод скользящего окна

Большинство классических методов компьютерного зрения для обнаружения объектов, таких как каскады HAAR и HOG + SVM, используют подход скользящего окна для обнаружения объектов.

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

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

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

В результате скользящие окна используются только при обнаружении одного класса объектов с фиксированным соотношением сторон. Например, детектор лица на основе HOG + SVM или HAAR в OpenCV использует подход скользящего окна. В случае детектора лица, сложность управляема потому что только квадратные ограничивающие рамки оценены на различных масштабах.

Распознавание объектов R-CNN

Классификаторы изображений на основе сверточной нейронной сети (CNN) стали популярными после того, как метод на основе CNN выиграл ImageNet Large Scale Visual Recognition Challenge (ILSVRC) в 2012 году.

Поскольку каждый детектор объектов имеет классификатор изображений в своей основе, изобретение детектора объектов на основе CNN стало неизбежным.

Было две проблемы, которые необходимо было преодолеть:

  1. Классификаторы изображений на основе CNN были вычислительно очень дорогими по сравнению с традиционными методами, такими как каскады HOG + SVM или HAAR.
  2. Сообщество становилось все более амбициозным. Люди хотели построить многоклассовый детектор объектов, который мог бы обрабатывать различные пропорции в дополнение к различным масштабам.

Поэтому подход на основе скользящего окна для обнаружения объектов был исключен. Это было слишком дорого.

Исследователи начали работать над новой идеей обучения модели машинного обучения, которая могла бы предложить расположение ограничительных рамок, содержащих объекты. Эти ограничительные боксы были названы Region Proposals или Object Proposals.

Object Proposals представляли собой просто списки ограничивающих прямоугольников с небольшой вероятностью содержания объекта. Он не знал и не заботился о том, какой предмет содержится в ограничительной рамке.

Алгоритм Object Proposals выводит список из нескольких сотен ограничивающих прямоугольников в разных местах, масштабах и соотношениях сторон. Большинство этих ограничивающих прямоугольников не содержат никаких объектов.

Почему Object Proposals все еще полезны?

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

Один из первых подходов, который использовал Object Proposals, был назван R-CNN ( сокращение от регионов с функциями CNN) Россом Гиршиком и др.

Они использовали алгоритм под названием селективный поиск для обнаружения 2000 Object Proposals и запустили классификатор изображений на основе CNN + SVM на этих 2000 ограничительных полях.

Точность R-CNN в то время была на уровне техники, но скорость все еще была очень медленной ( 18-20 секунд на изображение на графическом процессоре )

Алгоритм быстрого распознавания объектов R-CNN

В R-CNN каждый прямоугольник был самостоятельно классифицирован классификатором изображения. Было представлено 2000 предложений по регионам, и классификатор изображений рассчитал карту объектов для каждого предложения. Этот процесс был дорогим.

В последующей работе Росса Гиршика он предложил метод под названием Fast R-CNN, который значительно ускорил обнаружение объектов.

Идея заключалась в том, чтобы рассчитать одну карту объектов для всего изображения вместо 2000 карт объектов для 2000 предложений региона. Для каждого Object Proposals слой объединения областей интереса (RoI) извлекает вектор объектов фиксированной длины из карты объектов. Каждый вектор признаков затем использовался для двух целей

  1. Классификация региона в один из классов (например, собака, кошка, фон ).

2. Улучшение точность исходного ограничивающего прямоугольника с помощью регрессора.

Faster R-CNN

В Fast R-CNN, несмотря на то, что вычисление для классификации предложений 2000 регионов было общим, часть алгоритма, которая генерировала Object Proposals, не разделяла никаких вычислений с частью, которая выполняла классификацию изображений.

В последующей работе, названной Faster R-CNN, основное понимание заключалось в том, что две части — вычислительные Object Proposals и классификация изображений — могут использовать одну и ту же карту объектов и, следовательно, разделять вычислительную нагрузку.

Сверточная нейронная сеть использовалась для получения карты признаков изображения, которая одновременно использовалась для обучения сети Object Proposals и классификатора изображений. Благодаря этому совместному вычислению было значительно улучшено быстродействие обнаружения объектов.

Расознование объектов с PyTorch [ код ]

В этом разделе мы узнаем, как использовать faster R-CNN с PyTorch. Мы будем использовать предварительно подготовленную модель, включенную в torchvision. Все предварительно обученные модели в PyTorch можно найти в torchvision.model

Если вы хотите узнать больше обо всех этих моделях и многих других приложениях и концепциях глубокого обучения и компьютерного зрения в деталях, ознакомьтесь с официальными курсами глубокого обучения и компьютерного зрения OpenCV.org.

Входные и выходные данные

Предварительно обученная более быстрая модель R-CNN ResNet-50, которую мы собираемся использовать, ожидает, что входной тензор изображения будет иметь форму [n, c, h, w] и минимальный размер 800px.

  • N — количество изображений
  • c — количество каналов, для изображений RGB его 3
  • h — высота изображения
  • w — ширина изображения

Модель вернет:

  • Ограничительные рамки [x0, y0, x1,y1] все все предсказанные классы формы (N, 4), где N-число классов, предсказанных моделью, которые будут присутствовать на изображении.
  • Метки всех прогнозируемых классов.
  • Оценки каждой предсказанной метки.

Натренированная модель

Загрузите предварительно обученную модель из torchvision с помощью

Вторая строчка загрузит предварительно обученную модель Resnet50 Faster R-CNN с предварительно обученными весами.

Определите имена классов, заданные официальными документами PyTorch

Мы можем видеть некоторые N/A в списке, поскольку несколько классов были удалены в более поздних работах. Мы пойдем по списку PyTorch.

Прогнозирование модели

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

  • Изображение получается из пути к изображению
  • Изображение преобразуется в тензор изображения с помощью преобразований PyTorch
  • Изображение передается через модель для получения прогнозов
  • Класс, координаты коробки получены

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

Далее мы определим конвейер, чтобы получить путь к изображению и получить выходное изображение.

  • предсказываем результат, полученный по методу get_prediction
  • для каждого прогноза рисуется ограничивающий прямоугольник и записывается текст с помощью OpenCV
  • выводится итоговое изображение

Вывод данных

Теперь давайте использовать API конвейера, который мы создали, чтобы обнаружить объект на изображениях. Предварительная подготовка модели занимает около 8 секунд для вывода в CPU и 0,15 секунды в графическом процессоре NVIDIA GTX 1080 Ti.

Пример 3.5.1Скачаем изображение для работы

!wget https://www.wsha.org/wp-content/uploads/banner-diverse-group-of-people-2.jpg -O people.jpg

Будем использовать изображение с функцией api для отображения выходных данных.

Пример 3.5.2

Давайте больше примеров

!wget https://hips.hearstapps.com/hmg-prod.s3.amazonaws.com/images/10best-cars-group-cropped-1542126037.jpg -O car.jpg

object_detection_api('./car.jpg', rect_th=6, text_th=5, text_size=5)

Пример 3.5.3

!wget https://cdn.pixabay.com/photo/2013/07/05/01/08/traffic-143391_960_720.jpg -O traffic.jpg

object_detection_api('./traffic.jpg', rect_th=2, text_th=1, text_size=1)

Пример 3.5.4

!wget https://images.unsplash.com/photo-1458169495136-854e4c39548a -O girl_cars.jpg

object_detection_api('./girl_cars.jpg', rect_th=15, text_th=7, text_size=5, threshold=0.8)


Источник: m.vk.com

Комментарии: