Задача нахождения объектов на изображении — различия между версиями

Материал из Викиконспекты
Перейти к: навигация, поиск
(YOLO)
(Написал многосимвольные переменные прямым шрифтом)
 
(не показаны 53 промежуточные версии 3 участников)
Строка 1: Строка 1:
'''Задача нахождения объектов на изображении''' {{---}} задача машинного обучения, в рамках которой выполняется определение наличия или отсутствия объекта определённого домена на изображении, нахождение границ этого объекта в системе координат пикселей исходного изображения. В зависимости от алгоритма обучения, объект может характеризоваться координатами обрамляющего его прямоугольника (bounding box), ключевыми точками, контуром объекта.  
+
'''Задача нахождения объектов на изображении''' {{---}} задача машинного обучения, в рамках которой выполняется определение наличия или отсутствия объекта определённого домена на изображении, нахождение границ этого объекта в системе координат пикселей исходного изображения. В зависимости от алгоритма обучения, объект может характеризоваться координатами ограничивающей рамки, ключевыми точками, контуром объекта.  
  
 
==Постановка задачи==
 
==Постановка задачи==
Строка 7: Строка 7:
 
Задача нахождения объектов на изображении может быть поставлена различным образом и включает в себя класс других задач, помогающих определить, какие объекты находятся на изображении и где они расположены в сетке пикселей исходного изображения.  
 
Задача нахождения объектов на изображении может быть поставлена различным образом и включает в себя класс других задач, помогающих определить, какие объекты находятся на изображении и где они расположены в сетке пикселей исходного изображения.  
  
Задача семантической сегментации (англ. semantic segmentation) {{---}} задача, в которой на вход модели подаётся изображение, а на выходе для каждого пикселя является метка принадлежности этого пикселя к определённой категории. Например, если в исходном изображении человек переходит дорогу, то для каждого пикселя необходимо вывести, является ли этот пиксель частью человеческого тела, профиля дороги, знака дорожного движения, неба, или какого-то другого типа. Существенный недостаток применения одной лишь семантической сегментации относительно задач, связанных с распознаванием объектов {{---}} маркировка пикселей по принадлежности только к типу объекта, что не создаёт различия между объектами как таковыми. Например, если назвать "объектом" связную область пикселей, характеризующих одинаковый тип, то два объекта, перегораживающих друг друга на исходном изображении, будут определены как один объект, что в корне неверно. Задача семантической сегментации изображения с дифференцированием объектов называется задачей сегментации экземпляров (англ. instance segmentation). Модели, решающие задачу сегментации экземпляров, применяются, в том числе, для подсчёта людей в массовых скоплениях, для автомобилей с автоматическим управлением.
+
'''Задача семантической [[:Сегментация_изображений|сегментации]]''' (англ. semantic segmentation) {{---}} задача, в которой на вход модели подаётся изображение, а на выходе для каждого пикселя является метка принадлежности этого пикселя к определённой категории. Например, если в исходном изображении человек переходит дорогу, то для каждого пикселя необходимо вывести, является ли этот пиксель частью человеческого тела, профиля дороги, знака дорожного движения, неба, или какого-то другого типа. Существенный недостаток применения одной лишь семантической сегментации относительно задач, связанных с распознаванием объектов {{---}} маркировка пикселей по принадлежности только к типу объекта, что не создаёт различия между объектами как таковыми. Например, если назвать "объектом" связную область пикселей, характеризующих одинаковый тип, то два объекта, перегораживающих друг друга на исходном изображении, будут определены как один объект, что в корне неверно. Задача семантической сегментации изображения с дифференцированием объектов называется задачей сегментации экземпляров (англ. instance segmentation). Модели, решающие задачу сегментации экземпляров, применяются, в том числе, для подсчёта людей в массовых скоплениях, для автомобилей с автоматическим управлением.
  
Задача классификации с локализацией (англ. classification and localization) {{---}} задача, в которой в дополнение к предсказанию метки категории класса определяется рамка, ограничивающая местоположение экземпляра одиночного объекта на картинке. Как правило, рамка имеет прямоугольную форму, её стороны ориентированы параллельно осям исходного изображения, а площадь является минимальной при условии полного нахождения экземпляра объекта внутри этой рамки. Такую прямоугольную рамку называют термином bounding box. Bounding box можно задать как при помощи центра, ширины и высоты, так и при помощи четырёх сторон. Модель в данном случается одновременно обучается как верной классификации, так и максимально точному определению границ рамки. В качестве метрики для определения местоположения bounding box-а чаще всего используется отношение площадей bounding box-ов Intersection over Union: $IoU = \frac{S(A \cup B)}{S(A \cap B)}$, где $A$ и $B$ - предсказанный bounding box и настоящий bounding box соответственно. $IoU$ равно нулю в случае непересекающихся bounding box-ов и равно единице в случае идеального наложения.
+
'''Задача классификации с локализацией (англ. classification and localization)''' {{---}} задача, в которой в дополнение к предсказанию метки категории класса определяется рамка, ограничивающая местоположение экземпляра одиночного объекта на картинке. Как правило, рамка имеет прямоугольную форму, её стороны ориентированы параллельно осям исходного изображения, а площадь является минимальной при условии полного нахождения экземпляра объекта внутри этой рамки. Такую прямоугольную рамку называют термином "ограничивающая рамка" (англ. bounding box). Ограничивающую рамку можно задать как при помощи центра, ширины и высоты, так и при помощи четырёх сторон. Модель в данном случается одновременно обучается как верной классификации, так и максимально точному определению границ рамки.  
  
Задача детекции объектов (англ. object detection) {{---}} задача, в рамках которой необходимо выделить несколько объектов на изображении посредством нахождения координат их bounding box-ов и классификации этих bounding box-ов из множества заранее известных классов. В отличие от классификации с локализацией, число объектов, которые находятся на изображении, заведомо неизвестно. В качестве метрики зачастую используется $mAP$ (mean average precision) {{---}} усреднённая по всем категориям величина $AP = \int_{0}^{1} p(r) dr$, где $p$ {{---}} точность, $r$ {{---}} полнота из предположения, что bounding box определён верно, если $IoU \geq 0.5$. Поскольку точность и полнота находятся в промежутке от $0$ до $1$, то $AP$, а следовательно, и $mAP$, также находятся в пределах от $0$ до $1$.  
+
'''Задача детекции объектов (англ. object detection)''' {{---}} задача, в рамках которой необходимо выделить несколько объектов на изображении посредством нахождения координат их ограничивающих рамок и классификации этих ограничивающих рамок из множества заранее известных классов. В отличие от классификации с локализацией, число объектов, которые находятся на изображении, заведомо неизвестно.  
  
 +
===Метрики===
 +
 +
В задачах классификации с локализацией и детекции объектов для определения достоверности местоположения ограничивающей рамки в качестве метрики чаще всего используется отношение площадей ограничивающих рамок (англ. '''Intersection over Union'''):
 +
 +
$IoU = \frac{S(A \cup B)}{S(A \cap B)}$,
 +
 +
где $A$ и $B$ {{---}} предсказанная ограничивающая рамка и настоящиая ограничивающая рамка соответственно. $IoU$ равно нулю в случае непересекающихся ограничивающих рамок и равно единице в случае идеального наложения.
  
 
{|align="center"
 
{|align="center"
 
  |-valign="top"
 
  |-valign="top"
|[[Файл:p(r).png|300px|thumb|Зависимость точности от полноты, необходимая для вычисления average presicion (AP)]]
+
  |[[Файл:IoUs-RUS.png|thumb|Примеры влияния взаимного положения ограничивающих рамок на метрику IoU]]
  |[[Файл:IoUs.png|300px|thumb|Примеры влияния взаимного положения bounding box-ов на метрику IoU]]
 
 
  |}
 
  |}
  
==Семантическая сегментация==
+
В задачах детекции объектов в качестве метрики зачастую используется $mAP$ (англ. '''mean average precision''') {{---}} усреднённая по всем категориям величина средней точности (англ. average precision, AP)
  
[[Файл:SegmentationExample.jpeg|300px|thumb|right|Пример семантической сегментации изображения]]
+
$AP = \int_{0}^{1} p(r) dr$,
  
Для семантической сегментации чаще всего применяются глубокие [[:Сверточные_нейронные_сети|свёрточные нейронные сети]], в том числе, когда данные [https://arxiv.org/abs/1502.02734 слабо размечены]. Действительно, проблема низкого уровня размеченности данных в семантической сегментации довольно важна, поскольку для каждого пикселя определить его принадлежность с высокой точностью {{---}} задача, требующая высоких затрат времени и и не всегда высокую точность. Однако, сочетание хорошо размеченных данных со слабо размеченными данными (например, с точностью до bounding box-ов) улучшает производительность модели. Для задачи сегментации [https://arxiv.org/abs/1605.06211 хорошо себя показали] FCN (fully-convolutional networks) {{---}} полносвёрточные сети, позволяющие работать с изображениями произвольного размера, а на выходе выдавать тепловую карту нахождения классов на изображении через серию свёрток. Поскольку свёртка над матрицей большой размерности с большим числом каналом является затратной, как правило, первая половина слоёв в таких свёрточных сетях обеспечивает сабсэмплинг (англ. subsampling - уменьшение размерности), а вторая часть слоёв - апсэмплинг (англ. upsampling - увеличение размерности). Таким образом, размерность изображений в пикселях на входе и на выходе сети является одинаковой, а большинство операций свёртки применяется к матрицам небольшой размерности. Конечная классификация достигается за счёт выбора максимума по классам из значений тензора размерности $C \times W \times H$, где $C$ - множество классов, заранее заданных перед обучением и к которым могут принадлежать пиксели изображения, $W \times H$ - размер изображения. Такую модель можно обучить при помощи [[:Обратное_распространение_ошибки|обратного распространения ошибок]], а в качестве функции потерь для пикселей использовать кросс-энтропию.
+
где $p$ {{---}} точность, $r$ {{---}} полнота из предположения, что ограничивающая рамка определена верно, если $IoU \geq 0.5$. Поскольку точность и полнота находятся в промежутке от $0$ до $1$, то $AP$, а следовательно, и $mAP$ также находится в пределах от $0$ до $1$. На практике, $AP$ часто считают по точкам, значения полноты которых равномерно распределены в промежутке $[0;1]$:
  
Модель [https://arxiv.org/abs/1505.04597 U-Net], разработанная авторами для сегментации биомедицинских изображений, улучшает архитектуру FCN путём использования сужающихся блоков свёртки для захвата контекста, расширяющихся блоков свёртки для локализации, а также прямых связей между блоками свёртки на одинаковых уровнях. Прямая связь слоёв обеспечивает улучшенное обучение за счёт отсутствия так называемого "артефакта шахматной доски" {---} негативного явления, вызванного апсэмплингом при помощи транспонированной свёртки. Развитием U-Net, в свою очередь модель [https://arxiv.org/abs/1611.09326 DenseNet], в которой используются полностью связанные свёрточные сети. В основе идеи лежит использование "плотных блоков" {---} совокупности нескольких свёрточных слоёв с подключением каждого слоя к каждому слою. Однако, существенным недостатком такой модели является низкая эффективность работы с памятью.
+
$AP_c = \frac{1}{11} \cdot (AP_c(0) + AP_c(0.1) + \ldots + AP_c(1))$
  
Совершенно по-иному на свёртку для сегментации объектов позволил взглянуть метод расширенных свёрток (англ. atrous convolutions), применяющийся в современных state-of-the-art подходах ([https://arxiv.org/abs/1606.00915 DeepLab], [https://arxiv.org/abs/1706.05587 DeepLab v3], [https://paperswithcode.com/paper/encoder-decoder-with-atrous-separable DeepLab v3+]). Расширенная свёртка заключается в том, чтобы применять свёртки с ядрами разного размера и разным страйдом над прямоугольниками с одним и тем же центром, а впоследствии комбинировать полученные таким образом признаки. Расширенные свёртки могут применяться как каскадно (последовательно регулируя показатель расширения фильтра), так и параллельно (англ. ASPP, Atrous Spatial Pyramid Pooling {{---}} применяя свёртки с различным масштабом ядер на одном и том же слое свёрточной сети с пулингом в конце). Такой подход позволил достичь лучших результатов в изображениях с объектами разных масштабов.
+
$mAP = \overline{AP_c}$
  
 
{|align="center"
 
{|align="center"
 
  |-valign="top"
 
  |-valign="top"
  |[[Файл:U-Net.png|300px|thumb|Архитектура слоёв свёртки U-Net]]
+
  |[[Файл:p(r).png|thumb|Зависимость точности от полноты, необходимая для вычисления average presicion (AP)]]
|[[Файл:AtrousConvolution.png|300px|thumb|Расширенная свёртка (atrous convolution) и пространственный пирамидальный пулинг (ASPP)]]
 
 
  |}
 
  |}
 +
 +
==Наборы данных==
 +
 +
{{main|Известные наборы данных}}
 +
 +
Наборы данных в задачах детекции объектов на изображениях размечаются вручную асессорами. Зачастую изображения могут различаться в разрешении и качестве, что может вносить коррективы в работу моделей.
 +
 +
*PASCAL VOC 2012<ref>[http://host.robots.ox.ac.uk/pascal/VOC/voc2012/ PASCAL VOC 2012]</ref> (Pattern Analysis, Statistical Modelling and Computational Learning: Visual Object Classes ) {{---}} содержит 11530 изображений 20 классов с 27450 регионами предложений и 6929 сегментациями
 +
*MS COCO 2017<ref>[http://cocodataset.org/#download MS COCO 2017]</ref> (Microsoft Common Objects in Context) {{---}} 118000 изображений в тренировочной выборке, 5000 изображений в валидационной выборке, 41000 изображений в тестовой выборке. Набор данных содержит 80 классов, на которых можно определить вложенность
 +
*ImageNet<ref>[http://www.image-net.org/ ImageNet]</ref> {{---}} 400000 изображений 200 классов с 350000 размеченными ограничивающими рамками
 +
*Google Open Images<ref>[http://storage.googleapis.com/openimages/web/factsfigures.html Google Open Images]</ref> {{---}} в шестой версии февраля 2020 года содержит свыше 1743000 изображений в тестовой выборке, свыше 41000 изображений в валидационной выборке и свыше 125000 изображений в тестовой выборке. Суммарно на изображениях размечено около 16000000 ограничивающих рамок
  
 
==Подходы к решению задачи детекции объектов==
 
==Подходы к решению задачи детекции объектов==
  
===R-CNN===
+
Одним из наивных подходов на основе свёрточных нейронных сетей может быть использование в качестве ядра каноничных изображений классов, которые необходимо найти на изображении, и дальнейшее использование скользящего окна для вычисления свёртки. Такой подход называется '''сопоставлением с шаблоном''' (англ. template matching). В случае, когда вместо шаблона используется натренированный классификатор, для достижения наилучшего результата необходимо осуществить полный перебор ограничивающих рамок с порогом уверенности в правдивости классификации за счёт того, что объекты могут быть разных масштабов и находиться в разных местах изображений. Однако, на изображении разрешения $W \times H$ суммарное число ограничивающих рамок равно $\sum_{i=0}^{W} \sum_{j=0}^{H} (W-i)\cdot(H-j) = \frac{1}{4} m \cdot n \cdot (m + 1) \cdot (n +1) = O(m^2n^2)$, что делает полный перебор неэффективным методом, занимающим очень большое количество времени. Для уменьшения количества рассматриваемых ограничивающих рамок выделяют два основных параллельно развивающихся подхода:
 +
 
 +
* '''Двухэтапные методы''' (англ. two-stage methods), они же "методы, основанные на регионах" (англ. region-based methods) {{---}} подход, разделённый на два этапа. На первом этапе селективным поиском или с помощью специального слоя нейронной сети выделяются регионы интереса (англ. regions of interest, RoI) {{---}} области , с высокой вероятностью содержащие внутри себя объекты.  На втором этапе выбранные регионы рассматриваются классификатором для определения принадлежности исходным классам и регрессором, уточняющим местоположение ограничивающих рамок.
 +
* '''Одноэтапные методы''' (англ. one-stage methods) {{---}} подход, не использующий отдельный алгоритм для генерации регионов, вместо этого предсказывая координаты определённого количества ограничивающих рамок с различными характеристиками, такими, как результаты классификации и степень уверенности и в дальнейшем корректируя местоположение рамок.
 +
 
 +
===Двухэтапные методы===
 +
 
 +
====R-CNN====
  
[[Файл:R-CNN.png|300px|thumb|right|Схема работы R-CNN]]
+
[[Файл:R-CNN-RUS.png|300px|thumb|right|Схема работы R-CNN]]
  
Region-CNN (R-CNN, Region-based Convolutional Network) {{---}} алгоритм, основанный на свёрточных нейронных сетях. Вместо того, чтобы использовать для поиска изображений скользящие окна фиксированного размера, на первом шаге алгоритм пытается найти селективным поиском "регионы" {{---}} bounding box-ы разных размеров, которые, предположительно, содержат объект. Это обеспечивает более быстрое и эффективное нахождение объектов независимо от размера объекта, расстояния до камеры, угла зрения. Суммарное количество регионов для каждого изображения, сгенерированных на первом шаге, примерно равно двум тысячам. Найденные регионы при помощи аффинных преобразований приобретают размер, который нужно подать на вход CNN. Также вместо аффинных преобразований можно использовать паддинги, либо расширять bounding-box до размеров, необходимых для входа CNN. В качестве CNN зачастую используется архитектура CaffeNet, извлекающая для каждого региона порядка 4096 признаков. На последнем этапе вектора признаков регионов обрабатываются SVM, проводящими классификацию объектов, по одной SVM на каждый домен.  
+
Region-CNN<ref>[https://arxiv.org/abs/1311.2524 Region-CNN]</ref> (R-CNN, Region-based Convolutional Network) {{---}} алгоритм, основанный на свёрточных нейронных сетях. Вместо того, чтобы использовать для поиска изображений скользящие окна фиксированного размера, на первом шаге алгоритм пытается найти селективным поиском "регионы" {{---}} прямоугольные рамки разных размеров, которые, предположительно, содержат объект. Это обеспечивает более быстрое и эффективное нахождение объектов независимо от размера объекта, расстояния до камеры, угла зрения. Суммарное количество регионов для каждого изображения, сгенерированных на первом шаге, примерно равно двум тысячам. Найденные регионы при помощи аффинных преобразований приобретают размер, который нужно подать на вход CNN. Также вместо аффинных преобразований можно использовать паддинги, либо расширять ограничивающие рамки до размеров, необходимых для входа CNN. В качестве CNN зачастую используется архитектура CaffeNet<ref>[https://ucb-icsi-vision-group.github.io/caffe-paper/caffe.pdf CaffeNet]</ref>, извлекающая для каждого региона порядка 4096 признаков. На последнем этапе вектора признаков регионов обрабатываются SVM, проводящими классификацию объектов, по одной SVM на каждый домен.  
  
 
Селективный поиск, в свою очередь, тоже можно обучать с помощью линейной регрессии параметров региона {{---}} ширины, высоты, центра. Этот метод, названный bounding-box regression, позволяет более точно выделить объект. В качестве данных для регрессии используются признаки, полученные в результате работы CNN.
 
Селективный поиск, в свою очередь, тоже можно обучать с помощью линейной регрессии параметров региона {{---}} ширины, высоты, центра. Этот метод, названный bounding-box regression, позволяет более точно выделить объект. В качестве данных для регрессии используются признаки, полученные в результате работы CNN.
  
===Fast R-CNN===
+
====Fast R-CNN====
 +
 
 +
[[Файл:Fast-R-CNN-RUS.png|300px|thumb|right|Схема работы Fast R-CNN]]
 +
 
 +
За счёт того, что в R-CNN для каждого из 2000 регионов классификация производится отдельно, обучение сети занимает большой объём времени. Оригинальной версии алгоритма R-CNN для обработки каждого тестового изображения требовалось порядка 47 секунд, поэтому его авторы предложили алгоритм, улучшающий производительность {{---}} Fast R-CNN<ref>[https://arxiv.org/abs/1504.08083 Fast R-CNN]</ref>. Его характерной особенностью является подача на вход CNN не отдельных регионов, а всего изображения сразу для получения общей карты признаков. Предложенные регионы накладываются на общую карту признаков, и в результате количество операций свёртки существенно уменьшается. Поскольку регионы имеют разный размер, необходимо привести признаки к фиксированному размеру при помощи операции RoIPooling (Region of interest pooling). В рамках RoIPooling регион делится на сетку, размерность ячеек которой совпадает с размерностью выхода, после чего по ячейкам сетки проводится выбор максимального значения. Полученные регионы фиксированного размера далее являются входом для полносвязного слоя, который и осуществляет как классификацию, так и линейную регрессию для сдвига границ его рамок. Стоит отметить, что в Fast R-CNN используется совместное обучение SVM для классификации, CNN и bounding box регрессора вместо независимого их обучения {{---}}для этого используется совместная функция потерь.
 +
 
 +
====Faster R-CNN====
 +
 
 +
[[Файл:Anchors.png|300px|thumb|right|Ключевые рамки различных масштабов и ориентации]]
 +
 
 +
Fast R-CNN, как и оригинальный алгоритм R-CNN, использует для нахождения регионов селективный поиск. Несмотря на то, что за счёт единоразовой свёртки время обучения на одном тестовом изображении алгоритмом снизилось с 49 до 2.3 секунд, селективный поиск, который выполняет предложения регионов, является узким местом в производительности Fast R-CNN. Авторы алгоритма Faster R-CNN<ref>[https://arxiv.org/abs/1506.01497 Faster R-CNN]</ref>, призванного решить эту проблему, предложили вычислять регионы с помощью отдельного модуля Region Proposal Network (RPN). RPN является свёрточной сетью, выполняющей роль генератора регионов по признакам исходного изображения. Сгенерированные регионы передаются в два полносвязных слоя {{---}} box-regression-layer (сокр. reg layer), прогнозирующий значения смещения для ограничивающих рамок, и box-classification-layer (сокр. cls layer), классифицирующий изображения в пределах предлагаемой области. Также важную роль играют ключевые рамки (англ. anchor boxes) {{---}} рамки с различными положениями и размерами для скользящего окна. Ключевые рамки имеют зафиксированное положение и различную форму и масштаб. Для одного и того же масштаба выбирается, как правило, три ключевые рамки {{---}} квадратной формы; прямоугольной формы, ориентированной горизонтально; прямоугольной формы, ориентированной вертикально. Учитывая масштаб ключевой рамки, производится его перемещение скользящим окном для генерации регионов. Для сгенерированных таким образом регионов рассчитываются вероятности нахождения объекта внутри рамки cls-слоем, а за сдвиг местоположения отвечает reg-слой. После прохождения слоя RPN следует RoIPooling, как и в алгоритме Fast R-CNN {{---}} для преобразования регионов к одному размеру и дальнейшей классификации и смещения границ ограничивающих рамок. Поскольку классификацией и регрессией границ занимается как сеть в целом, так и RPN, предлагающая регионы, функция потерь учитывает как финальное решение по классификации и регрессии координат, так и классификацию и регрессию координат, проведённую RPN.
 +
 
 +
 
 +
{|align="center"
 +
|-valign="top"
 +
|[[Файл:Faster-R-CNN-RUS.png|300px|thumb|right|Схема работы Faster R-CNN]]
 +
|[[Файл:Anchors-Faster-R-CNN-RUS2.png|300px|thumb|right|Ключевые рамки в Faster R-CNN]]
 +
|}
 +
 
 +
====Mask R-CNN====
 +
 
 +
Mask R-CNN<ref>[https://arxiv.org/abs/1703.06870 Mask R-CNN]</ref> {{---}} улучшение алгоритма Faster R-CNN, предложенное в 2017 году и обеспечивающее осуществлять возможность сегментации экземпляров объектов, а не только составление ограничивающих рамок с классификацией. В Mask R-CNN к традиционным для алгоритмов семейства R-CNN метке класса и координатам ограничивающей рамки добавляется также маска объекта {{---}} прямоугольная матрица принадлежности пикселя текущему объекту. Маски предсказываются для каждого класса с помощью классификации без наличия информации о том, что изображено в регионе, что выдяеляет отдельный классификатор на последнем уровне сети. Потребность предсказания маски обусловила несколько архитектурных изменений относительно Faster R-CNN: ключевым является использование RoIAlign вместо RoIPooling. RoIPooling хорошо подходит для масштабирования ограничивающих рамок, однако, для маски такой метод оказывается недостаточно точным. RoIAlign не использует округлений сдвигов для пулинга, а сохраняет значения с плавающей точкой, используя билинейную интерполяцию. Это обеспечило более точное выделение маски объекта.
  
[[Файл:Fast-R-CNN.png|300px|thumb|right|Схема работы Fast R-CNN]]
+
Модель Mask R-CNN совершила прорыв в задачах сегментации экземпляров, детекции объектов и [[:Компьютерное_зрение#.D0.9E.D1.86.D0.B5.D0.BD.D0.BA.D0.B0_.D0.BF.D0.BE.D0.BB.D0.BE.D0.B6.D0.B5.D0.BD.D0.B8.D1.8F|определения поз людей на фотографии]] (англ. human pose estimation). Функция потерь является общей и включает три компонента {{---}} классификация, регрессия границ рамки и регрессия значений маски. Это позволило обеспечить взаимопомощь определения сдвигов границ объектов и более точного определения маски.
  
За счёт того, что в R-CNN для каждого из 2000 регионов классификация производится отдельно, обучение сети занимает большой объём времени. Оригинальной версии алгоритма R-CNN для обработки каждого тестового изображения требовалось порядка 47 секунд, поэтому его авторы предложили алгоритм, улучшающий производительность {{---}} Fast R-CNN. Его характерной особенностью является подача на вход CNN не отдельных регионов, а всего изображения сразу для получения общей карты признаков. Предложенные регионы накладываются на общую карту признаков, и в результате количество операций свёртки существенно уменьшается. Поскольку регионы имеют разный размер, необходимо привести признаки к фиксированному размеру при помощи операции RoIPooling (Region of interest pooling). В рамках RoIPooling регион делится на сетку, размерность ячеек которой совпадает с размерностью выхода, после чего по ячейкам сетки проводится выбор максимального значения. Полученные регионы фиксированного размера далее являются входом для полносвязного слоя, который и осуществляет как классификацию, так и линейную регрессию для сдвига границ bounding box-ов. Стоит отметить, что в Fast R-CNN используется совместное обучение SVM для классификации, CNN и bounding box регрессора вместо независимого их обучения {{---}}для этого используется совместная функция потерь.
+
{|align="center"
 +
|-valign="top"
 +
|[[Файл:Mask-R-CNN-RUS.png|300px|thumb|right|Схема работы Mask R-CNN]]
 +
|[[Файл:Mask-R-CNN-Example.png|300px|thumb|right|Пример семантической сегментации объектов посредством Mask R-CNN]]
 +
|}
  
===Faster R-CNN===
+
===Одноэтапные методы===
  
Fast R-CNN, как и оригинальный алгоритм R-CNN, использует для нахождения регионов селективный поиск. Несмотря на то, что за счёт единоразовой свёртки время обучения на одном тестовом изображении алгоритмом снизилось с 49 до 2.3 секунд, селективный поиск, который выполняет предложения регионов, является узким местом в производительности Fast R-CNN. Авторы алгоритма Faster R-CNN, призванного решить эту проблему, предложили вычислять регионы с помощью отдельного модуля Region Proposal Network (RPN). RPN является свёрточной сетью, выполняющей роль генератора регионов по признакам исходного изображения. Сгенерированные регионы передаются в два полносвязных слоя {{---}} box-regression-layer (сокр. reg layer), прогнозирующий значения смещения для bounding box-ов, и box-classification-layer (сокр. cls layer), классифицирующий изображения в пределах предлагаемой области. Также важную роль играют anchor-ы - рамки с разными положениями и размерами для скользящего окна. Anchor-ы используются для расчёта вероятностей нахождения объекта внутри рамки cls-слоем, а за сдвиг их местоположения отвечает reg-слой. После прохождения слоя RPN следует RoIPooling, как и в алгоритме Fast R-CNN {{---}} для преобразования регионов к одному размеру и дальнейшей классификации и смещения границ bounding box-ов. Поскольку классификацией и регрессией границ занимается как сеть в целом, так и RPN, предлагающая регионы, функция потерь учитывает как финальное решение по классификации и регрессии координат, так и классификацию и регрессию координат, проведённую RPN.
+
Семейство алгоритмов R-CNN использует предсказания регионов, что позволяет обеспечивать хорошую точность, но может быть очень медленным для некоторых сфер, таких, как беспилотное управление автомобилем. Можно выделить ещё одно семейство параллельно развивающихся алгоритмов для детекции изображений, которое не использует регионы {{---}} семейство алгоритмов быстрой детекции.
  
 +
====YOLO====
 +
 +
Алгоритм YOLO<ref>[https://arxiv.org/abs/1506.02640 YOLO]</ref> (You Look Only Once), предложенный в 2016 году, был первой попыткой сделать возможной детекцию объектов в реальном времени. В рамках алгоритма YOLO исходное изображение сначала разбивается на сетку из $N \times N$ ячеек. Если центр объекта попадает внутрь координат ячейки, то эта ячейка считается ответственной за определение параметров местонахождения объекта. Каждая ячейка описывает несколько вариантов местоположения ограничивающих рамок для одного и того же объекта. Каждый из этих вариантов характеризуется пятью значениями {{---}} координатами центра ограничивающей рамки, его шириной и высотой, а также степени уверенности в том, что ограничивающая рамка содержит в себе объект. Также необходимо для каждой пары класса объектов и ячейки определить вероятность того, что ячейка содержит в себе объект этого класса. Таким образом, последний слой сети, принимающий конечное решение об ограничивающих рамках и классификации объектов работает с тензором размерности $N \times N \times (5B + C)$, где $B$ {{---}} количество предсказываемых ограничивающих рамок для ячейки, $C$ {{---}} количество классов объектов, определённых изначально.
 +
 +
Алгоритм YOLO работает быстрее алгоритмов семейства R-CNN за счёт того, что поддерживает дробление на константное количество ячеек вместо того, чтобы предлагать регионы и рассчитывать решение для каждого региона отдельно, однако, в качестве проблем YOLO указывается плохое качество распознавания объектов сложной формы или группы небольших объектов из-за ограниченного числа кандидатов для ограничивающих рамок.
  
 
{|align="center"
 
{|align="center"
 
  |-valign="top"
 
  |-valign="top"
  |[[Файл:Faster-R-CNN.png|300px|thumb|right|Схема работы Faster R-CNN]]
+
  |[[Файл:YOLO-RUS.png|300px|thumb|right|Схема работы алгоритма YOLO]]
  |[[Файл:Anchors-Faster-R-CNN.png|300px|thumb|right|Anchor-ы в Faster R-CNN]]
+
  |[[Файл:YOLONet.png|300px|thumb|right|Архитектура нейронной сети для алгоритма YOLO]]
 
  |}
 
  |}
  
===YOLO===
+
====YOLOv2, YOLOv3====
  
Семейство алгоритмов R-CNN использует предсказания регионов, что позволяет обеспечивать хорошую точность, но может быть очень медленным для некоторых сфер, таких, как беспилотное управление автомобилем. Можно выделить ещё одно семейство алгоритмов для детекции изображений, которое не использует регионы {{---}} семейство алгоритмов быстрой детекции.
+
[[Файл:YOLO9000.png|300px|thumb|right|Древовидная структура классов в YOLO9000]]
  
Алгоритм YOLO (You Look Only Once), изобретённый в 2016 году, был первой попыткой сделать возможной детекцию объектов в реальном времени. В рамках алгоритма YOLO исходное изображение сначала разбивается на сетку из $N \times N$ ячеек. Если центр объекта попадает внутрь координат ячейки, то эта ячейка считается ответственной за определение параметров местонахождения объекта. Каждая ячейка описывает несколько вариантов местоположения bounding box-ов для одного и того же объекта. Каждый из этих вариантов характеризуется пятью значениями {{---}} координатами центра bounding box-а, его шириной и высотой, а также степени уверенности в том, что bounding box содержит в себе объект. Также необходимо для каждой пары класса объектов и ячейки определить вероятность того, что ячейка содержит в себе объект этого класса. Таким образом, последний слой сети, принимающий конечное решение о bounding box-ах и классификации объектов работает с тензором размерности $N \times N \times (5B + C)$, где $B$ {{---}} количество предсказанных bounding box-ов, $C$ {{---}} количество классов объектов, определённых изначально.
+
Улучшенная версия модели YOLOv2<ref>[https://arxiv.org/abs/1612.08242 YOLOv2]</ref> отличается от предшественницы использованием [[:Batch-normalization|батчевой нормализации]] на свёрточных слоях, обучением модели на изображениях с повышенным разрешением, использованием ключевых рамок для предсказания местонахождения объектов, использованием кластеризации алгоримтом $k$-средних для обучения более эффективного выбора размеров ограничивающих рамок на тренировочной выборке с использованием функции расстояния на основе IoU:
 +
 
 +
$dist(x, c_i) = 1 - IoU(x, c_i)$
 +
 
 +
где $x$ {{---}} настоящая ограничивающая рамка, $c_i$ {{---}} центроид кластера. Количество ограничивающих рамок-центроидов выбирается при помощи "метода локтя" (англ. elbow method). Также в YOLOv2 используется предположение, что ограничивающиеся рамки не слишком отклоняются от местоположения центра, что обеспечивает стабильность на фоне менее эффективного равномерного выбора рамок-кандидатов по всему исходному изображению. YOLO9000, представленный в той же статье и названный согласно использованию 9000 лучших классов ImageNet, использует древовидную структуру классов, учитывая их вложенность. Например, если среди классов есть метка "Персидская кошка", это будет означать, что найденный объект будет подклассом метки "Кошка". Таким образом, не возникает взаимной исключительности классов, и softmax ко всем классам не применяется. Чтобы предсказать вероятность узла класса, мы можем следовать по пути от узла к корню:
 +
 
 +
$p($persian cat$|$object$) = p($persian cat$|$cat$) \cdot p($cat$|$animal$) \cdot p($animal$|$object$) \cdot p($object$)$
 +
 
 +
$p($object$)$ {{---}} вероятность обнаружения объекта, вычисленная на этапе генерации ограничительных рамок. Путь прогнозирования условной вероятности может остановиться на любом этапе, в зависимости от того, какие метки доступны.
 +
 
 +
YOLOv3<ref>[https://arxiv.org/abs/1804.02767 YOLOv3]</ref>, в свою очередь, является небольшим улучшением YOLOv2 {{---}} используется логистическая регрессия для оценок достоверностей ограничивающих рамок вместо суммы квадратов ошибок для условий классификации в YOLO и YOLOv2; использование нескольких независимых логистических классификаторов для каждого класса вместо одного слоя softmax; добавление межуровневых соединений между уровнями прогнозирования ограничивающих рамок; использование архитектур DarkNet и ResNet для свёрточных сетей.
 +
 
 +
====SSD====
 +
 
 +
[[Файл:SSD.png|300px|thumb|right|Архитектура нейронной сети для алгоритма SSD]]
 +
 
 +
Модель Single Shot Detector<ref>[https://arxiv.org/abs/1512.02325 Single Shot Detector]</ref> (SSD) использует идею использования пирамидальной иерархии выходов свёрточной сети для эффективного обнаружения объектов различных размеров. Изображение последовательно передаётся на слои свёрточной сети, которые уменьшаются в размерах. Выход из последнего слоя каждой размерности участвует в принятии решения по детекции объектов, таким образом, складывается "пирамидальная характеристика" изображения. Это позволяет обнаруживать объекты различных масштабов, так как размерность выходов первых слоёв сильно коррелирует с ограничивающими рамками для крупных объектов, а последних {{---}} для небольших. В отличие от YOLO, SSD не разбивает изображение на сетку произвольного размера, а предсказывает смещение ключевых рамок. Ключевые рамки на разных уровнях масштабируются так, что одна размерность выходного слоя отвечает за объекты своего масштаба. В результате, большие объекты могут быть обнаружены только на более высоком уровне, а маленькие объекты {{---}} на низких уровнях. Как и в других алгоритмах, функция потерь обеспечивает совместный вклад как потерь локализации, так и потерь классификации.
 +
 
 +
 
 +
 
 +
===Anchor boxes===
 +
 
 +
Anchor boxes {{---}} алгоритм нахождения объектов, основанный на предсказании категории объекта и отступа от истинной ограничивающей рамки для большого количества сгенерированных ключевых рамок с последующей их фильтрацией.
 +
 
 +
====Генерация ключевых рамок====
 +
 
 +
Пусть входное изображение имеет высоту $h$ и ширину $w$. Генерируем ключевые рамки с различными формами и размерами, центрированные на каждом пикселе изображения. Предположим, что размер $s∈(0, 1]$, соотношение сторон $r>0$, тогда ширина и высота ключевой рамки равны $ws\sqrt{r}$ и $hs/\sqrt{r}$. Затем определяем набор размеров $s_1,\ldots, s_n$ и набор соотношений $r_1,\ldots, r_m$. Если использовать комбинацию всех размеров и пропорций, то входное изображение будет иметь $whnm$ ключевых рамок, что может привести к большой вычислительной сложности. Поэтому обычно выбираются только комбинации, содержащие размеры $s_1$ и пропорции $r_1$:
 +
 
 +
$(s_1, r_1), (s_1, r_2), \ldots, (s_1, r_m), (s_2, r_1), (s_3, r_1), \ldots, (s_n, r_1).$
 +
 
 +
При таком подходе число рамок для входного изображения сокращается до $wh(n+m-1)$.
 +
 
 +
====Процесс обучения====
 +
 
 +
Пусть набор ключевых рамок входного изображения это $A_1, A_2, \ldots, A_{n_a}$, а набор истинных ограничивающих рамок это $B_1, B_2, \ldots, B_{n_b}$, и $n_a \geq n_b$. Определяем матрицу $\mathbf{X} \in \mathbb{R}^{n_a \times n_b}$, где элемент $x_{ij}$ - это $IoU$ ключевой рамки $A_i$ с истинной рамкой $B_j$. Затем находим наибольший элемент в матрице $\mathbf{X}$ и сохраняем индекс строки и колонки элемента как $i_1,j_1$. Так мы обозначили ограничивающую рамку $B_{j_1}$ для ключевой рамки $A_{i_1}$. Далее исключаем все элементы в строке с индексом $i_1$ и колонке с индексом $j_1$ в матрице $\mathbf{X}$ для последующих поисков максимального элемента. Теперь ищем наибольший элемент среди оставшихся элементов матрицы $\mathbf{X}$ и сохраняем его индексы как элемент $i_2, j_2$, и также исключаем элементы из соответствующих колонок и строк.
 +
 
 +
Повторяем данные действия пока все $n_b$ колонки матрицы $\mathbf{X}$ не будут исключены. Затем, для оставшихся $n_a - n_b$ ключевых рамок $A_i$ находим лучшую истинную рамку $B_j$ с наибольшим IoU в строке матрицы $\mathbf{X}$ с индексом $i$. Присваиваем ключевой рамке $A_i$ ограничивающую рамку $B_j$ только если IoU больше предустановленного порогового значения.
 +
 
 +
Теперь мы можем определить категорию и отступ для каждой ключевой рамки. Если ключевой рамке $\mathbf{A}$ назначена $\mathbf{B}$, то тогда ее категория такая же как и у $\mathbf{B}$. А смещение ключевой рамки $\mathbf{A}$ устанавливается в соответствии с относительным положением центральных координат $\mathbf{B}$ и $\mathbf{A}$ и относительными размерами двух рамок. Поскольку положения и размеры различных рамок в наборе данных могут различаться, эти относительные положения и относительные размеры обычно требуют некоторых специальных преобразований, чтобы сделать распределение смещений более равномерным и более простым для подгонки. Предположим, что центр ключевой рамки $\mathbf{A}$ это $(x_a, y_a)$, высота и ширина это $h_a$ и $w_a$; для $\mathbf{B}$ - $(x_b, y_b)$, $h_b$ и $w_b$ соответственно. В таком случае отступ для A рассчитывается следующим образом:
 +
 
 +
$\left( \frac{ \frac{x_b - x_a}{w_a} - \mu_x }{\sigma_x},
 +
\frac{ \frac{y_b - y_a}{h_a} - \mu_y }{\sigma_y},
 +
\frac{ \log \frac{w_b}{w_a} - \mu_w }{\sigma_w},
 +
\frac{ \log \frac{h_b}{h_a} - \mu_h }{\sigma_h}\right)$
 +
 
 +
Дефолтные значения констант $\mu_x = \mu_y = \mu_w = \mu_h = 0$, $\sigma_x=\sigma_y=0.1$, и $\sigma_w=\sigma_h=0.2$.
 +
 
 +
Если ключевой рамке не назначен ограничивающий прямоугольник, то устанавливаем категорию background.
 +
 
 +
====Процесс предсказаний====
 +
 
 +
На этапе прогнозирования сначала генерируется несколько ключевых рамок для изображения, а затем прогнозируются их категории и смещения. Затем на основе ключевых блоков и их прогнозируемых смещений получаются ограничивающие рамки прогнозирования. Когда имеется много ключевых рамок или много одинаковых ограничивающих рамок предсказания могут выводиться несколько раз для одного и того же объекта. Чтобы упростить результаты, можно удалить аналогичные ограничивающие рамки прогнозирования. Обычно используется метод, который называется не максимальное подавление (NMS).
  
Алгоритм YOLO работает быстрее алгоритмов семейства R-CNN за счёт того, что поддерживает дробление на константное количество ячеек вместо того, чтобы предлагать регионы и рассчитывать решение для каждого региона отдельно, однако, в качестве проблем YOLO указывается плохое качество распознавания объектов сложной формы или группы небольших объектов из-за ограниченного числа кандидатов для bounding box-ов.
 
  
 
==См.также==
 
==См.также==
* [[Общие понятия]]
+
* [[Глубокое обучение]]
* [[Модель алгоритма и её выбор]]
+
* [[Сверточные нейронные сети]]
* [[Оценка качества в задачах классификации и регрессии]]
+
* [[Модель алгоритма и ее выбор]]
 +
 
 +
==Примечания==
 +
<references/>
  
 
==Источники информации==
 
==Источники информации==
 +
 +
* [http://cs231n.stanford.edu/slides/2017/cs231n_2017_lecture11.pdf Stanford CS231n: Detection and Segmentation]
 +
* [https://stepik.org/course/57457/promo Stepik.org: Deep Learning School]
 +
* [https://habr.com/ru/company/mipt/blog/458190/ Habr: обзор Deep Learning в Computer Vision]
 +
* [https://github.com/hoya012/deep_learning_object_detection Список статей о детекции объектов методами глубокого обучения]
 +
* [https://towardsdatascience.com/r-cnn-fast-r-cnn-faster-r-cnn-yolo-object-detection-algorithms-36d53571365e R-CNN, Fast R-CNN, Faster R-CNN, YOLO — Object Detection Algorithms]
 +
* [https://d2l.ai/chapter_computer-vision/anchor.html Dive into deep lerning - Computer vision - Anchor Boxes]
 +
  
 
[[Категория: Машинное обучение]]
 
[[Категория: Машинное обучение]]

Текущая версия на 17:10, 23 апреля 2020

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

Постановка задачи[править]

Различие между задачами классификации изображения, классификации с локализацией, детекции объектов и сегментации экземпляров

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

Задача семантической сегментации (англ. semantic segmentation) — задача, в которой на вход модели подаётся изображение, а на выходе для каждого пикселя является метка принадлежности этого пикселя к определённой категории. Например, если в исходном изображении человек переходит дорогу, то для каждого пикселя необходимо вывести, является ли этот пиксель частью человеческого тела, профиля дороги, знака дорожного движения, неба, или какого-то другого типа. Существенный недостаток применения одной лишь семантической сегментации относительно задач, связанных с распознаванием объектов — маркировка пикселей по принадлежности только к типу объекта, что не создаёт различия между объектами как таковыми. Например, если назвать "объектом" связную область пикселей, характеризующих одинаковый тип, то два объекта, перегораживающих друг друга на исходном изображении, будут определены как один объект, что в корне неверно. Задача семантической сегментации изображения с дифференцированием объектов называется задачей сегментации экземпляров (англ. instance segmentation). Модели, решающие задачу сегментации экземпляров, применяются, в том числе, для подсчёта людей в массовых скоплениях, для автомобилей с автоматическим управлением.

Задача классификации с локализацией (англ. classification and localization) — задача, в которой в дополнение к предсказанию метки категории класса определяется рамка, ограничивающая местоположение экземпляра одиночного объекта на картинке. Как правило, рамка имеет прямоугольную форму, её стороны ориентированы параллельно осям исходного изображения, а площадь является минимальной при условии полного нахождения экземпляра объекта внутри этой рамки. Такую прямоугольную рамку называют термином "ограничивающая рамка" (англ. bounding box). Ограничивающую рамку можно задать как при помощи центра, ширины и высоты, так и при помощи четырёх сторон. Модель в данном случается одновременно обучается как верной классификации, так и максимально точному определению границ рамки.

Задача детекции объектов (англ. object detection) — задача, в рамках которой необходимо выделить несколько объектов на изображении посредством нахождения координат их ограничивающих рамок и классификации этих ограничивающих рамок из множества заранее известных классов. В отличие от классификации с локализацией, число объектов, которые находятся на изображении, заведомо неизвестно.

Метрики[править]

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

$IoU = \frac{S(A \cup B)}{S(A \cap B)}$,

где $A$ и $B$ — предсказанная ограничивающая рамка и настоящиая ограничивающая рамка соответственно. $IoU$ равно нулю в случае непересекающихся ограничивающих рамок и равно единице в случае идеального наложения.

Примеры влияния взаимного положения ограничивающих рамок на метрику IoU

В задачах детекции объектов в качестве метрики зачастую используется $mAP$ (англ. mean average precision) — усреднённая по всем категориям величина средней точности (англ. average precision, AP)

$AP = \int_{0}^{1} p(r) dr$,

где $p$ — точность, $r$ — полнота из предположения, что ограничивающая рамка определена верно, если $IoU \geq 0.5$. Поскольку точность и полнота находятся в промежутке от $0$ до $1$, то $AP$, а следовательно, и $mAP$ также находится в пределах от $0$ до $1$. На практике, $AP$ часто считают по точкам, значения полноты которых равномерно распределены в промежутке $[0;1]$:

$AP_c = \frac{1}{11} \cdot (AP_c(0) + AP_c(0.1) + \ldots + AP_c(1))$

$mAP = \overline{AP_c}$

Зависимость точности от полноты, необходимая для вычисления average presicion (AP)

Наборы данных[править]

Основная статья: Известные наборы данных

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

  • PASCAL VOC 2012[1] (Pattern Analysis, Statistical Modelling and Computational Learning: Visual Object Classes ) — содержит 11530 изображений 20 классов с 27450 регионами предложений и 6929 сегментациями
  • MS COCO 2017[2] (Microsoft Common Objects in Context) — 118000 изображений в тренировочной выборке, 5000 изображений в валидационной выборке, 41000 изображений в тестовой выборке. Набор данных содержит 80 классов, на которых можно определить вложенность
  • ImageNet[3] — 400000 изображений 200 классов с 350000 размеченными ограничивающими рамками
  • Google Open Images[4] — в шестой версии февраля 2020 года содержит свыше 1743000 изображений в тестовой выборке, свыше 41000 изображений в валидационной выборке и свыше 125000 изображений в тестовой выборке. Суммарно на изображениях размечено около 16000000 ограничивающих рамок

Подходы к решению задачи детекции объектов[править]

Одним из наивных подходов на основе свёрточных нейронных сетей может быть использование в качестве ядра каноничных изображений классов, которые необходимо найти на изображении, и дальнейшее использование скользящего окна для вычисления свёртки. Такой подход называется сопоставлением с шаблоном (англ. template matching). В случае, когда вместо шаблона используется натренированный классификатор, для достижения наилучшего результата необходимо осуществить полный перебор ограничивающих рамок с порогом уверенности в правдивости классификации за счёт того, что объекты могут быть разных масштабов и находиться в разных местах изображений. Однако, на изображении разрешения $W \times H$ суммарное число ограничивающих рамок равно $\sum_{i=0}^{W} \sum_{j=0}^{H} (W-i)\cdot(H-j) = \frac{1}{4} m \cdot n \cdot (m + 1) \cdot (n +1) = O(m^2n^2)$, что делает полный перебор неэффективным методом, занимающим очень большое количество времени. Для уменьшения количества рассматриваемых ограничивающих рамок выделяют два основных параллельно развивающихся подхода:

  • Двухэтапные методы (англ. two-stage methods), они же "методы, основанные на регионах" (англ. region-based methods) — подход, разделённый на два этапа. На первом этапе селективным поиском или с помощью специального слоя нейронной сети выделяются регионы интереса (англ. regions of interest, RoI) — области , с высокой вероятностью содержащие внутри себя объекты. На втором этапе выбранные регионы рассматриваются классификатором для определения принадлежности исходным классам и регрессором, уточняющим местоположение ограничивающих рамок.
  • Одноэтапные методы (англ. one-stage methods) — подход, не использующий отдельный алгоритм для генерации регионов, вместо этого предсказывая координаты определённого количества ограничивающих рамок с различными характеристиками, такими, как результаты классификации и степень уверенности и в дальнейшем корректируя местоположение рамок.

Двухэтапные методы[править]

R-CNN[править]

Схема работы R-CNN

Region-CNN[5] (R-CNN, Region-based Convolutional Network) — алгоритм, основанный на свёрточных нейронных сетях. Вместо того, чтобы использовать для поиска изображений скользящие окна фиксированного размера, на первом шаге алгоритм пытается найти селективным поиском "регионы" — прямоугольные рамки разных размеров, которые, предположительно, содержат объект. Это обеспечивает более быстрое и эффективное нахождение объектов независимо от размера объекта, расстояния до камеры, угла зрения. Суммарное количество регионов для каждого изображения, сгенерированных на первом шаге, примерно равно двум тысячам. Найденные регионы при помощи аффинных преобразований приобретают размер, который нужно подать на вход CNN. Также вместо аффинных преобразований можно использовать паддинги, либо расширять ограничивающие рамки до размеров, необходимых для входа CNN. В качестве CNN зачастую используется архитектура CaffeNet[6], извлекающая для каждого региона порядка 4096 признаков. На последнем этапе вектора признаков регионов обрабатываются SVM, проводящими классификацию объектов, по одной SVM на каждый домен.

Селективный поиск, в свою очередь, тоже можно обучать с помощью линейной регрессии параметров региона — ширины, высоты, центра. Этот метод, названный bounding-box regression, позволяет более точно выделить объект. В качестве данных для регрессии используются признаки, полученные в результате работы CNN.

Fast R-CNN[править]

Схема работы Fast R-CNN

За счёт того, что в R-CNN для каждого из 2000 регионов классификация производится отдельно, обучение сети занимает большой объём времени. Оригинальной версии алгоритма R-CNN для обработки каждого тестового изображения требовалось порядка 47 секунд, поэтому его авторы предложили алгоритм, улучшающий производительность — Fast R-CNN[7]. Его характерной особенностью является подача на вход CNN не отдельных регионов, а всего изображения сразу для получения общей карты признаков. Предложенные регионы накладываются на общую карту признаков, и в результате количество операций свёртки существенно уменьшается. Поскольку регионы имеют разный размер, необходимо привести признаки к фиксированному размеру при помощи операции RoIPooling (Region of interest pooling). В рамках RoIPooling регион делится на сетку, размерность ячеек которой совпадает с размерностью выхода, после чего по ячейкам сетки проводится выбор максимального значения. Полученные регионы фиксированного размера далее являются входом для полносвязного слоя, который и осуществляет как классификацию, так и линейную регрессию для сдвига границ его рамок. Стоит отметить, что в Fast R-CNN используется совместное обучение SVM для классификации, CNN и bounding box регрессора вместо независимого их обучения —для этого используется совместная функция потерь.

Faster R-CNN[править]

Ключевые рамки различных масштабов и ориентации

Fast R-CNN, как и оригинальный алгоритм R-CNN, использует для нахождения регионов селективный поиск. Несмотря на то, что за счёт единоразовой свёртки время обучения на одном тестовом изображении алгоритмом снизилось с 49 до 2.3 секунд, селективный поиск, который выполняет предложения регионов, является узким местом в производительности Fast R-CNN. Авторы алгоритма Faster R-CNN[8], призванного решить эту проблему, предложили вычислять регионы с помощью отдельного модуля Region Proposal Network (RPN). RPN является свёрточной сетью, выполняющей роль генератора регионов по признакам исходного изображения. Сгенерированные регионы передаются в два полносвязных слоя — box-regression-layer (сокр. reg layer), прогнозирующий значения смещения для ограничивающих рамок, и box-classification-layer (сокр. cls layer), классифицирующий изображения в пределах предлагаемой области. Также важную роль играют ключевые рамки (англ. anchor boxes) — рамки с различными положениями и размерами для скользящего окна. Ключевые рамки имеют зафиксированное положение и различную форму и масштаб. Для одного и того же масштаба выбирается, как правило, три ключевые рамки — квадратной формы; прямоугольной формы, ориентированной горизонтально; прямоугольной формы, ориентированной вертикально. Учитывая масштаб ключевой рамки, производится его перемещение скользящим окном для генерации регионов. Для сгенерированных таким образом регионов рассчитываются вероятности нахождения объекта внутри рамки cls-слоем, а за сдвиг местоположения отвечает reg-слой. После прохождения слоя RPN следует RoIPooling, как и в алгоритме Fast R-CNN — для преобразования регионов к одному размеру и дальнейшей классификации и смещения границ ограничивающих рамок. Поскольку классификацией и регрессией границ занимается как сеть в целом, так и RPN, предлагающая регионы, функция потерь учитывает как финальное решение по классификации и регрессии координат, так и классификацию и регрессию координат, проведённую RPN.


Схема работы Faster R-CNN
Ключевые рамки в Faster R-CNN

Mask R-CNN[править]

Mask R-CNN[9] — улучшение алгоритма Faster R-CNN, предложенное в 2017 году и обеспечивающее осуществлять возможность сегментации экземпляров объектов, а не только составление ограничивающих рамок с классификацией. В Mask R-CNN к традиционным для алгоритмов семейства R-CNN метке класса и координатам ограничивающей рамки добавляется также маска объекта — прямоугольная матрица принадлежности пикселя текущему объекту. Маски предсказываются для каждого класса с помощью классификации без наличия информации о том, что изображено в регионе, что выдяеляет отдельный классификатор на последнем уровне сети. Потребность предсказания маски обусловила несколько архитектурных изменений относительно Faster R-CNN: ключевым является использование RoIAlign вместо RoIPooling. RoIPooling хорошо подходит для масштабирования ограничивающих рамок, однако, для маски такой метод оказывается недостаточно точным. RoIAlign не использует округлений сдвигов для пулинга, а сохраняет значения с плавающей точкой, используя билинейную интерполяцию. Это обеспечило более точное выделение маски объекта.

Модель Mask R-CNN совершила прорыв в задачах сегментации экземпляров, детекции объектов и определения поз людей на фотографии (англ. human pose estimation). Функция потерь является общей и включает три компонента — классификация, регрессия границ рамки и регрессия значений маски. Это позволило обеспечить взаимопомощь определения сдвигов границ объектов и более точного определения маски.

Схема работы Mask R-CNN
Пример семантической сегментации объектов посредством Mask R-CNN

Одноэтапные методы[править]

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

YOLO[править]

Алгоритм YOLO[10] (You Look Only Once), предложенный в 2016 году, был первой попыткой сделать возможной детекцию объектов в реальном времени. В рамках алгоритма YOLO исходное изображение сначала разбивается на сетку из $N \times N$ ячеек. Если центр объекта попадает внутрь координат ячейки, то эта ячейка считается ответственной за определение параметров местонахождения объекта. Каждая ячейка описывает несколько вариантов местоположения ограничивающих рамок для одного и того же объекта. Каждый из этих вариантов характеризуется пятью значениями — координатами центра ограничивающей рамки, его шириной и высотой, а также степени уверенности в том, что ограничивающая рамка содержит в себе объект. Также необходимо для каждой пары класса объектов и ячейки определить вероятность того, что ячейка содержит в себе объект этого класса. Таким образом, последний слой сети, принимающий конечное решение об ограничивающих рамках и классификации объектов работает с тензором размерности $N \times N \times (5B + C)$, где $B$ — количество предсказываемых ограничивающих рамок для ячейки, $C$ — количество классов объектов, определённых изначально.

Алгоритм YOLO работает быстрее алгоритмов семейства R-CNN за счёт того, что поддерживает дробление на константное количество ячеек вместо того, чтобы предлагать регионы и рассчитывать решение для каждого региона отдельно, однако, в качестве проблем YOLO указывается плохое качество распознавания объектов сложной формы или группы небольших объектов из-за ограниченного числа кандидатов для ограничивающих рамок.

Схема работы алгоритма YOLO
Архитектура нейронной сети для алгоритма YOLO

YOLOv2, YOLOv3[править]

Древовидная структура классов в YOLO9000

Улучшенная версия модели YOLOv2[11] отличается от предшественницы использованием батчевой нормализации на свёрточных слоях, обучением модели на изображениях с повышенным разрешением, использованием ключевых рамок для предсказания местонахождения объектов, использованием кластеризации алгоримтом $k$-средних для обучения более эффективного выбора размеров ограничивающих рамок на тренировочной выборке с использованием функции расстояния на основе IoU:

$dist(x, c_i) = 1 - IoU(x, c_i)$

где $x$ — настоящая ограничивающая рамка, $c_i$ — центроид кластера. Количество ограничивающих рамок-центроидов выбирается при помощи "метода локтя" (англ. elbow method). Также в YOLOv2 используется предположение, что ограничивающиеся рамки не слишком отклоняются от местоположения центра, что обеспечивает стабильность на фоне менее эффективного равномерного выбора рамок-кандидатов по всему исходному изображению. YOLO9000, представленный в той же статье и названный согласно использованию 9000 лучших классов ImageNet, использует древовидную структуру классов, учитывая их вложенность. Например, если среди классов есть метка "Персидская кошка", это будет означать, что найденный объект будет подклассом метки "Кошка". Таким образом, не возникает взаимной исключительности классов, и softmax ко всем классам не применяется. Чтобы предсказать вероятность узла класса, мы можем следовать по пути от узла к корню:

$p($persian cat$|$object$) = p($persian cat$|$cat$) \cdot p($cat$|$animal$) \cdot p($animal$|$object$) \cdot p($object$)$

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

YOLOv3[12], в свою очередь, является небольшим улучшением YOLOv2 — используется логистическая регрессия для оценок достоверностей ограничивающих рамок вместо суммы квадратов ошибок для условий классификации в YOLO и YOLOv2; использование нескольких независимых логистических классификаторов для каждого класса вместо одного слоя softmax; добавление межуровневых соединений между уровнями прогнозирования ограничивающих рамок; использование архитектур DarkNet и ResNet для свёрточных сетей.

SSD[править]

Архитектура нейронной сети для алгоритма SSD

Модель Single Shot Detector[13] (SSD) использует идею использования пирамидальной иерархии выходов свёрточной сети для эффективного обнаружения объектов различных размеров. Изображение последовательно передаётся на слои свёрточной сети, которые уменьшаются в размерах. Выход из последнего слоя каждой размерности участвует в принятии решения по детекции объектов, таким образом, складывается "пирамидальная характеристика" изображения. Это позволяет обнаруживать объекты различных масштабов, так как размерность выходов первых слоёв сильно коррелирует с ограничивающими рамками для крупных объектов, а последних — для небольших. В отличие от YOLO, SSD не разбивает изображение на сетку произвольного размера, а предсказывает смещение ключевых рамок. Ключевые рамки на разных уровнях масштабируются так, что одна размерность выходного слоя отвечает за объекты своего масштаба. В результате, большие объекты могут быть обнаружены только на более высоком уровне, а маленькие объекты — на низких уровнях. Как и в других алгоритмах, функция потерь обеспечивает совместный вклад как потерь локализации, так и потерь классификации.


Anchor boxes[править]

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

Генерация ключевых рамок[править]

Пусть входное изображение имеет высоту $h$ и ширину $w$. Генерируем ключевые рамки с различными формами и размерами, центрированные на каждом пикселе изображения. Предположим, что размер $s∈(0, 1]$, соотношение сторон $r>0$, тогда ширина и высота ключевой рамки равны $ws\sqrt{r}$ и $hs/\sqrt{r}$. Затем определяем набор размеров $s_1,\ldots, s_n$ и набор соотношений $r_1,\ldots, r_m$. Если использовать комбинацию всех размеров и пропорций, то входное изображение будет иметь $whnm$ ключевых рамок, что может привести к большой вычислительной сложности. Поэтому обычно выбираются только комбинации, содержащие размеры $s_1$ и пропорции $r_1$:

$(s_1, r_1), (s_1, r_2), \ldots, (s_1, r_m), (s_2, r_1), (s_3, r_1), \ldots, (s_n, r_1).$

При таком подходе число рамок для входного изображения сокращается до $wh(n+m-1)$.

Процесс обучения[править]

Пусть набор ключевых рамок входного изображения это $A_1, A_2, \ldots, A_{n_a}$, а набор истинных ограничивающих рамок это $B_1, B_2, \ldots, B_{n_b}$, и $n_a \geq n_b$. Определяем матрицу $\mathbf{X} \in \mathbb{R}^{n_a \times n_b}$, где элемент $x_{ij}$ - это $IoU$ ключевой рамки $A_i$ с истинной рамкой $B_j$. Затем находим наибольший элемент в матрице $\mathbf{X}$ и сохраняем индекс строки и колонки элемента как $i_1,j_1$. Так мы обозначили ограничивающую рамку $B_{j_1}$ для ключевой рамки $A_{i_1}$. Далее исключаем все элементы в строке с индексом $i_1$ и колонке с индексом $j_1$ в матрице $\mathbf{X}$ для последующих поисков максимального элемента. Теперь ищем наибольший элемент среди оставшихся элементов матрицы $\mathbf{X}$ и сохраняем его индексы как элемент $i_2, j_2$, и также исключаем элементы из соответствующих колонок и строк.

Повторяем данные действия пока все $n_b$ колонки матрицы $\mathbf{X}$ не будут исключены. Затем, для оставшихся $n_a - n_b$ ключевых рамок $A_i$ находим лучшую истинную рамку $B_j$ с наибольшим IoU в строке матрицы $\mathbf{X}$ с индексом $i$. Присваиваем ключевой рамке $A_i$ ограничивающую рамку $B_j$ только если IoU больше предустановленного порогового значения.

Теперь мы можем определить категорию и отступ для каждой ключевой рамки. Если ключевой рамке $\mathbf{A}$ назначена $\mathbf{B}$, то тогда ее категория такая же как и у $\mathbf{B}$. А смещение ключевой рамки $\mathbf{A}$ устанавливается в соответствии с относительным положением центральных координат $\mathbf{B}$ и $\mathbf{A}$ и относительными размерами двух рамок. Поскольку положения и размеры различных рамок в наборе данных могут различаться, эти относительные положения и относительные размеры обычно требуют некоторых специальных преобразований, чтобы сделать распределение смещений более равномерным и более простым для подгонки. Предположим, что центр ключевой рамки $\mathbf{A}$ это $(x_a, y_a)$, высота и ширина это $h_a$ и $w_a$; для $\mathbf{B}$ - $(x_b, y_b)$, $h_b$ и $w_b$ соответственно. В таком случае отступ для A рассчитывается следующим образом:

$\left( \frac{ \frac{x_b - x_a}{w_a} - \mu_x }{\sigma_x}, \frac{ \frac{y_b - y_a}{h_a} - \mu_y }{\sigma_y}, \frac{ \log \frac{w_b}{w_a} - \mu_w }{\sigma_w}, \frac{ \log \frac{h_b}{h_a} - \mu_h }{\sigma_h}\right)$

Дефолтные значения констант $\mu_x = \mu_y = \mu_w = \mu_h = 0$, $\sigma_x=\sigma_y=0.1$, и $\sigma_w=\sigma_h=0.2$.

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

Процесс предсказаний[править]

На этапе прогнозирования сначала генерируется несколько ключевых рамок для изображения, а затем прогнозируются их категории и смещения. Затем на основе ключевых блоков и их прогнозируемых смещений получаются ограничивающие рамки прогнозирования. Когда имеется много ключевых рамок или много одинаковых ограничивающих рамок предсказания могут выводиться несколько раз для одного и того же объекта. Чтобы упростить результаты, можно удалить аналогичные ограничивающие рамки прогнозирования. Обычно используется метод, который называется не максимальное подавление (NMS).


См.также[править]

Примечания[править]

Источники информации[править]