Изменения
→Прогнозирование глубины без датчиков: использование структуры для обучения без учителя по монокулярным видео (2019)
'''Карта глубины''' (англ. depth map) — это изображение, на котором где для каждого пикселя, вместо цвета, хранится его расстояние до камеры.<ref name="def">Alexey Kurakin "Основы стереозрения"[https://habr.com/ru/post/130300/]</ref>
В компьютерной 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>.
== Методы построения карты глубины ==
Карта глубины может быть получена с помощью '''специальной камеры глубины''', а так же может быть построена по '''стереопаре изображений''', а так же также с помощью [[Нейронные сети, перцептрон|'''нейронных сетей''']].
== Построение с помощью специальных камер глубин ==
[[Файл:ToF.jpg|thumb|250px| рис. Рисунок 1. Пример работы ToF-камеры.]]
* '''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>). Проекторы обычно работают в инфракрасном спектре, очевидно, чтобы не мешать пользователям. Поскольку камера и проектор смещены друг относительно друга, то и полоски также будут смещаться пропорционально расстоянию до объекта. Измеряя это смещение , мы можем рассчитывать расстояние до объекта. Вполне понятны проблемы сложности, с которыми можно столкнутся столкнуться при использовании этого метода: это необходимость настройки и калибровки проектора, и проблема того, что нам нужно относительно благоприятное освещение. К примеру , солнце может засветить полосы, и что-то распознать будет тяжело.
== Построения карты глубины по стереопаре ==
Идея, лежащая в основе построения карты глубины по '''стереопаре''' очень , проста. Для каждой точки на одном изображении выполняется поиск [[Ключевые точки изображения|парной ей точки ]]<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).
[[Файл:Stereo.png|thumb|300px| рис. Рисунок 2. Результат построения карты смещений по 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>, где <math>d </math> — величина называемая смещением. Поиск соответствующего пикселя выполняется путем вычисления максимума функции отклика, в качестве которой может выступать, например, [[Корреляция случайных величин|корреляция]] окрестностей пикселей. В результате получается карта смещений, пример которой приведен на рис. 2.
Собственно значения глубины обратно пропорциональны величине смещения пикселей.
== Использование нейронных сетей ==
Существует множество решений данной проблемыметодов, использующих нейроные нейронные сети, приведём . Приведём пару примеров таких решений.
=== Построение с помощью свёрточных нейронных сетей ===
Используем [[Сверточные нейронные сети|сверточные нейронные сети]] для построения карты глубины следующим образом<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>\hat y</math>, math>d_i = log y_i - log \hat y_i</math>, <math>\lambda \in [0, 1]</math> и <math>n </math> - количество пикселейвышеописанным способом. Гиперпараметр <math>\lambda</math>, нужен Также допустимы другие способы построения карты глубины для того, чтобы функция потерь меньше росла, при большом количестве пикселей, предсказание для которых достаточно близко к реальному. Например, если <math>\lambda = 0</math>, то мы просто придём к оптимизации в [[Регуляризация|L2]]обучения нейронной сети.
* '''Функция потерь''': определим [[Функция потерь и эмпирический риск|функцию потерь]], для предсказанной карты <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>
* '''Обучение сверточной свёрточной нейронной сети''': далее идёт обычное обучение нейронной сети по карте различий, путем обратного распространения ошибки , оптимизируя, заданную выше функцию потерь.
В итоге, по обученной нейронной сети мы можем создавать карту глубины, не проводя расчётов для поиска карт смещения и имея только изображение объекта или пространства. <ref name="cnn">Реализация, основанная на свёрточных нейронных сетях [https://www.kaggle.com/kmader/cnn-for-generating-depth-maps-from-rgb-images]</ref>
=== Построение с помощью капсульных нейронных сетей ===
Свёрточные нейронные сети способны регистрировать только наличие какого-либо объекта на картинке, не кодируя его ориентацию и положение. Но '''капсульные нейронные сети''' (англ. Capsule Neural Network)<ref name=== Построение с помощью DenseNet ==="CapsNet">Sara Sabour, Nicholas Frosst, Geoffrey E. Hinton "Dynamic Routing Between Capsules" [https://arxiv.org/pdf/1710.09829.pdf]</ref> лишены этого недостатка.
== См. также ==
== Источники информации ==
* Чугунов Р.А. Чугунов, Кульневич А.Д. Кульневич, Аксенов С.В. Аксенов "Методика построения карт глубины стереоизображения с помощью капсульной нейронной сети" //Доклады Томского государственного университета систем управления и радиоэлектроники. – 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] * 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]
* Alexey Kurakin "Основы стереозрения" Prakash S., Gu G. Simultaneous localization and mapping with depth prediction using capsule networks for uavs //arXiv preprint arXiv:1808.05336. – 2018. [https://habrarxiv.comorg/ru/post/130300pdf/1808.05336.pdf]
* Dmitriy Vatolin "Камеры глубины — тихая революция" Ma X., Geng Z., Bie Z. Depth Estimation from Single Image Using CNN-Residual Network //SemanticScholar. – 2017. [https://habrwww.semanticscholar.com/ruorg/postpaper/457524Depth-Estimation-from-Single-Image-Using-Network-Geng/d79e7fc68e088f094a22910049117e586705bb7d?p2df]