Выпущенный в 2018 году, Mask R-CNN, разработанный Каймингом Хе и его командой в FAIR, является одним из самых мощных алгоритмов, например, сегментации. На Fractal.ai мы используем фреймворк Mask R-CNN для решения различных бизнес-задач. Это сообщение в блоге помогает пользователям понять, как это работает.

Mask R-CNN стал одним из самых мощных алгоритмов распознавания объектов в нашем стеке, и его варианты (с некоторыми изменениями в исходной статье) широко использовались здесь командой Fractal image в различных случаях использования. Маска R-CNN одновременно мощная и сложная. Приведенные выше диаграммы дают представление о том, как данные проходят через алгоритм Mask R-CNN. Мы считаем, что правильное понимание Mask R-CNN очень важно для настройки ее параметров и точно знать, где использовать этот алгоритм, а где не использовать.

Что делает Mask R-CNN?

Mask R-CNN - это расширение алгоритма обнаружения объектов Faster R-CNN с дополнительной головкой маски. Заголовок дополнительной маски позволяет нам сегментировать каждый объект по пикселям, а также извлекать каждый объект отдельно без какого-либо фона (что невозможно при семантической сегментации).

Насколько успешна маска R-CNN?

  • Mask R-CNN прост в обучении и добавляет лишь небольшие накладные расходы к Faster R-CNN, работающему со скоростью 5 кадров в секунду.
  • Mask R-CNN превзошел все существующие отдельные модели по каждой задаче, включая победителей конкурса COCO 2016.
  • Он дает ограничивающие рамки и маски сегментации для каждого объекта, что приводит к сегментации экземпляра.

Краткая история

Маска R-CNN является развитием ее предыдущих алгоритмов. Сначала по порядку:

  • R-CNN использовала выборочный поиск для выбора предложения на изображении. каждое предложение отправляется через модель глубокого обучения и извлекается вектор 2048. Независимые классификаторы обучаются для каждого класса по этим векторам, чтобы классифицировать объекты.
  • Fast R-CNN удалил обучение на классификаторах SVM и использовал уровень регрессии и уровень классификации. Они также применили выборочный поиск по карте функций вместо изображения, что устраняет необходимость отправки каждого предложения по всей сети.
  • Более быстрый R-CNN удалил выборочный поиск и использовал сеть глубокой свертки, называемую RPN (сеть предложений региона), для генерации предложений, что позволило обучить сквозную нейронную сеть за один этап.
  • Mask R-CNN - это расширение Faster R-CNN с дополнительным модулем для создания высококачественных масок сегментации для каждого изображения.

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

Подробный анализ эволюции написан здесь.

Быстрее R-CNN

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





Маска R-CNN

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

Есть три основных изменения от более быстрого R-CNN к маскированию R-CNN:
1. Использование FPN
2. Замена ROIPool с ROIAlign
3. Введение дополнительной ветки для генерации масок.

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

Еще одним важным изменением по сравнению с более быстрым -R-CNN будет замена ROI Pool на ROI Align. Пул ROI работал достаточно хорошо в случае обнаружения объектов, он включал грубые шаги квантования, которые оказывались катастрофическими в случае генерации предсказаний по маске.

Мы подробно обсудим согласование FPN и ROI в этом блоге в дальнейшем. Во-первых, давайте разберемся, как изображение проходит предварительную обработку перед отправкой в ​​сеть.

Предварительная обработка изображения

Некоторые этапы предварительной обработки применяются к изображению перед его отправкой в ​​сеть.

  1. Вычитание среднего: вектор среднего (3 X 1, соответствующий каждому цветовому каналу) - это среднее значение пикселей по всем обучающим и тестовым изображениям, вычитаемым из входных данных. изображение.
  2. Изменение масштаба: используются два параметра (целевой размер и максимальный размер). Размер более короткой стороны изменяется до заданного размера, а размер более длинной стороны изменяется соответственно с сохранением соотношения сторон. Однако, если новое значение для более длинной стороны превышает максимальный размер, то размер более длинной стороны изменяется до максимального значения, а измененное значение более короткой стороны изменяется со ссылкой на более длинную сторону, сохраняя соотношение сторон. Значения по умолчанию для размера цели и максимального размера - 800 и 1333 соответственно.
  3. Заполнение: это необходимо, когда задействованы сети пирамиды функций (FPN) (поясняется в следующем разделе). Все отступы выполняются только по крайнему правому и нижнему краю, поэтому не требуется никаких изменений в координатах целей, поскольку система координат основана на верхнем левом углу. Этот шаг не требуется, если мы не используем FPN.

Давайте разберемся с этим на примере:

Минимум двух сторон (600) здесь масштабируется до 800, а размер другого измерения изменяется с тем же масштабом. Поскольку вновь масштабированная сторона (1200) не кратна 32, она дополняется таким образом, чтобы результирующий размер был кратным ее (1216/32 = 38).

ПРИМЕЧАНИЕ. Высота и ширина изображения для этапов создания привязки и фильтрации будут приниматься как высота и ширина изображения с измененным размером, а не после заполнения.

Магистральная сеть функциональных пирамидальных сетей (FPN)

Faster R-CNN использует стандартную архитектуру Resnet для кодирования изображения. На каждом слое размер карт объектов уменьшается вдвое, а количество карт объектов удваивается. Мы извлекаем функции из 4 карт функций из архитектуры resnet-50 (выходы уровня 1, уровня 2, уровня 3, уровня 4), как показано на диаграмме. Для создания окончательных карт характеристик мы используем подход, называемый путь сверху-снизу. Мы начинаем с наименьшей карты функций и продвигаемся вниз к более крупным с помощью операций масштабирования. На диаграмме мы видим, что карта функций, сгенерированная слоем 2, сначала подвергается свертке 1 X 1, чтобы уменьшить количество каналов. до 256. Затем он поэлементно добавляется к выходным данным с повышенной дискретизацией из предыдущей итерации. Все выходные данные этого процесса подвергаются сверточному слою 3 X 3 для создания окончательных 4 карт характеристик (P2, P3, P4, P5). Пятая карта характеристик (P6) генерируется из операции максимального объединения из P5.

Обратите внимание на размеры здесь: наименьший размер карты функций, участвующий в операции увеличения выборки, составляет (w / 32, h / 32). Поэтому для нас важно убедиться, что размер входного тензора делится на 32. Давайте возьмем пример, пусть w = 800 и h = 1080. w / 32 = 25, h / 32 = 33,75, это означает, что карта функций будет иметь размер (25,33). При повышающей выборке размеры будут (50,66), которые должны быть поэлементно добавлены к другой карте функций размера (50,67). Это вызовет ошибку. Из-за этого, если мы используем FPN, входной тензор в этом случае должен быть кратен 32.

Сеть региональных предложений (RPN)

Каждая из созданных карт функций проходит через сверточный слой 3 X 3. Полученный результат передается в две ветви, одна из которых относится к оценкам объектов, а другая - к регрессорам ограничивающего прямоугольника. Здесь мы используем только один шаг привязки для пирамиды функций (поскольку у нас уже есть функции разных размеров в пирамиде, чтобы заботиться об объектах разных размеров) и 3 отношения привязки. Следовательно, 3 канала в объектности и 3 * 4 канала в регрессоре ограничивающего прямоугольника.

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

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

Генерация предложений

  1. Top k до NMS: выбор k лучших (по умолчанию k для train = 12000, test = 6000) привязок на основе их соответствующей оценки объектности.

2. Декодирование блока: Координаты якорных блоков изменяются в соответствии со значениями rpn_bbox_pred, полученными из заголовка RPN. На этой диаграмме ширина и высота являются размерами изображения с измененным размером (см. ПРИМЕЧАНИЕ в разделе предварительной обработки изображения).

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

4. NMS: Непревзойденное подавление применяется для удаления блоков, перекрытие которых превышает пороговое значение (порог RPN NMS, значение по умолчанию = 0,7).

5. Объединение: шаги 1–4 были выполнены отдельно для каждой функции пирамиды, созданной магистралью FPN. На этом этапе все якорные блоки (уже в системе координат исходного изображения с измененным размером) группируются вместе. Мы НЕ храним информацию о том, какой ROI был получен с какого уровня FPN.

6. FPN post NMS top N: Этот шаг отличается для обучения и тестирования. В случае обучения мы выбираем N лучших (по умолчанию = 2000) предложений на основе их соответствующей оценки объектности из всех предложений всех изображений во всем пакете. В случае тестирования N (по умолчанию = 2000) предложений выбираются для каждого изображения в пакете и хранятся отдельно.

Квадратная голова

  1. Сопоставление FPN-ROI. Назначение сопоставления FPN-ROI - связать соответствующую карту характеристик FPN с конкретной ROI на основе ее площади. Упоминание масштабов пула позволяет нам использовать меньшее количество масштабов пула, если использование выравнивания ROI на всех картах функций не подходит для нашей цели.
    Пример resnet-50-FPN (также официальная реализация resnet- 50-fpn в facebook_maskrcnn_benchmark) генерирует 5 карт функций, все 5 из них используются в RPN для генерации предложений, однако только 4 (P2, P3, P4, P5) используются во время связывания с ROI.

Из уравнения 1 (взятого из исследовательской работы по сетям пирамиды признаков) мы получаем целочисленный уровень, соответствующий этой конкретной рентабельности инвестиций. В этом примере lvl_min равно 2, а lvl_max равно 5. Если значение target_lvl, скажем, 3, то оно будет связано с P3. Если значение target_lvl меньше 2 или больше 5, оно ограничивается 2 и 5 соответственно.

2. Выравнивание рентабельности инвестиций: Одним из наиболее значительных изменений по сравнению с fast-r-cnn будет замена объединения рентабельности инвестиций на выравнивание рентабельности инвестиций. Обе операции генерируют единую матрицу P X P для всех ROI. ROI Pool хорошо работает в случае обнаружения объекта, но ужасно терпит неудачу в случае сегментации экземпляра, поскольку у нас слишком много шагов квантования, которые влияют на создание масок, где пиксельное соответствие имеет значение. Пожалуйста, обратитесь к приложению для подробного объяснения. А пока давайте рассмотрим, что ROI Align / Pool дает постоянный результат P X P независимо от размера предложения.

3. Полностью подключенные уровни: выходные данные для каждой области интереса изменяются для передачи через полностью подключенный уровень, для которого количество выходных каналов является гиперпараметром, называемым размером представления (по умолчанию: 1024). Он проходит через другой уровень FC с таким же количеством входных и выходных каналов. Мы получаем разные векторы длины 1024 для всех ROI.

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

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

  1. Порог до NMS: для фильтрации обнаружений до NMS на основе оценок вероятности класса (по умолчанию = 0,5).
  2. Декодирование: аналогично тому, что было сделано в случае RPN. Обратите внимание, что у нас есть значения box_bbox_reg для каждого класса отдельно для каждого предложения (например: размер предложения = [1000,4], размер box_bbox_reg = [100,81 (классы) * 4]). Мы будем применять шаг декодирования 81 раз для предложения в этом примере.
  3. Удаление недействительных полей: то же, что и RPN.
  4. NMS: мы определяем порог NMS (по умолчанию = 0,5). Результирующие предложения для каждого класса разделяются, и NMS выполняется отдельно для каждого класса.
  5. Фильтрация наиболее популярных обнаружений: максимальное количество обнаружений, объединенное для всех классов в изображении, т. е. на изображении не будет обнаружений, превышающих это число. Для набора данных COCO установлено значение 100.

Маска Голова

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

Выходные данные выравнивания ROI проходят через серию сверточных слоев 3 X 3, за которыми следует ReLU, количество выходных каналов каждого уровня и количество слоев являются гиперпараметром (для Resnet-50-FPN он установлен равным (256,256,256,256 )). Для каждого обнаружения мы получаем выходной тензор той же размерности, что и выход выравнивания ROI.

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

Мы уже предсказали класс этого обнаружения, для каждого предложения мы выбираем канал в соответствии с классом, уменьшая размеры до [D, 1, 2P, 2P].

Постобработка масок:

Размер полученных масок можно изменять в соответствии с входным изображением. Тензоры масок дополняются, чтобы избежать граничных эффектов, вызванных операцией повышения дискретизации (деконв), которую мы использовали ранее. Координаты ограничивающего прямоугольника масштабируются в соответствии с новой маской и преобразуются в ближайшее целое число (координаты указаны относительно входного изображения). Маска также масштабируется в соответствии с размером изображения, использованный метод интерполяции является билинейным. Порог маски - это гиперпараметр (по умолчанию: 0,5). Для каждого пикселя, если значение выше 0,5, предполагается, что объект присутствует в этом пикселе, в противном случае - отсутствует. В итоге мы получаем маску [image_height, image_width] объекта, аналогично для всех объектов изображения.

Приложение - Пул рентабельности инвестиций и согласование рентабельности инвестиций

Давайте разберемся с этим на примере. Давайте сначала посмотрим на пул рентабельности инвестиций:

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

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

В зависимости от упомянутого размера вывода (m) мы получаем матрицу m x m, мы разделяем ROI на ячейки в зависимости от значения m. В этом примере мы взяли m = 2. Обратите внимание, что границы ячеек снова не совпадают с границами карты объектов.

Мы снова выполняем шаг квантования, аналогичный шагу 1. Мы применяем операцию max-pool в каждом бине отдельно. Таким образом, последние четыре значения в этом примере равны (0,32,0,64,0,16,0,25).

Мы получаем окончательную матрицу m X m для всех ROI.

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

У нас одинаковая начальная рентабельность инвестиций. Обратите внимание, что мы НЕ выполняем никаких операций квантования ни для ROI, ни для бинов.

Мы берем 4 (2 * 2) точки выборки в каждом бункере. В исследовательской статье Mask R-CNN говорится, что положение и количество точек выборки не имеют большого значения. Приведенное ниже уравнение объясняет, как они выбрали точки выборки на основе репозитория facebook maskrcnn_benchmark.

Было взято значение num_samples 2. X_low и X_high - это самая низкая и самая высокая координаты x бина. Используя это уравнение, мы получаем координаты 4 точек (S1, S2, S3, S4)

Например, возьмем S1. Мы определяем 4 ближайшие точки на карте объектов, которые соответствуют разрешению карты объектов (координаты которых будут целыми числами). В этом случае P (2,1), Q (3,1), R (2,2) и S (3,2) с их соответствующими значениями. Используя 4 точки и приведенное ниже уравнение, мы используем билинейную интерполяцию для вычисления значения функции в этой конкретной точке выборки. Итак, для S1 мы получаем значение 0,21778.

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

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

Конечные заметки

Это оно. Мы надеемся, что читатели поняли внутреннюю работу Mask R-CNN. Автор Саранг Панде. Особая благодарность Fractal Image Team Сурадж Амонкар, Пракаш Джей, Сачин Чандра, Викаш Чалла, Раджниш Кумар, танудж раджу пилли, сакшам джиндал, Абхишек Чопде, Синдхура К., пранит чандра, Самрин Хан.

использованная литература