Задача нахождения объектов на изображении
Задача нахождения объектов на изображении — задача машинного обучения, в рамках которой выполняется определение наличия или отсутствия объекта определённого домена на изображении, нахождение границ этого объекта в системе координат пикселей исходного изображения. В зависимости от алгоритма обучения, объект может характеризоваться координатами обрамляющего его прямоугольника (bounding box), ключевыми точками, контуром объекта.
Содержание
Постановка задачи
Задача нахождения объектов на изображении может быть поставлена различным образом и включает в себя класс других задач, помогающих определить, какие объекты находятся на изображении и где они расположены в сетке пикселей исходного изображения.
Задача семантической сегментации (англ. 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-ов и равно единице в случае идеального наложения.
Задача детекции объектов (англ. 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$.
Семантическая сегментация
Для семантической сегментации чаще всего применяются глубокие свёрточные нейронные сети, в том числе, когда данные слабо размечены. Действительно, проблема низкого уровня размеченности данных в семантической сегментации довольно важна, поскольку для каждого пикселя определить его принадлежность с высокой точностью — задача, требующая высоких затрат времени и и не всегда высокую точность. Однако, сочетание хорошо размеченных данных со слабо размеченными данными (например, с точностью до bounding box-ов) улучшает производительность модели. Для задачи сегментации хорошо себя показали FCN (fully-convolutional networks) — полносвёрточные сети, позволяющие работать с изображениями произвольного размера, а на выходе выдавать тепловую карту нахождения классов на изображении через серию свёрток. Поскольку свёртка над матрицей большой размерности с большим числом каналом является затратной, как правило, первая половина слоёв в таких свёрточных сетях обеспечивает сабсэмплинг (англ. subsampling - уменьшение размерности), а вторая часть слоёв - апсэмплинг (англ. upsampling - увеличение размерности). Таким образом, размерность изображений в пикселях на входе и на выходе сети является одинаковой, а большинство операций свёртки применяется к матрицам небольшой размерности. Конечная классификация достигается за счёт выбора максимума по классам из значений тензора размерности $C \times W \times H$, где $C$ - множество классов, заранее заданных перед обучением и к которым могут принадлежать пиксели изображения, $W \times H$ - размер изображения. Такую модель можно обучить при помощи обратного распространения ошибок, а в качестве функции потерь для пикселей использовать кросс-энтропию.
Модель U-Net, разработанная авторами для сегментации биомедицинских изображений, улучшает архитектуру FCN путём использования сужающихся блоков свёртки для захвата контекста, расширяющихся блоков свёртки для локализации, а также прямых связей между блоками свёртки на одинаковых уровнях. Прямая связь слоёв обеспечивает улучшенное обучение за счёт отсутствия так называемого "артефакта шахматной доски" {---} негативного явления, вызванного апсэмплингом при помощи транспонированной свёртки. Развитием U-Net, в свою очередь модель DenseNet, в которой используются полностью связанные свёрточные сети. В основе идеи лежит использование "плотных блоков" {---} совокупности нескольких свёрточных слоёв с подключением каждого слоя к каждому слою. Однако, существенным недостатком такой модели является низкая эффективность работы с памятью.
Совершенно по-иному на свёртку для сегментации объектов позволил взглянуть метод расширенных свёрток (англ. atrous convolutions), применяющийся в современных state-of-the-art подходах (DeepLab, DeepLab v3, DeepLab v3+). Расширенная свёртка заключается в том, чтобы применять свёртки с ядрами разного размера и разным страйдом над прямоугольниками с одним и тем же центром, а впоследствии комбинировать полученные таким образом признаки. Расширенные свёртки могут применяться как каскадно (последовательно регулируя показатель расширения фильтра), так и параллельно (англ. ASPP, Atrous Spatial Pyramid Pooling — применяя свёртки с различным масштабом ядер на одном и том же слое свёрточной сети с пулингом в конце). Такой подход позволил достичь лучших результатов в изображениях с объектами разных масштабов.
Подходы к решению задачи детекции объектов
R-CNN
Region-CNN (R-CNN, Region-based Convolutional Network) — алгоритм, основанный на свёрточных нейронных сетях. Вместо того, чтобы использовать для поиска изображений скользящие окна фиксированного размера, на первом шаге алгоритм пытается найти селективным поиском "регионы" — bounding box-ы разных размеров, которые, предположительно, содержат объект. Это обеспечивает более быстрое и эффективное нахождение объектов независимо от размера объекта, расстояния до камеры, угла зрения. Суммарное количество регионов для каждого изображения, сгенерированных на первом шаге, примерно равно двум тысячам. Найденные регионы при помощи аффинных преобразований приобретают размер, который нужно подать на вход CNN. Также вместо аффинных преобразований можно использовать паддинги, либо расширять bounding-box до размеров, необходимых для входа CNN. В качестве CNN зачастую используется архитектура CaffeNet, извлекающая для каждого региона порядка 4096 признаков. На последнем этапе вектора признаков регионов обрабатываются SVM, проводящими классификацию объектов, по одной SVM на каждый домен.
Селективный поиск, в свою очередь, тоже можно обучать с помощью линейной регрессии параметров региона — ширины, высоты, центра. Этот метод, названный bounding-box regression, позволяет более точно выделить объект. В качестве данных для регрессии используются признаки, полученные в результате работы CNN.
Fast R-CNN
За счёт того, что в 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 регрессора вместо независимого их обучения —для этого используется совместная функция потерь.
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.
YOLO
Семейство алгоритмов R-CNN использует предсказания регионов, что позволяет обеспечивать хорошую точность, но может быть очень медленным для некоторых сфер, таких, как беспилотное управление автомобилем. Можно выделить ещё одно семейство алгоритмов для детекции изображений, которое не использует регионы — семейство алгоритмов быстрой детекции.
Алгоритм 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$ — количество классов объектов, определённых изначально.
Алгоритм YOLO работает быстрее алгоритмов семейства R-CNN за счёт того, что поддерживает дробление на константное количество ячеек вместо того, чтобы предлагать регионы и рассчитывать решение для каждого региона отдельно, однако, в качестве проблем YOLO указывается плохое качество распознавания объектов сложной формы или группы небольших объектов из-за ограниченного числа кандидатов для bounding box-ов.