Абстрактный

В этом обзоре мы обсудим, как быстрее работает RCNN. Если вы уже знакомы с более быстрой RCNN, вам может быть интересно, что способ ее работы может не быть проблемой сам по себе, но понимание способа обучения и тестирования более быстрой модели RCNN является важной частью. Как выбрать цели для модели RPN (сеть региональных предложений) или модели RCNN, что происходит, когда размер ROI (области интереса) меньше, чем сам пул, как выбираются поля привязки на изображении и так далее. Не волнуйтесь, если вы не знакомы с этими понятиями. Мы пройдем каждый из них один за другим. Но сначала вы должны знать, что знание этих концепций не является проблемой. То, как они работают, и детали их реализации важны, и это также будет объяснено в этой статье. Ссылка на код Faster RCNN находится в https://github.com/Parsa33033/Faster-RCNN.

1. Введение

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

Теоретически ограничивающая рамка представлена ​​координатами центра рамки, а также ее высотой и шириной. Но для реализации кода и рисования и … мы используем xmin, ymin, xmax, ymax, которые относятся к минимуму x и y и максимуму x и y соответственно. Всякий раз, когда нам нужно использовать формулы в теории (из более быстрой статьи RCNN), мы используем координаты центра, высоту и ширину, которые мы объясним позже. Теперь предположим, что мы нашли ограничивающую рамку вокруг объекта. Как мы на самом деле классифицируем то, что находится внутри ограничивающих рамок.

За прошедшие годы были созданы различные виды моделей CNN, которые могут оптимально классифицировать изображение. Каждая из этих моделей имеет разные атрибуты, такие как разное количество слоев, способ соединения слоев и так далее. В качестве некоторых из этих моделей можно упомянуть AlexNet, VGG16, VGG19, ResNet и Inception Network. Теперь, чтобы эти модели имели одинаковый результат для категоризации, они должны использовать один и тот же набор данных, верно? Вот тут-то и появляется ImageNet. ImageNet — это база данных изображений и тысячи различных классов.

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

Чтобы объяснить, как работает более быстрая RCNN, мы сначала объясним, как работает RCNN и ее более поздняя версия, быстрая RCNN.

1.1 RCNN

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

1.2 Быстрый RCNN

Быстрая RCNN, как следует из названия, быстрее обычной RCNN. Это работает с передачей изображения предварительно обученной CNN, такой как VGG16 или ResNet, для получения карты функций. Карта объектов на самом деле является выходным трехмерным массивом некоторого среднего слоя классификатора CNN. Почему? Мы обсудим причину этого, объясняя более быстрый RCNN. Но пока вы должны знать, что в быстрой RCNN карта объектов является производной, и алгоритм выборочного поиска, упомянутый ранее, будет находить регионы из карты объектов. Теперь в RCNN, который, кстати, использует выборочный поиск для нахождения 2000 регионов, отдает каждый из регионов в отдельный классификатор CNN. сколько времени это займет, верно? Но в быстрой RCNN все изображение проходит через предварительно обученную CNN (VGG16 или …) один раз, и выборочный поиск начинается с карты признаков и для нахождения классов объектов регионов используется другая сетевая модель, которая называется RCNN (отличается от метод RCNN, упомянутый в предыдущем разделе), отвечает за классификацию регионов. Теперь есть одна проблема с быстрым RCNN. если выбран регион на карте объектов, размер ограничивающего прямоугольника региона на карте объектов явно отличается от того, почему регион выбирается на изображении. Это означает, что если мы выберем регион из карты объектов с помощью алгоритма выборочного поиска, если размер региона из карты объектов будет переведен в размер изображения, размер региона, выбранного из карты объектов, будет отличаться от размера области, выбранной на изображении. Для преодоления этой проблемы классификатор выполняет работу регрессора, а также классификатора. Регрессор найдет разницу между размером области на карте объектов и размером реального ограничивающего прямоугольника на изображении. Я знаю, что это стало немного беспокойно, но все будет объяснено в более быстрой RCNN.

2. Быстрее RCNN (ссылка на код)

Faster RCNN работает так же, как и Fast RCNN. Он берет карту объектов с изображения, а затем пытается найти оттуда области интереса (ROI), за исключением того, что в более быстрой RCNN мы используем не выборочный поиск, а полностью сверточную модель, называемую сетью предложений регионов (RPN).

2.1. CNN и карта функций

Как упоминалось ранее, для классификации изображений существует множество моделей, которые эффективно работают для классификации, и в основном они используют базу данных ImageNet. В статье Faster RCNN они использовали VGG16. VGG16 берет изображение размера и, если он обучен на наборе данных ImageNet с 14 миллионами изображений, выдает результат 1000 нейронов для классификации. Вы можете увидеть структуру VGG16 на изображении ниже.

Как видно из рисунка выше, есть много карт объектов от первого слоя до слоя размером . Карта объектов, которая использовалась в статье, на самом деле является картой объектов, извлеченной из слоя 17, которая показана стрелкой на рисунке. Этот слой имеет размер . Таким образом, изображение уменьшено в 16 раз (оно стало в 16 раз меньше по высоте и ширине). Но тут есть подвох. Нам не нужно классифицировать изображение, поэтому полносвязные слои от слоя 18 и выше избыточны. Поэтому мы будем использовать VGG16 без полносвязных слоев. Что хорошего это принесет тогда. Во-первых, теперь вы можете использовать разные размеры для вашего изображения в VGG16, и вам не нужно изменять размер каждого изображения и соответствующих им ограничивающих рамок до размера . Конечно, размер карты объектов также меняется. Так, например, если вы дадите изображение размера (в более быстрой бумаге RCNN меньшая сторона изображения всегда равна 600), вы получите (поскольку уменьшение слоя 17 на 16) карту признаков размера .

Итак, почему мы все равно используем карту объектов? Каждая ячейка в определенной строке и столбце карты объектов (которая, кстати, в слое 17 VGG16 содержит массив из 512 элементов) представляет область изображения, соответствующую этой конкретной ячейке, и сохраняет информацию об этой области изображения. изображение.

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

2.2. Якоря и якорные ящики

Как правило, каждая ячейка карты объектов называется привязкой. Таким образом, якорь — это ячейка в строке и столбце слоя 17 VGG16, который представляет собой область 16 на 16 в исходном изображении. На рисунке ниже якоря показаны красными прямоугольниками.

Так что же такое Anchor Box? Каждый Якорь содержит несколько Якорей с разным масштабом и соотношением сторон. В оригинальной статье они использовали 9 якорных ящиков, в каждом из которых, скажем, 64, 128, 256 различных масштабов и соотношения 0,5, 1 и 2. Соотношение на самом деле означает отношение высоты к ширине анкерного ящика. Но есть одна загвоздка. Если отношение Anchor Box равно 2, а масштаб равен 128, вы не можете использовать 256 пикселей для высоты и 128 пикселей для ширины или 128 пикселей для высоты и 64 пикселя для ширины. Если коэффициент равен 2, а масштаб равен 128, это означает, что вы должны выбрать высоту и ширину таким образом, чтобы площадь поля Anchor стала равной .

Блоки привязки предназначены для того, чтобы стать областями интересов путем декодирования регрессоров (что в основном приводит к изменению формы блоков привязки, чтобы они стали ближе к истине). Но есть важный фактор. Каждый якорь содержит 9 ящиков для якоря. Помните, что каждый якорь имел размер 16 на 16 пикселей в исходном изображении. Центр каждой из якорей является центром якоря. Но это не означает, что Якоря должны находиться внутри Якоря. Якоря имеют размеры 16 на 16, но якорные поля могут быть разных размеров, например, 90,51 на 181,02 пикселя, что дает площадь для масштаба 128, как упоминалось ранее.

Как показано на рисунке выше, вы можете видеть поля привязки для привязки с (xmin,ymin) из (400 400), что, кстати, означает, что центр привязки (и блоков привязки) находится в координате (408 408). . Помните, что якоря были размером 16 на 16. Ну, половина из них будет 8. Следовательно, центральная точка будет (408,408).

Теперь в нашем примере для изображения размером у нас есть карта признаков размера в слое 17 VGG16. Это означает, что у нас есть Якоря, каждый из которых содержит 9 различных Якорей Якорей, в результате чего получается около 20000 Якорей. Как упоминалось ранее, эти Якоря не содержатся внутри Якорей, а имеют только общие центры, и это может привести к пересечению между Якорями из разных Якорей. Имейте в виду, что блоки привязки, выходящие за границу изображения, отбрасываются (в некоторых реализациях обрезаются).

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

Тем не менее, цель состоит в том, чтобы найти Якорные Рамки, которые наиболее похожи на ограничивающие рамки наземной истины. Но как найти это сходство? Мы делаем это, вычисляя долговую расписку.

2.3. Пересечение союза (IOU) блоков привязки и ограничивающих блоков наземной истины

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

2.4. Региональная сеть предложений (RPN)

Сеть региональных предложений — это полностью сверточная модель, а это означает, что она имеет только сверточные слои, и цели также должны быть свертками. Как следует из названия, эта сеть предназначена для предложения регионов, таких как алгоритм выборочного поиска. Отличие в том, что стоимость в РПН намного дешевле.

Входными данными RPN является карта объектов, а выходными данными будут два трехмерных массива, оба с той же высотой и шириной, что и карта объектов, но с разным количеством каналов, где каждая ячейка в строке и столбце относится к каждому якорю и количеству каналы, относящиеся к блокам привязки (назовем k числом блоков привязки на привязку, где в нашем примере k=9 ). Один вывод предназначен для классификации блоков привязки как переднего плана (объект) или фона (не объект), а другой вывод предназначен для регрессоров. Регрессоры находят различия в координатах центра (x, y), ширине и высоте якорных рамок и ограничивающих рамок истинности земли. Дайте число, которое поможет изменить форму якорных ящиков, чтобы они стали ближе к истине.

2.5. Тренировочный РПН

RPN принимает карту объектов в качестве входных данных, а затем передает ее через сверточный слой с 512 фильтрами 3 на 3 и заполнением 1, чтобы получить ту же форму, что и карта объектов. Затем результат разделяется на два выхода с той же высотой и шириной, что и карта объектов, где один выход имеет 2k каналов, где каждые две последовательные ячейки в третьем измерении (каналы) определяют поле привязки. Одна ячейка канала для классификации поля привязки как переднего плана (если долговая расписка между полем привязки и ограничивающим прямоугольником наземной истины больше 0,5), а другая ячейка для классификации поля привязки как фона (если долговая расписка между полем привязки и ограничивающей рамкой наземной истины меньше чем 0,1). конечно, Anchor Boxes с 0,1 ‹ IOU ‹ 0,5 между Anchor Boxes и наземными ограничивающими прямоугольниками не очень важны и могут быть отброшены. Итак, для вывода классификатора у нас есть три разных варианта.

1) Передний план = 1, Фон = 0 для IOU≥0,5

2) Передний план = 0, Фон = 1 для IOU≤0,1

3) Передний план = 0, Фон = 0 для 0,1‹IOU‹0,5

Например, для Anchor у нас есть 2K каналов, в которых каждые 2 последовательных ячейки представляют классификатор переднего плана и фона для определенного Anchor Box. Очевидно, что расположение каких двух ячеек к какому Anchor Box в каналах относится, зависит от Реализатора.

Другим выходом является регрессор, который находит дельты для Anchor Box (координаты центра, ширина и высота). Как вы уже поняли, якорные блоки имеют фиксированный размер. Нам нужно перевести их во что-то похожее с ограничивающими прямоугольниками истинности земли. Итак, как мы это сделаем? Путем обучения регрессора дельтам (различиям) между якорными прямоугольниками и ограничивающими прямоугольниками истинности. Очевидно, нам нужно использовать дельты только для ячеек привязки переднего плана. Но мы сказали обучение. Это означает, что нам нужны цели. Таким образом, цели будут иметь одинаковую высоту и ширину карты объектов и 4k для количества каналов. Регрессор для каждого блока привязки определенного блока привязки (строки и столбца) рассматривается как дельта центральных координат (x, y), ширины и высоты между этим конкретным блоком привязки и ограничивающим прямоугольником истинности. Обратите внимание, что дельты рассчитываются только для тех полей привязки, которые считаются передним планом, а другие значения поля привязки (в каналах 4K) получат нулевое значение для цели.

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

Для функции потерь классификатор использует функцию кросс-энтропийных потерь, а регрессор использует функцию L1 Smooth.

2.6. Кодирование блоков привязки для регрессоров

Кодирование различий между якорной рамкой и ограничивающей рамкой наземной истины очень просто. Оба этих блока имеют x и y для координат центра, а также ширину и высоту (x, y, w, h). Мы будем изображать Anchor Boxes с помощью a и ограничивающих прямоугольников наземной истины как b.

2.7. Интересующие регионы (ROI)

После обучения RPN, которое может быть обучено стохастически для сквозного обучения (это означает, что RPN и сеть RCNN будут обучены для одного изображения) или может быть полностью обучено само по себе, а затем использовано, мы получаем результат от него. Другими словами, мы прогнозируем интересующие области изображения с помощью обученного RPN (или детского RPN для сквозного обучения).

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

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

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

2.8. Не максимальное подавление

В регионах, полученных из РПН, очень много передних планов. Многие из этих передних планов пересекаются друг с другом. Таким образом, группа этих передних планов имеет самые высокие долговые расписки с коробками наземной правды. Теперь блоки переднего плана, которые имеют IOU>0,5 с этими блоками переднего плана с высокой вероятностью, должны быть отброшены. Почему? Потому что хороший ящик уже найден, а другие ящики с высокой долговой распиской с этим хорошим ящиком не нужны.

2.9. Пакет рентабельности инвестиций

После немаксимального подавления мы получаем 2000 хороших областей интереса, которые можно предложить модели RCNN. Кроме того, из этих 2000 областей выбирается пакет из 256 областей с наивысшей вероятностью (выходные данные классификатора RPN могут использоваться для присвоения вероятностей блокам переднего и заднего плана, поскольку выходные данные находятся в диапазоне от 0 до 1).

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

2.10. Объединение ROI (ссылка на код)

Модель RCNN — это полносвязный классификатор, который должен принимать входные данные определенной формы. Мы знаем, что регионы различаются по высоте и ширине, поэтому все они должны быть преобразованы в бассейн размером , а затем сплющены. Как мы делаем это задание? Делим высоту и ширину области на 7 и берем максимум каждой ячейки, полученный в результате этого деления. Что делать, если высота и ширина области интереса меньше, чем пул. Итак, мы берем значение региона и помещаем его в ячейку, соответствующую положению значения в пуле, а во все остальные места в этой ячейке пула ставим нули.

2.11. RCNN

RCNN на самом деле является классификатором регионов интереса. Он также делает еще одну вещь. Он выполняет работу по регрессии, как и RPN, для лучшего поиска ограничивающих рамок. Таким образом, он также имеет два отдельных выхода. Но на этот раз выходные данные представляют собой массив, а не трехмерный массив (это плотный слой). Итак, если у нас есть n классов, на одном выходе будет n+1 нейронов (дополнительный — для фона), а на другом выходе — регрессор с 4n нейронами.

Очевидно, что для обучения регрессора мы должны создать целевой вывод, как мы сделали с RPN, путем кодирования дельт между интересующими областями переднего плана и ограничивающими рамками наземной истины. Что касается классов, мы упомянули, что в наборе данных также есть классы для каждой ограничивающей рамки истинности. Остальное легко. Поставьте 1 в индексе класса ROI в целевом нейроне классификатора и 0 для остальных.

3. Как быстрее протестировать RCNN

Для проверки результатов мы используем оценку mAP. Ссылка на учебник находится в https://medium.com/@jonathan_hui/map-mean-average-precision-for-object-detection-45c121a31173

4. Код

Ссылка на более быстрый RCNN: https://github.com/Parsa33033/Faster-RCNN

пожалуйста, как репозиторий github, если вы нашли этот блог полезным! Спасибо!