Как стать автором
Обновить
251.49
Инфосистемы Джет
российская ИТ-компания

Object Detection. Распознавай и властвуй. Часть 2

Время на прочтение9 мин
Количество просмотров20K

В прошлом посте я начал разбираться в двухступенчатых Object Detection моделях и рассказал о самой базовой и, соответственно, первою из них – R-CNN. Сегодня мы рассмотрим другие модели этого семейства: Fast R-CNN и Faster R-CNN. Поехали!

Fast R-CNN


Поскольку R-CNN является медленной и не очень эффективной сетью, довольно быстро теми же авторами было предложено улучшение в виде Fast R-CNN сети.

Процесс обработки изображения изменился и выглядит следующим образом:

  1. Извлечение карты признаков изображения (не для каждой гипотезы по отдельности, а для всего изображения целиком);
  2. Поиск гипотез (аналогично R-CNN на основе Selective Search);
  3. Сопоставление каждой гипотезы с местом на карте признаков – т.е. использование единого набора выделенных признаков для каждой гипотезы (координаты гипотез можно однозначно сопоставить с местоположением на карте признаков);
  4. Классификация каждой гипотезы и исправление координат ограничивающей рамки (эту часть стало возможным запускать параллельно, поскольку больше нет зависимости от SVM-классификации).

RoI layer


В изначальной концепции R-CNN каждая предложенная гипотеза по отдельности обрабатывается с помощью CNN – такой подход стал своеобразным бутылочным горлышком. Для решения этой проблемы был разработан Region of Interest (RoI) слой. Этот слой позволяет единожды обрабатывать изображение целиком с помощью нейронной сети, получая на выходе карту признаков, которая далее используется для обработки каждой гипотезы.

Основной задачей RoI слоя является сопоставление координат гипотез (координаты ограничивающих рамок) с соответствующими координатами карты признаков. Делая «срез» карты признаков, RoI слой подает его на вход полносвязному слою для последующего определения класса и поправок к координатам (см. следующие разделы).

Появляется логичный вопрос – как подать на вход полносвязному слою гипотезы разного размера и соотношения сторон? Для этого и необходим RoI слой, который преобразовывает изображение с размерами $I_{h}×I_{w}$ в размеры $O_{h}×O_{w}$. Для этого необходимо исходное изображение разделить на сетку размером $O_{h}×O_{w}$ (размер ячейки примерно $\frac{I_{h}}{O_{h}}×\frac{I_{w}}{O_{w}}$) и из каждой ячейки выбрать максимальное число.

Допустим, имеются карта признаков размером 5×5 и нужная гипотеза на этой карте имеет координаты (1,1,4,5) (первые две координаты – левый верхний угол, последние две – правый нижний). Последующий полносвязный слой ожидает размерность 4×1 (т.е. вытянутую 2×2 матрицу). Тогда поделим гипотезу на неодинаковые блоки разной размерности (этап Pooling) и возьмем в каждом из них максимальное число (этап Pooling и как результат этап Output).


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

Итог:

  • Вход: координаты гипотезы и карта признаков изначального изображения;
  • Выход: векторное представление гипотезы.

Полносвязный слой и его выходы


В предыдущей версии R-CNN использовались отдельные SVM-классификаторы, в данной же реализации они заменены одним SoftMax выходом размерности $N_{c}+1$. Отмечается, что при этом потеря точности составляет менее 1 %.

Выход регрессоров обрабатывается с помощью NMS (Non-Maximum Suppression).

Итог:

  • Вход: векторное представление гипотезы;
  • Выход: вероятности принадлежности гипотезы к классам и поправки к координатам ограничивающей рамки.

Multi-task loss


В одновременном обучении сети для задач регрессии ограничивающих рамок и классификации применяется специальная лосс-функция:

$L(P,u,t^{u},v)=L_{cls}(P,u)+\lambda[u≥1]L_{loc}(t^{u},v)$


Здесь:

  • $\lambda$ необходим для настройки баланса между двумя функции (авторы использовали $\lambda$=1);
  • $u$ — правильный класс;
  • $L_{cls}$ представляет собой функции ошибки для классификации $L_{cls}(P,u)=-logP_{u}$;
  • $L_{loc}$ является SmoothL1-функцией и измеряет разницу между $v=(v_{x},v_{y},v_{w},v_{h})$ и $t^{u}=(t^u_x,t^u_y,t^u_w,t^u_h)$ значениями:

    $SmoothL1=\left \{ \begin{matrix} \frac{1}{2}x^{2}, & if\left | x \right | <1\\ \left | x \right |-\frac{1}{2}, & otherwise \end{matrix}\right.$


    Здесь, $x$ обозначает разность целевого значения и предсказания $t^u_i-v_{i}$. Такая функция сочетает в себе преимущества L1 и L2 функции, поскольку является устойчивой при больших значениях $x$ и не сильно штрафует при малых значениях.


Обучение


Для лучшей сходимости авторы использовали следующий подход формирования батча:

  1. Выбирается количество гипотез в батче $R$.
  2. Выбирается случайно $N$ изображений.
  3. Для каждого из $N$ изображений берется $\frac{R}{N}$ гипотез (т.е. равномерно на каждое изображение).

При этом в R включаются как позитивные (25 % всего батча), так и негативные (75 % всего батча) гипотезы. Позитивными считаются гипотезы, которые перекрываются с правильным местоположением объекта более чем на 0.5 (IoU). Негативные же берутся по правилу Hard Negative Mining – наиболее ошибочные экземпляры (те, у кого IoU в диапазоне [0.1,0.5).

При этом авторы утверждают, что при параметрах $N=2$ и $R=128$ сеть учится в разы быстрее, чем при $N=128$ и $R=128$ (т.е. по одной гипотезе из каждого изображения).

Faster R-CNN


Дальнейшим логичным улучшением является способ устранения зависимости от Selective Search алгоритма. Для этого представим всю систему как композицию двух модулей – определение гипотез и их обработка. Первый модуль будет реализовываться с помощью Region Proposal Network (RPN), а второй аналогично Fast R-CNN (начиная с RoI слоя).

Следовательно, в этот раз процесс работы с изображением изменился и теперь происходит таким образом:

  1. Извлечение карты признаков изображения c помощью нейронной сети;
  2. Генерация на основе полученной карты признаков гипотез – определение приблизительных координат и наличие объекта любого класса;
  3. Сопоставление координат гипотез с помощью RoI с картой признаков, полученной на первом шаге;
  4. Классификация гипотез (уже на определение конкретного класса) и дополнительное уточнение координат (на самом деле, может и не применяться).

Основное улучшение произошло именно в месте генерации гипотез – теперь для этого есть отдельная небольшая нейронная сеть, которую назвали Region Proposal Network.


Region Proposal Network


Конечной задачей данного модуля является полноценная замена Selective Search алгоритма. Для более быстрой работы необходимы общие веса с сетью, извлекающей необходимые признаки. Поэтому входом RPN является карта признаков, полученная после этой сети. Авторы оригинальной статьи используют для извлечения признаков сеть VGG16, выходом которой считают последний сверточный слой – conv5_3. Такая сеть имеет следующие характеристики рецептивного поля:

  • Эффективное сжатие (effective strides, $S_{0}$): 16
  • Размер рецептивного поля (receptive field size, $r_{0}$): 196

Это значит, что карта признаков будет в 16 раз меньше изначального размера изображения (количество каналов равно 512), а на каждое значение в ее ячейках оказывают влияние пиксели изначального изображения, лежащие в прямоугольнике размером 196×196. Таким образом выходит, что если использовать стандартный вход VGG16 224×224, то на формирование значения центральной ячейки карты признаков (14,14) будет влиять почти все изображение целиком! На основе полученной карты признаков RPN для каждой ячейки выдает $k$ гипотез (в изначальной реализации $k=9$) разного размера и соотношения сторон. Так, для стандартного размера это 14×14×9=1764 гипотезы!

На основе изображения ниже рассмотрим алгоритм работы RPN модуля подробнее (картинка кликабельная):


  1. Получим карту признаков $c×\frac{H}{16}×\frac{W}{16}$ с предыдущего шага.
  2. Применим сверточный слой 3×3 (отступ равен единице – итоговая матрица не меняется в размерах). По всей видимости, этот шаг применяется авторами для дополнительного наращивания рецептивного поля ($P_{0}=106$, $r_{0}=228$).

  • Ячейке ($i,j$) карты признаков соответствует вектор размерности $c$ (в нашем случае 512).

  1. К каждому такому вектору применимы два сверточных слоя с ядром 1×1 и количеством выходных каналов $\hat{c}$ (ядро такого размера просто отображает размерность $c$ в $\hat{c}$):
    1. Первой слой (cls) имеет параметр $\hat{c}=2k$ – необходим для определения вероятности наличия или отсутствия какого-либо объекта внутри гипотезы (классификация с 2 классами).
    2. Второй слой (reg) имеет параметр $\hat{c}=4k$ – необходим для определения координат гипотез.

    Отметим, что полученные вектора можно переформировать в матрицы $k×2$ и $k×4$. Таким образом получаем матрицы, где $i$ строке соответствуют значения для конкретной гипотезы.

Возникает вполне логичный вопрос, как из вектора, который поступает в reg слой можно определить абсолютные координаты гипотез? Ответ прост – никак. Для правильного определения координат необходимо использовать так называемые якоря (anchors) и поправки к их координатам.

Якорем называют четырехугольник разного соотношения сторон (1:1, 2:1, 1:2) и размеров (128×128, 256×256, 512×512). Центром якоря считается центр ячейки ($i,j$) карты признаков. Так, например, возьмем ячейку (7,7), центром которой являются значения (7.5,7.5), что соответствует координатам (120,120) исходного изображения (16×7.5). Сопоставим с этими координатами прямоугольники трех соотношений сторон и трех размеров (всего получается 3×3=9). В будущем слой reg по отношению к этим координатам будет выдавать соответствующие правки, тем самым корректируя местоположение и форму ограничивающей рамки.

Итог:

  • Вход: карта признаков изначального изображения;
  • Выход: гипотезы, содержащие какой-либо объект.

Loss функция


Для обучения RPN используется следующее обозначение классов:

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

Таким образом класс $p^*_i$ якоря присуждается по следующему правилу:

$p^*_i = \begin{cases} 1 & if IoU > 0.7 \\ 0 & if IoU < 0.3 \\ nothing & otherwise \end{cases} $


С такими обозначениями минимизируется следующая функция:

$L(\{p_i\}, \{t_i\}) = \frac{1}{N_{cls}} \sum_i L_{cls}(p_i, p^*_i) + \lambda \frac{1}{N_{loc}} \sum_i p^*_i L_{reg} (t_i, t^*_i)$


Здесь:

  • $i$ – номер якоря;
  • $p_{i}$ – вероятность нахождения объекта в $i$ якоре;
  • $p^*_i$ – правильный номер класса (обозначен выше);
  • $t_{i}$ – 4 предсказанные поправки к координатам;
  • $t^*_i$ – ожидаемая (ground truth) поправки к координатам;
  • $L_{cls}(p_{i},p^*_i)$ – бинарный log-loss;
  • $L_{reg}(t_{i},t^*_i)$ – SmoothL1 лосс. Активируется только в случае $p^*_i=1$, т.е. если гипотеза содержит хоть какой-нибудь объект;
  • $\begin{Bmatrix}p_{i}\end{Bmatrix}$ и $\begin{Bmatrix}t_{i}\end{Bmatrix}$ – выходы классификационной и регрессионной модели соответственно;
  • $\lambda$ – коэффициент для настройки баланса между классификацией и регрессией.

Обе части комбинированного лосса нормализуются на $N_{cls}$ и $N_{loc}$ соответственно. Авторы использовали $N_{cls}$ равный размеру мини-батча (256), а $N_{loc}$ равный количеству якорей.

Для регрессии поправок к ограничивающим рамкам значения инициализируются и подсчитываются следующим образом:

$t_x = \frac{(x - x_a)}{w_a}, \quad\quad t^*_x = \frac{(x^*-x_a)}{w*} \\ t_y = \frac{(y - y_a)}{h_a}, \quad\quad t^*_y = \frac{(y^* - y_a)}{h_a} \\ t_w = \log{\frac{w}{w_a}}, \quad\quad t^*_w = \log{\frac{w^*}{w_a}} \\ t_h = \log{\frac{h}{h_a}}, \quad\quad t^*_h = \log{\frac{h^*}{h_a}}$


Здесь $x$, $y$, $w$ и $h$ обозначают центр, ширину и высоту ограничивающей рамки. Переменные $x$, $x^{*}$ и $x_{a}$ обозначают предсказание, ground truth и значение якорей (для $y$, $w$ и $h$ аналогично).

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

Общее обучение сети


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

  1. Тренировка RPN сети. Сверточные слои инициализируются весами, ранее полученными при тренировке на ImageNet. Дообучаем на задаче определения регионов с каким-либо классом (уточнение класса занимается часть Fast R-CNN).
  2. Тренировка Fast R-CNN сети. Так же, как и в п.1 инициализируем Fast R-CNN весами, ранее полученными при обучении на ImageNet. Дообучаем, используя гипотезы об объектах с помощью RPN сети, обученной в п.1. В этот раз задачей обучения является уточнение координат и определение конкретного класса объекта.
  3. Используя веса из п.2 обучаем только RPN часть (слои, идущие до RPN сети, принадлежащие feature extractor, замораживаются и никак не изменяются).
  4. Используя веса из п.3 (то есть, уже более точно настроенный RPN), обучаем слои для Fast R-CNN (остальные веса – идущие ранее или относящиеся к RPN — заморожены).

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

Процесс предсказания


Во время использования нейронных сетей для предсказаний прохождение изображения выглядит так:

  1. Изображение поступает на вход нейронной сети, генерируя карту признаков.
  2. Каждая ячейка карты признаков обрабатывается с помощью RPN, выдавая в результате поправки к положению якорей и вероятность наличия объекта любого класса.
  3. Соответствующие предсказанные рамки далее на основе карты признаков и RoI слоя поступают в дальнейшую обработку Fast R-CNN части.
  4. На выходе получаем уже конкретный класс объектов и их точное положение на изображении.

Итоговые различия


Приведем краткое резюме моделей между собой (базовые идеи наследуется от более младшей к более старшей):

R-CNN:

  • Использование Selective Search как генератор гипотез.
  • Использование SVM + Ridge для классификации и регрессии гипотез (причем их параллельная работа не возможна).
  • Запуск нейронной сети для обработки каждой гипотезы по отдельности.
  • Низкая скорость работы.

Fast R-CNN:

  • Нейронная сеть запускается только один раз на изображение – все гипотезы проверяются на основе единой карты признаков.
  • «Умная» обработка гипотез разного размера за счет RoI слоя.
  • Замена SVN на SoftMax слой.
  • Возможность параллельной работы классификации и регрессии.

Faster R-CNN:

  • Генерация гипотез с помощью специального отдельно дифференцируемого модуля.
  • Изменения в процессе обработки изображения, связанные с появлением RPN модуля.
  • Самая быстрая из этих трех моделей.
  • Является одной из самых точных и по сей день.

Заключение


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

Список литературы


  1. R. Girshick, J. Donahue, T. Darrell, and J. Malik. «Rich feature hierarchies for accurate object detection and semantic segmentation.» In CVPR, 2014. arXiv:1311.2524
  2. R. Girshick, J. Donahue, T. Darrell, and J. Malik. «Region-based convolutional networks for accurate object detection and segmentation.» TPAMI, 2015
  3. R. Girshick, «Fast R-CNN,» in IEEE International Conference on Computer Vision (ICCV), 2015.
  4. S. Ren, K. He, R. Girshick, and J. Sun, «Faster R-CNN: Towards real-time object detection with region proposal networks,» in Neural Information Processing Systems (NIPS), 2015.
Теги:
Хабы:
+12
Комментарии0

Публикации

Информация

Сайт
jet.su
Дата регистрации
Дата основания
1991
Численность
1 001–5 000 человек
Местоположение
Россия