HimeraSearchDB
Carding_EbayThief
triada
CrackerTuch
d-shop

НОВОСТИ Object Detection. Распознавай и властвуй. Часть 2

Bonnie
Оффлайн
Регистрация
12.04.17
Сообщения
19.095
Реакции
107
Репутация
0
971161c19f01cbfff64f43980a125dfa.png


В я начал разбираться в двухступенчатых 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 слой, который преобразовывает изображение с размерами
ec4a9bbd61be6dd0e76bdad39ebe8f87.svg
в размеры
7004cbd7afaa72c7dc977518fc6eed11.svg
. Для этого необходимо исходное изображение разделить на сетку размером
7004cbd7afaa72c7dc977518fc6eed11.svg
(размер ячейки примерно
2cd8955a96e9d905624481348309dc22.svg
) и из каждой ячейки выбрать максимальное число.

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

c86d19bd5388996421f46db9ab876489.png


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

Итог:

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

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


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

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

Итог:

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

Multi-task loss


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



3254ab0a06549c1c2eaa734e6f4e94af.svg


Здесь:

  • b1bc57ea859ea7d6505ec3a3ae9be2f6.svg
    необходим для настройки баланса между двумя функции (авторы использовали
    b1bc57ea859ea7d6505ec3a3ae9be2f6.svg
    =1);
  • 784f98db37a499162c1479600e8465ed.svg
    — правильный класс;
  • 0186c954fd0cdb949bbf8f2225ee7726.svg
    представляет собой функции ошибки для классификации
    03abe061821dbfa8c87e43acb38acffa.svg
    ;
  • 4976049bf1b21ebc5f3257509c157f0d.svg
    является SmoothL1-функцией и измеряет разницу между
    7b171e310ad4b016abffc2af87701006.svg
    и
    dd463498bfa6a668b28135880db6cd47.svg
    значениями:



    50b0ba63c58591e7ab66a02b17297393.svg


    Здесь,
    817b92407f764f57af9226e50cc788fd.svg
    обозначает разность целевого значения и предсказания
    12c75b58b44b877e62a71e3a0d25b75a.svg
    . Такая функция сочетает в себе преимущества L1 и L2 функции, поскольку является устойчивой при больших значениях
    817b92407f764f57af9226e50cc788fd.svg
    и не сильно штрафует при малых значениях.

    33dd34c526265ac438b0ba4172a9b9d5.png

Обучение


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

  1. Выбирается количество гипотез в батче
    b81a7c1e9676b36cc02ddeea5d5f6e51.svg
    .
  2. Выбирается случайно
    1e80c3b3087c0a57b68ad11261a9ec2b.svg
    изображений.
  3. Для каждого из
    1e80c3b3087c0a57b68ad11261a9ec2b.svg
    изображений берется
    74c2d0826990ef4e870b0d8d0d77f753.svg
    гипотез (т.е. равномерно на каждое изображение).

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

При этом авторы утверждают, что при параметрах
561d80cf5a148ceacc6d5fa1f32b2413.svg
и
59002966fdd8eaa03190faf503e48117.svg
сеть учится в разы быстрее, чем при
beabd4d72a4df9c1131465ff8f03c92c.svg
и
59002966fdd8eaa03190faf503e48117.svg
(т.е. по одной гипотезе из каждого изображения).

Faster R-CNN


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

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

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

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

f13a43c557db52051bbf87766efa0e9a.png


Region Proposal Network


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

  • Эффективное сжатие (effective strides,
    9e31e3317502fc1aeeb5c99fc99de731.svg
    ): 16
  • Размер рецептивного поля (receptive field size,
    58ea9c4af5d8f66f8d175539e2041186.svg
    ): 196

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

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


  1. Получим карту признаков
    cdf3e3666962f842c931f9d0191146f2.svg
    с предыдущего шага.
  2. Применим сверточный слой 3×3 (отступ равен единице – итоговая матрица не меняется в размерах). По всей видимости, этот шаг применяется авторами для дополнительного наращивания рецептивного поля (
    aeb6e400a877963dc06dee4491671d92.svg
    ,
    9a1f5ebd22382e7e07a1e8d2488e17b5.svg
    ).

  • Ячейке (
    7f93d5f735e701c037075f101fb080ad.svg
    ) карты признаков соответствует вектор размерности
    e1a229081e8db6ee98dfb79797b987dd.svg
    (в нашем случае 512).

  1. К каждому такому вектору применимы два сверточных слоя с ядром 1×1 и количеством выходных каналов
    bab6443514c51620fd2f50a21588b04b.svg
    (ядро такого размера просто отображает размерность
    e1a229081e8db6ee98dfb79797b987dd.svg
    в
    bab6443514c51620fd2f50a21588b04b.svg
    ):
    1. Первой слой (cls) имеет параметр
      5ebe0ad36bb73c6a86b7149af535157a.svg
      – необходим для определения вероятности наличия или отсутствия какого-либо объекта внутри гипотезы (классификация с 2 классами).
    2. Второй слой (reg) имеет параметр
      e34d3114c7f80a5327b2de387840ffa1.svg
      – необходим для определения координат гипотез.

    Отметим, что полученные вектора можно переформировать в матрицы
    1f8c71d30c9f3a591a30f6d665b70685.svg
    и
    01135a7584cb26a9e398b379877bc480.svg
    . Таким образом получаем матрицы, где
    bf83b532cd867d34004f8eded8c5c79a.svg
    строке соответствуют значения для конкретной гипотезы.

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

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

Итог:

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

Loss функция


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

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

Таким образом класс
5e737e92b3fafb88e2d2f0925084e844.svg
якоря присуждается по следующему правилу:



891ae3535a9d6a013cba1998f1935f49.svg


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



be17378a5d460e0bbfd9f9cd067e41b0.svg


Здесь:

  • bf83b532cd867d34004f8eded8c5c79a.svg
    – номер якоря;
  • 08ba9c56140cf603308f9b84a26dc818.svg
    – вероятность нахождения объекта в
    bf83b532cd867d34004f8eded8c5c79a.svg
    якоре;
  • 5e737e92b3fafb88e2d2f0925084e844.svg
    – правильный номер класса (обозначен выше);
  • b70d950b6ba89178666dac41190fe91f.svg
    – 4 предсказанные поправки к координатам;
  • d73a4f83f3cf01568e07b84a6bb98b9b.svg
    – ожидаемая (ground truth) поправки к координатам;
  • 907a61f03818f5aa4fe18c671da0e6ef.svg
    – бинарный log-loss;
  • e604b9cc7688e2d18ea8c7e32c337b56.svg
    – SmoothL1 лосс. Активируется только в случае
    7142acb6d769bb3b0b0def01da2a46b9.svg
    , т.е. если гипотеза содержит хоть какой-нибудь объект;
  • 8b88eb1f5e37973d3bea6bf5259348c0.svg
    и
    174a5e6e373eb439c336a9643fbb0a47.svg
    – выходы классификационной и регрессионной модели соответственно;
  • b1bc57ea859ea7d6505ec3a3ae9be2f6.svg
    – коэффициент для настройки баланса между классификацией и регрессией.

Обе части комбинированного лосса нормализуются на
c534a5a5b8c9eeae526e15c6399a2c28.svg
и
40a5393add5eb538e775c3f9e436d110.svg
соответственно. Авторы использовали
c534a5a5b8c9eeae526e15c6399a2c28.svg
равный размеру мини-батча (256), а
40a5393add5eb538e775c3f9e436d110.svg
равный количеству якорей.

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



e776df10a7b12554361b4232f4818c42.svg


Здесь
817b92407f764f57af9226e50cc788fd.svg
,
9b34c4da5c757d4982bbd1b6f2e8998a.svg
,
1d0034a09108db7af7cf42ea23a91ecd.svg
и
5174f49cc4f41fc5c4802c76f4c76c5a.svg
обозначают центр, ширину и высоту ограничивающей рамки. Переменные
817b92407f764f57af9226e50cc788fd.svg
,
81f58015de04300eaa568f58a7236dd1.svg
и
3b84c20a9590cb7de20e009dd6c5e481.svg
обозначают предсказание, ground truth и значение якорей (для
9b34c4da5c757d4982bbd1b6f2e8998a.svg
,
1d0034a09108db7af7cf42ea23a91ecd.svg
и
5174f49cc4f41fc5c4802c76f4c76c5a.svg
аналогично).

Обучение на полном списке якорей будет иметь смещение в сторону отрицательного класса (гипотез с таким классом в разы больше). В связи с этим мини-батч формируется в соотношении 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.
  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.
 
Сверху Снизу