Карта глубины
Карта глубины (англ. depth map) — это изображение, где для каждого пикселя вместо цвета хранится его расстояние до камеры.[1]
В компьютерной 3D-графике и компьютерном зрении карта глубины представляет собой изображение или канал изображения, содержащий информацию о расстоянии поверхностей объектов сцены от точки обзора.
Мотивация
Карта глубины изображения содержит в себе информацию о расстоянии между различными объектами или частями объектов, представленных на данном изображении. Эта информация может быть полезна во многих областях.
- Для создания 3D-сенсеров. Они способны строить трёхмерную картину своего окружения, используются для ориентации автономного робота в пространстве.
- Для систем, использующих технологии дополненной и виртуальной реальности. Например, камеры, которые фиксируют действия пользователя в видеоиграх с технологией виртуальной реальности.
- В беспилотных автомобилях, которые также используют карты глубин для ориентации на дороге.
- Для обработки фотографий. Например, карты глубин используют для размытия фона на фотографии, чтобы добиться более чёткого выделения человека[2].
Методы построения карты глубины
Карта глубины может быть получена с помощью специальной камеры глубины, по стереопаре изображений, а также с помощью нейронных сетей.
Построение с помощью специальных камер глубин
- ToF-камеры (англ. Time of Flight). Данный метод основан на измерении задержки света. Фактически нам нужно измерить задержку, с которой свет возвращается в каждую точку. Имея несколько сенсоров с разным временем накопления заряда и зная сдвиг по времени относительно источника для каждого сенсора и снятой яркости вспышки, мы можем рассчитать сдвиг и, соответственно, расстояние до объекта. Причем, чем больше сенсоров задействовано, тем выше точность метода.
- Структурированные световые камеры (aнгл. Structured light camera). Это один из самых старых и дешёвых способов построить карту глубин. Ставим проектор, который создает, например, горизонтальные (а потом и вертикальные) полоски и рядом камеру, которая снимает картину с полосками. В некоторых вариантах используется псевдослучайный набор точек (например MS Kinect — бесконтактный сенсорный игровой контроллер, для консолей Xbox 360, Xbox One и персональных компьютеров под управлением ОС Windows[3]). Проекторы обычно работают в инфракрасном спектре, чтобы не мешать пользователям. Поскольку камера и проектор смещены друг относительно друга, то и полоски также будут смещаться пропорционально расстоянию до объекта. Измеряя это смещение, мы можем рассчитывать расстояние до объекта. Вполне понятны сложности, с которыми можно столкнуться при использовании этого метода: это необходимость настройки и калибровки проектора, и проблема того, что нам нужно относительно благоприятное освещение. К примеру, солнце может засветить полосы, и что-то распознать будет тяжело.
Построения карты глубины по стереопаре
Идея, лежащая в основе построения карты глубины по стереопаре, проста. Для каждой точки на одном изображении выполняется поиск парной ей точки на другом изображении. А по паре соответствующих точек можно выполнить триангуляцию и определить координаты их прообраза в трехмерном пространстве. Зная трехмерные координаты прообраза, глубина вычисляется как расстояние до плоскости камеры.
Парную точку нужно искать на эпиполярной[4] линии. Соответственно, для упрощения поиска изображения выравнивают так, чтобы все эпиполярные линии были параллельны сторонам изображения (обычно горизонтальны). Более того, изображения выравнивают так, чтобы для точки с координатами соответствующая ей эпиполярная линия задавалась уравнением . Тогда для каждой точки, соответствующую ей парную точку, нужно искать в той-же строчке на изображении со второй камеры. Такой процесс выравнивания изображений называют ректификацией (rectification).
После того, как изображения ректифицированы, выполняют поиск соответствующих пар точек. Для каждого пикселя одной картинки с координатами корреляция окрестностей пикселей. В результате получается карта смещений, пример которой приведен на рис. 2.
выполняется поиск пикселя на другой картинке. При этом предполагается, что пиксель на второй картинке должен иметь координаты , где — величина называемая смещением. Поиск соответствующего пикселя выполняется путем вычисления максимума функции отклика, в качестве которой может выступать, например,Собственно значения глубины обратно пропорциональны величине смещения пикселей.
Использование нейронных сетей
Существует множество методов, использующих нейронные сети. Приведём пару примеров таких решений.
Построение с помощью свёрточных нейронных сетей
Используем сверточные нейронные сети для построения карты глубины следующим образом [6]:
- Создаем карту смещений: используя два изображения с камер, близко расположенных друг к другу, создаем карту различий, точно так же как в методе построения по стереопаре.
- Ищем реальную карту глубины для обучения: с помощью карты смещений, можем построить карту глубины вышеописанным способом. Также допустимы другие способы построения карты глубины для обучения нейронной сети.
- Функция потерь: определим функцию потерь, для предсказанной карты , , и — количество пикселей. , где и это i пискель для для реальной карты глубин и для предсказанной карты, соответственно. Гиперпараметр , нужен для того, чтобы функция потерь меньше росла при большом количестве пикселей, предсказание для которых достаточно близко к реальному. Например, если , то мы просто придём к оптимизации в L2 для , т.е. .[7]
- Обучение свёрточной нейронной сети: далее идёт обычное обучение нейронной сети по карте различий путем обратного распространения ошибки, оптимизируя заданную выше функцию потерь.
В итоге, по обученной нейронной сети мы можем создавать карту глубины, не проводя расчётов для поиска карт смещения и имея только изображение объекта или пространства. [8]
Также возможно использование усложнённых архитектур свёрточных нейронных сетей типа DenseNet.
DenseNet[9] — это свёрточная нейронные сеть, в которой выход каждого из слоев подаётся на вход всем слоям, лежащих ниже.
Построение с помощью капсульных нейронных сетей
Свёрточные нейронные сети способны регистрировать только наличие какого-либо объекта на картинке, не кодируя его ориентацию и положение. Но капсульные нейронные сети (англ. Capsule Neural Network)[10] лишены этого недостатка.
"Капсульная нейронная сеть" состоит из капсул или групп нейронов, чтобы идентифицировать закономерности в изображении. Эта информация поступает в виде векторов, содержащих ориентацию и положение узоров на изображении, которое затем принимается капсулами более высокого уровня. Капсулы более высокого уровня обрабатывают эту информацию из нескольких капсул более низкого уровня и впоследствии выдают прогноз. Капсулы одного уровня не имеют связей друг с другом и вычисляют информацию независимо друг от друга. Капсулы образуются путем разделения выходных данных из свёрточного слоя. Мы делим наш трехмерный вектор на капсулы методом "нарезания" таким образом, чтобы в каждой капсуле была информация о каждом пикселе, т.е. по трехмерной координате.
Состояние нейронов капсульной нейронной сети внутри изображения фиксирует свойство области или объекта внутри изображения: его положение и ориентацию.
Использование капсульной нейронной сети аналогично использованию обычных свёрточных сетей, описанному выше. В целом, данная сеть показывает более точные результаты предсказания глубины.
Построение с помощью PlanetNet
Так же есть архитектуры, решающие данную задачу и без обучения на карте смещений, построенной с помощью двух изображений. Одной из таких является PlaneNet.
PlaneNet[12] — глубокая нейронная сеть, построенная на расширенных остаточных сетях (aнгл. Dilated Residual Networks или DRN)[13]. Она получает карту глубин путем композиции выходов трех подзадач:
- Параметры плоскостей: пытаемся предсказать количество плоскостей K, а после ищем на изображение K плоских поверхностей, каждая поверхность задаётся тремя параметрами: нормальная, прямая и сдвиг.
- Сегментация плоскости: ищем группы пикселей, каждая из которых характеризует один смысловой объект.
- Неплоская карта глубины: ищем одно-канальную (или неплоскую) карту глубины, то есть карту глубины, где каждый пиксель, либо на глубине 0, либо на глубине 1.
См. также
Примечания
- ↑ Alexey Kurakin "Основы стереозрения"[1]
- ↑ Примеры из "Research Guide for Depth Estimation with Deep Learning"[2]
- ↑ О MicriSoft Kinect [3]
- ↑ Информация о эпиполярной геометрии[4]
- ↑ "Основы стереозрения" Рис. 3 [5]
- ↑ Xiaobai Ma, Zhenglin Geng, Zhi Bie "Depth Estimation from Single Image Using CNN-Residual Network" [6]
- ↑ David Eigen, Christian Puhrsch, Rob Fergus "Depth Map Prediction from a Single Imageusing a Multi-Scale Deep Network" стр. 5
- ↑ Реализация, основанная на свёрточных нейронных сетях [7]
- ↑ Оригинальная статья описывающая DenseNet [8]
- ↑ Sara Sabour, Nicholas Frosst, Geoffrey E. Hinton "Dynamic Routing Between Capsules" [9]
- ↑ "Design and Investigation of Capsule Networks for Sentence Classification" Figure 2. [10]
- ↑ Chen Liu, Jimei Yang, Duygu Ceylan, Ersin Yumer, Yasutaka Furukawa "PlaneNet: Piece-wise Planar Reconstruction from a Single RGB Image" [11]
- ↑ Fisher Yu, Vladlen Koltun, Thomas Funkhouser "Dilated Residual Networks" [12]
- ↑ Chen Liu, Jimei Yang, Duygu Ceylan, Ersin Yumer, Yasutaka Furukawa "PlaneNet: Piece-wise Planar Reconstruction from a Single RGB Image" Figure 2.
Источники информации
- Р.А. Чугунов, А.Д. Кульневич, С.В. Аксенов "Методика построения карт глубины стереоизображения с помощью капсульной нейронной сети" [13]
- Alexey Kurakin "Основы стереозрения" [14]
- Dmitriy Vatolin "Камеры глубины — тихая революция" [15]
- Ibraheem Alhashim, Peter Wonka "High Quality Monocular Depth Estimation via Transfer Learning" [16]
- David Eigen, Christian Puhrsch, Rob Fergus "Depth Map Prediction from a Single Imageusing a Multi-Scale Deep Network [17]
- Sunil Prakash, Gaelan Gu "Simultaneous Localization And Mapping with depth Prediction using Capsule Networks for UAVs" [18]