Карта глубины — различия между версиями

Материал из Викиконспекты
Перейти к: навигация, поиск
(Мотивация)
м (rollbackEdits.php mass rollback)
 
(не показаны 93 промежуточные версии 3 участников)
Строка 9: Строка 9:
 
* Для создания 3D-сенсеров. Они способны строить трёхмерную картину своего окружения, используются для [[Оценка положения|ориентации]] автономного робота в пространстве.
 
* Для создания 3D-сенсеров. Они способны строить трёхмерную картину своего окружения, используются для [[Оценка положения|ориентации]] автономного робота в пространстве.
  
* Для систем, использующих технологии дополненной и виртуальной реальности. Например, камеры, которые фиксируют действия пользователя в видеоиграх, с применением технологии виртуальной реальности.
+
* Для систем, использующих технологии дополненной и виртуальной реальности. Например, камеры, которые фиксируют действия пользователя в видеоиграх с технологией виртуальной реальности.
  
* Нельзя не отметить, беспилотные автомобили, которые так же используют карты глубин для ориентации на дороге.
+
* В беспилотных автомобилях, которые также используют карты глубин для ориентации на дороге.
  
* Для обработки фотографий. Например, карты глубин используют для размытия фона на фотографии, чтобы добиться более чёткого выделения на ней человека<ref name="expls">Примеры из "Research Guide for Depth Estimation with Deep Learning"[https://www.kdnuggets.com/2019/11/research-guide-depth-estimation-deep-learning.html]</ref>.
+
* Для обработки фотографий. Например, карты глубин используют для размытия фона на фотографии, чтобы добиться более чёткого выделения человека<ref name="expls">Примеры из "Research Guide for Depth Estimation with Deep Learning"[https://www.kdnuggets.com/2019/11/research-guide-depth-estimation-deep-learning.html]</ref>.
  
 
== Методы построения карты глубины ==
 
== Методы построения карты глубины ==
Строка 23: Строка 23:
 
[[Файл:ToF.jpg|thumb|250px| Рисунок 1. Пример работы ToF-камеры.]]
 
[[Файл:ToF.jpg|thumb|250px| Рисунок 1. Пример работы ToF-камеры.]]
  
* '''ToF-камеры''' (англ. Time of Flight). Данный метод основан на измерении задержки света. Фактически нам нужно измерить задержку, с которой свет возвращается в каждую точку. Имея несколько сенсоров с разным временем накопления заряда и зная сдвиг по времени относительно источника для каждого сенсора и снятой яркости вспышки, мы можем рассчитать сдвиг и, соответственно, расстояние до объекта. Причем чем больше сенсоров задействовано, тем выше точность метода.
+
* '''ToF-камеры''' (англ. Time of Flight). Принцип работы данной камеры основан на измерении задержки света, с которой свет возвращается в каждую точку. Имея несколько сенсоров с разным временем накопления заряда и, зная сдвиг по времени относительно источника для каждого сенсора и снятой яркости вспышки, мы можем рассчитать сдвиг и, соответственно, расстояние до объекта. Причем чем больше сенсоров задействовано, тем выше точность метода.
  
* '''Структурированные световые камеры''' (aнгл. Structured light camera). Это один из самых старых и дешёвых способов построить карту глубин. Основная идея крайне проста. Ставим рядом проектор, который создает, например, горизонтальные (а потом вертикальные) полоски и рядом камеру, которая снимает картину с полосками. В некоторых вариантах используются псевдослучайный набор точек (MS Kinect {{---}} бесконтактный сенсорный игровой контроллер, для консолей Xbox 360, Xbox One и персональных компьютеров под управлением ОС Windows<ref name="kinect"> О MicriSoft Kinect [https://en.wikipedia.org/wiki/Kinect]</ref>.). Проекторы обычно работают в инфракрасном спектре, очевидно, чтобы не мешать пользователям. Поскольку камера и проектор смещены друг относительно друга, то и полоски также будут смещаться пропорционально расстоянию до объекта. Измеряя это смещение, мы можем рассчитывать расстояние до объекта. Вполне понятны проблемы, с которыми можно столкнуться при использовании этого метода: это необходимость настройки и калибровки проектора, и проблема того, что нам нужно относительно благоприятное освещение. К примеру, солнце может засветить полосы, и что-то распознать будет тяжело.
+
* '''Структурированные световые камеры''' (aнгл. Structured light camera). Принцип работы данной камеры один из самых старых. Ставим проектор, который создает, например, горизонтальные (а потом и вертикальные) полоски и рядом камеру, которая снимает картину с полосками. В некоторых вариантах используется псевдослучайный набор точек (например MS Kinect {{---}} бесконтактный сенсорный игровой контроллер, для консолей Xbox 360, Xbox One и персональных компьютеров под управлением ОС Windows<ref name="kinect"> О MicriSoft Kinect [https://en.wikipedia.org/wiki/Kinect]</ref>). Проекторы обычно работают в инфракрасном спектре, чтобы не мешать пользователям. Поскольку камера и проектор смещены друг относительно друга, то и полоски также будут смещаться пропорционально расстоянию до объекта. Измеряя это смещение, мы можем рассчитывать расстояние до объекта. Вполне понятны сложности, с которыми можно столкнуться при использовании этого метода: это необходимость настройки и калибровки проектора, и проблема того, что нам нужно относительно благоприятное освещение. К примеру, солнце может засветить полосы, и что-то распознать будет тяжело.
  
 
== Построения карты глубины по стереопаре ==
 
== Построения карты глубины по стереопаре ==
  
Идея, лежащая в основе построения карты глубины по '''стереопаре''', проста. Для каждой точки на одном изображении выполняется поиск [[Ключевые точки|парной ей точки]] на другом изображении. А по паре соответствующих точек можно выполнить [[Триангуляция полигонов (ушная + монотонная)|триангуляцию]] и определить координаты их [[Отображения|прообраза]] в трехмерном пространстве. Зная трехмерные координаты прообраза, глубина вычисляется как расстояние до плоскости камеры.
+
Идея, лежащая в основе построения карты глубины по '''стереопаре''', проста. Для каждой точки на одном изображении выполняется поиск [[Ключевые точки изображения|парной ей точки]]<sup>[на 21.01.21 не создан]</sup> на другом изображении. А по паре соответствующих точек можно выполнить [[Триангуляция полигонов (ушная + монотонная)|триангуляцию]] и определить координаты их [[Отображения|прообраза]] в трехмерном пространстве. Зная трехмерные координаты прообраза, глубина вычисляется как расстояние до плоскости камеры.
  
 
Парную точку нужно искать на эпиполярной<ref name="Epipolar">Информация о эпиполярной геометрии[https://ru.qaz.wiki/wiki/Epipolar_geometry]</ref> линии. Соответственно, для упрощения поиска изображения выравнивают так, чтобы все эпиполярные линии были параллельны сторонам изображения (обычно горизонтальны). Более того, изображения выравнивают так, чтобы для точки с координатами <math>(x_0, y_0)</math> соответствующая ей эпиполярная линия задавалась уравнением <math>x = x_0</math>. Тогда для каждой точки, соответствующую ей парную точку, нужно искать в той-же строчке на изображении со второй камеры. Такой процесс выравнивания изображений называют '''ректификацией''' (rectification).
 
Парную точку нужно искать на эпиполярной<ref name="Epipolar">Информация о эпиполярной геометрии[https://ru.qaz.wiki/wiki/Epipolar_geometry]</ref> линии. Соответственно, для упрощения поиска изображения выравнивают так, чтобы все эпиполярные линии были параллельны сторонам изображения (обычно горизонтальны). Более того, изображения выравнивают так, чтобы для точки с координатами <math>(x_0, y_0)</math> соответствующая ей эпиполярная линия задавалась уравнением <math>x = x_0</math>. Тогда для каждой точки, соответствующую ей парную точку, нужно искать в той-же строчке на изображении со второй камеры. Такой процесс выравнивания изображений называют '''ректификацией''' (rectification).
  
[[Файл:Stereo.png|thumb|300px| Рисунок 2. Результат построения карты смещений по 2 картинкам.<ref name="img2"> "Основы стереозрения" Рис. 3 [https://habr.com/ru/post/130300/]</ref>]]
+
[[Файл:Stereo.png|thumb|300px| Рисунок 2. Результат построения карты смещений по двум картинкам.<ref name="img2"> "Основы стереозрения" Рис. 3 [https://habr.com/ru/post/130300/]</ref>]]
  
После того, как изображения '''ректифицированы''', выполняют поиск соответствующих пар точек. Для каждого пикселя одной картинки с координатами <math>(x_0, y_0)</math> выполняется поиск пикселя на другой картинке. При этом предполагается, что пиксель на второй картинке должен иметь координаты <math>(x_0 - d, y_0)</math>, где d — величина называемая смещением. Поиск соответствующего пикселя выполняется путем вычисления максимума функции отклика, в качестве которой может выступать, например, [[Корреляция случайных величин|корреляция]] окрестностей пикселей. В результате получается карта смещений, пример которой приведен на рис. 2.  
+
После того, как изображения '''ректифицированы''', выполняют поиск соответствующих пар точек. Для каждого пикселя одной картинки с координатами <math>(x_0, y_0)</math> выполняется поиск пикселя на другой картинке. При этом предполагается, что пиксель на второй картинке должен иметь координаты <math>(x_0 - d, y_0)</math>, где <math>d</math> — величина называемая смещением. Поиск соответствующего пикселя выполняется путем вычисления максимума функции отклика, в качестве которой может выступать, например, [[Корреляция случайных величин|корреляция]] окрестностей пикселей. В результате получается карта смещений, пример которой приведен на рис. 2.  
  
 
Собственно значения глубины обратно пропорциональны величине смещения пикселей.
 
Собственно значения глубины обратно пропорциональны величине смещения пикселей.
Строка 45: Строка 45:
 
=== Построение с помощью свёрточных нейронных сетей ===
 
=== Построение с помощью свёрточных нейронных сетей ===
  
Используем [[Сверточные нейронные сети|сверточные нейронные сети]] для построения карты глубины следующим образом:
+
Используем [[Сверточные нейронные сети|сверточные нейронные сети]] для построения карты глубины следующим образом
 +
<ref name="cnn_rew"> Xiaobai Ma, Zhenglin Geng, Zhi Bie "Depth Estimation from Single Image Using CNN-Residual Network" [http://cs231n.stanford.edu/reports/2017/pdfs/203.pdf]</ref>:
  
*  '''Создаем карту смещений''': используя 2 изображения с камер, близко расположенных друг к другу, создаем карту различий, точно так же как в методе построения по стереопаре.
+
*  '''Создаем карту смещений''': используя два изображения с камер, близко расположенных друг к другу, создаем карту различий, точно так же как в методе построения по стереопаре.
  
* "Ищем реальную карту глубины для обучения": с помощью карты смещений, можем построить карту глубины <math>y</math> вышеописанным способом. Также допустимы другие способы построения карты глубины для обучения нейронной сети.
+
* '''Ищем реальную карту глубины для обучения''': с помощью карты смещений, можем построить карту глубины <math>y</math> вышеописанным способом. Также допустимы другие способы построения карты глубины для обучения нейронной сети.
  
*  '''Функция потерь''': определим [[Функция потерь и эмпирический риск|функцию потерь]], для предсказанной карты <math>\hat y</math>, <math>d_i = log( y_i) - log (\hat y_i)</math>, <math>\lambda \in [0, 1]</math> и <math>n </math> - количество пикселей.<math>L(y, \hat y) =  \frac{1}{n} \sum\limits_{i} d^2_i - \frac{\lambda}{n^2}(\sum\limits_{i} d_i)^2</math>, где <math>y_i</math> и <math>\hat y_i</math> это i пискель для для реальной карты глубин и для предсказанной карты, соответственно. Гиперпараметр <math>\lambda</math>, нужен для того, чтобы функция потерь меньше росла при большом количестве пикселей, предсказание для которых достаточно близко к реальному. Например, если <math>\lambda = 0</math>, то мы просто придём к оптимизации в L2 для <math>d_i</math>, т.е. <math>L(y, \hat y) =  \frac{1}{n} \sum\limits_{i} d^2_i </math>.<ref name="loss">David Eigen, Christian Puhrsch, Rob Fergus "Depth Map Prediction from a Single Imageusing a Multi-Scale Deep Network" стр. 5</ref>  
+
*  '''Функция потерь''': определим [[Функция потерь и эмпирический риск|функцию потерь]], для предсказанной карты <math>\hat y</math>, <math>d_i = log( y_i) - log (\hat y_i)</math>, <math>\lambda \in [0, 1]</math> и <math>n </math> количество пикселей. <math>L(y, \hat y) =  \frac{1}{n} \sum\limits_{i} d^2_i - \frac{\lambda}{n^2}(\sum\limits_{i} d_i)^2</math>, где <math>y_i</math> и <math>\hat y_i</math> это i пискель для для реальной карты глубин и для предсказанной карты, соответственно. Гиперпараметр <math>\lambda</math>, нужен для того, чтобы функция потерь меньше росла при большом количестве пикселей, предсказание для которых достаточно близко к реальному. Например, если <math>\lambda = 0</math>, то мы просто придём к оптимизации в L2 для <math>d_i</math>, т.е. <math>L(y, \hat y) =  \frac{1}{n} \sum\limits_{i} d^2_i </math>.<ref name="loss">David Eigen, Christian Puhrsch, Rob Fergus "Depth Map Prediction from a Single Imageusing a Multi-Scale Deep Network" стр. 5</ref>  
  
 
* '''Обучение свёрточной нейронной сети''': далее идёт обычное обучение нейронной сети по карте различий путем обратного распространения ошибки, оптимизируя заданную выше функцию потерь.
 
* '''Обучение свёрточной нейронной сети''': далее идёт обычное обучение нейронной сети по карте различий путем обратного распространения ошибки, оптимизируя заданную выше функцию потерь.
Строка 63: Строка 64:
 
=== Построение с помощью капсульных нейронных сетей ===
 
=== Построение с помощью капсульных нейронных сетей ===
  
Свёрточные нейронные сети способны регистрировать только наличие какого-либо объекта на картинке, не кодируя его ориентацию и положение. Но '''капсульные нейронные сети''' (англ. Capsule Neural Network) лишены этого недостатка.
+
Свёрточные нейронные сети способны регистрировать только наличие какого-либо объекта на картинке, не кодируя его ориентацию и положение. Но '''капсульные нейронные сети''' (англ. Capsule Neural Network)<ref name="CapsNet">Sara Sabour, Nicholas Frosst, Geoffrey E. Hinton "Dynamic Routing Between Capsules" [https://arxiv.org/pdf/1710.09829.pdf]</ref> лишены этого недостатка.
  
 
[[Файл:capsnet.jpg|thumb|400px| Рисунок 3. Структура капсульной нейронной сети <ref name="img"> "Design and Investigation of Capsule Networks for Sentence Classification" Figure 2. [https://www.mdpi.com/2076-3417/9/11/2200/htm]</ref>.]]
 
[[Файл:capsnet.jpg|thumb|400px| Рисунок 3. Структура капсульной нейронной сети <ref name="img"> "Design and Investigation of Capsule Networks for Sentence Classification" Figure 2. [https://www.mdpi.com/2076-3417/9/11/2200/htm]</ref>.]]
Строка 71: Строка 72:
 
Состояние нейронов капсульной нейронной сети внутри изображения фиксирует свойство области или объекта внутри изображения: его положение и ориентацию.
 
Состояние нейронов капсульной нейронной сети внутри изображения фиксирует свойство области или объекта внутри изображения: его положение и ориентацию.
  
Использование капсульной нейронной сети аналогично с использованию обычных свёрточных сетей, описанному выше.  
+
Использование капсульной нейронной сети аналогично использованию обычных свёрточных сетей, описанному выше.  
 
В целом, данная сеть показывает более точные результаты предсказания глубины.
 
В целом, данная сеть показывает более точные результаты предсказания глубины.
  
=== Построение с помощью PlanetNet ===
+
=== Построение с помощью PlanetNet (2018)===
  
 
Так же есть архитектуры, решающие данную задачу и без обучения на карте смещений, построенной с помощью двух изображений. Одной из таких является '''PlaneNet'''.  
 
Так же есть архитектуры, решающие данную задачу и без обучения на карте смещений, построенной с помощью двух изображений. Одной из таких является '''PlaneNet'''.  
  
'''PlaneNet'''<ref name="planetNet"> Chen Liu, Jimei Yang, Duygu Ceylan, Ersin Yumer, Yasutaka Furukawa "PlaneNet: Piece-wise Planar Reconstruction from a Single RGB Image" [https://arxiv.org/abs/1804.06278v1]</ref> {{---}} глубокая нейронная сеть, построенная на расширенных остаточных сетях (aнгл. Dilated Residual Networks или DRN)<ref name="drn"> Fisher Yu, Vladlen Koltun, Thomas Funkhouser "Dilated Residual Networks" [https://arxiv.org/abs/1705.09914]</ref>, она получает карту глубин путем композиции выходов трех подзадач:
+
'''PlaneNet'''<ref name="planetNet"> Chen Liu, Jimei Yang, Duygu Ceylan, Ersin Yumer, Yasutaka Furukawa "PlaneNet: Piece-wise Planar Reconstruction from a Single RGB Image" [https://arxiv.org/abs/1804.06278v1]</ref> {{---}} глубокая нейронная сеть, построенная на расширенных остаточных сетях (aнгл. Dilated Residual Networks или DRN)<ref name="drn"> Fisher Yu, Vladlen Koltun, Thomas Funkhouser "Dilated Residual Networks" [https://arxiv.org/abs/1705.09914]</ref>. Она получает карту глубин путем композиции выходов трех подзадач:
  
[[Файл:plane_net.png|thumb|500px| Рисунок 4. Прогнозируемые PlaneNet параметры по одной rgb картинке: cегметация плоскости, параметры плоскостей, неплоская карта глубины<ref name="img4"> Chen Liu, Jimei Yang, Duygu Ceylan, Ersin Yumer, Yasutaka Furukawa "PlaneNet: Piece-wise Planar Reconstruction from a Single RGB Image" Figure 2.</ref>.]]
+
[[Файл:Plane net2.jpg|thumb|500px| Рисунок 4. Прогнозируемые PlaneNet параметры по одной rgb картинке: cегметация плоскости, параметры плоскостей, неплоская карта глубины<ref name="img4"> Chen Liu, Jimei Yang, Duygu Ceylan, Ersin Yumer, Yasutaka Furukawa "PlaneNet: Piece-wise Planar Reconstruction from a Single RGB Image" Figure 2.</ref>.]]
  
* '''Параметры плоскостей''': пытается предсказать количество плоскостей K, а после ищем на изображение K плоских поверхностей, каждая поверхность задаётся тремя параметрами: нормальная, прямая и сдвиг.
+
* '''Параметры плоскостей''': пытаемся предсказать количество плоскостей $K$, а после ищем на изображение $K$ плоских поверхностей, каждая поверхность задаётся тремя параметрами <math>P_i</math>: нормальная, прямая и сдвиг. Функцию ошибки определим следующим образом: <math>L = \sum_{i=1}^{K} \min_{j \in [1, \hat K]} \| \hat P_j - P_i \|</math>, где <math>\hat K, \hat P_i</math> и <math>K, P_i</math>, предсказанные и реальные количество и параметры плоскостей, соответственно.
  
* [[Сегментация изображений|'''Сегметация плоскости''']]: ищем группы пикселей, каждая из которых характеризует один смысловой объект.
+
* [[Сегментация изображений|'''Сегментация плоскости''']]: ищем группы пикселей, каждая из которых характеризует один смысловой объект. Используем перекрёстную энтропию<ref name="cross-entropy"> О перекрёстной энтропии [https://ml-cheatsheet.readthedocs.io/en/latest/loss_functions.html]</ref>, как функцию потерь.
  
 
* '''Неплоская карта глубины''': ищем одно-канальную (или неплоскую) карту глубины, то есть карту глубины, где каждый пиксель, либо на глубине 0, либо на глубине 1.
 
* '''Неплоская карта глубины''': ищем одно-канальную (или неплоскую) карту глубины, то есть карту глубины, где каждый пиксель, либо на глубине 0, либо на глубине 1.
 +
Авторы обучали и тестировали данные на  NYUv2<ref>Датасет NYUv2[https://cs.nyu.edu/~silberman/datasets/nyu_depth_v2.html]</ref>.
 +
 +
=== Обучение без учителя поиска карты глубины из видео (2017) ===
 +
 +
Авторы данной статьи <ref name="cvrp_dnn">Tinghui Zhou, Matthew Brown, Noah Snavely, David G. Lowe "Unsupervised Learning of Depth and Ego-Motion from Video" [https://arxiv.org/abs/1704.07813v2]</ref> предлагают методику оценки глубины одной картинки без учителя и движения камеры из беспорядочной видео нарезки.
 +
 +
[[Файл:Dnn.jpeg|thumb|400px| Рисунок 5. Aрхитектура сети на базе DispNet  <ref name="cvrp">Tinghui Zhou, Matthew Brown, Noah Snavely, David G. Lowe "Unsupervised Learning of Depth and Ego-Motion from Video" Figure 4</ref>]]
 +
 +
Будем использовать сверточные нейронные сети c глубиной одного вида и многовидовой камерой из неупорядоченного видеоряда. Метод базируется на синтезе видов. Сеть загружает фото объекта в качестве данных ввода и выводит глубину пикселя. Вид объекта может быть синтезирован исходя из глубины на каждого пикселя снимка позиционирования и четкости ближнего вида. Синтез может быть  дифференцирован с CNN по геометрии и модулям позиционирования.
 +
Авторы взяли на вооружение архитектуру DispNet<ref name="dispNet"> Nikolaus Mayer, Eddy Ilg, Philip Hausser, Philipp Fischer "A Large Dataset to Train Convolutional Networks
 +
for Disparity, Optical Flow, and Scene Flow Estimation" [https://arxiv.org/pdf/1512.02134.pdf]</ref>, которая сконструирована в виде энкодера и декодера с пропущенными соединениями и многомасштабными блоками предсказания. Функция активации ReLU отслеживает все сверточные слои кроме предсказанных.
 +
Вид объекта со всех источников формирует входные данные в сеть позиционной оценки. На выходе получается относительная позиция между видом объекта и видом каждого источника. Сеть состоит из двух 7 шаговых сверток за которым следует свертка 1 х 1. За исключением последнего слоя свертки, где применяется нелинейная активация, все другие отслеживаются функцией активации ReLU. Сеть объяснимых предсказаний дает доступ к первым пяти закодированным слоям сети позиционирования. За ней следуют 5 слоев обратной свертки с многомасштабными блоками предсказаний. Кроме слоев предсказаний все уровни свертки и обратной свертки отслеживаются ReLU. Авторы проверяли данную методику на KITTY<ref> Датасет kitty[http://www.cvlibs.net/datasets/kitti/]</ref>.
 +
 +
=== Неконтролируемая оценка глубины монокуляра с консистенцией слева направо (2017) ===
 +
 +
[[Файл:Samplers.jpg|thumb|240px| Рисунок 6. Примерная архитектура сети с консистенцией слева направо <ref name="cvrp2017">Clément Godard, Oisin Mac Aodha, Gabriel J. Brostow "Unsupervised Monocular Depth Estimation with Left-Right Consistency" Figure 3 </ref>]]
 +
 +
В данной работе<ref name="leftrigth"> Clément Godard, Oisin Mac Aodha, Gabriel J. Brostow "Unsupervised Monocular Depth Estimation with Left-Right Consistency" [https://arxiv.org/abs/1609.03677v3]</ref> предлагается сверточная нейронная сеть, обученная выполнять оценку глубины одного изображения без реальных данных. Авторы предлагают сетевую архитектуру, которая выполняет сквозную оценку глубины изображения, полученного с 1 камеры, без учителя, что обеспечивает согласованность глубины слева направо внутри сети.
 +
Сеть оценивает глубину, выводя смещения, которые искажают левое изображение, чтобы соответствовать правому. Левое входное изображение используется для вывода смещений слева направо и справа налево. Сеть генерирует предсказанное изображение с обратным отображением с помощью билинейного сэмплера. Это приводит к полностью дифференциальной модели формирования изображения.
 +
Сверточная архитектура вдохновлена так же DispNet'ом. Она состоит из двух частей—кодера и декодера. Декодер использует пропуск соединений из блоков активации кодера, чтобы распознавать детали с высоким разрешением. Сеть предсказывает две карты смещений — слева направо и справа налево.
 +
В процессе обучения сеть генерирует изображение путем выборки пикселей из противоположного стереоизображения. Модель формирования изображения использует сэмплер изображений из пространственной трансформаторной сети (STN) для выборки входного изображения с помощью карты смещений. Авторы обучали и тестировали данные на KITTY.
 +
 +
=== Прогнозирование глубины без датчиков: использование структуры для обучения без учителя по монокулярным видео (2019) ===
 +
 +
[[Файл:ego.jpeg|thumb|500px| Рисунок 7. Сравнение обычного метода построения карты глубин с помощью эго-движения и предложенного в статье, который использует движения для различных 3D объектов <ref name="aaaif">Vincent Casser, Soeren Pirk, Reza Mahjourian, Anelia Angelova "Depth Prediction Without the Sensors: Leveraging Structure for Unsupervised Learning from Monocular Videos" Figure 2 </ref>]]
 +
 +
'''Визуальная одометрия''' <ref name="визуальная одометрия">Статья о визуальной одометрии[https://en.wikipedia.org/wiki/Visual_odometry]</ref> {{---}} метод оценки положения и ориентации робота или иного устройства в пространстве с помощью анализа последовательности изображений, снятых установленной на нем камерой.
 +
 +
Данная статья <ref name="aaai"> Vincent Casser, Soeren Pirk, Reza Mahjourian, Anelia Angelova "Depth Prediction Without the Sensors: Leveraging Structure for Unsupervised Learning from Monocular Videos" [https://arxiv.org/abs/1811.06152v1]</ref> посвящена задаче обучения без учителя глубины сцены и визуальной одометрии робота, где наблюдение обеспечивается видеозаписями с одной камеры. Это делается путем введения геометрической структуры в процесс обучения. Он включает в себя моделирование сцены и отдельных объектов, одометрии камеры и движения объектов, изучаемых с помощью монокулярных видеовходов. Авторы вводят модель движения объекта, которая имеет ту же архитектуру, что и сеть определения визуальной одометрии. Она принимает последовательность изображений RGB в качестве входных данных и дополняется предварительно вычисленными масками сегментации экземпляров. Работа модели движения заключается в том, чтобы научиться предсказывать векторы трансформации каждого объекта в трехмерном пространстве. Это создает видимость наблюдаемого объекта в соответствующем целевом кадре. Авторы проверяли прогнозирование глубины на KITTY.
  
 
== См. также ==
 
== См. также ==
Строка 102: Строка 132:
 
== Источники информации ==
 
== Источники информации ==
  
* Р.А. Чугунов, А.Д. Кульневич, С.В. Аксенов "Методика построения карт глубины стереоизображения с помощью капсульной нейронной сети" [https://cyberleninka.ru/article/n/metodika-postroeniya-kart-glubiny-stereoizobrazheniya-s-pomoschyu-kapsulnoy-neyronnoy-seti/viewer]
+
* Чугунов Р. А., Кульневич А. Д., Аксенов С. В. Методика построения карт глубины стереоизображения с помощью капсульной нейронной сети //Доклады Томского государственного университета систем управления и радиоэлектроники. – 2019. – Т. 22. – №. 1.[https://cyberleninka.ru/article/n/metodika-postroeniya-kart-glubiny-stereoizobrazheniya-s-pomoschyu-kapsulnoy-neyronnoy-seti/viewer]
 +
 
 +
* Alhashim I., Wonka P. High quality monocular depth estimation via transfer learning. arXiv 2018 //arXiv preprint arXiv:1812.11941. [https://arxiv.org/pdf/1812.11941.pdf]
  
* Alexey Kurakin "Основы стереозрения" [https://habr.com/ru/post/130300/]
+
* Eigen D., Puhrsch C., Fergus R. Depth map prediction from a single image using a multi-scale deep network //Advances in neural information processing systems. – 2014. – Т. 27. – С. 2366-2374. [https://arxiv.org/pdf/1406.2283.pdf]
  
* Dmitriy Vatolin "Камеры глубины — тихая революция" [https://habr.com/ru/post/457524/]
+
* Prakash S., Gu G. Simultaneous localization and mapping with depth prediction using capsule networks for uavs //arXiv preprint arXiv:1808.05336. – 2018. [https://arxiv.org/pdf/1808.05336.pdf]
  
* Ibraheem Alhashim, Peter Wonka "High Quality Monocular Depth Estimation via Transfer Learning" [https://arxiv.org/pdf/1812.11941.pdf]
+
* Ma X., Geng Z., Bie Z. Depth Estimation from Single Image Using CNN-Residual Network //SemanticScholar. – 2017. [https://www.semanticscholar.org/paper/Depth-Estimation-from-Single-Image-Using-Network-Geng/d79e7fc68e088f094a22910049117e586705bb7d?p2df]
  
*  David Eigen, Christian Puhrsch, Rob Fergus "Depth Map Prediction from a Single Imageusing a Multi-Scale Deep Network [https://arxiv.org/pdf/1406.2283.pdf]
+
[[Категория:Машинное обучение]]
  
* Sunil Prakash, Gaelan Gu "Simultaneous Localization And Mapping with depth Prediction using Capsule Networks for UAVs" [https://arxiv.org/pdf/1808.05336.pdf]
+
[[Категория: Компьютерное зрение]]

Текущая версия на 19:30, 4 сентября 2022

Карта глубины (англ. depth map) — это изображение, где для каждого пикселя вместо цвета хранится его расстояние до камеры.[1]

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

Мотивация

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

  • Для создания 3D-сенсеров. Они способны строить трёхмерную картину своего окружения, используются для ориентации автономного робота в пространстве.
  • Для систем, использующих технологии дополненной и виртуальной реальности. Например, камеры, которые фиксируют действия пользователя в видеоиграх с технологией виртуальной реальности.
  • В беспилотных автомобилях, которые также используют карты глубин для ориентации на дороге.
  • Для обработки фотографий. Например, карты глубин используют для размытия фона на фотографии, чтобы добиться более чёткого выделения человека[2].

Методы построения карты глубины

Карта глубины может быть получена с помощью специальной камеры глубины, по стереопаре изображений, а также с помощью нейронных сетей.

Построение с помощью специальных камер глубин

Рисунок 1. Пример работы ToF-камеры.
  • ToF-камеры (англ. Time of Flight). Принцип работы данной камеры основан на измерении задержки света, с которой свет возвращается в каждую точку. Имея несколько сенсоров с разным временем накопления заряда и, зная сдвиг по времени относительно источника для каждого сенсора и снятой яркости вспышки, мы можем рассчитать сдвиг и, соответственно, расстояние до объекта. Причем чем больше сенсоров задействовано, тем выше точность метода.
  • Структурированные световые камеры (aнгл. Structured light camera). Принцип работы данной камеры один из самых старых. Ставим проектор, который создает, например, горизонтальные (а потом и вертикальные) полоски и рядом камеру, которая снимает картину с полосками. В некоторых вариантах используется псевдослучайный набор точек (например MS Kinect — бесконтактный сенсорный игровой контроллер, для консолей Xbox 360, Xbox One и персональных компьютеров под управлением ОС Windows[3]). Проекторы обычно работают в инфракрасном спектре, чтобы не мешать пользователям. Поскольку камера и проектор смещены друг относительно друга, то и полоски также будут смещаться пропорционально расстоянию до объекта. Измеряя это смещение, мы можем рассчитывать расстояние до объекта. Вполне понятны сложности, с которыми можно столкнуться при использовании этого метода: это необходимость настройки и калибровки проектора, и проблема того, что нам нужно относительно благоприятное освещение. К примеру, солнце может засветить полосы, и что-то распознать будет тяжело.

Построения карты глубины по стереопаре

Идея, лежащая в основе построения карты глубины по стереопаре, проста. Для каждой точки на одном изображении выполняется поиск парной ей точки[на 21.01.21 не создан] на другом изображении. А по паре соответствующих точек можно выполнить триангуляцию и определить координаты их прообраза в трехмерном пространстве. Зная трехмерные координаты прообраза, глубина вычисляется как расстояние до плоскости камеры.

Парную точку нужно искать на эпиполярной[4] линии. Соответственно, для упрощения поиска изображения выравнивают так, чтобы все эпиполярные линии были параллельны сторонам изображения (обычно горизонтальны). Более того, изображения выравнивают так, чтобы для точки с координатами [math](x_0, y_0)[/math] соответствующая ей эпиполярная линия задавалась уравнением [math]x = x_0[/math]. Тогда для каждой точки, соответствующую ей парную точку, нужно искать в той-же строчке на изображении со второй камеры. Такой процесс выравнивания изображений называют ректификацией (rectification).

Рисунок 2. Результат построения карты смещений по двум картинкам.[5]

После того, как изображения ректифицированы, выполняют поиск соответствующих пар точек. Для каждого пикселя одной картинки с координатами [math](x_0, y_0)[/math] выполняется поиск пикселя на другой картинке. При этом предполагается, что пиксель на второй картинке должен иметь координаты [math](x_0 - d, y_0)[/math], где [math]d[/math] — величина называемая смещением. Поиск соответствующего пикселя выполняется путем вычисления максимума функции отклика, в качестве которой может выступать, например, корреляция окрестностей пикселей. В результате получается карта смещений, пример которой приведен на рис. 2.

Собственно значения глубины обратно пропорциональны величине смещения пикселей.

Использование нейронных сетей

Существует множество методов, использующих нейронные сети. Приведём пару примеров таких решений.

Построение с помощью свёрточных нейронных сетей

Используем сверточные нейронные сети для построения карты глубины следующим образом [6]:

  • Создаем карту смещений: используя два изображения с камер, близко расположенных друг к другу, создаем карту различий, точно так же как в методе построения по стереопаре.
  • Ищем реальную карту глубины для обучения: с помощью карты смещений, можем построить карту глубины [math]y[/math] вышеописанным способом. Также допустимы другие способы построения карты глубины для обучения нейронной сети.
  • Функция потерь: определим функцию потерь, для предсказанной карты [math]\hat y[/math], [math]d_i = log( y_i) - log (\hat y_i)[/math], [math]\lambda \in [0, 1][/math] и [math]n [/math] — количество пикселей. [math]L(y, \hat y) = \frac{1}{n} \sum\limits_{i} d^2_i - \frac{\lambda}{n^2}(\sum\limits_{i} d_i)^2[/math], где [math]y_i[/math] и [math]\hat y_i[/math] это i пискель для для реальной карты глубин и для предсказанной карты, соответственно. Гиперпараметр [math]\lambda[/math], нужен для того, чтобы функция потерь меньше росла при большом количестве пикселей, предсказание для которых достаточно близко к реальному. Например, если [math]\lambda = 0[/math], то мы просто придём к оптимизации в L2 для [math]d_i[/math], т.е. [math]L(y, \hat y) = \frac{1}{n} \sum\limits_{i} d^2_i [/math].[7]
  • Обучение свёрточной нейронной сети: далее идёт обычное обучение нейронной сети по карте различий путем обратного распространения ошибки, оптимизируя заданную выше функцию потерь.

В итоге, по обученной нейронной сети мы можем создавать карту глубины, не проводя расчётов для поиска карт смещения и имея только изображение объекта или пространства. [8]

Также возможно использование усложнённых архитектур свёрточных нейронных сетей типа DenseNet.

DenseNet[9] — это свёрточная нейронные сеть, в которой выход каждого из слоев подаётся на вход всем слоям, лежащих ниже.

Построение с помощью капсульных нейронных сетей

Свёрточные нейронные сети способны регистрировать только наличие какого-либо объекта на картинке, не кодируя его ориентацию и положение. Но капсульные нейронные сети (англ. Capsule Neural Network)[10] лишены этого недостатка.

Рисунок 3. Структура капсульной нейронной сети [11].

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

Состояние нейронов капсульной нейронной сети внутри изображения фиксирует свойство области или объекта внутри изображения: его положение и ориентацию.

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

Построение с помощью PlanetNet (2018)

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

PlaneNet[12] — глубокая нейронная сеть, построенная на расширенных остаточных сетях (aнгл. Dilated Residual Networks или DRN)[13]. Она получает карту глубин путем композиции выходов трех подзадач:

Рисунок 4. Прогнозируемые PlaneNet параметры по одной rgb картинке: cегметация плоскости, параметры плоскостей, неплоская карта глубины[14].
  • Параметры плоскостей: пытаемся предсказать количество плоскостей $K$, а после ищем на изображение $K$ плоских поверхностей, каждая поверхность задаётся тремя параметрами [math]P_i[/math]: нормальная, прямая и сдвиг. Функцию ошибки определим следующим образом: [math]L = \sum_{i=1}^{K} \min_{j \in [1, \hat K]} \| \hat P_j - P_i \|[/math], где [math]\hat K, \hat P_i[/math] и [math]K, P_i[/math], предсказанные и реальные количество и параметры плоскостей, соответственно.
  • Сегментация плоскости: ищем группы пикселей, каждая из которых характеризует один смысловой объект. Используем перекрёстную энтропию[15], как функцию потерь.
  • Неплоская карта глубины: ищем одно-канальную (или неплоскую) карту глубины, то есть карту глубины, где каждый пиксель, либо на глубине 0, либо на глубине 1.

Авторы обучали и тестировали данные на NYUv2[16].

Обучение без учителя поиска карты глубины из видео (2017)

Авторы данной статьи [17] предлагают методику оценки глубины одной картинки без учителя и движения камеры из беспорядочной видео нарезки.

Рисунок 5. Aрхитектура сети на базе DispNet [18]

Будем использовать сверточные нейронные сети c глубиной одного вида и многовидовой камерой из неупорядоченного видеоряда. Метод базируется на синтезе видов. Сеть загружает фото объекта в качестве данных ввода и выводит глубину пикселя. Вид объекта может быть синтезирован исходя из глубины на каждого пикселя снимка позиционирования и четкости ближнего вида. Синтез может быть дифференцирован с CNN по геометрии и модулям позиционирования. Авторы взяли на вооружение архитектуру DispNet[19], которая сконструирована в виде энкодера и декодера с пропущенными соединениями и многомасштабными блоками предсказания. Функция активации ReLU отслеживает все сверточные слои кроме предсказанных. Вид объекта со всех источников формирует входные данные в сеть позиционной оценки. На выходе получается относительная позиция между видом объекта и видом каждого источника. Сеть состоит из двух 7 шаговых сверток за которым следует свертка 1 х 1. За исключением последнего слоя свертки, где применяется нелинейная активация, все другие отслеживаются функцией активации ReLU. Сеть объяснимых предсказаний дает доступ к первым пяти закодированным слоям сети позиционирования. За ней следуют 5 слоев обратной свертки с многомасштабными блоками предсказаний. Кроме слоев предсказаний все уровни свертки и обратной свертки отслеживаются ReLU. Авторы проверяли данную методику на KITTY[20].

Неконтролируемая оценка глубины монокуляра с консистенцией слева направо (2017)

Рисунок 6. Примерная архитектура сети с консистенцией слева направо [21]

В данной работе[22] предлагается сверточная нейронная сеть, обученная выполнять оценку глубины одного изображения без реальных данных. Авторы предлагают сетевую архитектуру, которая выполняет сквозную оценку глубины изображения, полученного с 1 камеры, без учителя, что обеспечивает согласованность глубины слева направо внутри сети. Сеть оценивает глубину, выводя смещения, которые искажают левое изображение, чтобы соответствовать правому. Левое входное изображение используется для вывода смещений слева направо и справа налево. Сеть генерирует предсказанное изображение с обратным отображением с помощью билинейного сэмплера. Это приводит к полностью дифференциальной модели формирования изображения. Сверточная архитектура вдохновлена так же DispNet'ом. Она состоит из двух частей—кодера и декодера. Декодер использует пропуск соединений из блоков активации кодера, чтобы распознавать детали с высоким разрешением. Сеть предсказывает две карты смещений — слева направо и справа налево. В процессе обучения сеть генерирует изображение путем выборки пикселей из противоположного стереоизображения. Модель формирования изображения использует сэмплер изображений из пространственной трансформаторной сети (STN) для выборки входного изображения с помощью карты смещений. Авторы обучали и тестировали данные на KITTY.

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

Рисунок 7. Сравнение обычного метода построения карты глубин с помощью эго-движения и предложенного в статье, который использует движения для различных 3D объектов [23]

Визуальная одометрия [24] — метод оценки положения и ориентации робота или иного устройства в пространстве с помощью анализа последовательности изображений, снятых установленной на нем камерой.

Данная статья [25] посвящена задаче обучения без учителя глубины сцены и визуальной одометрии робота, где наблюдение обеспечивается видеозаписями с одной камеры. Это делается путем введения геометрической структуры в процесс обучения. Он включает в себя моделирование сцены и отдельных объектов, одометрии камеры и движения объектов, изучаемых с помощью монокулярных видеовходов. Авторы вводят модель движения объекта, которая имеет ту же архитектуру, что и сеть определения визуальной одометрии. Она принимает последовательность изображений RGB в качестве входных данных и дополняется предварительно вычисленными масками сегментации экземпляров. Работа модели движения заключается в том, чтобы научиться предсказывать векторы трансформации каждого объекта в трехмерном пространстве. Это создает видимость наблюдаемого объекта в соответствующем целевом кадре. Авторы проверяли прогнозирование глубины на KITTY.

См. также

Примечания

  1. Alexey Kurakin "Основы стереозрения"[1]
  2. Примеры из "Research Guide for Depth Estimation with Deep Learning"[2]
  3. О MicriSoft Kinect [3]
  4. Информация о эпиполярной геометрии[4]
  5. "Основы стереозрения" Рис. 3 [5]
  6. Xiaobai Ma, Zhenglin Geng, Zhi Bie "Depth Estimation from Single Image Using CNN-Residual Network" [6]
  7. David Eigen, Christian Puhrsch, Rob Fergus "Depth Map Prediction from a Single Imageusing a Multi-Scale Deep Network" стр. 5
  8. Реализация, основанная на свёрточных нейронных сетях [7]
  9. Оригинальная статья описывающая DenseNet [8]
  10. Sara Sabour, Nicholas Frosst, Geoffrey E. Hinton "Dynamic Routing Between Capsules" [9]
  11. "Design and Investigation of Capsule Networks for Sentence Classification" Figure 2. [10]
  12. Chen Liu, Jimei Yang, Duygu Ceylan, Ersin Yumer, Yasutaka Furukawa "PlaneNet: Piece-wise Planar Reconstruction from a Single RGB Image" [11]
  13. Fisher Yu, Vladlen Koltun, Thomas Funkhouser "Dilated Residual Networks" [12]
  14. Chen Liu, Jimei Yang, Duygu Ceylan, Ersin Yumer, Yasutaka Furukawa "PlaneNet: Piece-wise Planar Reconstruction from a Single RGB Image" Figure 2.
  15. О перекрёстной энтропии [13]
  16. Датасет NYUv2[14]
  17. Tinghui Zhou, Matthew Brown, Noah Snavely, David G. Lowe "Unsupervised Learning of Depth and Ego-Motion from Video" [15]
  18. Tinghui Zhou, Matthew Brown, Noah Snavely, David G. Lowe "Unsupervised Learning of Depth and Ego-Motion from Video" Figure 4
  19. Nikolaus Mayer, Eddy Ilg, Philip Hausser, Philipp Fischer "A Large Dataset to Train Convolutional Networks for Disparity, Optical Flow, and Scene Flow Estimation" [16]
  20. Датасет kitty[17]
  21. Clément Godard, Oisin Mac Aodha, Gabriel J. Brostow "Unsupervised Monocular Depth Estimation with Left-Right Consistency" Figure 3
  22. Clément Godard, Oisin Mac Aodha, Gabriel J. Brostow "Unsupervised Monocular Depth Estimation with Left-Right Consistency" [18]
  23. Vincent Casser, Soeren Pirk, Reza Mahjourian, Anelia Angelova "Depth Prediction Without the Sensors: Leveraging Structure for Unsupervised Learning from Monocular Videos" Figure 2
  24. Статья о визуальной одометрии[19]
  25. Vincent Casser, Soeren Pirk, Reza Mahjourian, Anelia Angelova "Depth Prediction Without the Sensors: Leveraging Structure for Unsupervised Learning from Monocular Videos" [20]

Источники информации

  • Чугунов Р. А., Кульневич А. Д., Аксенов С. В. Методика построения карт глубины стереоизображения с помощью капсульной нейронной сети //Доклады Томского государственного университета систем управления и радиоэлектроники. – 2019. – Т. 22. – №. 1.[21]
  • Alhashim I., Wonka P. High quality monocular depth estimation via transfer learning. arXiv 2018 //arXiv preprint arXiv:1812.11941. [22]
  • Eigen D., Puhrsch C., Fergus R. Depth map prediction from a single image using a multi-scale deep network //Advances in neural information processing systems. – 2014. – Т. 27. – С. 2366-2374. [23]
  • Prakash S., Gu G. Simultaneous localization and mapping with depth prediction using capsule networks for uavs //arXiv preprint arXiv:1808.05336. – 2018. [24]
  • Ma X., Geng Z., Bie Z. Depth Estimation from Single Image Using CNN-Residual Network //SemanticScholar. – 2017. [25]