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

В статье 2001 года Быстрое обнаружение объектов с использованием усиленного каскада простых функций Виолы и Джонса они представляют метод установки прямоугольных вручную созданных фильтров по изображению, чтобы извлекать черты лица, коррелирующие с чертами лица. Извлеченные признаки передаются классификатору, который узнает, какие функции более значимы, чем другие, но не изменяет сами фильтры. Фактически, эта задача на современном жаргоне называется классификацией изображения, потому что в ней отсутствует предсказание локализации объекта на изображении, но она демонстрирует, как выполняется этот процесс, и, в принципе, вы можете разбить исходное изображение на множество фрагментов. и запустить предложенный классификатор для каждого из них и таким образом локализовать объект (но вам придется использовать множество предположений о размере объектов на изображениях).

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

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

Учитывая изображение с объектом, содержащимся в прямоугольнике GT (сокращение от Ground Truth), мы хотели бы, чтобы наша модель предсказывала ограничивающий прямоугольник BB такое, что:

IoU (BB, GT) ›порог

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

Как эти задачи решаются совместно?

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

Предполагается, что вход в классификационную сеть содержит единственный объект. Классификатор, за исключением двух последних уровней, состоит из структуры, называемой Feature Extractor (F.E.). Существует множество вариантов архитектуры FE (например, ResNet, DenseNet, Mobilenet и т. Д.), Но в основном FE представляет собой последовательность слоев свертки с функциями активации, создающими несколько карт характеристик, которые проходят по сети, и иногда операция пространственного сжатия, называемая maxpooling (с целью сохранения разумного объема вычислений во время расширения функции). Во время обучения F.E. учится представлять важные атрибуты на различных картах функций. В то время как первые слои ограничиваются представлением только простых атрибутов, таких как границы и простые формы, сеть учится комбинировать их сложным образом, чтобы конечные характеристики FE могли представлять атрибуты высокого уровня, такие как «эта область имеет металлическую текстуру», «в этой области есть колеса», «в этой области есть заостренные уши», «в этой области есть пушистая текстура» и т. д.

Вывод средства извлечения признаков по-прежнему сохраняет некоторую пространственную информацию, хотя и с низким разрешением. Последний сегмент классификатора принимает окончательные карты характеристик и заменяет каждую карту ее средним пространственным значением (операция, называемая глобальный средний-пул). Эта операция уничтожает пространственную информацию и дает среднюю интенсивность каждого атрибута в исходном изображении, независимо от местоположения. Последний слой - это полностью связанный (F.C.) слой, который изучает лучшие коэффициенты для линейного комбинирования интенсивностей атрибутов таким образом, чтобы прогнозировать класс объекта. Например, коэффициенты, которые классификатор изучит для комбинирования характеристик «металлическая текстура» и «эта область имеет колеса», будут такими, что высокая интенсивность в обеих характеристиках приведет к предсказанию класса: «автомобиль».

Сети обнаружения

RCNN

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

  1. Первый модуль, который не является нейронным, представляет собой алгоритм выборочного поиска (представленный Uijlings et al. В 2012 году). Этот необучаемый алгоритм сканирует изображение и генерирует кадры, которые могут содержать объект, на основе нескольких атрибутов, созданных вручную. Алгоритм присваивает каждой из этих областей интересов (RoI ') «Оценка объектности», соответствующая уверенности в том, что этот патч действительно содержит объект с достаточно высоким IoU. Эти RoI уже локализуют объект по определению.
  2. Затем в средство извлечения признаков (которое было получено из уже обученной классификационной сети) загружаются исправления RoI с измененным размером, чтобы сгенерировать классификационную информацию для каждого исправления отдельно.
  3. Классификационный заголовок предсказывает вероятности классов для объекта в RoI.

На момент публикации RCNN был самым современным методом обнаружения объектов и имел более высокие оценки, чем любой существующий (не на основе CNN) метод обнаружения объектов. Однако у него было несколько недостатков:

  1. Механизм предложения региона не поддавался обучению.
  2. В результате выборочного поиска были получены тысячи RoI с высоким уровнем перекрытия для каждого изображения. Это означает, что каждый пиксель проходит через экстрактор признаков, выполняя одни и те же вычисления тысячи раз для каждого изображения. В результате обработка одного изображения занимала очень много времени: обработка одного изображения занимала 47 секунд.

Гиршик продолжил улучшать модель с помощью Fast-RCNN, а позже сотрудничал с другими исследователями для разработки Faster-RCNN .

Fast-RCNN

Fast-RCNN также начинается с необучаемого алгоритма, который генерирует предложения для объектов. Но главное достижение состоит в том, что изображение проходит через экстрактор признаков только один раз. Патчи, соответствующие RoI, обрезаются из вывода FE и передаются в две параллельные ветви: первая - это головка классификатора, содержащая несколько сверток, за которыми следует глобальный средний пул и полностью связанный слой, а вторая ветвь - это небольшая сеть. обучено с помощью потери регрессии, которая предсказывает масштаб и центр объекта, содержащегося в этой RoI. В некотором смысле - эта ветка уточняет координаты, предложенные исходным выборочным поиском. Умный способ избежать многократных проходов через F.E. получил ускорение на x150 (0,32 секунды на изображение) по сравнению с RCNN. Обратите внимание, что по-прежнему существует некоторая неэффективность, поскольку перекрывающиеся пиксели в выводе F.E. обрабатываются с нуля для каждого RoI, но, тем не менее, это серьезное улучшение.

Мы не будем подробно останавливаться на механизмах потерь, но я хотел бы отметить, что процесс регрессии ящика философски отличается от классификации, по крайней мере, в одном смысле: во время обучения классификации мы загружаем модель 1-горячими векторами GT, и она учится воспроизвести этот вектор как можно лучше в задаче прямоугольной регрессии, где размер объекта, скажем, (30, 55) пикселей, значения (30, 55) нигде не появляются в реальной действительности, и все же сеть учится производить их, чтобы достичь высокого IoU с объектом наземной истины.

Быстрее-RCNN

В основе Faster-RCNN лежит понимание того, что репрезентативная мощность экстрактора признаков достаточно высока, поэтому внешний генератор RoI не требуется. Все изображение подается один раз в экстрактор признаков, а его выходные данные расходятся в классификационную головку и сеть предложений региона (RPN), которая генерирует предложения и оценки объектности. На этот раз головка прямоугольной регрессии получает выходной сигнал F.E. для всего изображения, а не кадры, соответствующие RoI. Не-нейронный код перебирает предложения - для каждого предложения выходные данные F.E., соответствующие этому патчу, отправляются классификатору.

Сравнение результатов различных архитектур - непростое дело: многие наборы тестов были разработаны и обновлены за годы для решения проблем обнаружения, и разные исследователи могут цитировать результаты своих моделей на разных наборах данных. Мы можем справедливо сравнивать модели, используя современную структуру, которая поддерживает обучение и тестирование различных моделей. Когда-то таким фреймворком является GluonCV (разработанный Amazon). В их зоопарке моделей обнаружения есть много моделей, которые были обучены и протестированы в сопоставимых условиях.

Как видно, модели Faster RCNN (с различными экстракторами функций) достигают наивысшей средней точности. Однако эти архитектуры очень медленные. Другие архитектуры, такие как YOLO и CenterNet, также достигают высокой точности, но намного быстрее. Семейство моделей SSD (с использованием экстракторов функций VGG и Mobilenet) заменяется этой моделью.

Якоря

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

Каждой выходной ячейке в прямоугольной регрессионной головке детектора назначается несколько (обычно 3 или 5) якорей, различающихся по форме. Якорь - это прямоугольник (W, H) (W, H разные для 5 якорей) с центром в центре выходной ячейки.

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

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

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

Использование якорей N позволяет сети прогнозировать до N объектов с центром в одном пикселе (например, кошачий сон на кушетке), не идя на компромисс и не прогнозируя смесь класса кошка-кушетка.

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

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

Например - предположим, что детектор класса 80 с входной формой 224x224 и выходной формой 7x7 ячеек, каждая из которых имеет 3 якоря. Тогда каждое изображение будет иметь 7x7x3x80 = 11 760 ограничивающих прямоугольников (для каждого класса есть копия ограничивающего прямоугольника. Причину см. В следующем разделе).

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

NMS - не максимальное подавление

Этот процесс считается частью постобработки.

NMS - это жадный алгоритм, который перебирает все классы и для каждого класса проверяет наложения (IoU - Intersection over Union) между всеми ограничивающими рамками. Если IoU между двумя блоками одного и того же класса превышает определенный порог (обычно 0,7), алгоритм приходит к выводу, что они относятся к одному и тому же объекту, и отбрасывает блок с более низким показателем достоверности (который равен продукт оценки объектности и условной вероятности класса).

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

NMS требует очень больших вычислительных ресурсов: если имеется n блоков, алгоритм выполняет O (n²) сравнений и быстро становится серьезным узким местом, особенно если входное изображение большое, а процессор слабый.

Было изобретено несколько способов уменьшить это узкое место NMS. Один состоит в том, чтобы просмотреть коробки и удалить те, которые имеют очень низкий уровень достоверности, еще до NMS. Это помогает, например, избавиться примерно от 90% блоков в наборе данных VOC-Pascal. Хотя этот метод полезен, он по-прежнему требует O (n) операций, а для остальных блоков высокой достоверности по-прежнему требуется NMS.

Другой подход - отказаться от методологии привязки и использовать архитектуру прогнозирования, которая по своей сути генерирует меньше предложений. CenterNet - такая архитектура (которая мне лично нравится), и я подробно остановлюсь на ней в одной из следующих статей.