<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
		<id>http://neerc.ifmo.ru/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Frak</id>
		<title>Викиконспекты - Вклад участника [ru]</title>
		<link rel="self" type="application/atom+xml" href="http://neerc.ifmo.ru/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Frak"/>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A1%D0%BB%D1%83%D0%B6%D0%B5%D0%B1%D0%BD%D0%B0%D1%8F:%D0%92%D0%BA%D0%BB%D0%B0%D0%B4/Frak"/>
		<updated>2026-08-03T23:04:05Z</updated>
		<subtitle>Вклад участника</subtitle>
		<generator>MediaWiki 1.30.0</generator>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9A%D0%B0%D1%80%D1%82%D0%B0_%D0%B3%D0%BB%D1%83%D0%B1%D0%B8%D0%BD%D1%8B&amp;diff=80377</id>
		<title>Карта глубины</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9A%D0%B0%D1%80%D1%82%D0%B0_%D0%B3%D0%BB%D1%83%D0%B1%D0%B8%D0%BD%D1%8B&amp;diff=80377"/>
				<updated>2021-01-23T14:16:09Z</updated>
		
		<summary type="html">&lt;p&gt;Frak: /* Построение с помощью PlanetNet (2018) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Карта глубины''' (англ. depth map) — это изображение, где для каждого пикселя вместо цвета хранится его расстояние до камеры.&amp;lt;ref name=&amp;quot;def&amp;quot;&amp;gt;Alexey Kurakin &amp;quot;Основы стереозрения&amp;quot;[https://habr.com/ru/post/130300/]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В компьютерной 3D-графике и [[Компьютерное зрение|компьютерном зрении]] карта глубины представляет собой изображение или канал изображения, содержащий информацию о расстоянии поверхностей объектов сцены от точки обзора. &lt;br /&gt;
&lt;br /&gt;
== Мотивация ==&lt;br /&gt;
&lt;br /&gt;
Карта глубины изображения содержит в себе информацию о расстоянии между различными объектами или частями объектов, представленных на данном изображении. Эта информация может быть полезна во многих областях. &lt;br /&gt;
 &lt;br /&gt;
* Для создания 3D-сенсеров. Они способны строить трёхмерную картину своего окружения, используются для [[Оценка положения|ориентации]] автономного робота в пространстве.&lt;br /&gt;
&lt;br /&gt;
* Для систем, использующих технологии дополненной и виртуальной реальности. Например, камеры, которые фиксируют действия пользователя в видеоиграх с технологией виртуальной реальности.&lt;br /&gt;
&lt;br /&gt;
* В беспилотных автомобилях, которые также используют карты глубин для ориентации на дороге.&lt;br /&gt;
&lt;br /&gt;
* Для обработки фотографий. Например, карты глубин используют для размытия фона на фотографии, чтобы добиться более чёткого выделения человека&amp;lt;ref name=&amp;quot;expls&amp;quot;&amp;gt;Примеры из &amp;quot;Research Guide for Depth Estimation with Deep Learning&amp;quot;[https://www.kdnuggets.com/2019/11/research-guide-depth-estimation-deep-learning.html]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Методы построения карты глубины ==&lt;br /&gt;
&lt;br /&gt;
Карта глубины может быть получена с помощью '''специальной камеры глубины''', по '''стереопаре изображений''', а также с помощью [[Нейронные сети, перцептрон|'''нейронных сетей''']].&lt;br /&gt;
&lt;br /&gt;
== Построение с помощью специальных камер глубин == &lt;br /&gt;
&lt;br /&gt;
[[Файл:ToF.jpg|thumb|250px| Рисунок 1. Пример работы ToF-камеры.]]&lt;br /&gt;
&lt;br /&gt;
* '''ToF-камеры''' (англ. Time of Flight). Принцип работы данной камеры основан на измерении задержки света, с которой свет возвращается в каждую точку. Имея несколько сенсоров с разным временем накопления заряда и, зная сдвиг по времени относительно источника для каждого сенсора и снятой яркости вспышки, мы можем рассчитать сдвиг и, соответственно, расстояние до объекта. Причем чем больше сенсоров задействовано, тем выше точность метода.&lt;br /&gt;
&lt;br /&gt;
* '''Структурированные световые камеры''' (aнгл. Structured light camera). Принцип работы данной камеры один из самых старых. Ставим проектор, который создает, например, горизонтальные (а потом и вертикальные) полоски и рядом камеру, которая снимает картину с полосками. В некоторых вариантах используется псевдослучайный набор точек (например MS Kinect {{---}} бесконтактный сенсорный игровой контроллер, для консолей Xbox 360, Xbox One и персональных компьютеров под управлением ОС Windows&amp;lt;ref name=&amp;quot;kinect&amp;quot;&amp;gt; О MicriSoft Kinect [https://en.wikipedia.org/wiki/Kinect]&amp;lt;/ref&amp;gt;). Проекторы обычно работают в инфракрасном спектре, чтобы не мешать пользователям. Поскольку камера и проектор смещены друг относительно друга, то и полоски также будут смещаться пропорционально расстоянию до объекта. Измеряя это смещение, мы можем рассчитывать расстояние до объекта. Вполне понятны сложности, с которыми можно столкнуться при использовании этого метода: это необходимость настройки и калибровки проектора, и проблема того, что нам нужно относительно благоприятное освещение. К примеру, солнце может засветить полосы, и что-то распознать будет тяжело.&lt;br /&gt;
&lt;br /&gt;
== Построения карты глубины по стереопаре ==&lt;br /&gt;
&lt;br /&gt;
Идея, лежащая в основе построения карты глубины по '''стереопаре''', проста. Для каждой точки на одном изображении выполняется поиск [[Ключевые точки изображения|парной ей точки]]&amp;lt;sup&amp;gt;[на 21.01.21 не создан]&amp;lt;/sup&amp;gt; на другом изображении. А по паре соответствующих точек можно выполнить [[Триангуляция полигонов (ушная + монотонная)|триангуляцию]] и определить координаты их [[Отображения|прообраза]] в трехмерном пространстве. Зная трехмерные координаты прообраза, глубина вычисляется как расстояние до плоскости камеры.&lt;br /&gt;
&lt;br /&gt;
Парную точку нужно искать на эпиполярной&amp;lt;ref name=&amp;quot;Epipolar&amp;quot;&amp;gt;Информация о эпиполярной геометрии[https://ru.qaz.wiki/wiki/Epipolar_geometry]&amp;lt;/ref&amp;gt; линии. Соответственно, для упрощения поиска изображения выравнивают так, чтобы все эпиполярные линии были параллельны сторонам изображения (обычно горизонтальны). Более того, изображения выравнивают так, чтобы для точки с координатами &amp;lt;math&amp;gt;(x_0, y_0)&amp;lt;/math&amp;gt; соответствующая ей эпиполярная линия задавалась уравнением &amp;lt;math&amp;gt;x = x_0&amp;lt;/math&amp;gt;. Тогда для каждой точки, соответствующую ей парную точку, нужно искать в той-же строчке на изображении со второй камеры. Такой процесс выравнивания изображений называют '''ректификацией''' (rectification).&lt;br /&gt;
&lt;br /&gt;
[[Файл:Stereo.png|thumb|300px| Рисунок 2. Результат построения карты смещений по двум картинкам.&amp;lt;ref name=&amp;quot;img2&amp;quot;&amp;gt; &amp;quot;Основы стереозрения&amp;quot; Рис. 3 [https://habr.com/ru/post/130300/]&amp;lt;/ref&amp;gt;]]&lt;br /&gt;
&lt;br /&gt;
После того, как изображения '''ректифицированы''', выполняют поиск соответствующих пар точек. Для каждого пикселя одной картинки с координатами &amp;lt;math&amp;gt;(x_0, y_0)&amp;lt;/math&amp;gt; выполняется поиск пикселя на другой картинке. При этом предполагается, что пиксель на второй картинке должен иметь координаты &amp;lt;math&amp;gt;(x_0 - d, y_0)&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;d&amp;lt;/math&amp;gt; — величина называемая смещением. Поиск соответствующего пикселя выполняется путем вычисления максимума функции отклика, в качестве которой может выступать, например, [[Корреляция случайных величин|корреляция]] окрестностей пикселей. В результате получается карта смещений, пример которой приведен на рис. 2. &lt;br /&gt;
&lt;br /&gt;
Собственно значения глубины обратно пропорциональны величине смещения пикселей.&lt;br /&gt;
&lt;br /&gt;
== Использование нейронных сетей ==&lt;br /&gt;
&lt;br /&gt;
Существует множество методов, использующих нейронные сети. Приведём пару примеров таких решений.&lt;br /&gt;
&lt;br /&gt;
=== Построение с помощью свёрточных нейронных сетей ===&lt;br /&gt;
&lt;br /&gt;
Используем [[Сверточные нейронные сети|сверточные нейронные сети]] для построения карты глубины следующим образом&lt;br /&gt;
&amp;lt;ref name=&amp;quot;cnn_rew&amp;quot;&amp;gt; Xiaobai Ma, Zhenglin Geng, Zhi Bie &amp;quot;Depth Estimation from Single Image Using CNN-Residual Network&amp;quot; [http://cs231n.stanford.edu/reports/2017/pdfs/203.pdf]&amp;lt;/ref&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
*  '''Создаем карту смещений''': используя два изображения с камер, близко расположенных друг к другу, создаем карту различий, точно так же как в методе построения по стереопаре.&lt;br /&gt;
&lt;br /&gt;
* '''Ищем реальную карту глубины для обучения''': с помощью карты смещений, можем построить карту глубины &amp;lt;math&amp;gt;y&amp;lt;/math&amp;gt; вышеописанным способом. Также допустимы другие способы построения карты глубины для обучения нейронной сети.&lt;br /&gt;
&lt;br /&gt;
*  '''Функция потерь''': определим [[Функция потерь и эмпирический риск|функцию потерь]], для предсказанной карты &amp;lt;math&amp;gt;\hat y&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;d_i = log( y_i) - log (\hat y_i)&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;\lambda \in [0, 1]&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;n &amp;lt;/math&amp;gt; — количество пикселей. &amp;lt;math&amp;gt;L(y, \hat y) =  \frac{1}{n} \sum\limits_{i} d^2_i - \frac{\lambda}{n^2}(\sum\limits_{i} d_i)^2&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;y_i&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;\hat y_i&amp;lt;/math&amp;gt; это i пискель для для реальной карты глубин и для предсказанной карты, соответственно. Гиперпараметр &amp;lt;math&amp;gt;\lambda&amp;lt;/math&amp;gt;, нужен для того, чтобы функция потерь меньше росла при большом количестве пикселей, предсказание для которых достаточно близко к реальному. Например, если &amp;lt;math&amp;gt;\lambda = 0&amp;lt;/math&amp;gt;, то мы просто придём к оптимизации в L2 для &amp;lt;math&amp;gt;d_i&amp;lt;/math&amp;gt;, т.е. &amp;lt;math&amp;gt;L(y, \hat y) =  \frac{1}{n} \sum\limits_{i} d^2_i &amp;lt;/math&amp;gt;.&amp;lt;ref name=&amp;quot;loss&amp;quot;&amp;gt;David Eigen, Christian Puhrsch, Rob Fergus &amp;quot;Depth Map Prediction from a Single Imageusing a Multi-Scale Deep Network&amp;quot; стр. 5&amp;lt;/ref&amp;gt; &lt;br /&gt;
&lt;br /&gt;
* '''Обучение свёрточной нейронной сети''': далее идёт обычное обучение нейронной сети по карте различий путем обратного распространения ошибки, оптимизируя заданную выше функцию потерь.&lt;br /&gt;
&lt;br /&gt;
В итоге, по обученной нейронной сети мы можем создавать карту глубины, не проводя расчётов для поиска карт смещения и имея только изображение объекта или пространства. &amp;lt;ref name=&amp;quot;cnn&amp;quot;&amp;gt;Реализация, основанная на свёрточных нейронных сетях [https://www.kaggle.com/kmader/cnn-for-generating-depth-maps-from-rgb-images]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Также возможно использование усложнённых архитектур свёрточных нейронных сетей типа '''DenseNet'''.&lt;br /&gt;
&lt;br /&gt;
'''DenseNet'''&amp;lt;ref name=&amp;quot;DenseNet&amp;quot;&amp;gt;Оригинальная статья описывающая DenseNet [https://arxiv.org/abs/1611.09326]&amp;lt;/ref&amp;gt; {{---}} это свёрточная нейронные сеть, в которой выход каждого из слоев подаётся на вход всем слоям, лежащих ниже.&lt;br /&gt;
&lt;br /&gt;
=== Построение с помощью капсульных нейронных сетей ===&lt;br /&gt;
&lt;br /&gt;
Свёрточные нейронные сети способны регистрировать только наличие какого-либо объекта на картинке, не кодируя его ориентацию и положение. Но '''капсульные нейронные сети''' (англ. Capsule Neural Network)&amp;lt;ref name=&amp;quot;CapsNet&amp;quot;&amp;gt;Sara Sabour, Nicholas Frosst, Geoffrey E. Hinton &amp;quot;Dynamic Routing Between Capsules&amp;quot; [https://arxiv.org/pdf/1710.09829.pdf]&amp;lt;/ref&amp;gt; лишены этого недостатка.&lt;br /&gt;
&lt;br /&gt;
[[Файл:capsnet.jpg|thumb|400px| Рисунок 3. Структура капсульной нейронной сети &amp;lt;ref name=&amp;quot;img&amp;quot;&amp;gt; &amp;quot;Design and Investigation of Capsule Networks for Sentence Classification&amp;quot; Figure 2. [https://www.mdpi.com/2076-3417/9/11/2200/htm]&amp;lt;/ref&amp;gt;.]]&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Капсульная нейронная сеть&amp;quot; состоит из капсул или групп нейронов, чтобы идентифицировать закономерности в изображении. Эта информация поступает в виде векторов, содержащих ориентацию и положение узоров на изображении, которое затем принимается капсулами более высокого уровня. Капсулы более высокого уровня обрабатывают эту информацию из нескольких капсул более низкого уровня и впоследствии выдают прогноз. Капсулы одного уровня не имеют связей друг с другом и вычисляют информацию независимо друг от друга. Капсулы образуются путем разделения выходных данных из свёрточного слоя. Мы делим наш трехмерный вектор на капсулы методом &amp;quot;нарезания&amp;quot; таким образом, чтобы в каждой капсуле была информация о каждом пикселе, т.е. по трехмерной координате.&lt;br /&gt;
 &lt;br /&gt;
Состояние нейронов капсульной нейронной сети внутри изображения фиксирует свойство области или объекта внутри изображения: его положение и ориентацию.&lt;br /&gt;
&lt;br /&gt;
Использование капсульной нейронной сети аналогично использованию обычных свёрточных сетей, описанному выше. &lt;br /&gt;
В целом, данная сеть показывает более точные результаты предсказания глубины.&lt;br /&gt;
&lt;br /&gt;
=== Построение с помощью PlanetNet (2018)===&lt;br /&gt;
&lt;br /&gt;
Так же есть архитектуры, решающие данную задачу и без обучения на карте смещений, построенной с помощью двух изображений. Одной из таких является '''PlaneNet'''. &lt;br /&gt;
&lt;br /&gt;
'''PlaneNet'''&amp;lt;ref name=&amp;quot;planetNet&amp;quot;&amp;gt; Chen Liu, Jimei Yang, Duygu Ceylan, Ersin Yumer, Yasutaka Furukawa &amp;quot;PlaneNet: Piece-wise Planar Reconstruction from a Single RGB Image&amp;quot; [https://arxiv.org/abs/1804.06278v1]&amp;lt;/ref&amp;gt; {{---}} глубокая нейронная сеть, построенная на расширенных остаточных сетях (aнгл. Dilated Residual Networks или DRN)&amp;lt;ref name=&amp;quot;drn&amp;quot;&amp;gt; Fisher Yu, Vladlen Koltun, Thomas Funkhouser &amp;quot;Dilated Residual Networks&amp;quot; [https://arxiv.org/abs/1705.09914]&amp;lt;/ref&amp;gt;. Она получает карту глубин путем композиции выходов трех подзадач:&lt;br /&gt;
&lt;br /&gt;
[[Файл:Plane net2.jpg|thumb|500px| Рисунок 4. Прогнозируемые PlaneNet параметры по одной rgb картинке: cегметация плоскости, параметры плоскостей, неплоская карта глубины&amp;lt;ref name=&amp;quot;img4&amp;quot;&amp;gt; Chen Liu, Jimei Yang, Duygu Ceylan, Ersin Yumer, Yasutaka Furukawa &amp;quot;PlaneNet: Piece-wise Planar Reconstruction from a Single RGB Image&amp;quot; Figure 2.&amp;lt;/ref&amp;gt;.]]&lt;br /&gt;
&lt;br /&gt;
* '''Параметры плоскостей''': пытаемся предсказать количество плоскостей $K$, а после ищем на изображение $K$ плоских поверхностей, каждая поверхность задаётся тремя параметрами &amp;lt;math&amp;gt;P_i&amp;lt;/math&amp;gt;: нормальная, прямая и сдвиг. Функцию ошибки определим следующим образом: &amp;lt;math&amp;gt;L = \sum_{i=1}^{K} \min_{j \in [1, \hat K]} \| \hat P_j - P_i \|&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;\hat K, \hat P_i&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;K, P_i&amp;lt;/math&amp;gt;, предсказанные и реальные количество и параметры плоскостей, соответственно.&lt;br /&gt;
&lt;br /&gt;
* [[Сегментация изображений|'''Сегментация плоскости''']]: ищем группы пикселей, каждая из которых характеризует один смысловой объект. Используем перекрёстную энтропию&amp;lt;ref name=&amp;quot;cross-entropy&amp;quot;&amp;gt; О перекрёстной энтропии [https://ml-cheatsheet.readthedocs.io/en/latest/loss_functions.html]&amp;lt;/ref&amp;gt;, как функцию потерь.&lt;br /&gt;
&lt;br /&gt;
* '''Неплоская карта глубины''': ищем одно-канальную (или неплоскую) карту глубины, то есть карту глубины, где каждый пиксель, либо на глубине 0, либо на глубине 1.&lt;br /&gt;
Авторы обучали и тестировали данные на  NYUv2&amp;lt;ref&amp;gt;Датасет NYUv2[https://cs.nyu.edu/~silberman/datasets/nyu_depth_v2.html]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Обучение без учителя поиска карты глубины из видео (2017) ===&lt;br /&gt;
&lt;br /&gt;
Авторы данной статьи &amp;lt;ref name=&amp;quot;cvrp_dnn&amp;quot;&amp;gt;Tinghui Zhou, Matthew Brown, Noah Snavely, David G. Lowe &amp;quot;Unsupervised Learning of Depth and Ego-Motion from Video&amp;quot; [https://arxiv.org/abs/1704.07813v2]&amp;lt;/ref&amp;gt; предлагают методику оценки глубины одной картинки без учителя и движения камеры из беспорядочной видео нарезки. &lt;br /&gt;
&lt;br /&gt;
[[Файл:Dnn.jpeg|thumb|400px| Рисунок 5. Aрхитектура сети на базе DispNet  &amp;lt;ref name=&amp;quot;cvrp&amp;quot;&amp;gt;Tinghui Zhou, Matthew Brown, Noah Snavely, David G. Lowe &amp;quot;Unsupervised Learning of Depth and Ego-Motion from Video&amp;quot; Figure 4&amp;lt;/ref&amp;gt;]]&lt;br /&gt;
&lt;br /&gt;
Будем использовать сверточные нейронные сети c глубиной одного вида и многовидовой камерой из неупорядоченного видеоряда. Метод базируется на синтезе видов. Сеть загружает фото объекта в качестве данных ввода и выводит глубину пикселя. Вид объекта может быть синтезирован исходя из глубины на каждого пикселя снимка позиционирования и четкости ближнего вида. Синтез может быть  дифференцирован с CNN по геометрии и модулям позиционирования.&lt;br /&gt;
Авторы взяли на вооружение архитектуру DispNet&amp;lt;ref name=&amp;quot;dispNet&amp;quot;&amp;gt; Nikolaus Mayer, Eddy Ilg, Philip Hausser, Philipp Fischer &amp;quot;A Large Dataset to Train Convolutional Networks&lt;br /&gt;
for Disparity, Optical Flow, and Scene Flow Estimation&amp;quot; [https://arxiv.org/pdf/1512.02134.pdf]&amp;lt;/ref&amp;gt;, которая сконструирована в виде энкодера и декодера с пропущенными соединениями и многомасштабными блоками предсказания. Функция активации ReLU отслеживает все сверточные слои кроме предсказанных.&lt;br /&gt;
Вид объекта со всех источников формирует входные данные в сеть позиционной оценки. На выходе получается относительная позиция между видом объекта и видом каждого источника. Сеть состоит из двух 7 шаговых сверток за которым следует свертка 1 х 1. За исключением последнего слоя свертки, где применяется нелинейная активация, все другие отслеживаются функцией активации ReLU. Сеть объяснимых предсказаний дает доступ к первым пяти закодированным слоям сети позиционирования. За ней следуют 5 слоев обратной свертки с многомасштабными блоками предсказаний. Кроме слоев предсказаний все уровни свертки и обратной свертки отслеживаются ReLU. Авторы проверяли данную методику на KITTY&amp;lt;ref&amp;gt; Датасет kitty[http://www.cvlibs.net/datasets/kitti/]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Неконтролируемая оценка глубины монокуляра с консистенцией слева направо (2017) ===&lt;br /&gt;
&lt;br /&gt;
[[Файл:Samplers.jpg|thumb|240px| Рисунок 6. Примерная архитектура сети с консистенцией слева направо &amp;lt;ref name=&amp;quot;cvrp2017&amp;quot;&amp;gt;Clément Godard, Oisin Mac Aodha, Gabriel J. Brostow &amp;quot;Unsupervised Monocular Depth Estimation with Left-Right Consistency&amp;quot; Figure 3 &amp;lt;/ref&amp;gt;]]&lt;br /&gt;
&lt;br /&gt;
В данной работе&amp;lt;ref name=&amp;quot;leftrigth&amp;quot;&amp;gt; Clément Godard, Oisin Mac Aodha, Gabriel J. Brostow &amp;quot;Unsupervised Monocular Depth Estimation with Left-Right Consistency&amp;quot; [https://arxiv.org/abs/1609.03677v3]&amp;lt;/ref&amp;gt; предлагается сверточная нейронная сеть, обученная выполнять оценку глубины одного изображения без реальных данных. Авторы предлагают сетевую архитектуру, которая выполняет сквозную оценку глубины изображения, полученного с 1 камеры, без учителя, что обеспечивает согласованность глубины слева направо внутри сети.&lt;br /&gt;
Сеть оценивает глубину, выводя смещения, которые искажают левое изображение, чтобы соответствовать правому. Левое входное изображение используется для вывода смещений слева направо и справа налево. Сеть генерирует предсказанное изображение с обратным отображением с помощью билинейного сэмплера. Это приводит к полностью дифференциальной модели формирования изображения.&lt;br /&gt;
Сверточная архитектура вдохновлена так же DispNet'ом. Она состоит из двух частей—кодера и декодера. Декодер использует пропуск соединений из блоков активации кодера, чтобы распознавать детали с высоким разрешением. Сеть предсказывает две карты смещений — слева направо и справа налево.&lt;br /&gt;
В процессе обучения сеть генерирует изображение путем выборки пикселей из противоположного стереоизображения. Модель формирования изображения использует сэмплер изображений из пространственной трансформаторной сети (STN) для выборки входного изображения с помощью карты смещений. Авторы обучали и тестировали данные на KITTY.&lt;br /&gt;
&lt;br /&gt;
=== Прогнозирование глубины без датчиков: использование структуры для обучения без учителя по монокулярным видео (2019) ===&lt;br /&gt;
&lt;br /&gt;
[[Файл:ego.jpeg|thumb|500px| Рисунок 7. Сравнение обычного метода построения карты глубин с помощью эго-движения и предложенного в статье, который использует движения для различных 3-D объектов &amp;lt;ref name=&amp;quot;aaaif&amp;quot;&amp;gt;Vincent Casser, Soeren Pirk, Reza Mahjourian, Anelia Angelova &amp;quot;Depth Prediction Without the Sensors: Leveraging Structure for Unsupervised Learning from Monocular Videos&amp;quot; Figure 2 &amp;lt;/ref&amp;gt;]]&lt;br /&gt;
&lt;br /&gt;
'''Визуальная одометрия''' &amp;lt;ref name=&amp;quot;визуальная одометрия&amp;quot;&amp;gt;Статья о визуальной одометрии[https://en.wikipedia.org/wiki/Visual_odometry]&amp;lt;/ref&amp;gt; {{---}} метод оценки положения и ориентации робота или иного устройства в пространстве с помощью анализа последовательности изображений, снятых установленной на нем камерой.&lt;br /&gt;
&lt;br /&gt;
Данная статья &amp;lt;ref name=&amp;quot;aaai&amp;quot;&amp;gt; Vincent Casser, Soeren Pirk, Reza Mahjourian, Anelia Angelova &amp;quot;Depth Prediction Without the Sensors: Leveraging Structure for Unsupervised Learning from Monocular Videos&amp;quot; [https://arxiv.org/abs/1811.06152v1]&amp;lt;/ref&amp;gt; посвящена задаче обучения без учителя глубины сцены и визуальной одометрии робота, где наблюдение обеспечивается видеозаписями с одной камеры. Это делается путем введения геометрической структуры в процесс обучения. Он включает в себя моделирование сцены и отдельных объектов, одометрии камеры и движения объектов, изучаемых с помощью монокулярных видеовходов. Авторы вводят модель движения объекта, которая имеет ту же архитектуру, что и сеть определения визуальной одометрии. Она принимает последовательность изображений RGB в качестве входных данных и дополняется предварительно вычисленными масками сегментации экземпляров. Работа модели движения заключается в том, чтобы научиться предсказывать векторы трансформации каждого объекта в трехмерном пространстве. Это создает видимость наблюдаемого объекта в соответствующем целевом кадре. Авторы проверяли прогнозирование глубины на KITTY.&lt;br /&gt;
&lt;br /&gt;
== См. также ==&lt;br /&gt;
&lt;br /&gt;
* [[Компьютерное зрение]]&lt;br /&gt;
&lt;br /&gt;
* [[Оценка положения]]&lt;br /&gt;
&lt;br /&gt;
* [[Задача нахождения объектов на изображении]]&lt;br /&gt;
&lt;br /&gt;
== Примечания ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Источники информации ==&lt;br /&gt;
&lt;br /&gt;
* Чугунов Р. А., Кульневич А. Д., Аксенов С. В. Методика построения карт глубины стереоизображения с помощью капсульной нейронной сети //Доклады Томского государственного университета систем управления и радиоэлектроники. – 2019. – Т. 22. – №. 1.[https://cyberleninka.ru/article/n/metodika-postroeniya-kart-glubiny-stereoizobrazheniya-s-pomoschyu-kapsulnoy-neyronnoy-seti/viewer]&lt;br /&gt;
&lt;br /&gt;
* 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]&lt;br /&gt;
&lt;br /&gt;
*  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]&lt;br /&gt;
&lt;br /&gt;
* 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]&lt;br /&gt;
&lt;br /&gt;
* 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]&lt;br /&gt;
&lt;br /&gt;
[[Категория:Машинное обучение]]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Компьютерное зрение]]&lt;/div&gt;</summary>
		<author><name>Frak</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9A%D0%B0%D1%80%D1%82%D0%B0_%D0%B3%D0%BB%D1%83%D0%B1%D0%B8%D0%BD%D1%8B&amp;diff=80372</id>
		<title>Карта глубины</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9A%D0%B0%D1%80%D1%82%D0%B0_%D0%B3%D0%BB%D1%83%D0%B1%D0%B8%D0%BD%D1%8B&amp;diff=80372"/>
				<updated>2021-01-23T14:08:56Z</updated>
		
		<summary type="html">&lt;p&gt;Frak: /* Прогнозирование глубины без датчиков: использование структуры для обучения без учителя по монокулярным видео (2019) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Карта глубины''' (англ. depth map) — это изображение, где для каждого пикселя вместо цвета хранится его расстояние до камеры.&amp;lt;ref name=&amp;quot;def&amp;quot;&amp;gt;Alexey Kurakin &amp;quot;Основы стереозрения&amp;quot;[https://habr.com/ru/post/130300/]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В компьютерной 3D-графике и [[Компьютерное зрение|компьютерном зрении]] карта глубины представляет собой изображение или канал изображения, содержащий информацию о расстоянии поверхностей объектов сцены от точки обзора. &lt;br /&gt;
&lt;br /&gt;
== Мотивация ==&lt;br /&gt;
&lt;br /&gt;
Карта глубины изображения содержит в себе информацию о расстоянии между различными объектами или частями объектов, представленных на данном изображении. Эта информация может быть полезна во многих областях. &lt;br /&gt;
 &lt;br /&gt;
* Для создания 3D-сенсеров. Они способны строить трёхмерную картину своего окружения, используются для [[Оценка положения|ориентации]] автономного робота в пространстве.&lt;br /&gt;
&lt;br /&gt;
* Для систем, использующих технологии дополненной и виртуальной реальности. Например, камеры, которые фиксируют действия пользователя в видеоиграх с технологией виртуальной реальности.&lt;br /&gt;
&lt;br /&gt;
* В беспилотных автомобилях, которые также используют карты глубин для ориентации на дороге.&lt;br /&gt;
&lt;br /&gt;
* Для обработки фотографий. Например, карты глубин используют для размытия фона на фотографии, чтобы добиться более чёткого выделения человека&amp;lt;ref name=&amp;quot;expls&amp;quot;&amp;gt;Примеры из &amp;quot;Research Guide for Depth Estimation with Deep Learning&amp;quot;[https://www.kdnuggets.com/2019/11/research-guide-depth-estimation-deep-learning.html]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Методы построения карты глубины ==&lt;br /&gt;
&lt;br /&gt;
Карта глубины может быть получена с помощью '''специальной камеры глубины''', по '''стереопаре изображений''', а также с помощью [[Нейронные сети, перцептрон|'''нейронных сетей''']].&lt;br /&gt;
&lt;br /&gt;
== Построение с помощью специальных камер глубин == &lt;br /&gt;
&lt;br /&gt;
[[Файл:ToF.jpg|thumb|250px| Рисунок 1. Пример работы ToF-камеры.]]&lt;br /&gt;
&lt;br /&gt;
* '''ToF-камеры''' (англ. Time of Flight). Принцип работы данной камеры основан на измерении задержки света, с которой свет возвращается в каждую точку. Имея несколько сенсоров с разным временем накопления заряда и, зная сдвиг по времени относительно источника для каждого сенсора и снятой яркости вспышки, мы можем рассчитать сдвиг и, соответственно, расстояние до объекта. Причем чем больше сенсоров задействовано, тем выше точность метода.&lt;br /&gt;
&lt;br /&gt;
* '''Структурированные световые камеры''' (aнгл. Structured light camera). Принцип работы данной камеры один из самых старых. Ставим проектор, который создает, например, горизонтальные (а потом и вертикальные) полоски и рядом камеру, которая снимает картину с полосками. В некоторых вариантах используется псевдослучайный набор точек (например MS Kinect {{---}} бесконтактный сенсорный игровой контроллер, для консолей Xbox 360, Xbox One и персональных компьютеров под управлением ОС Windows&amp;lt;ref name=&amp;quot;kinect&amp;quot;&amp;gt; О MicriSoft Kinect [https://en.wikipedia.org/wiki/Kinect]&amp;lt;/ref&amp;gt;). Проекторы обычно работают в инфракрасном спектре, чтобы не мешать пользователям. Поскольку камера и проектор смещены друг относительно друга, то и полоски также будут смещаться пропорционально расстоянию до объекта. Измеряя это смещение, мы можем рассчитывать расстояние до объекта. Вполне понятны сложности, с которыми можно столкнуться при использовании этого метода: это необходимость настройки и калибровки проектора, и проблема того, что нам нужно относительно благоприятное освещение. К примеру, солнце может засветить полосы, и что-то распознать будет тяжело.&lt;br /&gt;
&lt;br /&gt;
== Построения карты глубины по стереопаре ==&lt;br /&gt;
&lt;br /&gt;
Идея, лежащая в основе построения карты глубины по '''стереопаре''', проста. Для каждой точки на одном изображении выполняется поиск [[Ключевые точки изображения|парной ей точки]]&amp;lt;sup&amp;gt;[на 21.01.21 не создан]&amp;lt;/sup&amp;gt; на другом изображении. А по паре соответствующих точек можно выполнить [[Триангуляция полигонов (ушная + монотонная)|триангуляцию]] и определить координаты их [[Отображения|прообраза]] в трехмерном пространстве. Зная трехмерные координаты прообраза, глубина вычисляется как расстояние до плоскости камеры.&lt;br /&gt;
&lt;br /&gt;
Парную точку нужно искать на эпиполярной&amp;lt;ref name=&amp;quot;Epipolar&amp;quot;&amp;gt;Информация о эпиполярной геометрии[https://ru.qaz.wiki/wiki/Epipolar_geometry]&amp;lt;/ref&amp;gt; линии. Соответственно, для упрощения поиска изображения выравнивают так, чтобы все эпиполярные линии были параллельны сторонам изображения (обычно горизонтальны). Более того, изображения выравнивают так, чтобы для точки с координатами &amp;lt;math&amp;gt;(x_0, y_0)&amp;lt;/math&amp;gt; соответствующая ей эпиполярная линия задавалась уравнением &amp;lt;math&amp;gt;x = x_0&amp;lt;/math&amp;gt;. Тогда для каждой точки, соответствующую ей парную точку, нужно искать в той-же строчке на изображении со второй камеры. Такой процесс выравнивания изображений называют '''ректификацией''' (rectification).&lt;br /&gt;
&lt;br /&gt;
[[Файл:Stereo.png|thumb|300px| Рисунок 2. Результат построения карты смещений по двум картинкам.&amp;lt;ref name=&amp;quot;img2&amp;quot;&amp;gt; &amp;quot;Основы стереозрения&amp;quot; Рис. 3 [https://habr.com/ru/post/130300/]&amp;lt;/ref&amp;gt;]]&lt;br /&gt;
&lt;br /&gt;
После того, как изображения '''ректифицированы''', выполняют поиск соответствующих пар точек. Для каждого пикселя одной картинки с координатами &amp;lt;math&amp;gt;(x_0, y_0)&amp;lt;/math&amp;gt; выполняется поиск пикселя на другой картинке. При этом предполагается, что пиксель на второй картинке должен иметь координаты &amp;lt;math&amp;gt;(x_0 - d, y_0)&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;d&amp;lt;/math&amp;gt; — величина называемая смещением. Поиск соответствующего пикселя выполняется путем вычисления максимума функции отклика, в качестве которой может выступать, например, [[Корреляция случайных величин|корреляция]] окрестностей пикселей. В результате получается карта смещений, пример которой приведен на рис. 2. &lt;br /&gt;
&lt;br /&gt;
Собственно значения глубины обратно пропорциональны величине смещения пикселей.&lt;br /&gt;
&lt;br /&gt;
== Использование нейронных сетей ==&lt;br /&gt;
&lt;br /&gt;
Существует множество методов, использующих нейронные сети. Приведём пару примеров таких решений.&lt;br /&gt;
&lt;br /&gt;
=== Построение с помощью свёрточных нейронных сетей ===&lt;br /&gt;
&lt;br /&gt;
Используем [[Сверточные нейронные сети|сверточные нейронные сети]] для построения карты глубины следующим образом&lt;br /&gt;
&amp;lt;ref name=&amp;quot;cnn_rew&amp;quot;&amp;gt; Xiaobai Ma, Zhenglin Geng, Zhi Bie &amp;quot;Depth Estimation from Single Image Using CNN-Residual Network&amp;quot; [http://cs231n.stanford.edu/reports/2017/pdfs/203.pdf]&amp;lt;/ref&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
*  '''Создаем карту смещений''': используя два изображения с камер, близко расположенных друг к другу, создаем карту различий, точно так же как в методе построения по стереопаре.&lt;br /&gt;
&lt;br /&gt;
* '''Ищем реальную карту глубины для обучения''': с помощью карты смещений, можем построить карту глубины &amp;lt;math&amp;gt;y&amp;lt;/math&amp;gt; вышеописанным способом. Также допустимы другие способы построения карты глубины для обучения нейронной сети.&lt;br /&gt;
&lt;br /&gt;
*  '''Функция потерь''': определим [[Функция потерь и эмпирический риск|функцию потерь]], для предсказанной карты &amp;lt;math&amp;gt;\hat y&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;d_i = log( y_i) - log (\hat y_i)&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;\lambda \in [0, 1]&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;n &amp;lt;/math&amp;gt; — количество пикселей. &amp;lt;math&amp;gt;L(y, \hat y) =  \frac{1}{n} \sum\limits_{i} d^2_i - \frac{\lambda}{n^2}(\sum\limits_{i} d_i)^2&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;y_i&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;\hat y_i&amp;lt;/math&amp;gt; это i пискель для для реальной карты глубин и для предсказанной карты, соответственно. Гиперпараметр &amp;lt;math&amp;gt;\lambda&amp;lt;/math&amp;gt;, нужен для того, чтобы функция потерь меньше росла при большом количестве пикселей, предсказание для которых достаточно близко к реальному. Например, если &amp;lt;math&amp;gt;\lambda = 0&amp;lt;/math&amp;gt;, то мы просто придём к оптимизации в L2 для &amp;lt;math&amp;gt;d_i&amp;lt;/math&amp;gt;, т.е. &amp;lt;math&amp;gt;L(y, \hat y) =  \frac{1}{n} \sum\limits_{i} d^2_i &amp;lt;/math&amp;gt;.&amp;lt;ref name=&amp;quot;loss&amp;quot;&amp;gt;David Eigen, Christian Puhrsch, Rob Fergus &amp;quot;Depth Map Prediction from a Single Imageusing a Multi-Scale Deep Network&amp;quot; стр. 5&amp;lt;/ref&amp;gt; &lt;br /&gt;
&lt;br /&gt;
* '''Обучение свёрточной нейронной сети''': далее идёт обычное обучение нейронной сети по карте различий путем обратного распространения ошибки, оптимизируя заданную выше функцию потерь.&lt;br /&gt;
&lt;br /&gt;
В итоге, по обученной нейронной сети мы можем создавать карту глубины, не проводя расчётов для поиска карт смещения и имея только изображение объекта или пространства. &amp;lt;ref name=&amp;quot;cnn&amp;quot;&amp;gt;Реализация, основанная на свёрточных нейронных сетях [https://www.kaggle.com/kmader/cnn-for-generating-depth-maps-from-rgb-images]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Также возможно использование усложнённых архитектур свёрточных нейронных сетей типа '''DenseNet'''.&lt;br /&gt;
&lt;br /&gt;
'''DenseNet'''&amp;lt;ref name=&amp;quot;DenseNet&amp;quot;&amp;gt;Оригинальная статья описывающая DenseNet [https://arxiv.org/abs/1611.09326]&amp;lt;/ref&amp;gt; {{---}} это свёрточная нейронные сеть, в которой выход каждого из слоев подаётся на вход всем слоям, лежащих ниже.&lt;br /&gt;
&lt;br /&gt;
=== Построение с помощью капсульных нейронных сетей ===&lt;br /&gt;
&lt;br /&gt;
Свёрточные нейронные сети способны регистрировать только наличие какого-либо объекта на картинке, не кодируя его ориентацию и положение. Но '''капсульные нейронные сети''' (англ. Capsule Neural Network)&amp;lt;ref name=&amp;quot;CapsNet&amp;quot;&amp;gt;Sara Sabour, Nicholas Frosst, Geoffrey E. Hinton &amp;quot;Dynamic Routing Between Capsules&amp;quot; [https://arxiv.org/pdf/1710.09829.pdf]&amp;lt;/ref&amp;gt; лишены этого недостатка.&lt;br /&gt;
&lt;br /&gt;
[[Файл:capsnet.jpg|thumb|400px| Рисунок 3. Структура капсульной нейронной сети &amp;lt;ref name=&amp;quot;img&amp;quot;&amp;gt; &amp;quot;Design and Investigation of Capsule Networks for Sentence Classification&amp;quot; Figure 2. [https://www.mdpi.com/2076-3417/9/11/2200/htm]&amp;lt;/ref&amp;gt;.]]&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Капсульная нейронная сеть&amp;quot; состоит из капсул или групп нейронов, чтобы идентифицировать закономерности в изображении. Эта информация поступает в виде векторов, содержащих ориентацию и положение узоров на изображении, которое затем принимается капсулами более высокого уровня. Капсулы более высокого уровня обрабатывают эту информацию из нескольких капсул более низкого уровня и впоследствии выдают прогноз. Капсулы одного уровня не имеют связей друг с другом и вычисляют информацию независимо друг от друга. Капсулы образуются путем разделения выходных данных из свёрточного слоя. Мы делим наш трехмерный вектор на капсулы методом &amp;quot;нарезания&amp;quot; таким образом, чтобы в каждой капсуле была информация о каждом пикселе, т.е. по трехмерной координате.&lt;br /&gt;
 &lt;br /&gt;
Состояние нейронов капсульной нейронной сети внутри изображения фиксирует свойство области или объекта внутри изображения: его положение и ориентацию.&lt;br /&gt;
&lt;br /&gt;
Использование капсульной нейронной сети аналогично использованию обычных свёрточных сетей, описанному выше. &lt;br /&gt;
В целом, данная сеть показывает более точные результаты предсказания глубины.&lt;br /&gt;
&lt;br /&gt;
=== Построение с помощью PlanetNet (2018)===&lt;br /&gt;
&lt;br /&gt;
Так же есть архитектуры, решающие данную задачу и без обучения на карте смещений, построенной с помощью двух изображений. Одной из таких является '''PlaneNet'''. &lt;br /&gt;
&lt;br /&gt;
'''PlaneNet'''&amp;lt;ref name=&amp;quot;planetNet&amp;quot;&amp;gt; Chen Liu, Jimei Yang, Duygu Ceylan, Ersin Yumer, Yasutaka Furukawa &amp;quot;PlaneNet: Piece-wise Planar Reconstruction from a Single RGB Image&amp;quot; [https://arxiv.org/abs/1804.06278v1]&amp;lt;/ref&amp;gt; {{---}} глубокая нейронная сеть, построенная на расширенных остаточных сетях (aнгл. Dilated Residual Networks или DRN)&amp;lt;ref name=&amp;quot;drn&amp;quot;&amp;gt; Fisher Yu, Vladlen Koltun, Thomas Funkhouser &amp;quot;Dilated Residual Networks&amp;quot; [https://arxiv.org/abs/1705.09914]&amp;lt;/ref&amp;gt;. Она получает карту глубин путем композиции выходов трех подзадач:&lt;br /&gt;
&lt;br /&gt;
[[Файл:Plane net2.jpg|thumb|500px| Рисунок 4. Прогнозируемые PlaneNet параметры по одной rgb картинке: cегметация плоскости, параметры плоскостей, неплоская карта глубины&amp;lt;ref name=&amp;quot;img4&amp;quot;&amp;gt; Chen Liu, Jimei Yang, Duygu Ceylan, Ersin Yumer, Yasutaka Furukawa &amp;quot;PlaneNet: Piece-wise Planar Reconstruction from a Single RGB Image&amp;quot; Figure 2.&amp;lt;/ref&amp;gt;.]]&lt;br /&gt;
&lt;br /&gt;
* '''Параметры плоскостей''': пытаемся предсказать количество плоскостей $K$, а после ищем на изображение $K$ плоских поверхностей, каждая поверхность задаётся тремя параметрами &amp;lt;math&amp;gt;P_i&amp;lt;/math&amp;gt;: нормальная, прямая и сдвиг. Функцию ошибки определим следующим образом: &amp;lt;math&amp;gt;L = \sum_{i=1}^{K} \min_{j \in [1, \hat K]} \| \hat P_j - P_i \|&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;\hat K, \hat P_i&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;K, P_i&amp;lt;/math&amp;gt;, предсказанные и реальные количество и параметры плоскостей, соответственно.&lt;br /&gt;
&lt;br /&gt;
* [[Сегментация изображений|'''Сегментация плоскости''']]: ищем группы пикселей, каждая из которых характеризует один смысловой объект.&lt;br /&gt;
&lt;br /&gt;
* '''Неплоская карта глубины''': ищем одно-канальную (или неплоскую) карту глубины, то есть карту глубины, где каждый пиксель, либо на глубине 0, либо на глубине 1.&lt;br /&gt;
Авторы обучали и тестировали данные на  NYUv2&amp;lt;ref&amp;gt;Датасет NYUv2[https://cs.nyu.edu/~silberman/datasets/nyu_depth_v2.html]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Обучение без учителя поиска карты глубины из видео (2017) ===&lt;br /&gt;
&lt;br /&gt;
Авторы данной статьи &amp;lt;ref name=&amp;quot;cvrp_dnn&amp;quot;&amp;gt;Tinghui Zhou, Matthew Brown, Noah Snavely, David G. Lowe &amp;quot;Unsupervised Learning of Depth and Ego-Motion from Video&amp;quot; [https://arxiv.org/abs/1704.07813v2]&amp;lt;/ref&amp;gt; предлагают методику оценки глубины одной картинки без учителя и движения камеры из беспорядочной видео нарезки. &lt;br /&gt;
&lt;br /&gt;
[[Файл:Dnn.jpeg|thumb|400px| Рисунок 5. Aрхитектура сети на базе DispNet  &amp;lt;ref name=&amp;quot;cvrp&amp;quot;&amp;gt;Tinghui Zhou, Matthew Brown, Noah Snavely, David G. Lowe &amp;quot;Unsupervised Learning of Depth and Ego-Motion from Video&amp;quot; Figure 4&amp;lt;/ref&amp;gt;]]&lt;br /&gt;
&lt;br /&gt;
Будем использовать сверточные нейронные сети c глубиной одного вида и многовидовой камерой из неупорядоченного видеоряда. Метод базируется на синтезе видов. Сеть загружает фото объекта в качестве данных ввода и выводит глубину пикселя. Вид объекта может быть синтезирован исходя из глубины на каждого пикселя снимка позиционирования и четкости ближнего вида. Синтез может быть  дифференцирован с CNN по геометрии и модулям позиционирования.&lt;br /&gt;
Авторы взяли на вооружение архитектуру DispNet&amp;lt;ref name=&amp;quot;dispNet&amp;quot;&amp;gt; Nikolaus Mayer, Eddy Ilg, Philip Hausser, Philipp Fischer &amp;quot;A Large Dataset to Train Convolutional Networks&lt;br /&gt;
for Disparity, Optical Flow, and Scene Flow Estimation&amp;quot; [https://arxiv.org/pdf/1512.02134.pdf]&amp;lt;/ref&amp;gt;, которая сконструирована в виде энкодера и декодера с пропущенными соединениями и многомасштабными блоками предсказания. Функция активации ReLU отслеживает все сверточные слои кроме предсказанных.&lt;br /&gt;
Вид объекта со всех источников формирует входные данные в сеть позиционной оценки. На выходе получается относительная позиция между видом объекта и видом каждого источника. Сеть состоит из двух 7 шаговых сверток за которым следует свертка 1 х 1. За исключением последнего слоя свертки, где применяется нелинейная активация, все другие отслеживаются функцией активации ReLU. Сеть объяснимых предсказаний дает доступ к первым пяти закодированным слоям сети позиционирования. За ней следуют 5 слоев обратной свертки с многомасштабными блоками предсказаний. Кроме слоев предсказаний все уровни свертки и обратной свертки отслеживаются ReLU. Авторы проверяли данную методику на KITTY&amp;lt;ref&amp;gt; Датасет kitty[http://www.cvlibs.net/datasets/kitti/]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Неконтролируемая оценка глубины монокуляра с консистенцией слева направо (2017) ===&lt;br /&gt;
&lt;br /&gt;
[[Файл:Samplers.jpg|thumb|240px| Рисунок 6. Примерная архитектура сети с консистенцией слева направо &amp;lt;ref name=&amp;quot;cvrp2017&amp;quot;&amp;gt;Clément Godard, Oisin Mac Aodha, Gabriel J. Brostow &amp;quot;Unsupervised Monocular Depth Estimation with Left-Right Consistency&amp;quot; Figure 3 &amp;lt;/ref&amp;gt;]]&lt;br /&gt;
&lt;br /&gt;
В данной работе&amp;lt;ref name=&amp;quot;leftrigth&amp;quot;&amp;gt; Clément Godard, Oisin Mac Aodha, Gabriel J. Brostow &amp;quot;Unsupervised Monocular Depth Estimation with Left-Right Consistency&amp;quot; [https://arxiv.org/abs/1609.03677v3]&amp;lt;/ref&amp;gt; предлагается сверточная нейронная сеть, обученная выполнять оценку глубины одного изображения без реальных данных. Авторы предлагают сетевую архитектуру, которая выполняет сквозную оценку глубины изображения, полученного с 1 камеры, без учителя, что обеспечивает согласованность глубины слева направо внутри сети.&lt;br /&gt;
Сеть оценивает глубину, выводя смещения, которые искажают левое изображение, чтобы соответствовать правому. Левое входное изображение используется для вывода смещений слева направо и справа налево. Сеть генерирует предсказанное изображение с обратным отображением с помощью билинейного сэмплера. Это приводит к полностью дифференциальной модели формирования изображения.&lt;br /&gt;
Сверточная архитектура вдохновлена так же DispNet'ом. Она состоит из двух частей—кодера и декодера. Декодер использует пропуск соединений из блоков активации кодера, чтобы распознавать детали с высоким разрешением. Сеть предсказывает две карты смещений — слева направо и справа налево.&lt;br /&gt;
В процессе обучения сеть генерирует изображение путем выборки пикселей из противоположного стереоизображения. Модель формирования изображения использует сэмплер изображений из пространственной трансформаторной сети (STN) для выборки входного изображения с помощью карты смещений. Авторы обучали и тестировали данные на KITTY.&lt;br /&gt;
&lt;br /&gt;
=== Прогнозирование глубины без датчиков: использование структуры для обучения без учителя по монокулярным видео (2019) ===&lt;br /&gt;
&lt;br /&gt;
[[Файл:ego.jpeg|thumb|500px| Рисунок 7. Сравнение обычного метода построения карты глубин с помощью эго-движения и предложенного в статье, который использует движения для различных 3-D объектов &amp;lt;ref name=&amp;quot;aaaif&amp;quot;&amp;gt;Vincent Casser, Soeren Pirk, Reza Mahjourian, Anelia Angelova &amp;quot;Depth Prediction Without the Sensors: Leveraging Structure for Unsupervised Learning from Monocular Videos&amp;quot; Figure 2 &amp;lt;/ref&amp;gt;]]&lt;br /&gt;
&lt;br /&gt;
'''Визуальная одометрия''' &amp;lt;ref name=&amp;quot;визуальная одометрия&amp;quot;&amp;gt;Статья о визуальной одометрии[https://en.wikipedia.org/wiki/Visual_odometry]&amp;lt;/ref&amp;gt; {{---}} метод оценки положения и ориентации робота или иного устройства в пространстве с помощью анализа последовательности изображений, снятых установленной на нем камерой.&lt;br /&gt;
&lt;br /&gt;
Данная статья &amp;lt;ref name=&amp;quot;aaai&amp;quot;&amp;gt; Vincent Casser, Soeren Pirk, Reza Mahjourian, Anelia Angelova &amp;quot;Depth Prediction Without the Sensors: Leveraging Structure for Unsupervised Learning from Monocular Videos&amp;quot; [https://arxiv.org/abs/1811.06152v1]&amp;lt;/ref&amp;gt; посвящена задаче обучения без учителя глубины сцены и визуальной одометрии робота, где наблюдение обеспечивается видеозаписями с одной камеры. Это делается путем введения геометрической структуры в процесс обучения. Он включает в себя моделирование сцены и отдельных объектов, одометрии камеры и движения объектов, изучаемых с помощью монокулярных видеовходов. Авторы вводят модель движения объекта, которая имеет ту же архитектуру, что и сеть определения визуальной одометрии. Она принимает последовательность изображений RGB в качестве входных данных и дополняется предварительно вычисленными масками сегментации экземпляров. Работа модели движения заключается в том, чтобы научиться предсказывать векторы трансформации каждого объекта в трехмерном пространстве. Это создает видимость наблюдаемого объекта в соответствующем целевом кадре. Авторы проверяли прогнозирование глубины на KITTY.&lt;br /&gt;
&lt;br /&gt;
== См. также ==&lt;br /&gt;
&lt;br /&gt;
* [[Компьютерное зрение]]&lt;br /&gt;
&lt;br /&gt;
* [[Оценка положения]]&lt;br /&gt;
&lt;br /&gt;
* [[Задача нахождения объектов на изображении]]&lt;br /&gt;
&lt;br /&gt;
== Примечания ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Источники информации ==&lt;br /&gt;
&lt;br /&gt;
* Чугунов Р. А., Кульневич А. Д., Аксенов С. В. Методика построения карт глубины стереоизображения с помощью капсульной нейронной сети //Доклады Томского государственного университета систем управления и радиоэлектроники. – 2019. – Т. 22. – №. 1.[https://cyberleninka.ru/article/n/metodika-postroeniya-kart-glubiny-stereoizobrazheniya-s-pomoschyu-kapsulnoy-neyronnoy-seti/viewer]&lt;br /&gt;
&lt;br /&gt;
* 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]&lt;br /&gt;
&lt;br /&gt;
*  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]&lt;br /&gt;
&lt;br /&gt;
* 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]&lt;br /&gt;
&lt;br /&gt;
* 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]&lt;br /&gt;
&lt;br /&gt;
[[Категория:Машинное обучение]]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Компьютерное зрение]]&lt;/div&gt;</summary>
		<author><name>Frak</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Ego.jpeg&amp;diff=80371</id>
		<title>Файл:Ego.jpeg</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Ego.jpeg&amp;diff=80371"/>
				<updated>2021-01-23T14:08:36Z</updated>
		
		<summary type="html">&lt;p&gt;Frak: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Frak</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9A%D0%B0%D1%80%D1%82%D0%B0_%D0%B3%D0%BB%D1%83%D0%B1%D0%B8%D0%BD%D1%8B&amp;diff=80368</id>
		<title>Карта глубины</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9A%D0%B0%D1%80%D1%82%D0%B0_%D0%B3%D0%BB%D1%83%D0%B1%D0%B8%D0%BD%D1%8B&amp;diff=80368"/>
				<updated>2021-01-23T14:06:50Z</updated>
		
		<summary type="html">&lt;p&gt;Frak: /* Обучение без учителя поиска карты глубины из видео (2017) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Карта глубины''' (англ. depth map) — это изображение, где для каждого пикселя вместо цвета хранится его расстояние до камеры.&amp;lt;ref name=&amp;quot;def&amp;quot;&amp;gt;Alexey Kurakin &amp;quot;Основы стереозрения&amp;quot;[https://habr.com/ru/post/130300/]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В компьютерной 3D-графике и [[Компьютерное зрение|компьютерном зрении]] карта глубины представляет собой изображение или канал изображения, содержащий информацию о расстоянии поверхностей объектов сцены от точки обзора. &lt;br /&gt;
&lt;br /&gt;
== Мотивация ==&lt;br /&gt;
&lt;br /&gt;
Карта глубины изображения содержит в себе информацию о расстоянии между различными объектами или частями объектов, представленных на данном изображении. Эта информация может быть полезна во многих областях. &lt;br /&gt;
 &lt;br /&gt;
* Для создания 3D-сенсеров. Они способны строить трёхмерную картину своего окружения, используются для [[Оценка положения|ориентации]] автономного робота в пространстве.&lt;br /&gt;
&lt;br /&gt;
* Для систем, использующих технологии дополненной и виртуальной реальности. Например, камеры, которые фиксируют действия пользователя в видеоиграх с технологией виртуальной реальности.&lt;br /&gt;
&lt;br /&gt;
* В беспилотных автомобилях, которые также используют карты глубин для ориентации на дороге.&lt;br /&gt;
&lt;br /&gt;
* Для обработки фотографий. Например, карты глубин используют для размытия фона на фотографии, чтобы добиться более чёткого выделения человека&amp;lt;ref name=&amp;quot;expls&amp;quot;&amp;gt;Примеры из &amp;quot;Research Guide for Depth Estimation with Deep Learning&amp;quot;[https://www.kdnuggets.com/2019/11/research-guide-depth-estimation-deep-learning.html]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Методы построения карты глубины ==&lt;br /&gt;
&lt;br /&gt;
Карта глубины может быть получена с помощью '''специальной камеры глубины''', по '''стереопаре изображений''', а также с помощью [[Нейронные сети, перцептрон|'''нейронных сетей''']].&lt;br /&gt;
&lt;br /&gt;
== Построение с помощью специальных камер глубин == &lt;br /&gt;
&lt;br /&gt;
[[Файл:ToF.jpg|thumb|250px| Рисунок 1. Пример работы ToF-камеры.]]&lt;br /&gt;
&lt;br /&gt;
* '''ToF-камеры''' (англ. Time of Flight). Принцип работы данной камеры основан на измерении задержки света, с которой свет возвращается в каждую точку. Имея несколько сенсоров с разным временем накопления заряда и, зная сдвиг по времени относительно источника для каждого сенсора и снятой яркости вспышки, мы можем рассчитать сдвиг и, соответственно, расстояние до объекта. Причем чем больше сенсоров задействовано, тем выше точность метода.&lt;br /&gt;
&lt;br /&gt;
* '''Структурированные световые камеры''' (aнгл. Structured light camera). Принцип работы данной камеры один из самых старых. Ставим проектор, который создает, например, горизонтальные (а потом и вертикальные) полоски и рядом камеру, которая снимает картину с полосками. В некоторых вариантах используется псевдослучайный набор точек (например MS Kinect {{---}} бесконтактный сенсорный игровой контроллер, для консолей Xbox 360, Xbox One и персональных компьютеров под управлением ОС Windows&amp;lt;ref name=&amp;quot;kinect&amp;quot;&amp;gt; О MicriSoft Kinect [https://en.wikipedia.org/wiki/Kinect]&amp;lt;/ref&amp;gt;). Проекторы обычно работают в инфракрасном спектре, чтобы не мешать пользователям. Поскольку камера и проектор смещены друг относительно друга, то и полоски также будут смещаться пропорционально расстоянию до объекта. Измеряя это смещение, мы можем рассчитывать расстояние до объекта. Вполне понятны сложности, с которыми можно столкнуться при использовании этого метода: это необходимость настройки и калибровки проектора, и проблема того, что нам нужно относительно благоприятное освещение. К примеру, солнце может засветить полосы, и что-то распознать будет тяжело.&lt;br /&gt;
&lt;br /&gt;
== Построения карты глубины по стереопаре ==&lt;br /&gt;
&lt;br /&gt;
Идея, лежащая в основе построения карты глубины по '''стереопаре''', проста. Для каждой точки на одном изображении выполняется поиск [[Ключевые точки изображения|парной ей точки]]&amp;lt;sup&amp;gt;[на 21.01.21 не создан]&amp;lt;/sup&amp;gt; на другом изображении. А по паре соответствующих точек можно выполнить [[Триангуляция полигонов (ушная + монотонная)|триангуляцию]] и определить координаты их [[Отображения|прообраза]] в трехмерном пространстве. Зная трехмерные координаты прообраза, глубина вычисляется как расстояние до плоскости камеры.&lt;br /&gt;
&lt;br /&gt;
Парную точку нужно искать на эпиполярной&amp;lt;ref name=&amp;quot;Epipolar&amp;quot;&amp;gt;Информация о эпиполярной геометрии[https://ru.qaz.wiki/wiki/Epipolar_geometry]&amp;lt;/ref&amp;gt; линии. Соответственно, для упрощения поиска изображения выравнивают так, чтобы все эпиполярные линии были параллельны сторонам изображения (обычно горизонтальны). Более того, изображения выравнивают так, чтобы для точки с координатами &amp;lt;math&amp;gt;(x_0, y_0)&amp;lt;/math&amp;gt; соответствующая ей эпиполярная линия задавалась уравнением &amp;lt;math&amp;gt;x = x_0&amp;lt;/math&amp;gt;. Тогда для каждой точки, соответствующую ей парную точку, нужно искать в той-же строчке на изображении со второй камеры. Такой процесс выравнивания изображений называют '''ректификацией''' (rectification).&lt;br /&gt;
&lt;br /&gt;
[[Файл:Stereo.png|thumb|300px| Рисунок 2. Результат построения карты смещений по двум картинкам.&amp;lt;ref name=&amp;quot;img2&amp;quot;&amp;gt; &amp;quot;Основы стереозрения&amp;quot; Рис. 3 [https://habr.com/ru/post/130300/]&amp;lt;/ref&amp;gt;]]&lt;br /&gt;
&lt;br /&gt;
После того, как изображения '''ректифицированы''', выполняют поиск соответствующих пар точек. Для каждого пикселя одной картинки с координатами &amp;lt;math&amp;gt;(x_0, y_0)&amp;lt;/math&amp;gt; выполняется поиск пикселя на другой картинке. При этом предполагается, что пиксель на второй картинке должен иметь координаты &amp;lt;math&amp;gt;(x_0 - d, y_0)&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;d&amp;lt;/math&amp;gt; — величина называемая смещением. Поиск соответствующего пикселя выполняется путем вычисления максимума функции отклика, в качестве которой может выступать, например, [[Корреляция случайных величин|корреляция]] окрестностей пикселей. В результате получается карта смещений, пример которой приведен на рис. 2. &lt;br /&gt;
&lt;br /&gt;
Собственно значения глубины обратно пропорциональны величине смещения пикселей.&lt;br /&gt;
&lt;br /&gt;
== Использование нейронных сетей ==&lt;br /&gt;
&lt;br /&gt;
Существует множество методов, использующих нейронные сети. Приведём пару примеров таких решений.&lt;br /&gt;
&lt;br /&gt;
=== Построение с помощью свёрточных нейронных сетей ===&lt;br /&gt;
&lt;br /&gt;
Используем [[Сверточные нейронные сети|сверточные нейронные сети]] для построения карты глубины следующим образом&lt;br /&gt;
&amp;lt;ref name=&amp;quot;cnn_rew&amp;quot;&amp;gt; Xiaobai Ma, Zhenglin Geng, Zhi Bie &amp;quot;Depth Estimation from Single Image Using CNN-Residual Network&amp;quot; [http://cs231n.stanford.edu/reports/2017/pdfs/203.pdf]&amp;lt;/ref&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
*  '''Создаем карту смещений''': используя два изображения с камер, близко расположенных друг к другу, создаем карту различий, точно так же как в методе построения по стереопаре.&lt;br /&gt;
&lt;br /&gt;
* '''Ищем реальную карту глубины для обучения''': с помощью карты смещений, можем построить карту глубины &amp;lt;math&amp;gt;y&amp;lt;/math&amp;gt; вышеописанным способом. Также допустимы другие способы построения карты глубины для обучения нейронной сети.&lt;br /&gt;
&lt;br /&gt;
*  '''Функция потерь''': определим [[Функция потерь и эмпирический риск|функцию потерь]], для предсказанной карты &amp;lt;math&amp;gt;\hat y&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;d_i = log( y_i) - log (\hat y_i)&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;\lambda \in [0, 1]&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;n &amp;lt;/math&amp;gt; — количество пикселей. &amp;lt;math&amp;gt;L(y, \hat y) =  \frac{1}{n} \sum\limits_{i} d^2_i - \frac{\lambda}{n^2}(\sum\limits_{i} d_i)^2&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;y_i&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;\hat y_i&amp;lt;/math&amp;gt; это i пискель для для реальной карты глубин и для предсказанной карты, соответственно. Гиперпараметр &amp;lt;math&amp;gt;\lambda&amp;lt;/math&amp;gt;, нужен для того, чтобы функция потерь меньше росла при большом количестве пикселей, предсказание для которых достаточно близко к реальному. Например, если &amp;lt;math&amp;gt;\lambda = 0&amp;lt;/math&amp;gt;, то мы просто придём к оптимизации в L2 для &amp;lt;math&amp;gt;d_i&amp;lt;/math&amp;gt;, т.е. &amp;lt;math&amp;gt;L(y, \hat y) =  \frac{1}{n} \sum\limits_{i} d^2_i &amp;lt;/math&amp;gt;.&amp;lt;ref name=&amp;quot;loss&amp;quot;&amp;gt;David Eigen, Christian Puhrsch, Rob Fergus &amp;quot;Depth Map Prediction from a Single Imageusing a Multi-Scale Deep Network&amp;quot; стр. 5&amp;lt;/ref&amp;gt; &lt;br /&gt;
&lt;br /&gt;
* '''Обучение свёрточной нейронной сети''': далее идёт обычное обучение нейронной сети по карте различий путем обратного распространения ошибки, оптимизируя заданную выше функцию потерь.&lt;br /&gt;
&lt;br /&gt;
В итоге, по обученной нейронной сети мы можем создавать карту глубины, не проводя расчётов для поиска карт смещения и имея только изображение объекта или пространства. &amp;lt;ref name=&amp;quot;cnn&amp;quot;&amp;gt;Реализация, основанная на свёрточных нейронных сетях [https://www.kaggle.com/kmader/cnn-for-generating-depth-maps-from-rgb-images]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Также возможно использование усложнённых архитектур свёрточных нейронных сетей типа '''DenseNet'''.&lt;br /&gt;
&lt;br /&gt;
'''DenseNet'''&amp;lt;ref name=&amp;quot;DenseNet&amp;quot;&amp;gt;Оригинальная статья описывающая DenseNet [https://arxiv.org/abs/1611.09326]&amp;lt;/ref&amp;gt; {{---}} это свёрточная нейронные сеть, в которой выход каждого из слоев подаётся на вход всем слоям, лежащих ниже.&lt;br /&gt;
&lt;br /&gt;
=== Построение с помощью капсульных нейронных сетей ===&lt;br /&gt;
&lt;br /&gt;
Свёрточные нейронные сети способны регистрировать только наличие какого-либо объекта на картинке, не кодируя его ориентацию и положение. Но '''капсульные нейронные сети''' (англ. Capsule Neural Network)&amp;lt;ref name=&amp;quot;CapsNet&amp;quot;&amp;gt;Sara Sabour, Nicholas Frosst, Geoffrey E. Hinton &amp;quot;Dynamic Routing Between Capsules&amp;quot; [https://arxiv.org/pdf/1710.09829.pdf]&amp;lt;/ref&amp;gt; лишены этого недостатка.&lt;br /&gt;
&lt;br /&gt;
[[Файл:capsnet.jpg|thumb|400px| Рисунок 3. Структура капсульной нейронной сети &amp;lt;ref name=&amp;quot;img&amp;quot;&amp;gt; &amp;quot;Design and Investigation of Capsule Networks for Sentence Classification&amp;quot; Figure 2. [https://www.mdpi.com/2076-3417/9/11/2200/htm]&amp;lt;/ref&amp;gt;.]]&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Капсульная нейронная сеть&amp;quot; состоит из капсул или групп нейронов, чтобы идентифицировать закономерности в изображении. Эта информация поступает в виде векторов, содержащих ориентацию и положение узоров на изображении, которое затем принимается капсулами более высокого уровня. Капсулы более высокого уровня обрабатывают эту информацию из нескольких капсул более низкого уровня и впоследствии выдают прогноз. Капсулы одного уровня не имеют связей друг с другом и вычисляют информацию независимо друг от друга. Капсулы образуются путем разделения выходных данных из свёрточного слоя. Мы делим наш трехмерный вектор на капсулы методом &amp;quot;нарезания&amp;quot; таким образом, чтобы в каждой капсуле была информация о каждом пикселе, т.е. по трехмерной координате.&lt;br /&gt;
 &lt;br /&gt;
Состояние нейронов капсульной нейронной сети внутри изображения фиксирует свойство области или объекта внутри изображения: его положение и ориентацию.&lt;br /&gt;
&lt;br /&gt;
Использование капсульной нейронной сети аналогично использованию обычных свёрточных сетей, описанному выше. &lt;br /&gt;
В целом, данная сеть показывает более точные результаты предсказания глубины.&lt;br /&gt;
&lt;br /&gt;
=== Построение с помощью PlanetNet (2018)===&lt;br /&gt;
&lt;br /&gt;
Так же есть архитектуры, решающие данную задачу и без обучения на карте смещений, построенной с помощью двух изображений. Одной из таких является '''PlaneNet'''. &lt;br /&gt;
&lt;br /&gt;
'''PlaneNet'''&amp;lt;ref name=&amp;quot;planetNet&amp;quot;&amp;gt; Chen Liu, Jimei Yang, Duygu Ceylan, Ersin Yumer, Yasutaka Furukawa &amp;quot;PlaneNet: Piece-wise Planar Reconstruction from a Single RGB Image&amp;quot; [https://arxiv.org/abs/1804.06278v1]&amp;lt;/ref&amp;gt; {{---}} глубокая нейронная сеть, построенная на расширенных остаточных сетях (aнгл. Dilated Residual Networks или DRN)&amp;lt;ref name=&amp;quot;drn&amp;quot;&amp;gt; Fisher Yu, Vladlen Koltun, Thomas Funkhouser &amp;quot;Dilated Residual Networks&amp;quot; [https://arxiv.org/abs/1705.09914]&amp;lt;/ref&amp;gt;. Она получает карту глубин путем композиции выходов трех подзадач:&lt;br /&gt;
&lt;br /&gt;
[[Файл:Plane net2.jpg|thumb|500px| Рисунок 4. Прогнозируемые PlaneNet параметры по одной rgb картинке: cегметация плоскости, параметры плоскостей, неплоская карта глубины&amp;lt;ref name=&amp;quot;img4&amp;quot;&amp;gt; Chen Liu, Jimei Yang, Duygu Ceylan, Ersin Yumer, Yasutaka Furukawa &amp;quot;PlaneNet: Piece-wise Planar Reconstruction from a Single RGB Image&amp;quot; Figure 2.&amp;lt;/ref&amp;gt;.]]&lt;br /&gt;
&lt;br /&gt;
* '''Параметры плоскостей''': пытаемся предсказать количество плоскостей $K$, а после ищем на изображение $K$ плоских поверхностей, каждая поверхность задаётся тремя параметрами &amp;lt;math&amp;gt;P_i&amp;lt;/math&amp;gt;: нормальная, прямая и сдвиг. Функцию ошибки определим следующим образом: &amp;lt;math&amp;gt;L = \sum_{i=1}^{K} \min_{j \in [1, \hat K]} \| \hat P_j - P_i \|&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;\hat K, \hat P_i&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;K, P_i&amp;lt;/math&amp;gt;, предсказанные и реальные количество и параметры плоскостей, соответственно.&lt;br /&gt;
&lt;br /&gt;
* [[Сегментация изображений|'''Сегментация плоскости''']]: ищем группы пикселей, каждая из которых характеризует один смысловой объект.&lt;br /&gt;
&lt;br /&gt;
* '''Неплоская карта глубины''': ищем одно-канальную (или неплоскую) карту глубины, то есть карту глубины, где каждый пиксель, либо на глубине 0, либо на глубине 1.&lt;br /&gt;
Авторы обучали и тестировали данные на  NYUv2&amp;lt;ref&amp;gt;Датасет NYUv2[https://cs.nyu.edu/~silberman/datasets/nyu_depth_v2.html]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Обучение без учителя поиска карты глубины из видео (2017) ===&lt;br /&gt;
&lt;br /&gt;
Авторы данной статьи &amp;lt;ref name=&amp;quot;cvrp_dnn&amp;quot;&amp;gt;Tinghui Zhou, Matthew Brown, Noah Snavely, David G. Lowe &amp;quot;Unsupervised Learning of Depth and Ego-Motion from Video&amp;quot; [https://arxiv.org/abs/1704.07813v2]&amp;lt;/ref&amp;gt; предлагают методику оценки глубины одной картинки без учителя и движения камеры из беспорядочной видео нарезки. &lt;br /&gt;
&lt;br /&gt;
[[Файл:Dnn.jpeg|thumb|400px| Рисунок 5. Aрхитектура сети на базе DispNet  &amp;lt;ref name=&amp;quot;cvrp&amp;quot;&amp;gt;Tinghui Zhou, Matthew Brown, Noah Snavely, David G. Lowe &amp;quot;Unsupervised Learning of Depth and Ego-Motion from Video&amp;quot; Figure 4&amp;lt;/ref&amp;gt;]]&lt;br /&gt;
&lt;br /&gt;
Будем использовать сверточные нейронные сети c глубиной одного вида и многовидовой камерой из неупорядоченного видеоряда. Метод базируется на синтезе видов. Сеть загружает фото объекта в качестве данных ввода и выводит глубину пикселя. Вид объекта может быть синтезирован исходя из глубины на каждого пикселя снимка позиционирования и четкости ближнего вида. Синтез может быть  дифференцирован с CNN по геометрии и модулям позиционирования.&lt;br /&gt;
Авторы взяли на вооружение архитектуру DispNet&amp;lt;ref name=&amp;quot;dispNet&amp;quot;&amp;gt; Nikolaus Mayer, Eddy Ilg, Philip Hausser, Philipp Fischer &amp;quot;A Large Dataset to Train Convolutional Networks&lt;br /&gt;
for Disparity, Optical Flow, and Scene Flow Estimation&amp;quot; [https://arxiv.org/pdf/1512.02134.pdf]&amp;lt;/ref&amp;gt;, которая сконструирована в виде энкодера и декодера с пропущенными соединениями и многомасштабными блоками предсказания. Функция активации ReLU отслеживает все сверточные слои кроме предсказанных.&lt;br /&gt;
Вид объекта со всех источников формирует входные данные в сеть позиционной оценки. На выходе получается относительная позиция между видом объекта и видом каждого источника. Сеть состоит из двух 7 шаговых сверток за которым следует свертка 1 х 1. За исключением последнего слоя свертки, где применяется нелинейная активация, все другие отслеживаются функцией активации ReLU. Сеть объяснимых предсказаний дает доступ к первым пяти закодированным слоям сети позиционирования. За ней следуют 5 слоев обратной свертки с многомасштабными блоками предсказаний. Кроме слоев предсказаний все уровни свертки и обратной свертки отслеживаются ReLU. Авторы проверяли данную методику на KITTY&amp;lt;ref&amp;gt; Датасет kitty[http://www.cvlibs.net/datasets/kitti/]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Неконтролируемая оценка глубины монокуляра с консистенцией слева направо (2017) ===&lt;br /&gt;
&lt;br /&gt;
[[Файл:Samplers.jpg|thumb|240px| Рисунок 6. Примерная архитектура сети с консистенцией слева направо &amp;lt;ref name=&amp;quot;cvrp2017&amp;quot;&amp;gt;Clément Godard, Oisin Mac Aodha, Gabriel J. Brostow &amp;quot;Unsupervised Monocular Depth Estimation with Left-Right Consistency&amp;quot; Figure 3 &amp;lt;/ref&amp;gt;]]&lt;br /&gt;
&lt;br /&gt;
В данной работе&amp;lt;ref name=&amp;quot;leftrigth&amp;quot;&amp;gt; Clément Godard, Oisin Mac Aodha, Gabriel J. Brostow &amp;quot;Unsupervised Monocular Depth Estimation with Left-Right Consistency&amp;quot; [https://arxiv.org/abs/1609.03677v3]&amp;lt;/ref&amp;gt; предлагается сверточная нейронная сеть, обученная выполнять оценку глубины одного изображения без реальных данных. Авторы предлагают сетевую архитектуру, которая выполняет сквозную оценку глубины изображения, полученного с 1 камеры, без учителя, что обеспечивает согласованность глубины слева направо внутри сети.&lt;br /&gt;
Сеть оценивает глубину, выводя смещения, которые искажают левое изображение, чтобы соответствовать правому. Левое входное изображение используется для вывода смещений слева направо и справа налево. Сеть генерирует предсказанное изображение с обратным отображением с помощью билинейного сэмплера. Это приводит к полностью дифференциальной модели формирования изображения.&lt;br /&gt;
Сверточная архитектура вдохновлена так же DispNet'ом. Она состоит из двух частей—кодера и декодера. Декодер использует пропуск соединений из блоков активации кодера, чтобы распознавать детали с высоким разрешением. Сеть предсказывает две карты смещений — слева направо и справа налево.&lt;br /&gt;
В процессе обучения сеть генерирует изображение путем выборки пикселей из противоположного стереоизображения. Модель формирования изображения использует сэмплер изображений из пространственной трансформаторной сети (STN) для выборки входного изображения с помощью карты смещений. Авторы обучали и тестировали данные на KITTY.&lt;br /&gt;
&lt;br /&gt;
=== Прогнозирование глубины без датчиков: использование структуры для обучения без учителя по монокулярным видео (2019) ===&lt;br /&gt;
&lt;br /&gt;
[[Файл:ego-motion.png|thumb|500px| Рисунок 7. Сравнение обычного метода построения карты глубин с помощью эго-движения и предложенного в статье, который использует движения для различных 3-D объектов &amp;lt;ref name=&amp;quot;aaaif&amp;quot;&amp;gt;Vincent Casser, Soeren Pirk, Reza Mahjourian, Anelia Angelova &amp;quot;Depth Prediction Without the Sensors: Leveraging Structure for Unsupervised Learning from Monocular Videos&amp;quot; Figure 2 &amp;lt;/ref&amp;gt;]]&lt;br /&gt;
&lt;br /&gt;
'''Визуальная одометрия''' &amp;lt;ref name=&amp;quot;визуальная одометрия&amp;quot;&amp;gt;Статья о визуальной одометрии[https://en.wikipedia.org/wiki/Visual_odometry]&amp;lt;/ref&amp;gt; {{---}} метод оценки положения и ориентации робота или иного устройства в пространстве с помощью анализа последовательности изображений, снятых установленной на нем камерой.&lt;br /&gt;
&lt;br /&gt;
Данная статья &amp;lt;ref name=&amp;quot;aaai&amp;quot;&amp;gt; Vincent Casser, Soeren Pirk, Reza Mahjourian, Anelia Angelova &amp;quot;Depth Prediction Without the Sensors: Leveraging Structure for Unsupervised Learning from Monocular Videos&amp;quot; [https://arxiv.org/abs/1811.06152v1]&amp;lt;/ref&amp;gt; посвящена задаче обучения без учителя глубины сцены и визуальной одометрии робота, где наблюдение обеспечивается видеозаписями с одной камеры. Это делается путем введения геометрической структуры в процесс обучения. Он включает в себя моделирование сцены и отдельных объектов, одометрии камеры и движения объектов, изучаемых с помощью монокулярных видеовходов. Авторы вводят модель движения объекта, которая имеет ту же архитектуру, что и сеть определения визуальной одометрии. Она принимает последовательность изображений RGB в качестве входных данных и дополняется предварительно вычисленными масками сегментации экземпляров. Работа модели движения заключается в том, чтобы научиться предсказывать векторы трансформации каждого объекта в трехмерном пространстве. Это создает видимость наблюдаемого объекта в соответствующем целевом кадре. Авторы проверяли прогнозирование глубины на KITTY.&lt;br /&gt;
&lt;br /&gt;
== См. также ==&lt;br /&gt;
&lt;br /&gt;
* [[Компьютерное зрение]]&lt;br /&gt;
&lt;br /&gt;
* [[Оценка положения]]&lt;br /&gt;
&lt;br /&gt;
* [[Задача нахождения объектов на изображении]]&lt;br /&gt;
&lt;br /&gt;
== Примечания ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Источники информации ==&lt;br /&gt;
&lt;br /&gt;
* Чугунов Р. А., Кульневич А. Д., Аксенов С. В. Методика построения карт глубины стереоизображения с помощью капсульной нейронной сети //Доклады Томского государственного университета систем управления и радиоэлектроники. – 2019. – Т. 22. – №. 1.[https://cyberleninka.ru/article/n/metodika-postroeniya-kart-glubiny-stereoizobrazheniya-s-pomoschyu-kapsulnoy-neyronnoy-seti/viewer]&lt;br /&gt;
&lt;br /&gt;
* 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]&lt;br /&gt;
&lt;br /&gt;
*  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]&lt;br /&gt;
&lt;br /&gt;
* 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]&lt;br /&gt;
&lt;br /&gt;
* 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]&lt;br /&gt;
&lt;br /&gt;
[[Категория:Машинное обучение]]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Компьютерное зрение]]&lt;/div&gt;</summary>
		<author><name>Frak</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Dnn.jpeg&amp;diff=80367</id>
		<title>Файл:Dnn.jpeg</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Dnn.jpeg&amp;diff=80367"/>
				<updated>2021-01-23T14:06:32Z</updated>
		
		<summary type="html">&lt;p&gt;Frak: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Frak</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9A%D0%B0%D1%80%D1%82%D0%B0_%D0%B3%D0%BB%D1%83%D0%B1%D0%B8%D0%BD%D1%8B&amp;diff=80366</id>
		<title>Карта глубины</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9A%D0%B0%D1%80%D1%82%D0%B0_%D0%B3%D0%BB%D1%83%D0%B1%D0%B8%D0%BD%D1%8B&amp;diff=80366"/>
				<updated>2021-01-23T14:03:50Z</updated>
		
		<summary type="html">&lt;p&gt;Frak: /* Построение с помощью PlanetNet (2018) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Карта глубины''' (англ. depth map) — это изображение, где для каждого пикселя вместо цвета хранится его расстояние до камеры.&amp;lt;ref name=&amp;quot;def&amp;quot;&amp;gt;Alexey Kurakin &amp;quot;Основы стереозрения&amp;quot;[https://habr.com/ru/post/130300/]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В компьютерной 3D-графике и [[Компьютерное зрение|компьютерном зрении]] карта глубины представляет собой изображение или канал изображения, содержащий информацию о расстоянии поверхностей объектов сцены от точки обзора. &lt;br /&gt;
&lt;br /&gt;
== Мотивация ==&lt;br /&gt;
&lt;br /&gt;
Карта глубины изображения содержит в себе информацию о расстоянии между различными объектами или частями объектов, представленных на данном изображении. Эта информация может быть полезна во многих областях. &lt;br /&gt;
 &lt;br /&gt;
* Для создания 3D-сенсеров. Они способны строить трёхмерную картину своего окружения, используются для [[Оценка положения|ориентации]] автономного робота в пространстве.&lt;br /&gt;
&lt;br /&gt;
* Для систем, использующих технологии дополненной и виртуальной реальности. Например, камеры, которые фиксируют действия пользователя в видеоиграх с технологией виртуальной реальности.&lt;br /&gt;
&lt;br /&gt;
* В беспилотных автомобилях, которые также используют карты глубин для ориентации на дороге.&lt;br /&gt;
&lt;br /&gt;
* Для обработки фотографий. Например, карты глубин используют для размытия фона на фотографии, чтобы добиться более чёткого выделения человека&amp;lt;ref name=&amp;quot;expls&amp;quot;&amp;gt;Примеры из &amp;quot;Research Guide for Depth Estimation with Deep Learning&amp;quot;[https://www.kdnuggets.com/2019/11/research-guide-depth-estimation-deep-learning.html]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Методы построения карты глубины ==&lt;br /&gt;
&lt;br /&gt;
Карта глубины может быть получена с помощью '''специальной камеры глубины''', по '''стереопаре изображений''', а также с помощью [[Нейронные сети, перцептрон|'''нейронных сетей''']].&lt;br /&gt;
&lt;br /&gt;
== Построение с помощью специальных камер глубин == &lt;br /&gt;
&lt;br /&gt;
[[Файл:ToF.jpg|thumb|250px| Рисунок 1. Пример работы ToF-камеры.]]&lt;br /&gt;
&lt;br /&gt;
* '''ToF-камеры''' (англ. Time of Flight). Принцип работы данной камеры основан на измерении задержки света, с которой свет возвращается в каждую точку. Имея несколько сенсоров с разным временем накопления заряда и, зная сдвиг по времени относительно источника для каждого сенсора и снятой яркости вспышки, мы можем рассчитать сдвиг и, соответственно, расстояние до объекта. Причем чем больше сенсоров задействовано, тем выше точность метода.&lt;br /&gt;
&lt;br /&gt;
* '''Структурированные световые камеры''' (aнгл. Structured light camera). Принцип работы данной камеры один из самых старых. Ставим проектор, который создает, например, горизонтальные (а потом и вертикальные) полоски и рядом камеру, которая снимает картину с полосками. В некоторых вариантах используется псевдослучайный набор точек (например MS Kinect {{---}} бесконтактный сенсорный игровой контроллер, для консолей Xbox 360, Xbox One и персональных компьютеров под управлением ОС Windows&amp;lt;ref name=&amp;quot;kinect&amp;quot;&amp;gt; О MicriSoft Kinect [https://en.wikipedia.org/wiki/Kinect]&amp;lt;/ref&amp;gt;). Проекторы обычно работают в инфракрасном спектре, чтобы не мешать пользователям. Поскольку камера и проектор смещены друг относительно друга, то и полоски также будут смещаться пропорционально расстоянию до объекта. Измеряя это смещение, мы можем рассчитывать расстояние до объекта. Вполне понятны сложности, с которыми можно столкнуться при использовании этого метода: это необходимость настройки и калибровки проектора, и проблема того, что нам нужно относительно благоприятное освещение. К примеру, солнце может засветить полосы, и что-то распознать будет тяжело.&lt;br /&gt;
&lt;br /&gt;
== Построения карты глубины по стереопаре ==&lt;br /&gt;
&lt;br /&gt;
Идея, лежащая в основе построения карты глубины по '''стереопаре''', проста. Для каждой точки на одном изображении выполняется поиск [[Ключевые точки изображения|парной ей точки]]&amp;lt;sup&amp;gt;[на 21.01.21 не создан]&amp;lt;/sup&amp;gt; на другом изображении. А по паре соответствующих точек можно выполнить [[Триангуляция полигонов (ушная + монотонная)|триангуляцию]] и определить координаты их [[Отображения|прообраза]] в трехмерном пространстве. Зная трехмерные координаты прообраза, глубина вычисляется как расстояние до плоскости камеры.&lt;br /&gt;
&lt;br /&gt;
Парную точку нужно искать на эпиполярной&amp;lt;ref name=&amp;quot;Epipolar&amp;quot;&amp;gt;Информация о эпиполярной геометрии[https://ru.qaz.wiki/wiki/Epipolar_geometry]&amp;lt;/ref&amp;gt; линии. Соответственно, для упрощения поиска изображения выравнивают так, чтобы все эпиполярные линии были параллельны сторонам изображения (обычно горизонтальны). Более того, изображения выравнивают так, чтобы для точки с координатами &amp;lt;math&amp;gt;(x_0, y_0)&amp;lt;/math&amp;gt; соответствующая ей эпиполярная линия задавалась уравнением &amp;lt;math&amp;gt;x = x_0&amp;lt;/math&amp;gt;. Тогда для каждой точки, соответствующую ей парную точку, нужно искать в той-же строчке на изображении со второй камеры. Такой процесс выравнивания изображений называют '''ректификацией''' (rectification).&lt;br /&gt;
&lt;br /&gt;
[[Файл:Stereo.png|thumb|300px| Рисунок 2. Результат построения карты смещений по двум картинкам.&amp;lt;ref name=&amp;quot;img2&amp;quot;&amp;gt; &amp;quot;Основы стереозрения&amp;quot; Рис. 3 [https://habr.com/ru/post/130300/]&amp;lt;/ref&amp;gt;]]&lt;br /&gt;
&lt;br /&gt;
После того, как изображения '''ректифицированы''', выполняют поиск соответствующих пар точек. Для каждого пикселя одной картинки с координатами &amp;lt;math&amp;gt;(x_0, y_0)&amp;lt;/math&amp;gt; выполняется поиск пикселя на другой картинке. При этом предполагается, что пиксель на второй картинке должен иметь координаты &amp;lt;math&amp;gt;(x_0 - d, y_0)&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;d&amp;lt;/math&amp;gt; — величина называемая смещением. Поиск соответствующего пикселя выполняется путем вычисления максимума функции отклика, в качестве которой может выступать, например, [[Корреляция случайных величин|корреляция]] окрестностей пикселей. В результате получается карта смещений, пример которой приведен на рис. 2. &lt;br /&gt;
&lt;br /&gt;
Собственно значения глубины обратно пропорциональны величине смещения пикселей.&lt;br /&gt;
&lt;br /&gt;
== Использование нейронных сетей ==&lt;br /&gt;
&lt;br /&gt;
Существует множество методов, использующих нейронные сети. Приведём пару примеров таких решений.&lt;br /&gt;
&lt;br /&gt;
=== Построение с помощью свёрточных нейронных сетей ===&lt;br /&gt;
&lt;br /&gt;
Используем [[Сверточные нейронные сети|сверточные нейронные сети]] для построения карты глубины следующим образом&lt;br /&gt;
&amp;lt;ref name=&amp;quot;cnn_rew&amp;quot;&amp;gt; Xiaobai Ma, Zhenglin Geng, Zhi Bie &amp;quot;Depth Estimation from Single Image Using CNN-Residual Network&amp;quot; [http://cs231n.stanford.edu/reports/2017/pdfs/203.pdf]&amp;lt;/ref&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
*  '''Создаем карту смещений''': используя два изображения с камер, близко расположенных друг к другу, создаем карту различий, точно так же как в методе построения по стереопаре.&lt;br /&gt;
&lt;br /&gt;
* '''Ищем реальную карту глубины для обучения''': с помощью карты смещений, можем построить карту глубины &amp;lt;math&amp;gt;y&amp;lt;/math&amp;gt; вышеописанным способом. Также допустимы другие способы построения карты глубины для обучения нейронной сети.&lt;br /&gt;
&lt;br /&gt;
*  '''Функция потерь''': определим [[Функция потерь и эмпирический риск|функцию потерь]], для предсказанной карты &amp;lt;math&amp;gt;\hat y&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;d_i = log( y_i) - log (\hat y_i)&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;\lambda \in [0, 1]&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;n &amp;lt;/math&amp;gt; — количество пикселей. &amp;lt;math&amp;gt;L(y, \hat y) =  \frac{1}{n} \sum\limits_{i} d^2_i - \frac{\lambda}{n^2}(\sum\limits_{i} d_i)^2&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;y_i&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;\hat y_i&amp;lt;/math&amp;gt; это i пискель для для реальной карты глубин и для предсказанной карты, соответственно. Гиперпараметр &amp;lt;math&amp;gt;\lambda&amp;lt;/math&amp;gt;, нужен для того, чтобы функция потерь меньше росла при большом количестве пикселей, предсказание для которых достаточно близко к реальному. Например, если &amp;lt;math&amp;gt;\lambda = 0&amp;lt;/math&amp;gt;, то мы просто придём к оптимизации в L2 для &amp;lt;math&amp;gt;d_i&amp;lt;/math&amp;gt;, т.е. &amp;lt;math&amp;gt;L(y, \hat y) =  \frac{1}{n} \sum\limits_{i} d^2_i &amp;lt;/math&amp;gt;.&amp;lt;ref name=&amp;quot;loss&amp;quot;&amp;gt;David Eigen, Christian Puhrsch, Rob Fergus &amp;quot;Depth Map Prediction from a Single Imageusing a Multi-Scale Deep Network&amp;quot; стр. 5&amp;lt;/ref&amp;gt; &lt;br /&gt;
&lt;br /&gt;
* '''Обучение свёрточной нейронной сети''': далее идёт обычное обучение нейронной сети по карте различий путем обратного распространения ошибки, оптимизируя заданную выше функцию потерь.&lt;br /&gt;
&lt;br /&gt;
В итоге, по обученной нейронной сети мы можем создавать карту глубины, не проводя расчётов для поиска карт смещения и имея только изображение объекта или пространства. &amp;lt;ref name=&amp;quot;cnn&amp;quot;&amp;gt;Реализация, основанная на свёрточных нейронных сетях [https://www.kaggle.com/kmader/cnn-for-generating-depth-maps-from-rgb-images]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Также возможно использование усложнённых архитектур свёрточных нейронных сетей типа '''DenseNet'''.&lt;br /&gt;
&lt;br /&gt;
'''DenseNet'''&amp;lt;ref name=&amp;quot;DenseNet&amp;quot;&amp;gt;Оригинальная статья описывающая DenseNet [https://arxiv.org/abs/1611.09326]&amp;lt;/ref&amp;gt; {{---}} это свёрточная нейронные сеть, в которой выход каждого из слоев подаётся на вход всем слоям, лежащих ниже.&lt;br /&gt;
&lt;br /&gt;
=== Построение с помощью капсульных нейронных сетей ===&lt;br /&gt;
&lt;br /&gt;
Свёрточные нейронные сети способны регистрировать только наличие какого-либо объекта на картинке, не кодируя его ориентацию и положение. Но '''капсульные нейронные сети''' (англ. Capsule Neural Network)&amp;lt;ref name=&amp;quot;CapsNet&amp;quot;&amp;gt;Sara Sabour, Nicholas Frosst, Geoffrey E. Hinton &amp;quot;Dynamic Routing Between Capsules&amp;quot; [https://arxiv.org/pdf/1710.09829.pdf]&amp;lt;/ref&amp;gt; лишены этого недостатка.&lt;br /&gt;
&lt;br /&gt;
[[Файл:capsnet.jpg|thumb|400px| Рисунок 3. Структура капсульной нейронной сети &amp;lt;ref name=&amp;quot;img&amp;quot;&amp;gt; &amp;quot;Design and Investigation of Capsule Networks for Sentence Classification&amp;quot; Figure 2. [https://www.mdpi.com/2076-3417/9/11/2200/htm]&amp;lt;/ref&amp;gt;.]]&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Капсульная нейронная сеть&amp;quot; состоит из капсул или групп нейронов, чтобы идентифицировать закономерности в изображении. Эта информация поступает в виде векторов, содержащих ориентацию и положение узоров на изображении, которое затем принимается капсулами более высокого уровня. Капсулы более высокого уровня обрабатывают эту информацию из нескольких капсул более низкого уровня и впоследствии выдают прогноз. Капсулы одного уровня не имеют связей друг с другом и вычисляют информацию независимо друг от друга. Капсулы образуются путем разделения выходных данных из свёрточного слоя. Мы делим наш трехмерный вектор на капсулы методом &amp;quot;нарезания&amp;quot; таким образом, чтобы в каждой капсуле была информация о каждом пикселе, т.е. по трехмерной координате.&lt;br /&gt;
 &lt;br /&gt;
Состояние нейронов капсульной нейронной сети внутри изображения фиксирует свойство области или объекта внутри изображения: его положение и ориентацию.&lt;br /&gt;
&lt;br /&gt;
Использование капсульной нейронной сети аналогично использованию обычных свёрточных сетей, описанному выше. &lt;br /&gt;
В целом, данная сеть показывает более точные результаты предсказания глубины.&lt;br /&gt;
&lt;br /&gt;
=== Построение с помощью PlanetNet (2018)===&lt;br /&gt;
&lt;br /&gt;
Так же есть архитектуры, решающие данную задачу и без обучения на карте смещений, построенной с помощью двух изображений. Одной из таких является '''PlaneNet'''. &lt;br /&gt;
&lt;br /&gt;
'''PlaneNet'''&amp;lt;ref name=&amp;quot;planetNet&amp;quot;&amp;gt; Chen Liu, Jimei Yang, Duygu Ceylan, Ersin Yumer, Yasutaka Furukawa &amp;quot;PlaneNet: Piece-wise Planar Reconstruction from a Single RGB Image&amp;quot; [https://arxiv.org/abs/1804.06278v1]&amp;lt;/ref&amp;gt; {{---}} глубокая нейронная сеть, построенная на расширенных остаточных сетях (aнгл. Dilated Residual Networks или DRN)&amp;lt;ref name=&amp;quot;drn&amp;quot;&amp;gt; Fisher Yu, Vladlen Koltun, Thomas Funkhouser &amp;quot;Dilated Residual Networks&amp;quot; [https://arxiv.org/abs/1705.09914]&amp;lt;/ref&amp;gt;. Она получает карту глубин путем композиции выходов трех подзадач:&lt;br /&gt;
&lt;br /&gt;
[[Файл:Plane net2.jpg|thumb|500px| Рисунок 4. Прогнозируемые PlaneNet параметры по одной rgb картинке: cегметация плоскости, параметры плоскостей, неплоская карта глубины&amp;lt;ref name=&amp;quot;img4&amp;quot;&amp;gt; Chen Liu, Jimei Yang, Duygu Ceylan, Ersin Yumer, Yasutaka Furukawa &amp;quot;PlaneNet: Piece-wise Planar Reconstruction from a Single RGB Image&amp;quot; Figure 2.&amp;lt;/ref&amp;gt;.]]&lt;br /&gt;
&lt;br /&gt;
* '''Параметры плоскостей''': пытаемся предсказать количество плоскостей $K$, а после ищем на изображение $K$ плоских поверхностей, каждая поверхность задаётся тремя параметрами &amp;lt;math&amp;gt;P_i&amp;lt;/math&amp;gt;: нормальная, прямая и сдвиг. Функцию ошибки определим следующим образом: &amp;lt;math&amp;gt;L = \sum_{i=1}^{K} \min_{j \in [1, \hat K]} \| \hat P_j - P_i \|&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;\hat K, \hat P_i&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;K, P_i&amp;lt;/math&amp;gt;, предсказанные и реальные количество и параметры плоскостей, соответственно.&lt;br /&gt;
&lt;br /&gt;
* [[Сегментация изображений|'''Сегментация плоскости''']]: ищем группы пикселей, каждая из которых характеризует один смысловой объект.&lt;br /&gt;
&lt;br /&gt;
* '''Неплоская карта глубины''': ищем одно-канальную (или неплоскую) карту глубины, то есть карту глубины, где каждый пиксель, либо на глубине 0, либо на глубине 1.&lt;br /&gt;
Авторы обучали и тестировали данные на  NYUv2&amp;lt;ref&amp;gt;Датасет NYUv2[https://cs.nyu.edu/~silberman/datasets/nyu_depth_v2.html]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Обучение без учителя поиска карты глубины из видео (2017) ===&lt;br /&gt;
&lt;br /&gt;
Авторы данной статьи &amp;lt;ref name=&amp;quot;cvrp_dnn&amp;quot;&amp;gt;Tinghui Zhou, Matthew Brown, Noah Snavely, David G. Lowe &amp;quot;Unsupervised Learning of Depth and Ego-Motion from Video&amp;quot; [https://arxiv.org/abs/1704.07813v2]&amp;lt;/ref&amp;gt; предлагают методику оценки глубины одной картинки без учителя и движения камеры из беспорядочной видео нарезки. &lt;br /&gt;
&lt;br /&gt;
[[Файл:dnn.png|thumb|400px| Рисунок 5. Aрхитектура сети на базе DispNet  &amp;lt;ref name=&amp;quot;cvrp&amp;quot;&amp;gt;Tinghui Zhou, Matthew Brown, Noah Snavely, David G. Lowe &amp;quot;Unsupervised Learning of Depth and Ego-Motion from Video&amp;quot; Figure 4&amp;lt;/ref&amp;gt;]]&lt;br /&gt;
&lt;br /&gt;
Будем использовать сверточные нейронные сети c глубиной одного вида и многовидовой камерой из неупорядоченного видеоряда. Метод базируется на синтезе видов. Сеть загружает фото объекта в качестве данных ввода и выводит глубину пикселя. Вид объекта может быть синтезирован исходя из глубины на каждого пикселя снимка позиционирования и четкости ближнего вида. Синтез может быть  дифференцирован с CNN по геометрии и модулям позиционирования.&lt;br /&gt;
Авторы взяли на вооружение архитектуру DispNet&amp;lt;ref name=&amp;quot;dispNet&amp;quot;&amp;gt; Nikolaus Mayer, Eddy Ilg, Philip Hausser, Philipp Fischer &amp;quot;A Large Dataset to Train Convolutional Networks&lt;br /&gt;
for Disparity, Optical Flow, and Scene Flow Estimation&amp;quot; [https://arxiv.org/pdf/1512.02134.pdf]&amp;lt;/ref&amp;gt;, которая сконструирована в виде энкодера и декодера с пропущенными соединениями и многомасштабными блоками предсказания. Функция активации ReLU отслеживает все сверточные слои кроме предсказанных.&lt;br /&gt;
Вид объекта со всех источников формирует входные данные в сеть позиционной оценки. На выходе получается относительная позиция между видом объекта и видом каждого источника. Сеть состоит из двух 7 шаговых сверток за которым следует свертка 1 х 1. За исключением последнего слоя свертки, где применяется нелинейная активация, все другие отслеживаются функцией активации ReLU. Сеть объяснимых предсказаний дает доступ к первым пяти закодированным слоям сети позиционирования. За ней следуют 5 слоев обратной свертки с многомасштабными блоками предсказаний. Кроме слоев предсказаний все уровни свертки и обратной свертки отслеживаются ReLU. Авторы проверяли данную методику на KITTY&amp;lt;ref&amp;gt; Датасет kitty[http://www.cvlibs.net/datasets/kitti/]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Неконтролируемая оценка глубины монокуляра с консистенцией слева направо (2017) ===&lt;br /&gt;
&lt;br /&gt;
[[Файл:Samplers.jpg|thumb|240px| Рисунок 6. Примерная архитектура сети с консистенцией слева направо &amp;lt;ref name=&amp;quot;cvrp2017&amp;quot;&amp;gt;Clément Godard, Oisin Mac Aodha, Gabriel J. Brostow &amp;quot;Unsupervised Monocular Depth Estimation with Left-Right Consistency&amp;quot; Figure 3 &amp;lt;/ref&amp;gt;]]&lt;br /&gt;
&lt;br /&gt;
В данной работе&amp;lt;ref name=&amp;quot;leftrigth&amp;quot;&amp;gt; Clément Godard, Oisin Mac Aodha, Gabriel J. Brostow &amp;quot;Unsupervised Monocular Depth Estimation with Left-Right Consistency&amp;quot; [https://arxiv.org/abs/1609.03677v3]&amp;lt;/ref&amp;gt; предлагается сверточная нейронная сеть, обученная выполнять оценку глубины одного изображения без реальных данных. Авторы предлагают сетевую архитектуру, которая выполняет сквозную оценку глубины изображения, полученного с 1 камеры, без учителя, что обеспечивает согласованность глубины слева направо внутри сети.&lt;br /&gt;
Сеть оценивает глубину, выводя смещения, которые искажают левое изображение, чтобы соответствовать правому. Левое входное изображение используется для вывода смещений слева направо и справа налево. Сеть генерирует предсказанное изображение с обратным отображением с помощью билинейного сэмплера. Это приводит к полностью дифференциальной модели формирования изображения.&lt;br /&gt;
Сверточная архитектура вдохновлена так же DispNet'ом. Она состоит из двух частей—кодера и декодера. Декодер использует пропуск соединений из блоков активации кодера, чтобы распознавать детали с высоким разрешением. Сеть предсказывает две карты смещений — слева направо и справа налево.&lt;br /&gt;
В процессе обучения сеть генерирует изображение путем выборки пикселей из противоположного стереоизображения. Модель формирования изображения использует сэмплер изображений из пространственной трансформаторной сети (STN) для выборки входного изображения с помощью карты смещений. Авторы обучали и тестировали данные на KITTY.&lt;br /&gt;
&lt;br /&gt;
=== Прогнозирование глубины без датчиков: использование структуры для обучения без учителя по монокулярным видео (2019) ===&lt;br /&gt;
&lt;br /&gt;
[[Файл:ego-motion.png|thumb|500px| Рисунок 7. Сравнение обычного метода построения карты глубин с помощью эго-движения и предложенного в статье, который использует движения для различных 3-D объектов &amp;lt;ref name=&amp;quot;aaaif&amp;quot;&amp;gt;Vincent Casser, Soeren Pirk, Reza Mahjourian, Anelia Angelova &amp;quot;Depth Prediction Without the Sensors: Leveraging Structure for Unsupervised Learning from Monocular Videos&amp;quot; Figure 2 &amp;lt;/ref&amp;gt;]]&lt;br /&gt;
&lt;br /&gt;
'''Визуальная одометрия''' &amp;lt;ref name=&amp;quot;визуальная одометрия&amp;quot;&amp;gt;Статья о визуальной одометрии[https://en.wikipedia.org/wiki/Visual_odometry]&amp;lt;/ref&amp;gt; {{---}} метод оценки положения и ориентации робота или иного устройства в пространстве с помощью анализа последовательности изображений, снятых установленной на нем камерой.&lt;br /&gt;
&lt;br /&gt;
Данная статья &amp;lt;ref name=&amp;quot;aaai&amp;quot;&amp;gt; Vincent Casser, Soeren Pirk, Reza Mahjourian, Anelia Angelova &amp;quot;Depth Prediction Without the Sensors: Leveraging Structure for Unsupervised Learning from Monocular Videos&amp;quot; [https://arxiv.org/abs/1811.06152v1]&amp;lt;/ref&amp;gt; посвящена задаче обучения без учителя глубины сцены и визуальной одометрии робота, где наблюдение обеспечивается видеозаписями с одной камеры. Это делается путем введения геометрической структуры в процесс обучения. Он включает в себя моделирование сцены и отдельных объектов, одометрии камеры и движения объектов, изучаемых с помощью монокулярных видеовходов. Авторы вводят модель движения объекта, которая имеет ту же архитектуру, что и сеть определения визуальной одометрии. Она принимает последовательность изображений RGB в качестве входных данных и дополняется предварительно вычисленными масками сегментации экземпляров. Работа модели движения заключается в том, чтобы научиться предсказывать векторы трансформации каждого объекта в трехмерном пространстве. Это создает видимость наблюдаемого объекта в соответствующем целевом кадре. Авторы проверяли прогнозирование глубины на KITTY.&lt;br /&gt;
&lt;br /&gt;
== См. также ==&lt;br /&gt;
&lt;br /&gt;
* [[Компьютерное зрение]]&lt;br /&gt;
&lt;br /&gt;
* [[Оценка положения]]&lt;br /&gt;
&lt;br /&gt;
* [[Задача нахождения объектов на изображении]]&lt;br /&gt;
&lt;br /&gt;
== Примечания ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Источники информации ==&lt;br /&gt;
&lt;br /&gt;
* Чугунов Р. А., Кульневич А. Д., Аксенов С. В. Методика построения карт глубины стереоизображения с помощью капсульной нейронной сети //Доклады Томского государственного университета систем управления и радиоэлектроники. – 2019. – Т. 22. – №. 1.[https://cyberleninka.ru/article/n/metodika-postroeniya-kart-glubiny-stereoizobrazheniya-s-pomoschyu-kapsulnoy-neyronnoy-seti/viewer]&lt;br /&gt;
&lt;br /&gt;
* 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]&lt;br /&gt;
&lt;br /&gt;
*  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]&lt;br /&gt;
&lt;br /&gt;
* 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]&lt;br /&gt;
&lt;br /&gt;
* 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]&lt;br /&gt;
&lt;br /&gt;
[[Категория:Машинное обучение]]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Компьютерное зрение]]&lt;/div&gt;</summary>
		<author><name>Frak</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Plane_net2.jpg&amp;diff=80365</id>
		<title>Файл:Plane net2.jpg</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Plane_net2.jpg&amp;diff=80365"/>
				<updated>2021-01-23T14:03:21Z</updated>
		
		<summary type="html">&lt;p&gt;Frak: Frak загрузил новую версию Файл:Plane net2.jpg&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Frak</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9A%D0%B0%D1%80%D1%82%D0%B0_%D0%B3%D0%BB%D1%83%D0%B1%D0%B8%D0%BD%D1%8B&amp;diff=80362</id>
		<title>Карта глубины</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9A%D0%B0%D1%80%D1%82%D0%B0_%D0%B3%D0%BB%D1%83%D0%B1%D0%B8%D0%BD%D1%8B&amp;diff=80362"/>
				<updated>2021-01-23T13:59:56Z</updated>
		
		<summary type="html">&lt;p&gt;Frak: /* Построение с помощью PlanetNet (2018) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Карта глубины''' (англ. depth map) — это изображение, где для каждого пикселя вместо цвета хранится его расстояние до камеры.&amp;lt;ref name=&amp;quot;def&amp;quot;&amp;gt;Alexey Kurakin &amp;quot;Основы стереозрения&amp;quot;[https://habr.com/ru/post/130300/]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В компьютерной 3D-графике и [[Компьютерное зрение|компьютерном зрении]] карта глубины представляет собой изображение или канал изображения, содержащий информацию о расстоянии поверхностей объектов сцены от точки обзора. &lt;br /&gt;
&lt;br /&gt;
== Мотивация ==&lt;br /&gt;
&lt;br /&gt;
Карта глубины изображения содержит в себе информацию о расстоянии между различными объектами или частями объектов, представленных на данном изображении. Эта информация может быть полезна во многих областях. &lt;br /&gt;
 &lt;br /&gt;
* Для создания 3D-сенсеров. Они способны строить трёхмерную картину своего окружения, используются для [[Оценка положения|ориентации]] автономного робота в пространстве.&lt;br /&gt;
&lt;br /&gt;
* Для систем, использующих технологии дополненной и виртуальной реальности. Например, камеры, которые фиксируют действия пользователя в видеоиграх с технологией виртуальной реальности.&lt;br /&gt;
&lt;br /&gt;
* В беспилотных автомобилях, которые также используют карты глубин для ориентации на дороге.&lt;br /&gt;
&lt;br /&gt;
* Для обработки фотографий. Например, карты глубин используют для размытия фона на фотографии, чтобы добиться более чёткого выделения человека&amp;lt;ref name=&amp;quot;expls&amp;quot;&amp;gt;Примеры из &amp;quot;Research Guide for Depth Estimation with Deep Learning&amp;quot;[https://www.kdnuggets.com/2019/11/research-guide-depth-estimation-deep-learning.html]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Методы построения карты глубины ==&lt;br /&gt;
&lt;br /&gt;
Карта глубины может быть получена с помощью '''специальной камеры глубины''', по '''стереопаре изображений''', а также с помощью [[Нейронные сети, перцептрон|'''нейронных сетей''']].&lt;br /&gt;
&lt;br /&gt;
== Построение с помощью специальных камер глубин == &lt;br /&gt;
&lt;br /&gt;
[[Файл:ToF.jpg|thumb|250px| Рисунок 1. Пример работы ToF-камеры.]]&lt;br /&gt;
&lt;br /&gt;
* '''ToF-камеры''' (англ. Time of Flight). Принцип работы данной камеры основан на измерении задержки света, с которой свет возвращается в каждую точку. Имея несколько сенсоров с разным временем накопления заряда и, зная сдвиг по времени относительно источника для каждого сенсора и снятой яркости вспышки, мы можем рассчитать сдвиг и, соответственно, расстояние до объекта. Причем чем больше сенсоров задействовано, тем выше точность метода.&lt;br /&gt;
&lt;br /&gt;
* '''Структурированные световые камеры''' (aнгл. Structured light camera). Принцип работы данной камеры один из самых старых. Ставим проектор, который создает, например, горизонтальные (а потом и вертикальные) полоски и рядом камеру, которая снимает картину с полосками. В некоторых вариантах используется псевдослучайный набор точек (например MS Kinect {{---}} бесконтактный сенсорный игровой контроллер, для консолей Xbox 360, Xbox One и персональных компьютеров под управлением ОС Windows&amp;lt;ref name=&amp;quot;kinect&amp;quot;&amp;gt; О MicriSoft Kinect [https://en.wikipedia.org/wiki/Kinect]&amp;lt;/ref&amp;gt;). Проекторы обычно работают в инфракрасном спектре, чтобы не мешать пользователям. Поскольку камера и проектор смещены друг относительно друга, то и полоски также будут смещаться пропорционально расстоянию до объекта. Измеряя это смещение, мы можем рассчитывать расстояние до объекта. Вполне понятны сложности, с которыми можно столкнуться при использовании этого метода: это необходимость настройки и калибровки проектора, и проблема того, что нам нужно относительно благоприятное освещение. К примеру, солнце может засветить полосы, и что-то распознать будет тяжело.&lt;br /&gt;
&lt;br /&gt;
== Построения карты глубины по стереопаре ==&lt;br /&gt;
&lt;br /&gt;
Идея, лежащая в основе построения карты глубины по '''стереопаре''', проста. Для каждой точки на одном изображении выполняется поиск [[Ключевые точки изображения|парной ей точки]]&amp;lt;sup&amp;gt;[на 21.01.21 не создан]&amp;lt;/sup&amp;gt; на другом изображении. А по паре соответствующих точек можно выполнить [[Триангуляция полигонов (ушная + монотонная)|триангуляцию]] и определить координаты их [[Отображения|прообраза]] в трехмерном пространстве. Зная трехмерные координаты прообраза, глубина вычисляется как расстояние до плоскости камеры.&lt;br /&gt;
&lt;br /&gt;
Парную точку нужно искать на эпиполярной&amp;lt;ref name=&amp;quot;Epipolar&amp;quot;&amp;gt;Информация о эпиполярной геометрии[https://ru.qaz.wiki/wiki/Epipolar_geometry]&amp;lt;/ref&amp;gt; линии. Соответственно, для упрощения поиска изображения выравнивают так, чтобы все эпиполярные линии были параллельны сторонам изображения (обычно горизонтальны). Более того, изображения выравнивают так, чтобы для точки с координатами &amp;lt;math&amp;gt;(x_0, y_0)&amp;lt;/math&amp;gt; соответствующая ей эпиполярная линия задавалась уравнением &amp;lt;math&amp;gt;x = x_0&amp;lt;/math&amp;gt;. Тогда для каждой точки, соответствующую ей парную точку, нужно искать в той-же строчке на изображении со второй камеры. Такой процесс выравнивания изображений называют '''ректификацией''' (rectification).&lt;br /&gt;
&lt;br /&gt;
[[Файл:Stereo.png|thumb|300px| Рисунок 2. Результат построения карты смещений по двум картинкам.&amp;lt;ref name=&amp;quot;img2&amp;quot;&amp;gt; &amp;quot;Основы стереозрения&amp;quot; Рис. 3 [https://habr.com/ru/post/130300/]&amp;lt;/ref&amp;gt;]]&lt;br /&gt;
&lt;br /&gt;
После того, как изображения '''ректифицированы''', выполняют поиск соответствующих пар точек. Для каждого пикселя одной картинки с координатами &amp;lt;math&amp;gt;(x_0, y_0)&amp;lt;/math&amp;gt; выполняется поиск пикселя на другой картинке. При этом предполагается, что пиксель на второй картинке должен иметь координаты &amp;lt;math&amp;gt;(x_0 - d, y_0)&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;d&amp;lt;/math&amp;gt; — величина называемая смещением. Поиск соответствующего пикселя выполняется путем вычисления максимума функции отклика, в качестве которой может выступать, например, [[Корреляция случайных величин|корреляция]] окрестностей пикселей. В результате получается карта смещений, пример которой приведен на рис. 2. &lt;br /&gt;
&lt;br /&gt;
Собственно значения глубины обратно пропорциональны величине смещения пикселей.&lt;br /&gt;
&lt;br /&gt;
== Использование нейронных сетей ==&lt;br /&gt;
&lt;br /&gt;
Существует множество методов, использующих нейронные сети. Приведём пару примеров таких решений.&lt;br /&gt;
&lt;br /&gt;
=== Построение с помощью свёрточных нейронных сетей ===&lt;br /&gt;
&lt;br /&gt;
Используем [[Сверточные нейронные сети|сверточные нейронные сети]] для построения карты глубины следующим образом&lt;br /&gt;
&amp;lt;ref name=&amp;quot;cnn_rew&amp;quot;&amp;gt; Xiaobai Ma, Zhenglin Geng, Zhi Bie &amp;quot;Depth Estimation from Single Image Using CNN-Residual Network&amp;quot; [http://cs231n.stanford.edu/reports/2017/pdfs/203.pdf]&amp;lt;/ref&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
*  '''Создаем карту смещений''': используя два изображения с камер, близко расположенных друг к другу, создаем карту различий, точно так же как в методе построения по стереопаре.&lt;br /&gt;
&lt;br /&gt;
* '''Ищем реальную карту глубины для обучения''': с помощью карты смещений, можем построить карту глубины &amp;lt;math&amp;gt;y&amp;lt;/math&amp;gt; вышеописанным способом. Также допустимы другие способы построения карты глубины для обучения нейронной сети.&lt;br /&gt;
&lt;br /&gt;
*  '''Функция потерь''': определим [[Функция потерь и эмпирический риск|функцию потерь]], для предсказанной карты &amp;lt;math&amp;gt;\hat y&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;d_i = log( y_i) - log (\hat y_i)&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;\lambda \in [0, 1]&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;n &amp;lt;/math&amp;gt; — количество пикселей. &amp;lt;math&amp;gt;L(y, \hat y) =  \frac{1}{n} \sum\limits_{i} d^2_i - \frac{\lambda}{n^2}(\sum\limits_{i} d_i)^2&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;y_i&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;\hat y_i&amp;lt;/math&amp;gt; это i пискель для для реальной карты глубин и для предсказанной карты, соответственно. Гиперпараметр &amp;lt;math&amp;gt;\lambda&amp;lt;/math&amp;gt;, нужен для того, чтобы функция потерь меньше росла при большом количестве пикселей, предсказание для которых достаточно близко к реальному. Например, если &amp;lt;math&amp;gt;\lambda = 0&amp;lt;/math&amp;gt;, то мы просто придём к оптимизации в L2 для &amp;lt;math&amp;gt;d_i&amp;lt;/math&amp;gt;, т.е. &amp;lt;math&amp;gt;L(y, \hat y) =  \frac{1}{n} \sum\limits_{i} d^2_i &amp;lt;/math&amp;gt;.&amp;lt;ref name=&amp;quot;loss&amp;quot;&amp;gt;David Eigen, Christian Puhrsch, Rob Fergus &amp;quot;Depth Map Prediction from a Single Imageusing a Multi-Scale Deep Network&amp;quot; стр. 5&amp;lt;/ref&amp;gt; &lt;br /&gt;
&lt;br /&gt;
* '''Обучение свёрточной нейронной сети''': далее идёт обычное обучение нейронной сети по карте различий путем обратного распространения ошибки, оптимизируя заданную выше функцию потерь.&lt;br /&gt;
&lt;br /&gt;
В итоге, по обученной нейронной сети мы можем создавать карту глубины, не проводя расчётов для поиска карт смещения и имея только изображение объекта или пространства. &amp;lt;ref name=&amp;quot;cnn&amp;quot;&amp;gt;Реализация, основанная на свёрточных нейронных сетях [https://www.kaggle.com/kmader/cnn-for-generating-depth-maps-from-rgb-images]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Также возможно использование усложнённых архитектур свёрточных нейронных сетей типа '''DenseNet'''.&lt;br /&gt;
&lt;br /&gt;
'''DenseNet'''&amp;lt;ref name=&amp;quot;DenseNet&amp;quot;&amp;gt;Оригинальная статья описывающая DenseNet [https://arxiv.org/abs/1611.09326]&amp;lt;/ref&amp;gt; {{---}} это свёрточная нейронные сеть, в которой выход каждого из слоев подаётся на вход всем слоям, лежащих ниже.&lt;br /&gt;
&lt;br /&gt;
=== Построение с помощью капсульных нейронных сетей ===&lt;br /&gt;
&lt;br /&gt;
Свёрточные нейронные сети способны регистрировать только наличие какого-либо объекта на картинке, не кодируя его ориентацию и положение. Но '''капсульные нейронные сети''' (англ. Capsule Neural Network)&amp;lt;ref name=&amp;quot;CapsNet&amp;quot;&amp;gt;Sara Sabour, Nicholas Frosst, Geoffrey E. Hinton &amp;quot;Dynamic Routing Between Capsules&amp;quot; [https://arxiv.org/pdf/1710.09829.pdf]&amp;lt;/ref&amp;gt; лишены этого недостатка.&lt;br /&gt;
&lt;br /&gt;
[[Файл:capsnet.jpg|thumb|400px| Рисунок 3. Структура капсульной нейронной сети &amp;lt;ref name=&amp;quot;img&amp;quot;&amp;gt; &amp;quot;Design and Investigation of Capsule Networks for Sentence Classification&amp;quot; Figure 2. [https://www.mdpi.com/2076-3417/9/11/2200/htm]&amp;lt;/ref&amp;gt;.]]&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Капсульная нейронная сеть&amp;quot; состоит из капсул или групп нейронов, чтобы идентифицировать закономерности в изображении. Эта информация поступает в виде векторов, содержащих ориентацию и положение узоров на изображении, которое затем принимается капсулами более высокого уровня. Капсулы более высокого уровня обрабатывают эту информацию из нескольких капсул более низкого уровня и впоследствии выдают прогноз. Капсулы одного уровня не имеют связей друг с другом и вычисляют информацию независимо друг от друга. Капсулы образуются путем разделения выходных данных из свёрточного слоя. Мы делим наш трехмерный вектор на капсулы методом &amp;quot;нарезания&amp;quot; таким образом, чтобы в каждой капсуле была информация о каждом пикселе, т.е. по трехмерной координате.&lt;br /&gt;
 &lt;br /&gt;
Состояние нейронов капсульной нейронной сети внутри изображения фиксирует свойство области или объекта внутри изображения: его положение и ориентацию.&lt;br /&gt;
&lt;br /&gt;
Использование капсульной нейронной сети аналогично использованию обычных свёрточных сетей, описанному выше. &lt;br /&gt;
В целом, данная сеть показывает более точные результаты предсказания глубины.&lt;br /&gt;
&lt;br /&gt;
=== Построение с помощью PlanetNet (2018)===&lt;br /&gt;
&lt;br /&gt;
Так же есть архитектуры, решающие данную задачу и без обучения на карте смещений, построенной с помощью двух изображений. Одной из таких является '''PlaneNet'''. &lt;br /&gt;
&lt;br /&gt;
'''PlaneNet'''&amp;lt;ref name=&amp;quot;planetNet&amp;quot;&amp;gt; Chen Liu, Jimei Yang, Duygu Ceylan, Ersin Yumer, Yasutaka Furukawa &amp;quot;PlaneNet: Piece-wise Planar Reconstruction from a Single RGB Image&amp;quot; [https://arxiv.org/abs/1804.06278v1]&amp;lt;/ref&amp;gt; {{---}} глубокая нейронная сеть, построенная на расширенных остаточных сетях (aнгл. Dilated Residual Networks или DRN)&amp;lt;ref name=&amp;quot;drn&amp;quot;&amp;gt; Fisher Yu, Vladlen Koltun, Thomas Funkhouser &amp;quot;Dilated Residual Networks&amp;quot; [https://arxiv.org/abs/1705.09914]&amp;lt;/ref&amp;gt;. Она получает карту глубин путем композиции выходов трех подзадач:&lt;br /&gt;
&lt;br /&gt;
[[Файл:Plane net.png|thumb|500px| Рисунок 4. Прогнозируемые PlaneNet параметры по одной rgb картинке: cегметация плоскости, параметры плоскостей, неплоская карта глубины&amp;lt;ref name=&amp;quot;img4&amp;quot;&amp;gt; Chen Liu, Jimei Yang, Duygu Ceylan, Ersin Yumer, Yasutaka Furukawa &amp;quot;PlaneNet: Piece-wise Planar Reconstruction from a Single RGB Image&amp;quot; Figure 2.&amp;lt;/ref&amp;gt;.]]&lt;br /&gt;
&lt;br /&gt;
* '''Параметры плоскостей''': пытаемся предсказать количество плоскостей $K$, а после ищем на изображение $K$ плоских поверхностей, каждая поверхность задаётся тремя параметрами &amp;lt;math&amp;gt;P_i&amp;lt;/math&amp;gt;: нормальная, прямая и сдвиг. Функцию ошибки определим следующим образом: &amp;lt;math&amp;gt;L = \sum_{i=1}^{K} \min_{j \in [1, \hat K]} \| \hat P_j - P_i \|&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;\hat K, \hat P_i&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;K, P_i&amp;lt;/math&amp;gt;, предсказанные и реальные количество и параметры плоскостей, соответственно.&lt;br /&gt;
&lt;br /&gt;
* [[Сегментация изображений|'''Сегментация плоскости''']]: ищем группы пикселей, каждая из которых характеризует один смысловой объект.&lt;br /&gt;
&lt;br /&gt;
* '''Неплоская карта глубины''': ищем одно-канальную (или неплоскую) карту глубины, то есть карту глубины, где каждый пиксель, либо на глубине 0, либо на глубине 1.&lt;br /&gt;
Авторы обучали и тестировали данные на  NYUv2&amp;lt;ref&amp;gt;Датасет NYUv2[https://cs.nyu.edu/~silberman/datasets/nyu_depth_v2.html]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Обучение без учителя поиска карты глубины из видео (2017) ===&lt;br /&gt;
&lt;br /&gt;
Авторы данной статьи &amp;lt;ref name=&amp;quot;cvrp_dnn&amp;quot;&amp;gt;Tinghui Zhou, Matthew Brown, Noah Snavely, David G. Lowe &amp;quot;Unsupervised Learning of Depth and Ego-Motion from Video&amp;quot; [https://arxiv.org/abs/1704.07813v2]&amp;lt;/ref&amp;gt; предлагают методику оценки глубины одной картинки без учителя и движения камеры из беспорядочной видео нарезки. &lt;br /&gt;
&lt;br /&gt;
[[Файл:dnn.png|thumb|400px| Рисунок 5. Aрхитектура сети на базе DispNet  &amp;lt;ref name=&amp;quot;cvrp&amp;quot;&amp;gt;Tinghui Zhou, Matthew Brown, Noah Snavely, David G. Lowe &amp;quot;Unsupervised Learning of Depth and Ego-Motion from Video&amp;quot; Figure 4&amp;lt;/ref&amp;gt;]]&lt;br /&gt;
&lt;br /&gt;
Будем использовать сверточные нейронные сети c глубиной одного вида и многовидовой камерой из неупорядоченного видеоряда. Метод базируется на синтезе видов. Сеть загружает фото объекта в качестве данных ввода и выводит глубину пикселя. Вид объекта может быть синтезирован исходя из глубины на каждого пикселя снимка позиционирования и четкости ближнего вида. Синтез может быть  дифференцирован с CNN по геометрии и модулям позиционирования.&lt;br /&gt;
Авторы взяли на вооружение архитектуру DispNet&amp;lt;ref name=&amp;quot;dispNet&amp;quot;&amp;gt; Nikolaus Mayer, Eddy Ilg, Philip Hausser, Philipp Fischer &amp;quot;A Large Dataset to Train Convolutional Networks&lt;br /&gt;
for Disparity, Optical Flow, and Scene Flow Estimation&amp;quot; [https://arxiv.org/pdf/1512.02134.pdf]&amp;lt;/ref&amp;gt;, которая сконструирована в виде энкодера и декодера с пропущенными соединениями и многомасштабными блоками предсказания. Функция активации ReLU отслеживает все сверточные слои кроме предсказанных.&lt;br /&gt;
Вид объекта со всех источников формирует входные данные в сеть позиционной оценки. На выходе получается относительная позиция между видом объекта и видом каждого источника. Сеть состоит из двух 7 шаговых сверток за которым следует свертка 1 х 1. За исключением последнего слоя свертки, где применяется нелинейная активация, все другие отслеживаются функцией активации ReLU. Сеть объяснимых предсказаний дает доступ к первым пяти закодированным слоям сети позиционирования. За ней следуют 5 слоев обратной свертки с многомасштабными блоками предсказаний. Кроме слоев предсказаний все уровни свертки и обратной свертки отслеживаются ReLU. Авторы проверяли данную методику на KITTY&amp;lt;ref&amp;gt; Датасет kitty[http://www.cvlibs.net/datasets/kitti/]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Неконтролируемая оценка глубины монокуляра с консистенцией слева направо (2017) ===&lt;br /&gt;
&lt;br /&gt;
[[Файл:Samplers.jpg|thumb|240px| Рисунок 6. Примерная архитектура сети с консистенцией слева направо &amp;lt;ref name=&amp;quot;cvrp2017&amp;quot;&amp;gt;Clément Godard, Oisin Mac Aodha, Gabriel J. Brostow &amp;quot;Unsupervised Monocular Depth Estimation with Left-Right Consistency&amp;quot; Figure 3 &amp;lt;/ref&amp;gt;]]&lt;br /&gt;
&lt;br /&gt;
В данной работе&amp;lt;ref name=&amp;quot;leftrigth&amp;quot;&amp;gt; Clément Godard, Oisin Mac Aodha, Gabriel J. Brostow &amp;quot;Unsupervised Monocular Depth Estimation with Left-Right Consistency&amp;quot; [https://arxiv.org/abs/1609.03677v3]&amp;lt;/ref&amp;gt; предлагается сверточная нейронная сеть, обученная выполнять оценку глубины одного изображения без реальных данных. Авторы предлагают сетевую архитектуру, которая выполняет сквозную оценку глубины изображения, полученного с 1 камеры, без учителя, что обеспечивает согласованность глубины слева направо внутри сети.&lt;br /&gt;
Сеть оценивает глубину, выводя смещения, которые искажают левое изображение, чтобы соответствовать правому. Левое входное изображение используется для вывода смещений слева направо и справа налево. Сеть генерирует предсказанное изображение с обратным отображением с помощью билинейного сэмплера. Это приводит к полностью дифференциальной модели формирования изображения.&lt;br /&gt;
Сверточная архитектура вдохновлена так же DispNet'ом. Она состоит из двух частей—кодера и декодера. Декодер использует пропуск соединений из блоков активации кодера, чтобы распознавать детали с высоким разрешением. Сеть предсказывает две карты смещений — слева направо и справа налево.&lt;br /&gt;
В процессе обучения сеть генерирует изображение путем выборки пикселей из противоположного стереоизображения. Модель формирования изображения использует сэмплер изображений из пространственной трансформаторной сети (STN) для выборки входного изображения с помощью карты смещений. Авторы обучали и тестировали данные на KITTY.&lt;br /&gt;
&lt;br /&gt;
=== Прогнозирование глубины без датчиков: использование структуры для обучения без учителя по монокулярным видео (2019) ===&lt;br /&gt;
&lt;br /&gt;
[[Файл:ego-motion.png|thumb|500px| Рисунок 7. Сравнение обычного метода построения карты глубин с помощью эго-движения и предложенного в статье, который использует движения для различных 3-D объектов &amp;lt;ref name=&amp;quot;aaaif&amp;quot;&amp;gt;Vincent Casser, Soeren Pirk, Reza Mahjourian, Anelia Angelova &amp;quot;Depth Prediction Without the Sensors: Leveraging Structure for Unsupervised Learning from Monocular Videos&amp;quot; Figure 2 &amp;lt;/ref&amp;gt;]]&lt;br /&gt;
&lt;br /&gt;
'''Визуальная одометрия''' &amp;lt;ref name=&amp;quot;визуальная одометрия&amp;quot;&amp;gt;Статья о визуальной одометрии[https://en.wikipedia.org/wiki/Visual_odometry]&amp;lt;/ref&amp;gt; {{---}} метод оценки положения и ориентации робота или иного устройства в пространстве с помощью анализа последовательности изображений, снятых установленной на нем камерой.&lt;br /&gt;
&lt;br /&gt;
Данная статья &amp;lt;ref name=&amp;quot;aaai&amp;quot;&amp;gt; Vincent Casser, Soeren Pirk, Reza Mahjourian, Anelia Angelova &amp;quot;Depth Prediction Without the Sensors: Leveraging Structure for Unsupervised Learning from Monocular Videos&amp;quot; [https://arxiv.org/abs/1811.06152v1]&amp;lt;/ref&amp;gt; посвящена задаче обучения без учителя глубины сцены и визуальной одометрии робота, где наблюдение обеспечивается видеозаписями с одной камеры. Это делается путем введения геометрической структуры в процесс обучения. Он включает в себя моделирование сцены и отдельных объектов, одометрии камеры и движения объектов, изучаемых с помощью монокулярных видеовходов. Авторы вводят модель движения объекта, которая имеет ту же архитектуру, что и сеть определения визуальной одометрии. Она принимает последовательность изображений RGB в качестве входных данных и дополняется предварительно вычисленными масками сегментации экземпляров. Работа модели движения заключается в том, чтобы научиться предсказывать векторы трансформации каждого объекта в трехмерном пространстве. Это создает видимость наблюдаемого объекта в соответствующем целевом кадре. Авторы проверяли прогнозирование глубины на KITTY.&lt;br /&gt;
&lt;br /&gt;
== См. также ==&lt;br /&gt;
&lt;br /&gt;
* [[Компьютерное зрение]]&lt;br /&gt;
&lt;br /&gt;
* [[Оценка положения]]&lt;br /&gt;
&lt;br /&gt;
* [[Задача нахождения объектов на изображении]]&lt;br /&gt;
&lt;br /&gt;
== Примечания ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Источники информации ==&lt;br /&gt;
&lt;br /&gt;
* Чугунов Р. А., Кульневич А. Д., Аксенов С. В. Методика построения карт глубины стереоизображения с помощью капсульной нейронной сети //Доклады Томского государственного университета систем управления и радиоэлектроники. – 2019. – Т. 22. – №. 1.[https://cyberleninka.ru/article/n/metodika-postroeniya-kart-glubiny-stereoizobrazheniya-s-pomoschyu-kapsulnoy-neyronnoy-seti/viewer]&lt;br /&gt;
&lt;br /&gt;
* 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]&lt;br /&gt;
&lt;br /&gt;
*  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]&lt;br /&gt;
&lt;br /&gt;
* 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]&lt;br /&gt;
&lt;br /&gt;
* 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]&lt;br /&gt;
&lt;br /&gt;
[[Категория:Машинное обучение]]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Компьютерное зрение]]&lt;/div&gt;</summary>
		<author><name>Frak</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Plane_net.png&amp;diff=80361</id>
		<title>Файл:Plane net.png</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Plane_net.png&amp;diff=80361"/>
				<updated>2021-01-23T13:59:10Z</updated>
		
		<summary type="html">&lt;p&gt;Frak: Frak загрузил новую версию Файл:Plane net.png&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Frak</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9A%D0%B0%D1%80%D1%82%D0%B0_%D0%B3%D0%BB%D1%83%D0%B1%D0%B8%D0%BD%D1%8B&amp;diff=80355</id>
		<title>Карта глубины</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9A%D0%B0%D1%80%D1%82%D0%B0_%D0%B3%D0%BB%D1%83%D0%B1%D0%B8%D0%BD%D1%8B&amp;diff=80355"/>
				<updated>2021-01-23T13:51:15Z</updated>
		
		<summary type="html">&lt;p&gt;Frak: /* Использование нейронных сетей */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Карта глубины''' (англ. depth map) — это изображение, где для каждого пикселя вместо цвета хранится его расстояние до камеры.&amp;lt;ref name=&amp;quot;def&amp;quot;&amp;gt;Alexey Kurakin &amp;quot;Основы стереозрения&amp;quot;[https://habr.com/ru/post/130300/]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В компьютерной 3D-графике и [[Компьютерное зрение|компьютерном зрении]] карта глубины представляет собой изображение или канал изображения, содержащий информацию о расстоянии поверхностей объектов сцены от точки обзора. &lt;br /&gt;
&lt;br /&gt;
== Мотивация ==&lt;br /&gt;
&lt;br /&gt;
Карта глубины изображения содержит в себе информацию о расстоянии между различными объектами или частями объектов, представленных на данном изображении. Эта информация может быть полезна во многих областях. &lt;br /&gt;
 &lt;br /&gt;
* Для создания 3D-сенсеров. Они способны строить трёхмерную картину своего окружения, используются для [[Оценка положения|ориентации]] автономного робота в пространстве.&lt;br /&gt;
&lt;br /&gt;
* Для систем, использующих технологии дополненной и виртуальной реальности. Например, камеры, которые фиксируют действия пользователя в видеоиграх с технологией виртуальной реальности.&lt;br /&gt;
&lt;br /&gt;
* В беспилотных автомобилях, которые также используют карты глубин для ориентации на дороге.&lt;br /&gt;
&lt;br /&gt;
* Для обработки фотографий. Например, карты глубин используют для размытия фона на фотографии, чтобы добиться более чёткого выделения человека&amp;lt;ref name=&amp;quot;expls&amp;quot;&amp;gt;Примеры из &amp;quot;Research Guide for Depth Estimation with Deep Learning&amp;quot;[https://www.kdnuggets.com/2019/11/research-guide-depth-estimation-deep-learning.html]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Методы построения карты глубины ==&lt;br /&gt;
&lt;br /&gt;
Карта глубины может быть получена с помощью '''специальной камеры глубины''', по '''стереопаре изображений''', а также с помощью [[Нейронные сети, перцептрон|'''нейронных сетей''']].&lt;br /&gt;
&lt;br /&gt;
== Построение с помощью специальных камер глубин == &lt;br /&gt;
&lt;br /&gt;
[[Файл:ToF.jpg|thumb|250px| Рисунок 1. Пример работы ToF-камеры.]]&lt;br /&gt;
&lt;br /&gt;
* '''ToF-камеры''' (англ. Time of Flight). Принцип работы данной камеры основан на измерении задержки света, с которой свет возвращается в каждую точку. Имея несколько сенсоров с разным временем накопления заряда и, зная сдвиг по времени относительно источника для каждого сенсора и снятой яркости вспышки, мы можем рассчитать сдвиг и, соответственно, расстояние до объекта. Причем чем больше сенсоров задействовано, тем выше точность метода.&lt;br /&gt;
&lt;br /&gt;
* '''Структурированные световые камеры''' (aнгл. Structured light camera). Принцип работы данной камеры один из самых старых. Ставим проектор, который создает, например, горизонтальные (а потом и вертикальные) полоски и рядом камеру, которая снимает картину с полосками. В некоторых вариантах используется псевдослучайный набор точек (например MS Kinect {{---}} бесконтактный сенсорный игровой контроллер, для консолей Xbox 360, Xbox One и персональных компьютеров под управлением ОС Windows&amp;lt;ref name=&amp;quot;kinect&amp;quot;&amp;gt; О MicriSoft Kinect [https://en.wikipedia.org/wiki/Kinect]&amp;lt;/ref&amp;gt;). Проекторы обычно работают в инфракрасном спектре, чтобы не мешать пользователям. Поскольку камера и проектор смещены друг относительно друга, то и полоски также будут смещаться пропорционально расстоянию до объекта. Измеряя это смещение, мы можем рассчитывать расстояние до объекта. Вполне понятны сложности, с которыми можно столкнуться при использовании этого метода: это необходимость настройки и калибровки проектора, и проблема того, что нам нужно относительно благоприятное освещение. К примеру, солнце может засветить полосы, и что-то распознать будет тяжело.&lt;br /&gt;
&lt;br /&gt;
== Построения карты глубины по стереопаре ==&lt;br /&gt;
&lt;br /&gt;
Идея, лежащая в основе построения карты глубины по '''стереопаре''', проста. Для каждой точки на одном изображении выполняется поиск [[Ключевые точки изображения|парной ей точки]]&amp;lt;sup&amp;gt;[на 21.01.21 не создан]&amp;lt;/sup&amp;gt; на другом изображении. А по паре соответствующих точек можно выполнить [[Триангуляция полигонов (ушная + монотонная)|триангуляцию]] и определить координаты их [[Отображения|прообраза]] в трехмерном пространстве. Зная трехмерные координаты прообраза, глубина вычисляется как расстояние до плоскости камеры.&lt;br /&gt;
&lt;br /&gt;
Парную точку нужно искать на эпиполярной&amp;lt;ref name=&amp;quot;Epipolar&amp;quot;&amp;gt;Информация о эпиполярной геометрии[https://ru.qaz.wiki/wiki/Epipolar_geometry]&amp;lt;/ref&amp;gt; линии. Соответственно, для упрощения поиска изображения выравнивают так, чтобы все эпиполярные линии были параллельны сторонам изображения (обычно горизонтальны). Более того, изображения выравнивают так, чтобы для точки с координатами &amp;lt;math&amp;gt;(x_0, y_0)&amp;lt;/math&amp;gt; соответствующая ей эпиполярная линия задавалась уравнением &amp;lt;math&amp;gt;x = x_0&amp;lt;/math&amp;gt;. Тогда для каждой точки, соответствующую ей парную точку, нужно искать в той-же строчке на изображении со второй камеры. Такой процесс выравнивания изображений называют '''ректификацией''' (rectification).&lt;br /&gt;
&lt;br /&gt;
[[Файл:Stereo.png|thumb|300px| Рисунок 2. Результат построения карты смещений по двум картинкам.&amp;lt;ref name=&amp;quot;img2&amp;quot;&amp;gt; &amp;quot;Основы стереозрения&amp;quot; Рис. 3 [https://habr.com/ru/post/130300/]&amp;lt;/ref&amp;gt;]]&lt;br /&gt;
&lt;br /&gt;
После того, как изображения '''ректифицированы''', выполняют поиск соответствующих пар точек. Для каждого пикселя одной картинки с координатами &amp;lt;math&amp;gt;(x_0, y_0)&amp;lt;/math&amp;gt; выполняется поиск пикселя на другой картинке. При этом предполагается, что пиксель на второй картинке должен иметь координаты &amp;lt;math&amp;gt;(x_0 - d, y_0)&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;d&amp;lt;/math&amp;gt; — величина называемая смещением. Поиск соответствующего пикселя выполняется путем вычисления максимума функции отклика, в качестве которой может выступать, например, [[Корреляция случайных величин|корреляция]] окрестностей пикселей. В результате получается карта смещений, пример которой приведен на рис. 2. &lt;br /&gt;
&lt;br /&gt;
Собственно значения глубины обратно пропорциональны величине смещения пикселей.&lt;br /&gt;
&lt;br /&gt;
== Использование нейронных сетей ==&lt;br /&gt;
&lt;br /&gt;
Существует множество методов, использующих нейронные сети. Приведём пару примеров таких решений.&lt;br /&gt;
&lt;br /&gt;
=== Построение с помощью свёрточных нейронных сетей ===&lt;br /&gt;
&lt;br /&gt;
Используем [[Сверточные нейронные сети|сверточные нейронные сети]] для построения карты глубины следующим образом&lt;br /&gt;
&amp;lt;ref name=&amp;quot;cnn_rew&amp;quot;&amp;gt; Xiaobai Ma, Zhenglin Geng, Zhi Bie &amp;quot;Depth Estimation from Single Image Using CNN-Residual Network&amp;quot; [http://cs231n.stanford.edu/reports/2017/pdfs/203.pdf]&amp;lt;/ref&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
*  '''Создаем карту смещений''': используя два изображения с камер, близко расположенных друг к другу, создаем карту различий, точно так же как в методе построения по стереопаре.&lt;br /&gt;
&lt;br /&gt;
* '''Ищем реальную карту глубины для обучения''': с помощью карты смещений, можем построить карту глубины &amp;lt;math&amp;gt;y&amp;lt;/math&amp;gt; вышеописанным способом. Также допустимы другие способы построения карты глубины для обучения нейронной сети.&lt;br /&gt;
&lt;br /&gt;
*  '''Функция потерь''': определим [[Функция потерь и эмпирический риск|функцию потерь]], для предсказанной карты &amp;lt;math&amp;gt;\hat y&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;d_i = log( y_i) - log (\hat y_i)&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;\lambda \in [0, 1]&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;n &amp;lt;/math&amp;gt; — количество пикселей. &amp;lt;math&amp;gt;L(y, \hat y) =  \frac{1}{n} \sum\limits_{i} d^2_i - \frac{\lambda}{n^2}(\sum\limits_{i} d_i)^2&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;y_i&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;\hat y_i&amp;lt;/math&amp;gt; это i пискель для для реальной карты глубин и для предсказанной карты, соответственно. Гиперпараметр &amp;lt;math&amp;gt;\lambda&amp;lt;/math&amp;gt;, нужен для того, чтобы функция потерь меньше росла при большом количестве пикселей, предсказание для которых достаточно близко к реальному. Например, если &amp;lt;math&amp;gt;\lambda = 0&amp;lt;/math&amp;gt;, то мы просто придём к оптимизации в L2 для &amp;lt;math&amp;gt;d_i&amp;lt;/math&amp;gt;, т.е. &amp;lt;math&amp;gt;L(y, \hat y) =  \frac{1}{n} \sum\limits_{i} d^2_i &amp;lt;/math&amp;gt;.&amp;lt;ref name=&amp;quot;loss&amp;quot;&amp;gt;David Eigen, Christian Puhrsch, Rob Fergus &amp;quot;Depth Map Prediction from a Single Imageusing a Multi-Scale Deep Network&amp;quot; стр. 5&amp;lt;/ref&amp;gt; &lt;br /&gt;
&lt;br /&gt;
* '''Обучение свёрточной нейронной сети''': далее идёт обычное обучение нейронной сети по карте различий путем обратного распространения ошибки, оптимизируя заданную выше функцию потерь.&lt;br /&gt;
&lt;br /&gt;
В итоге, по обученной нейронной сети мы можем создавать карту глубины, не проводя расчётов для поиска карт смещения и имея только изображение объекта или пространства. &amp;lt;ref name=&amp;quot;cnn&amp;quot;&amp;gt;Реализация, основанная на свёрточных нейронных сетях [https://www.kaggle.com/kmader/cnn-for-generating-depth-maps-from-rgb-images]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Также возможно использование усложнённых архитектур свёрточных нейронных сетей типа '''DenseNet'''.&lt;br /&gt;
&lt;br /&gt;
'''DenseNet'''&amp;lt;ref name=&amp;quot;DenseNet&amp;quot;&amp;gt;Оригинальная статья описывающая DenseNet [https://arxiv.org/abs/1611.09326]&amp;lt;/ref&amp;gt; {{---}} это свёрточная нейронные сеть, в которой выход каждого из слоев подаётся на вход всем слоям, лежащих ниже.&lt;br /&gt;
&lt;br /&gt;
=== Построение с помощью капсульных нейронных сетей ===&lt;br /&gt;
&lt;br /&gt;
Свёрточные нейронные сети способны регистрировать только наличие какого-либо объекта на картинке, не кодируя его ориентацию и положение. Но '''капсульные нейронные сети''' (англ. Capsule Neural Network)&amp;lt;ref name=&amp;quot;CapsNet&amp;quot;&amp;gt;Sara Sabour, Nicholas Frosst, Geoffrey E. Hinton &amp;quot;Dynamic Routing Between Capsules&amp;quot; [https://arxiv.org/pdf/1710.09829.pdf]&amp;lt;/ref&amp;gt; лишены этого недостатка.&lt;br /&gt;
&lt;br /&gt;
[[Файл:capsnet.jpg|thumb|400px| Рисунок 3. Структура капсульной нейронной сети &amp;lt;ref name=&amp;quot;img&amp;quot;&amp;gt; &amp;quot;Design and Investigation of Capsule Networks for Sentence Classification&amp;quot; Figure 2. [https://www.mdpi.com/2076-3417/9/11/2200/htm]&amp;lt;/ref&amp;gt;.]]&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Капсульная нейронная сеть&amp;quot; состоит из капсул или групп нейронов, чтобы идентифицировать закономерности в изображении. Эта информация поступает в виде векторов, содержащих ориентацию и положение узоров на изображении, которое затем принимается капсулами более высокого уровня. Капсулы более высокого уровня обрабатывают эту информацию из нескольких капсул более низкого уровня и впоследствии выдают прогноз. Капсулы одного уровня не имеют связей друг с другом и вычисляют информацию независимо друг от друга. Капсулы образуются путем разделения выходных данных из свёрточного слоя. Мы делим наш трехмерный вектор на капсулы методом &amp;quot;нарезания&amp;quot; таким образом, чтобы в каждой капсуле была информация о каждом пикселе, т.е. по трехмерной координате.&lt;br /&gt;
 &lt;br /&gt;
Состояние нейронов капсульной нейронной сети внутри изображения фиксирует свойство области или объекта внутри изображения: его положение и ориентацию.&lt;br /&gt;
&lt;br /&gt;
Использование капсульной нейронной сети аналогично использованию обычных свёрточных сетей, описанному выше. &lt;br /&gt;
В целом, данная сеть показывает более точные результаты предсказания глубины.&lt;br /&gt;
&lt;br /&gt;
=== Построение с помощью PlanetNet (2018)===&lt;br /&gt;
&lt;br /&gt;
Так же есть архитектуры, решающие данную задачу и без обучения на карте смещений, построенной с помощью двух изображений. Одной из таких является '''PlaneNet'''. &lt;br /&gt;
&lt;br /&gt;
'''PlaneNet'''&amp;lt;ref name=&amp;quot;planetNet&amp;quot;&amp;gt; Chen Liu, Jimei Yang, Duygu Ceylan, Ersin Yumer, Yasutaka Furukawa &amp;quot;PlaneNet: Piece-wise Planar Reconstruction from a Single RGB Image&amp;quot; [https://arxiv.org/abs/1804.06278v1]&amp;lt;/ref&amp;gt; {{---}} глубокая нейронная сеть, построенная на расширенных остаточных сетях (aнгл. Dilated Residual Networks или DRN)&amp;lt;ref name=&amp;quot;drn&amp;quot;&amp;gt; Fisher Yu, Vladlen Koltun, Thomas Funkhouser &amp;quot;Dilated Residual Networks&amp;quot; [https://arxiv.org/abs/1705.09914]&amp;lt;/ref&amp;gt;. Она получает карту глубин путем композиции выходов трех подзадач:&lt;br /&gt;
&lt;br /&gt;
[[Файл:Plane net2.jpg|thumb|500px| Рисунок 4. Прогнозируемые PlaneNet параметры по одной rgb картинке: cегметация плоскости, параметры плоскостей, неплоская карта глубины&amp;lt;ref name=&amp;quot;img4&amp;quot;&amp;gt; Chen Liu, Jimei Yang, Duygu Ceylan, Ersin Yumer, Yasutaka Furukawa &amp;quot;PlaneNet: Piece-wise Planar Reconstruction from a Single RGB Image&amp;quot; Figure 2.&amp;lt;/ref&amp;gt;.]]&lt;br /&gt;
&lt;br /&gt;
* '''Параметры плоскостей''': пытаемся предсказать количество плоскостей $K$, а после ищем на изображение $K$ плоских поверхностей, каждая поверхность задаётся тремя параметрами &amp;lt;math&amp;gt;P_i&amp;lt;/math&amp;gt;: нормальная, прямая и сдвиг. Функцию ошибки определим следующим образом: &amp;lt;math&amp;gt;L = \sum_{i=1}^{K} \min_{j \in [1, \hat K]} \| \hat P_j - P_i \|&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;\hat K, \hat P_i&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;K, P_i&amp;lt;/math&amp;gt;, предсказанные и реальные количество и параметры плоскостей, соответственно.&lt;br /&gt;
&lt;br /&gt;
* [[Сегментация изображений|'''Сегментация плоскости''']]: ищем группы пикселей, каждая из которых характеризует один смысловой объект.&lt;br /&gt;
&lt;br /&gt;
* '''Неплоская карта глубины''': ищем одно-канальную (или неплоскую) карту глубины, то есть карту глубины, где каждый пиксель, либо на глубине 0, либо на глубине 1.&lt;br /&gt;
Авторы обучали и тестировали данные на  NYUv2&amp;lt;ref&amp;gt;Датасет NYUv2[https://cs.nyu.edu/~silberman/datasets/nyu_depth_v2.html]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Обучение без учителя поиска карты глубины из видео (2017) ===&lt;br /&gt;
&lt;br /&gt;
Авторы данной статьи &amp;lt;ref name=&amp;quot;cvrp_dnn&amp;quot;&amp;gt;Tinghui Zhou, Matthew Brown, Noah Snavely, David G. Lowe &amp;quot;Unsupervised Learning of Depth and Ego-Motion from Video&amp;quot; [https://arxiv.org/abs/1704.07813v2]&amp;lt;/ref&amp;gt; предлагают методику оценки глубины одной картинки без учителя и движения камеры из беспорядочной видео нарезки. &lt;br /&gt;
&lt;br /&gt;
[[Файл:dnn.png|thumb|400px| Рисунок 5. Aрхитектура сети на базе DispNet  &amp;lt;ref name=&amp;quot;cvrp&amp;quot;&amp;gt;Tinghui Zhou, Matthew Brown, Noah Snavely, David G. Lowe &amp;quot;Unsupervised Learning of Depth and Ego-Motion from Video&amp;quot; Figure 4&amp;lt;/ref&amp;gt;]]&lt;br /&gt;
&lt;br /&gt;
Будем использовать сверточные нейронные сети c глубиной одного вида и многовидовой камерой из неупорядоченного видеоряда. Метод базируется на синтезе видов. Сеть загружает фото объекта в качестве данных ввода и выводит глубину пикселя. Вид объекта может быть синтезирован исходя из глубины на каждого пикселя снимка позиционирования и четкости ближнего вида. Синтез может быть  дифференцирован с CNN по геометрии и модулям позиционирования.&lt;br /&gt;
Авторы взяли на вооружение архитектуру DispNet&amp;lt;ref name=&amp;quot;dispNet&amp;quot;&amp;gt; Nikolaus Mayer, Eddy Ilg, Philip Hausser, Philipp Fischer &amp;quot;A Large Dataset to Train Convolutional Networks&lt;br /&gt;
for Disparity, Optical Flow, and Scene Flow Estimation&amp;quot; [https://arxiv.org/pdf/1512.02134.pdf]&amp;lt;/ref&amp;gt;, которая сконструирована в виде энкодера и декодера с пропущенными соединениями и многомасштабными блоками предсказания. Функция активации ReLU отслеживает все сверточные слои кроме предсказанных.&lt;br /&gt;
Вид объекта со всех источников формирует входные данные в сеть позиционной оценки. На выходе получается относительная позиция между видом объекта и видом каждого источника. Сеть состоит из двух 7 шаговых сверток за которым следует свертка 1 х 1. За исключением последнего слоя свертки, где применяется нелинейная активация, все другие отслеживаются функцией активации ReLU. Сеть объяснимых предсказаний дает доступ к первым пяти закодированным слоям сети позиционирования. За ней следуют 5 слоев обратной свертки с многомасштабными блоками предсказаний. Кроме слоев предсказаний все уровни свертки и обратной свертки отслеживаются ReLU. Авторы проверяли данную методику на KITTY&amp;lt;ref&amp;gt; Датасет kitty[http://www.cvlibs.net/datasets/kitti/]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Неконтролируемая оценка глубины монокуляра с консистенцией слева направо (2017) ===&lt;br /&gt;
&lt;br /&gt;
[[Файл:Samplers.jpg|thumb|240px| Рисунок 6. Примерная архитектура сети с консистенцией слева направо &amp;lt;ref name=&amp;quot;cvrp2017&amp;quot;&amp;gt;Clément Godard, Oisin Mac Aodha, Gabriel J. Brostow &amp;quot;Unsupervised Monocular Depth Estimation with Left-Right Consistency&amp;quot; Figure 3 &amp;lt;/ref&amp;gt;]]&lt;br /&gt;
&lt;br /&gt;
В данной работе&amp;lt;ref name=&amp;quot;leftrigth&amp;quot;&amp;gt; Clément Godard, Oisin Mac Aodha, Gabriel J. Brostow &amp;quot;Unsupervised Monocular Depth Estimation with Left-Right Consistency&amp;quot; [https://arxiv.org/abs/1609.03677v3]&amp;lt;/ref&amp;gt; предлагается сверточная нейронная сеть, обученная выполнять оценку глубины одного изображения без реальных данных. Авторы предлагают сетевую архитектуру, которая выполняет сквозную оценку глубины изображения, полученного с 1 камеры, без учителя, что обеспечивает согласованность глубины слева направо внутри сети.&lt;br /&gt;
Сеть оценивает глубину, выводя смещения, которые искажают левое изображение, чтобы соответствовать правому. Левое входное изображение используется для вывода смещений слева направо и справа налево. Сеть генерирует предсказанное изображение с обратным отображением с помощью билинейного сэмплера. Это приводит к полностью дифференциальной модели формирования изображения.&lt;br /&gt;
Сверточная архитектура вдохновлена так же DispNet'ом. Она состоит из двух частей—кодера и декодера. Декодер использует пропуск соединений из блоков активации кодера, чтобы распознавать детали с высоким разрешением. Сеть предсказывает две карты смещений — слева направо и справа налево.&lt;br /&gt;
В процессе обучения сеть генерирует изображение путем выборки пикселей из противоположного стереоизображения. Модель формирования изображения использует сэмплер изображений из пространственной трансформаторной сети (STN) для выборки входного изображения с помощью карты смещений. Авторы обучали и тестировали данные на KITTY.&lt;br /&gt;
&lt;br /&gt;
=== Прогнозирование глубины без датчиков: использование структуры для обучения без учителя по монокулярным видео (2019) ===&lt;br /&gt;
&lt;br /&gt;
[[Файл:ego-motion.png|thumb|500px| Рисунок 7. Сравнение обычного метода построения карты глубин с помощью эго-движения и предложенного в статье, который использует движения для различных 3-D объектов &amp;lt;ref name=&amp;quot;aaaif&amp;quot;&amp;gt;Vincent Casser, Soeren Pirk, Reza Mahjourian, Anelia Angelova &amp;quot;Depth Prediction Without the Sensors: Leveraging Structure for Unsupervised Learning from Monocular Videos&amp;quot; Figure 2 &amp;lt;/ref&amp;gt;]]&lt;br /&gt;
&lt;br /&gt;
'''Визуальная одометрия''' &amp;lt;ref name=&amp;quot;визуальная одометрия&amp;quot;&amp;gt;Статья о визуальной одометрии[https://en.wikipedia.org/wiki/Visual_odometry]&amp;lt;/ref&amp;gt; {{---}} метод оценки положения и ориентации робота или иного устройства в пространстве с помощью анализа последовательности изображений, снятых установленной на нем камерой.&lt;br /&gt;
&lt;br /&gt;
Данная статья &amp;lt;ref name=&amp;quot;aaai&amp;quot;&amp;gt; Vincent Casser, Soeren Pirk, Reza Mahjourian, Anelia Angelova &amp;quot;Depth Prediction Without the Sensors: Leveraging Structure for Unsupervised Learning from Monocular Videos&amp;quot; [https://arxiv.org/abs/1811.06152v1]&amp;lt;/ref&amp;gt; посвящена задаче обучения без учителя глубины сцены и визуальной одометрии робота, где наблюдение обеспечивается видеозаписями с одной камеры. Это делается путем введения геометрической структуры в процесс обучения. Он включает в себя моделирование сцены и отдельных объектов, одометрии камеры и движения объектов, изучаемых с помощью монокулярных видеовходов. Авторы вводят модель движения объекта, которая имеет ту же архитектуру, что и сеть определения визуальной одометрии. Она принимает последовательность изображений RGB в качестве входных данных и дополняется предварительно вычисленными масками сегментации экземпляров. Работа модели движения заключается в том, чтобы научиться предсказывать векторы трансформации каждого объекта в трехмерном пространстве. Это создает видимость наблюдаемого объекта в соответствующем целевом кадре. Авторы проверяли прогнозирование глубины на KITTY.&lt;br /&gt;
&lt;br /&gt;
== См. также ==&lt;br /&gt;
&lt;br /&gt;
* [[Компьютерное зрение]]&lt;br /&gt;
&lt;br /&gt;
* [[Оценка положения]]&lt;br /&gt;
&lt;br /&gt;
* [[Задача нахождения объектов на изображении]]&lt;br /&gt;
&lt;br /&gt;
== Примечания ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Источники информации ==&lt;br /&gt;
&lt;br /&gt;
* Чугунов Р. А., Кульневич А. Д., Аксенов С. В. Методика построения карт глубины стереоизображения с помощью капсульной нейронной сети //Доклады Томского государственного университета систем управления и радиоэлектроники. – 2019. – Т. 22. – №. 1.[https://cyberleninka.ru/article/n/metodika-postroeniya-kart-glubiny-stereoizobrazheniya-s-pomoschyu-kapsulnoy-neyronnoy-seti/viewer]&lt;br /&gt;
&lt;br /&gt;
* 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]&lt;br /&gt;
&lt;br /&gt;
*  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]&lt;br /&gt;
&lt;br /&gt;
* 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]&lt;br /&gt;
&lt;br /&gt;
* 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]&lt;br /&gt;
&lt;br /&gt;
[[Категория:Машинное обучение]]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Компьютерное зрение]]&lt;/div&gt;</summary>
		<author><name>Frak</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9A%D0%B0%D1%80%D1%82%D0%B0_%D0%B3%D0%BB%D1%83%D0%B1%D0%B8%D0%BD%D1%8B&amp;diff=80353</id>
		<title>Карта глубины</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9A%D0%B0%D1%80%D1%82%D0%B0_%D0%B3%D0%BB%D1%83%D0%B1%D0%B8%D0%BD%D1%8B&amp;diff=80353"/>
				<updated>2021-01-23T13:49:44Z</updated>
		
		<summary type="html">&lt;p&gt;Frak: /* Прогнозирование глубины без датчиков: использование структуры для обучения без учителя по монокулярным видео (2019) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Карта глубины''' (англ. depth map) — это изображение, где для каждого пикселя вместо цвета хранится его расстояние до камеры.&amp;lt;ref name=&amp;quot;def&amp;quot;&amp;gt;Alexey Kurakin &amp;quot;Основы стереозрения&amp;quot;[https://habr.com/ru/post/130300/]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В компьютерной 3D-графике и [[Компьютерное зрение|компьютерном зрении]] карта глубины представляет собой изображение или канал изображения, содержащий информацию о расстоянии поверхностей объектов сцены от точки обзора. &lt;br /&gt;
&lt;br /&gt;
== Мотивация ==&lt;br /&gt;
&lt;br /&gt;
Карта глубины изображения содержит в себе информацию о расстоянии между различными объектами или частями объектов, представленных на данном изображении. Эта информация может быть полезна во многих областях. &lt;br /&gt;
 &lt;br /&gt;
* Для создания 3D-сенсеров. Они способны строить трёхмерную картину своего окружения, используются для [[Оценка положения|ориентации]] автономного робота в пространстве.&lt;br /&gt;
&lt;br /&gt;
* Для систем, использующих технологии дополненной и виртуальной реальности. Например, камеры, которые фиксируют действия пользователя в видеоиграх с технологией виртуальной реальности.&lt;br /&gt;
&lt;br /&gt;
* В беспилотных автомобилях, которые также используют карты глубин для ориентации на дороге.&lt;br /&gt;
&lt;br /&gt;
* Для обработки фотографий. Например, карты глубин используют для размытия фона на фотографии, чтобы добиться более чёткого выделения человека&amp;lt;ref name=&amp;quot;expls&amp;quot;&amp;gt;Примеры из &amp;quot;Research Guide for Depth Estimation with Deep Learning&amp;quot;[https://www.kdnuggets.com/2019/11/research-guide-depth-estimation-deep-learning.html]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Методы построения карты глубины ==&lt;br /&gt;
&lt;br /&gt;
Карта глубины может быть получена с помощью '''специальной камеры глубины''', по '''стереопаре изображений''', а также с помощью [[Нейронные сети, перцептрон|'''нейронных сетей''']].&lt;br /&gt;
&lt;br /&gt;
== Построение с помощью специальных камер глубин == &lt;br /&gt;
&lt;br /&gt;
[[Файл:ToF.jpg|thumb|250px| Рисунок 1. Пример работы ToF-камеры.]]&lt;br /&gt;
&lt;br /&gt;
* '''ToF-камеры''' (англ. Time of Flight). Принцип работы данной камеры основан на измерении задержки света, с которой свет возвращается в каждую точку. Имея несколько сенсоров с разным временем накопления заряда и, зная сдвиг по времени относительно источника для каждого сенсора и снятой яркости вспышки, мы можем рассчитать сдвиг и, соответственно, расстояние до объекта. Причем чем больше сенсоров задействовано, тем выше точность метода.&lt;br /&gt;
&lt;br /&gt;
* '''Структурированные световые камеры''' (aнгл. Structured light camera). Принцип работы данной камеры один из самых старых. Ставим проектор, который создает, например, горизонтальные (а потом и вертикальные) полоски и рядом камеру, которая снимает картину с полосками. В некоторых вариантах используется псевдослучайный набор точек (например MS Kinect {{---}} бесконтактный сенсорный игровой контроллер, для консолей Xbox 360, Xbox One и персональных компьютеров под управлением ОС Windows&amp;lt;ref name=&amp;quot;kinect&amp;quot;&amp;gt; О MicriSoft Kinect [https://en.wikipedia.org/wiki/Kinect]&amp;lt;/ref&amp;gt;). Проекторы обычно работают в инфракрасном спектре, чтобы не мешать пользователям. Поскольку камера и проектор смещены друг относительно друга, то и полоски также будут смещаться пропорционально расстоянию до объекта. Измеряя это смещение, мы можем рассчитывать расстояние до объекта. Вполне понятны сложности, с которыми можно столкнуться при использовании этого метода: это необходимость настройки и калибровки проектора, и проблема того, что нам нужно относительно благоприятное освещение. К примеру, солнце может засветить полосы, и что-то распознать будет тяжело.&lt;br /&gt;
&lt;br /&gt;
== Построения карты глубины по стереопаре ==&lt;br /&gt;
&lt;br /&gt;
Идея, лежащая в основе построения карты глубины по '''стереопаре''', проста. Для каждой точки на одном изображении выполняется поиск [[Ключевые точки изображения|парной ей точки]]&amp;lt;sup&amp;gt;[на 21.01.21 не создан]&amp;lt;/sup&amp;gt; на другом изображении. А по паре соответствующих точек можно выполнить [[Триангуляция полигонов (ушная + монотонная)|триангуляцию]] и определить координаты их [[Отображения|прообраза]] в трехмерном пространстве. Зная трехмерные координаты прообраза, глубина вычисляется как расстояние до плоскости камеры.&lt;br /&gt;
&lt;br /&gt;
Парную точку нужно искать на эпиполярной&amp;lt;ref name=&amp;quot;Epipolar&amp;quot;&amp;gt;Информация о эпиполярной геометрии[https://ru.qaz.wiki/wiki/Epipolar_geometry]&amp;lt;/ref&amp;gt; линии. Соответственно, для упрощения поиска изображения выравнивают так, чтобы все эпиполярные линии были параллельны сторонам изображения (обычно горизонтальны). Более того, изображения выравнивают так, чтобы для точки с координатами &amp;lt;math&amp;gt;(x_0, y_0)&amp;lt;/math&amp;gt; соответствующая ей эпиполярная линия задавалась уравнением &amp;lt;math&amp;gt;x = x_0&amp;lt;/math&amp;gt;. Тогда для каждой точки, соответствующую ей парную точку, нужно искать в той-же строчке на изображении со второй камеры. Такой процесс выравнивания изображений называют '''ректификацией''' (rectification).&lt;br /&gt;
&lt;br /&gt;
[[Файл:Stereo.png|thumb|300px| Рисунок 2. Результат построения карты смещений по двум картинкам.&amp;lt;ref name=&amp;quot;img2&amp;quot;&amp;gt; &amp;quot;Основы стереозрения&amp;quot; Рис. 3 [https://habr.com/ru/post/130300/]&amp;lt;/ref&amp;gt;]]&lt;br /&gt;
&lt;br /&gt;
После того, как изображения '''ректифицированы''', выполняют поиск соответствующих пар точек. Для каждого пикселя одной картинки с координатами &amp;lt;math&amp;gt;(x_0, y_0)&amp;lt;/math&amp;gt; выполняется поиск пикселя на другой картинке. При этом предполагается, что пиксель на второй картинке должен иметь координаты &amp;lt;math&amp;gt;(x_0 - d, y_0)&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;d&amp;lt;/math&amp;gt; — величина называемая смещением. Поиск соответствующего пикселя выполняется путем вычисления максимума функции отклика, в качестве которой может выступать, например, [[Корреляция случайных величин|корреляция]] окрестностей пикселей. В результате получается карта смещений, пример которой приведен на рис. 2. &lt;br /&gt;
&lt;br /&gt;
Собственно значения глубины обратно пропорциональны величине смещения пикселей.&lt;br /&gt;
&lt;br /&gt;
== Использование нейронных сетей ==&lt;br /&gt;
&lt;br /&gt;
Существует множество методов, использующих нейронные сети. Приведём пару примеров таких решений.&lt;br /&gt;
&lt;br /&gt;
=== Построение с помощью свёрточных нейронных сетей ===&lt;br /&gt;
&lt;br /&gt;
Используем [[Сверточные нейронные сети|сверточные нейронные сети]] для построения карты глубины следующим образом&lt;br /&gt;
&amp;lt;ref name=&amp;quot;cnn_rew&amp;quot;&amp;gt; Xiaobai Ma, Zhenglin Geng, Zhi Bie &amp;quot;Depth Estimation from Single Image Using CNN-Residual Network&amp;quot; [http://cs231n.stanford.edu/reports/2017/pdfs/203.pdf]&amp;lt;/ref&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
*  '''Создаем карту смещений''': используя два изображения с камер, близко расположенных друг к другу, создаем карту различий, точно так же как в методе построения по стереопаре.&lt;br /&gt;
&lt;br /&gt;
* '''Ищем реальную карту глубины для обучения''': с помощью карты смещений, можем построить карту глубины &amp;lt;math&amp;gt;y&amp;lt;/math&amp;gt; вышеописанным способом. Также допустимы другие способы построения карты глубины для обучения нейронной сети.&lt;br /&gt;
&lt;br /&gt;
*  '''Функция потерь''': определим [[Функция потерь и эмпирический риск|функцию потерь]], для предсказанной карты &amp;lt;math&amp;gt;\hat y&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;d_i = log( y_i) - log (\hat y_i)&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;\lambda \in [0, 1]&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;n &amp;lt;/math&amp;gt; — количество пикселей. &amp;lt;math&amp;gt;L(y, \hat y) =  \frac{1}{n} \sum\limits_{i} d^2_i - \frac{\lambda}{n^2}(\sum\limits_{i} d_i)^2&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;y_i&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;\hat y_i&amp;lt;/math&amp;gt; это i пискель для для реальной карты глубин и для предсказанной карты, соответственно. Гиперпараметр &amp;lt;math&amp;gt;\lambda&amp;lt;/math&amp;gt;, нужен для того, чтобы функция потерь меньше росла при большом количестве пикселей, предсказание для которых достаточно близко к реальному. Например, если &amp;lt;math&amp;gt;\lambda = 0&amp;lt;/math&amp;gt;, то мы просто придём к оптимизации в L2 для &amp;lt;math&amp;gt;d_i&amp;lt;/math&amp;gt;, т.е. &amp;lt;math&amp;gt;L(y, \hat y) =  \frac{1}{n} \sum\limits_{i} d^2_i &amp;lt;/math&amp;gt;.&amp;lt;ref name=&amp;quot;loss&amp;quot;&amp;gt;David Eigen, Christian Puhrsch, Rob Fergus &amp;quot;Depth Map Prediction from a Single Imageusing a Multi-Scale Deep Network&amp;quot; стр. 5&amp;lt;/ref&amp;gt; &lt;br /&gt;
&lt;br /&gt;
* '''Обучение свёрточной нейронной сети''': далее идёт обычное обучение нейронной сети по карте различий путем обратного распространения ошибки, оптимизируя заданную выше функцию потерь.&lt;br /&gt;
&lt;br /&gt;
В итоге, по обученной нейронной сети мы можем создавать карту глубины, не проводя расчётов для поиска карт смещения и имея только изображение объекта или пространства. &amp;lt;ref name=&amp;quot;cnn&amp;quot;&amp;gt;Реализация, основанная на свёрточных нейронных сетях [https://www.kaggle.com/kmader/cnn-for-generating-depth-maps-from-rgb-images]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Также возможно использование усложнённых архитектур свёрточных нейронных сетей типа '''DenseNet'''.&lt;br /&gt;
&lt;br /&gt;
'''DenseNet'''&amp;lt;ref name=&amp;quot;DenseNet&amp;quot;&amp;gt;Оригинальная статья описывающая DenseNet [https://arxiv.org/abs/1611.09326]&amp;lt;/ref&amp;gt; {{---}} это свёрточная нейронные сеть, в которой выход каждого из слоев подаётся на вход всем слоям, лежащих ниже.&lt;br /&gt;
&lt;br /&gt;
=== Построение с помощью капсульных нейронных сетей ===&lt;br /&gt;
&lt;br /&gt;
Свёрточные нейронные сети способны регистрировать только наличие какого-либо объекта на картинке, не кодируя его ориентацию и положение. Но '''капсульные нейронные сети''' (англ. Capsule Neural Network)&amp;lt;ref name=&amp;quot;CapsNet&amp;quot;&amp;gt;Sara Sabour, Nicholas Frosst, Geoffrey E. Hinton &amp;quot;Dynamic Routing Between Capsules&amp;quot; [https://arxiv.org/pdf/1710.09829.pdf]&amp;lt;/ref&amp;gt; лишены этого недостатка.&lt;br /&gt;
&lt;br /&gt;
[[Файл:capsnet.jpg|thumb|400px| Рисунок 3. Структура капсульной нейронной сети &amp;lt;ref name=&amp;quot;img&amp;quot;&amp;gt; &amp;quot;Design and Investigation of Capsule Networks for Sentence Classification&amp;quot; Figure 2. [https://www.mdpi.com/2076-3417/9/11/2200/htm]&amp;lt;/ref&amp;gt;.]]&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Капсульная нейронная сеть&amp;quot; состоит из капсул или групп нейронов, чтобы идентифицировать закономерности в изображении. Эта информация поступает в виде векторов, содержащих ориентацию и положение узоров на изображении, которое затем принимается капсулами более высокого уровня. Капсулы более высокого уровня обрабатывают эту информацию из нескольких капсул более низкого уровня и впоследствии выдают прогноз. Капсулы одного уровня не имеют связей друг с другом и вычисляют информацию независимо друг от друга. Капсулы образуются путем разделения выходных данных из свёрточного слоя. Мы делим наш трехмерный вектор на капсулы методом &amp;quot;нарезания&amp;quot; таким образом, чтобы в каждой капсуле была информация о каждом пикселе, т.е. по трехмерной координате.&lt;br /&gt;
 &lt;br /&gt;
Состояние нейронов капсульной нейронной сети внутри изображения фиксирует свойство области или объекта внутри изображения: его положение и ориентацию.&lt;br /&gt;
&lt;br /&gt;
Использование капсульной нейронной сети аналогично использованию обычных свёрточных сетей, описанному выше. &lt;br /&gt;
В целом, данная сеть показывает более точные результаты предсказания глубины.&lt;br /&gt;
&lt;br /&gt;
=== Построение с помощью PlanetNet (2018)===&lt;br /&gt;
&lt;br /&gt;
Так же есть архитектуры, решающие данную задачу и без обучения на карте смещений, построенной с помощью двух изображений. Одной из таких является '''PlaneNet'''. &lt;br /&gt;
&lt;br /&gt;
'''PlaneNet'''&amp;lt;ref name=&amp;quot;planetNet&amp;quot;&amp;gt; Chen Liu, Jimei Yang, Duygu Ceylan, Ersin Yumer, Yasutaka Furukawa &amp;quot;PlaneNet: Piece-wise Planar Reconstruction from a Single RGB Image&amp;quot; [https://arxiv.org/abs/1804.06278v1]&amp;lt;/ref&amp;gt; {{---}} глубокая нейронная сеть, построенная на расширенных остаточных сетях (aнгл. Dilated Residual Networks или DRN)&amp;lt;ref name=&amp;quot;drn&amp;quot;&amp;gt; Fisher Yu, Vladlen Koltun, Thomas Funkhouser &amp;quot;Dilated Residual Networks&amp;quot; [https://arxiv.org/abs/1705.09914]&amp;lt;/ref&amp;gt;. Она получает карту глубин путем композиции выходов трех подзадач:&lt;br /&gt;
&lt;br /&gt;
[[Файл:Plane net2.jpg|thumb|500px| Рисунок 4. Прогнозируемые PlaneNet параметры по одной rgb картинке: cегметация плоскости, параметры плоскостей, неплоская карта глубины&amp;lt;ref name=&amp;quot;img4&amp;quot;&amp;gt; Chen Liu, Jimei Yang, Duygu Ceylan, Ersin Yumer, Yasutaka Furukawa &amp;quot;PlaneNet: Piece-wise Planar Reconstruction from a Single RGB Image&amp;quot; Figure 2.&amp;lt;/ref&amp;gt;.]]&lt;br /&gt;
&lt;br /&gt;
* '''Параметры плоскостей''': пытаемся предсказать количество плоскостей $K$, а после ищем на изображение $K$ плоских поверхностей, каждая поверхность задаётся тремя параметрами &amp;lt;math&amp;gt;P_i&amp;lt;/math&amp;gt;: нормальная, прямая и сдвиг. Функцию ошибки определим следующим образом: &amp;lt;math&amp;gt;L = \sum_{i=1}^{K} \min_{j \in [1, \hat K]} \| \hat P_j - P_i \|&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;\hat K, \hat P_i&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;K, P_i&amp;lt;/math&amp;gt;, предсказанные и реальные количество и параметры плоскостей, соответственно.&lt;br /&gt;
&lt;br /&gt;
* [[Сегментация изображений|'''Сегментация плоскости''']]: ищем группы пикселей, каждая из которых характеризует один смысловой объект.&lt;br /&gt;
&lt;br /&gt;
* '''Неплоская карта глубины''': ищем одно-канальную (или неплоскую) карту глубины, то есть карту глубины, где каждый пиксель, либо на глубине 0, либо на глубине 1.&lt;br /&gt;
Авторы обучали и тестировали данные на  NYUv2&amp;lt;ref&amp;gt;https://cs.nyu.edu/~silberman/datasets/nyu_depth_v2.html&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Обучение без учителя поиска карты глубины из видео (2017) ===&lt;br /&gt;
&lt;br /&gt;
Авторы данной статьи &amp;lt;ref name=&amp;quot;cvrp_dnn&amp;quot;&amp;gt;Tinghui Zhou, Matthew Brown, Noah Snavely, David G. Lowe &amp;quot;Unsupervised Learning of Depth and Ego-Motion from Video&amp;quot; [https://arxiv.org/abs/1704.07813v2]&amp;lt;/ref&amp;gt; предлагают методику оценки глубины одной картинки без учителя и движения камеры из беспорядочной видео нарезки. &lt;br /&gt;
&lt;br /&gt;
[[Файл:dnn.png|thumb|400px| Рисунок 5. Aрхитектура сети на базе DispNet  &amp;lt;ref name=&amp;quot;cvrp&amp;quot;&amp;gt;Tinghui Zhou, Matthew Brown, Noah Snavely, David G. Lowe &amp;quot;Unsupervised Learning of Depth and Ego-Motion from Video&amp;quot; Figure 4&amp;lt;/ref&amp;gt;]]&lt;br /&gt;
&lt;br /&gt;
Будем использовать сверточные нейронные сети c глубиной одного вида и многовидовой камерой из неупорядоченного видеоряда. Метод базируется на синтезе видов. Сеть загружает фото объекта в качестве данных ввода и выводит глубину пикселя. Вид объекта может быть синтезирован исходя из глубины на каждого пикселя снимка позиционирования и четкости ближнего вида. Синтез может быть  дифференцирован с CNN по геометрии и модулям позиционирования.&lt;br /&gt;
Авторы взяли на вооружение архитектуру DispNet&amp;lt;ref name=&amp;quot;dispNet&amp;quot;&amp;gt; Nikolaus Mayer, Eddy Ilg, Philip Hausser, Philipp Fischer &amp;quot;A Large Dataset to Train Convolutional Networks&lt;br /&gt;
for Disparity, Optical Flow, and Scene Flow Estimation&amp;quot; [https://arxiv.org/pdf/1512.02134.pdf]&amp;lt;/ref&amp;gt;, которая сконструирована в виде энкодера и декодера с пропущенными соединениями и многомасштабными блоками предсказания. Функция активации ReLU отслеживает все сверточные слои кроме предсказанных.&lt;br /&gt;
Вид объекта со всех источников формирует входные данные в сеть позиционной оценки. На выходе получается относительная позиция между видом объекта и видом каждого источника. Сеть состоит из двух 7 шаговых сверток за которым следует свертка 1 х 1. За исключением последнего слоя свертки, где применяется нелинейная активация, все другие отслеживаются функцией активации ReLU. Сеть объяснимых предсказаний дает доступ к первым пяти закодированным слоям сети позиционирования. За ней следуют 5 слоев обратной свертки с многомасштабными блоками предсказаний. Кроме слоев предсказаний все уровни свертки и обратной свертки отслеживаются ReLU. Авторы проверяли данную методику на KITTY&amp;lt;ref&amp;gt;http://www.cvlibs.net/datasets/kitti/&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Неконтролируемая оценка глубины монокуляра с консистенцией слева направо (2017) ===&lt;br /&gt;
&lt;br /&gt;
[[Файл:Samplers.jpg|thumb|240px| Рисунок 6. Примерная архитектура сети с консистенцией слева направо &amp;lt;ref name=&amp;quot;cvrp2017&amp;quot;&amp;gt;Clément Godard, Oisin Mac Aodha, Gabriel J. Brostow &amp;quot;Unsupervised Monocular Depth Estimation with Left-Right Consistency&amp;quot; Figure 3 &amp;lt;/ref&amp;gt;]]&lt;br /&gt;
&lt;br /&gt;
В данной работе&amp;lt;ref name=&amp;quot;leftrigth&amp;quot;&amp;gt; Clément Godard, Oisin Mac Aodha, Gabriel J. Brostow &amp;quot;Unsupervised Monocular Depth Estimation with Left-Right Consistency&amp;quot; [https://arxiv.org/abs/1609.03677v3]&amp;lt;/ref&amp;gt; предлагается сверточная нейронная сеть, обученная выполнять оценку глубины одного изображения без реальных данных. Авторы предлагают сетевую архитектуру, которая выполняет сквозную оценку глубины изображения, полученного с 1 камеры, без учителя, что обеспечивает согласованность глубины слева направо внутри сети.&lt;br /&gt;
Сеть оценивает глубину, выводя смещения, которые искажают левое изображение, чтобы соответствовать правому. Левое входное изображение используется для вывода смещений слева направо и справа налево. Сеть генерирует предсказанное изображение с обратным отображением с помощью билинейного сэмплера. Это приводит к полностью дифференциальной модели формирования изображения.&lt;br /&gt;
Сверточная архитектура вдохновлена так же DispNet'ом. Она состоит из двух частей—кодера и декодера. Декодер использует пропуск соединений из блоков активации кодера, чтобы распознавать детали с высоким разрешением. Сеть предсказывает две карты смещений — слева направо и справа налево.&lt;br /&gt;
В процессе обучения сеть генерирует изображение путем выборки пикселей из противоположного стереоизображения. Модель формирования изображения использует сэмплер изображений из пространственной трансформаторной сети (STN) для выборки входного изображения с помощью карты смещений. Авторы обучали и тестировали данные на KITTY&amp;lt;ref&amp;gt;http://www.cvlibs.net/datasets/kitti/&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Прогнозирование глубины без датчиков: использование структуры для обучения без учителя по монокулярным видео (2019) ===&lt;br /&gt;
&lt;br /&gt;
[[Файл:ego-motion.png|thumb|500px| Рисунок 7. Сравнение обычного метода построения карты глубин с помощью эго-движения и предложенного в статье, который использует движения для различных 3-D объектов &amp;lt;ref name=&amp;quot;aaaif&amp;quot;&amp;gt;Vincent Casser, Soeren Pirk, Reza Mahjourian, Anelia Angelova &amp;quot;Depth Prediction Without the Sensors: Leveraging Structure for Unsupervised Learning from Monocular Videos&amp;quot; Figure 2 &amp;lt;/ref&amp;gt;]]&lt;br /&gt;
&lt;br /&gt;
'''Визуальная одометрия''' &amp;lt;ref name=&amp;quot;визуальная одометрия&amp;quot;&amp;gt;Статья о визуальной одометрии[https://en.wikipedia.org/wiki/Visual_odometry]&amp;lt;/ref&amp;gt; {{---}} метод оценки положения и ориентации робота или иного устройства в пространстве с помощью анализа последовательности изображений, снятых установленной на нем камерой.&lt;br /&gt;
&lt;br /&gt;
Данная статья &amp;lt;ref name=&amp;quot;aaai&amp;quot;&amp;gt; Vincent Casser, Soeren Pirk, Reza Mahjourian, Anelia Angelova &amp;quot;Depth Prediction Without the Sensors: Leveraging Structure for Unsupervised Learning from Monocular Videos&amp;quot; [https://arxiv.org/abs/1811.06152v1]&amp;lt;/ref&amp;gt; посвящена задаче обучения без учителя глубины сцены и визуальной одометрии робота, где наблюдение обеспечивается видеозаписями с одной камеры. Это делается путем введения геометрической структуры в процесс обучения. Он включает в себя моделирование сцены и отдельных объектов, одометрии камеры и движения объектов, изучаемых с помощью монокулярных видеовходов. Авторы вводят модель движения объекта, которая имеет ту же архитектуру, что и сеть определения визуальной одометрии. Она принимает последовательность изображений RGB в качестве входных данных и дополняется предварительно вычисленными масками сегментации экземпляров. Работа модели движения заключается в том, чтобы научиться предсказывать векторы трансформации каждого объекта в трехмерном пространстве. Это создает видимость наблюдаемого объекта в соответствующем целевом кадре. Авторы проверяли прогнозирование глубины на KITTY.&lt;br /&gt;
&lt;br /&gt;
== См. также ==&lt;br /&gt;
&lt;br /&gt;
* [[Компьютерное зрение]]&lt;br /&gt;
&lt;br /&gt;
* [[Оценка положения]]&lt;br /&gt;
&lt;br /&gt;
* [[Задача нахождения объектов на изображении]]&lt;br /&gt;
&lt;br /&gt;
== Примечания ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Источники информации ==&lt;br /&gt;
&lt;br /&gt;
* Чугунов Р. А., Кульневич А. Д., Аксенов С. В. Методика построения карт глубины стереоизображения с помощью капсульной нейронной сети //Доклады Томского государственного университета систем управления и радиоэлектроники. – 2019. – Т. 22. – №. 1.[https://cyberleninka.ru/article/n/metodika-postroeniya-kart-glubiny-stereoizobrazheniya-s-pomoschyu-kapsulnoy-neyronnoy-seti/viewer]&lt;br /&gt;
&lt;br /&gt;
* 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]&lt;br /&gt;
&lt;br /&gt;
*  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]&lt;br /&gt;
&lt;br /&gt;
* 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]&lt;br /&gt;
&lt;br /&gt;
* 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]&lt;br /&gt;
&lt;br /&gt;
[[Категория:Машинное обучение]]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Компьютерное зрение]]&lt;/div&gt;</summary>
		<author><name>Frak</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9A%D0%B0%D1%80%D1%82%D0%B0_%D0%B3%D0%BB%D1%83%D0%B1%D0%B8%D0%BD%D1%8B&amp;diff=80266</id>
		<title>Карта глубины</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9A%D0%B0%D1%80%D1%82%D0%B0_%D0%B3%D0%BB%D1%83%D0%B1%D0%B8%D0%BD%D1%8B&amp;diff=80266"/>
				<updated>2021-01-23T11:55:15Z</updated>
		
		<summary type="html">&lt;p&gt;Frak: /* Построение с помощью PlanetNet (2018) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Карта глубины''' (англ. depth map) — это изображение, где для каждого пикселя вместо цвета хранится его расстояние до камеры.&amp;lt;ref name=&amp;quot;def&amp;quot;&amp;gt;Alexey Kurakin &amp;quot;Основы стереозрения&amp;quot;[https://habr.com/ru/post/130300/]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В компьютерной 3D-графике и [[Компьютерное зрение|компьютерном зрении]] карта глубины представляет собой изображение или канал изображения, содержащий информацию о расстоянии поверхностей объектов сцены от точки обзора. &lt;br /&gt;
&lt;br /&gt;
== Мотивация ==&lt;br /&gt;
&lt;br /&gt;
Карта глубины изображения содержит в себе информацию о расстоянии между различными объектами или частями объектов, представленных на данном изображении. Эта информация может быть полезна во многих областях. &lt;br /&gt;
 &lt;br /&gt;
* Для создания 3D-сенсеров. Они способны строить трёхмерную картину своего окружения, используются для [[Оценка положения|ориентации]] автономного робота в пространстве.&lt;br /&gt;
&lt;br /&gt;
* Для систем, использующих технологии дополненной и виртуальной реальности. Например, камеры, которые фиксируют действия пользователя в видеоиграх с технологией виртуальной реальности.&lt;br /&gt;
&lt;br /&gt;
* В беспилотных автомобилях, которые также используют карты глубин для ориентации на дороге.&lt;br /&gt;
&lt;br /&gt;
* Для обработки фотографий. Например, карты глубин используют для размытия фона на фотографии, чтобы добиться более чёткого выделения человека&amp;lt;ref name=&amp;quot;expls&amp;quot;&amp;gt;Примеры из &amp;quot;Research Guide for Depth Estimation with Deep Learning&amp;quot;[https://www.kdnuggets.com/2019/11/research-guide-depth-estimation-deep-learning.html]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Методы построения карты глубины ==&lt;br /&gt;
&lt;br /&gt;
Карта глубины может быть получена с помощью '''специальной камеры глубины''', по '''стереопаре изображений''', а также с помощью [[Нейронные сети, перцептрон|'''нейронных сетей''']].&lt;br /&gt;
&lt;br /&gt;
== Построение с помощью специальных камер глубин == &lt;br /&gt;
&lt;br /&gt;
[[Файл:ToF.jpg|thumb|250px| Рисунок 1. Пример работы ToF-камеры.]]&lt;br /&gt;
&lt;br /&gt;
* '''ToF-камеры''' (англ. Time of Flight). Принцип работы данной камеры основан на измерении задержки света, с которой свет возвращается в каждую точку. Имея несколько сенсоров с разным временем накопления заряда и, зная сдвиг по времени относительно источника для каждого сенсора и снятой яркости вспышки, мы можем рассчитать сдвиг и, соответственно, расстояние до объекта. Причем чем больше сенсоров задействовано, тем выше точность метода.&lt;br /&gt;
&lt;br /&gt;
* '''Структурированные световые камеры''' (aнгл. Structured light camera). Принцип работы данной камеры один из самых старых. Ставим проектор, который создает, например, горизонтальные (а потом и вертикальные) полоски и рядом камеру, которая снимает картину с полосками. В некоторых вариантах используется псевдослучайный набор точек (например MS Kinect {{---}} бесконтактный сенсорный игровой контроллер, для консолей Xbox 360, Xbox One и персональных компьютеров под управлением ОС Windows&amp;lt;ref name=&amp;quot;kinect&amp;quot;&amp;gt; О MicriSoft Kinect [https://en.wikipedia.org/wiki/Kinect]&amp;lt;/ref&amp;gt;). Проекторы обычно работают в инфракрасном спектре, чтобы не мешать пользователям. Поскольку камера и проектор смещены друг относительно друга, то и полоски также будут смещаться пропорционально расстоянию до объекта. Измеряя это смещение, мы можем рассчитывать расстояние до объекта. Вполне понятны сложности, с которыми можно столкнуться при использовании этого метода: это необходимость настройки и калибровки проектора, и проблема того, что нам нужно относительно благоприятное освещение. К примеру, солнце может засветить полосы, и что-то распознать будет тяжело.&lt;br /&gt;
&lt;br /&gt;
== Построения карты глубины по стереопаре ==&lt;br /&gt;
&lt;br /&gt;
Идея, лежащая в основе построения карты глубины по '''стереопаре''', проста. Для каждой точки на одном изображении выполняется поиск [[Ключевые точки изображения|парной ей точки]]&amp;lt;sup&amp;gt;[на 21.01.21 не создан]&amp;lt;/sup&amp;gt; на другом изображении. А по паре соответствующих точек можно выполнить [[Триангуляция полигонов (ушная + монотонная)|триангуляцию]] и определить координаты их [[Отображения|прообраза]] в трехмерном пространстве. Зная трехмерные координаты прообраза, глубина вычисляется как расстояние до плоскости камеры.&lt;br /&gt;
&lt;br /&gt;
Парную точку нужно искать на эпиполярной&amp;lt;ref name=&amp;quot;Epipolar&amp;quot;&amp;gt;Информация о эпиполярной геометрии[https://ru.qaz.wiki/wiki/Epipolar_geometry]&amp;lt;/ref&amp;gt; линии. Соответственно, для упрощения поиска изображения выравнивают так, чтобы все эпиполярные линии были параллельны сторонам изображения (обычно горизонтальны). Более того, изображения выравнивают так, чтобы для точки с координатами &amp;lt;math&amp;gt;(x_0, y_0)&amp;lt;/math&amp;gt; соответствующая ей эпиполярная линия задавалась уравнением &amp;lt;math&amp;gt;x = x_0&amp;lt;/math&amp;gt;. Тогда для каждой точки, соответствующую ей парную точку, нужно искать в той-же строчке на изображении со второй камеры. Такой процесс выравнивания изображений называют '''ректификацией''' (rectification).&lt;br /&gt;
&lt;br /&gt;
[[Файл:Stereo.png|thumb|300px| Рисунок 2. Результат построения карты смещений по двум картинкам.&amp;lt;ref name=&amp;quot;img2&amp;quot;&amp;gt; &amp;quot;Основы стереозрения&amp;quot; Рис. 3 [https://habr.com/ru/post/130300/]&amp;lt;/ref&amp;gt;]]&lt;br /&gt;
&lt;br /&gt;
После того, как изображения '''ректифицированы''', выполняют поиск соответствующих пар точек. Для каждого пикселя одной картинки с координатами &amp;lt;math&amp;gt;(x_0, y_0)&amp;lt;/math&amp;gt; выполняется поиск пикселя на другой картинке. При этом предполагается, что пиксель на второй картинке должен иметь координаты &amp;lt;math&amp;gt;(x_0 - d, y_0)&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;d&amp;lt;/math&amp;gt; — величина называемая смещением. Поиск соответствующего пикселя выполняется путем вычисления максимума функции отклика, в качестве которой может выступать, например, [[Корреляция случайных величин|корреляция]] окрестностей пикселей. В результате получается карта смещений, пример которой приведен на рис. 2. &lt;br /&gt;
&lt;br /&gt;
Собственно значения глубины обратно пропорциональны величине смещения пикселей.&lt;br /&gt;
&lt;br /&gt;
== Использование нейронных сетей ==&lt;br /&gt;
&lt;br /&gt;
Существует множество методов, использующих нейронные сети. Приведём пару примеров таких решений.&lt;br /&gt;
&lt;br /&gt;
=== Построение с помощью свёрточных нейронных сетей ===&lt;br /&gt;
&lt;br /&gt;
Используем [[Сверточные нейронные сети|сверточные нейронные сети]] для построения карты глубины следующим образом&lt;br /&gt;
&amp;lt;ref name=&amp;quot;cnn_rew&amp;quot;&amp;gt; Xiaobai Ma, Zhenglin Geng, Zhi Bie &amp;quot;Depth Estimation from Single Image Using CNN-Residual Network&amp;quot; [http://cs231n.stanford.edu/reports/2017/pdfs/203.pdf]&amp;lt;/ref&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
*  '''Создаем карту смещений''': используя два изображения с камер, близко расположенных друг к другу, создаем карту различий, точно так же как в методе построения по стереопаре.&lt;br /&gt;
&lt;br /&gt;
* '''Ищем реальную карту глубины для обучения''': с помощью карты смещений, можем построить карту глубины &amp;lt;math&amp;gt;y&amp;lt;/math&amp;gt; вышеописанным способом. Также допустимы другие способы построения карты глубины для обучения нейронной сети.&lt;br /&gt;
&lt;br /&gt;
*  '''Функция потерь''': определим [[Функция потерь и эмпирический риск|функцию потерь]], для предсказанной карты &amp;lt;math&amp;gt;\hat y&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;d_i = log( y_i) - log (\hat y_i)&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;\lambda \in [0, 1]&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;n &amp;lt;/math&amp;gt; — количество пикселей. &amp;lt;math&amp;gt;L(y, \hat y) =  \frac{1}{n} \sum\limits_{i} d^2_i - \frac{\lambda}{n^2}(\sum\limits_{i} d_i)^2&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;y_i&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;\hat y_i&amp;lt;/math&amp;gt; это i пискель для для реальной карты глубин и для предсказанной карты, соответственно. Гиперпараметр &amp;lt;math&amp;gt;\lambda&amp;lt;/math&amp;gt;, нужен для того, чтобы функция потерь меньше росла при большом количестве пикселей, предсказание для которых достаточно близко к реальному. Например, если &amp;lt;math&amp;gt;\lambda = 0&amp;lt;/math&amp;gt;, то мы просто придём к оптимизации в L2 для &amp;lt;math&amp;gt;d_i&amp;lt;/math&amp;gt;, т.е. &amp;lt;math&amp;gt;L(y, \hat y) =  \frac{1}{n} \sum\limits_{i} d^2_i &amp;lt;/math&amp;gt;.&amp;lt;ref name=&amp;quot;loss&amp;quot;&amp;gt;David Eigen, Christian Puhrsch, Rob Fergus &amp;quot;Depth Map Prediction from a Single Imageusing a Multi-Scale Deep Network&amp;quot; стр. 5&amp;lt;/ref&amp;gt; &lt;br /&gt;
&lt;br /&gt;
* '''Обучение свёрточной нейронной сети''': далее идёт обычное обучение нейронной сети по карте различий путем обратного распространения ошибки, оптимизируя заданную выше функцию потерь.&lt;br /&gt;
&lt;br /&gt;
В итоге, по обученной нейронной сети мы можем создавать карту глубины, не проводя расчётов для поиска карт смещения и имея только изображение объекта или пространства. &amp;lt;ref name=&amp;quot;cnn&amp;quot;&amp;gt;Реализация, основанная на свёрточных нейронных сетях [https://www.kaggle.com/kmader/cnn-for-generating-depth-maps-from-rgb-images]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Также возможно использование усложнённых архитектур свёрточных нейронных сетей типа '''DenseNet'''.&lt;br /&gt;
&lt;br /&gt;
'''DenseNet'''&amp;lt;ref name=&amp;quot;DenseNet&amp;quot;&amp;gt;Оригинальная статья описывающая DenseNet [https://arxiv.org/abs/1611.09326]&amp;lt;/ref&amp;gt; {{---}} это свёрточная нейронные сеть, в которой выход каждого из слоев подаётся на вход всем слоям, лежащих ниже.&lt;br /&gt;
&lt;br /&gt;
=== Построение с помощью капсульных нейронных сетей ===&lt;br /&gt;
&lt;br /&gt;
Свёрточные нейронные сети способны регистрировать только наличие какого-либо объекта на картинке, не кодируя его ориентацию и положение. Но '''капсульные нейронные сети''' (англ. Capsule Neural Network)&amp;lt;ref name=&amp;quot;CapsNet&amp;quot;&amp;gt;Sara Sabour, Nicholas Frosst, Geoffrey E. Hinton &amp;quot;Dynamic Routing Between Capsules&amp;quot; [https://arxiv.org/pdf/1710.09829.pdf]&amp;lt;/ref&amp;gt; лишены этого недостатка.&lt;br /&gt;
&lt;br /&gt;
[[Файл:capsnet.jpg|thumb|400px| Рисунок 3. Структура капсульной нейронной сети &amp;lt;ref name=&amp;quot;img&amp;quot;&amp;gt; &amp;quot;Design and Investigation of Capsule Networks for Sentence Classification&amp;quot; Figure 2. [https://www.mdpi.com/2076-3417/9/11/2200/htm]&amp;lt;/ref&amp;gt;.]]&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Капсульная нейронная сеть&amp;quot; состоит из капсул или групп нейронов, чтобы идентифицировать закономерности в изображении. Эта информация поступает в виде векторов, содержащих ориентацию и положение узоров на изображении, которое затем принимается капсулами более высокого уровня. Капсулы более высокого уровня обрабатывают эту информацию из нескольких капсул более низкого уровня и впоследствии выдают прогноз. Капсулы одного уровня не имеют связей друг с другом и вычисляют информацию независимо друг от друга. Капсулы образуются путем разделения выходных данных из свёрточного слоя. Мы делим наш трехмерный вектор на капсулы методом &amp;quot;нарезания&amp;quot; таким образом, чтобы в каждой капсуле была информация о каждом пикселе, т.е. по трехмерной координате.&lt;br /&gt;
 &lt;br /&gt;
Состояние нейронов капсульной нейронной сети внутри изображения фиксирует свойство области или объекта внутри изображения: его положение и ориентацию.&lt;br /&gt;
&lt;br /&gt;
Использование капсульной нейронной сети аналогично использованию обычных свёрточных сетей, описанному выше. &lt;br /&gt;
В целом, данная сеть показывает более точные результаты предсказания глубины.&lt;br /&gt;
&lt;br /&gt;
=== Построение с помощью PlanetNet (2018)===&lt;br /&gt;
&lt;br /&gt;
Так же есть архитектуры, решающие данную задачу и без обучения на карте смещений, построенной с помощью двух изображений. Одной из таких является '''PlaneNet'''. &lt;br /&gt;
&lt;br /&gt;
'''PlaneNet'''&amp;lt;ref name=&amp;quot;planetNet&amp;quot;&amp;gt; Chen Liu, Jimei Yang, Duygu Ceylan, Ersin Yumer, Yasutaka Furukawa &amp;quot;PlaneNet: Piece-wise Planar Reconstruction from a Single RGB Image&amp;quot; [https://arxiv.org/abs/1804.06278v1]&amp;lt;/ref&amp;gt; {{---}} глубокая нейронная сеть, построенная на расширенных остаточных сетях (aнгл. Dilated Residual Networks или DRN)&amp;lt;ref name=&amp;quot;drn&amp;quot;&amp;gt; Fisher Yu, Vladlen Koltun, Thomas Funkhouser &amp;quot;Dilated Residual Networks&amp;quot; [https://arxiv.org/abs/1705.09914]&amp;lt;/ref&amp;gt;. Она получает карту глубин путем композиции выходов трех подзадач:&lt;br /&gt;
&lt;br /&gt;
[[Файл:Plane net2.jpg|thumb|500px| Рисунок 4. Прогнозируемые PlaneNet параметры по одной rgb картинке: cегметация плоскости, параметры плоскостей, неплоская карта глубины&amp;lt;ref name=&amp;quot;img4&amp;quot;&amp;gt; Chen Liu, Jimei Yang, Duygu Ceylan, Ersin Yumer, Yasutaka Furukawa &amp;quot;PlaneNet: Piece-wise Planar Reconstruction from a Single RGB Image&amp;quot; Figure 2.&amp;lt;/ref&amp;gt;.]]&lt;br /&gt;
&lt;br /&gt;
* '''Параметры плоскостей''': пытаемся предсказать количество плоскостей $K$, а после ищем на изображение $K$ плоских поверхностей, каждая поверхность задаётся тремя параметрами &amp;lt;math&amp;gt;P_i&amp;lt;/math&amp;gt;: нормальная, прямая и сдвиг. Функцию ошибки определим следующим образом: &amp;lt;math&amp;gt;L = \sum_{i=1}^{K} \min_{j \in [1, \hat K]} \| \hat P_j - P_i \|&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;\hat K, \hat P_i&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;K, P_i&amp;lt;/math&amp;gt;, предсказанные и реальные количество и параметры плоскостей, соответственно.&lt;br /&gt;
&lt;br /&gt;
* [[Сегментация изображений|'''Сегментация плоскости''']]: ищем группы пикселей, каждая из которых характеризует один смысловой объект.&lt;br /&gt;
&lt;br /&gt;
* '''Неплоская карта глубины''': ищем одно-канальную (или неплоскую) карту глубины, то есть карту глубины, где каждый пиксель, либо на глубине 0, либо на глубине 1.&lt;br /&gt;
&lt;br /&gt;
=== Обучение без учителя поиска карты глубины из видео (2017) ===&lt;br /&gt;
&lt;br /&gt;
Авторы данной статьи &amp;lt;ref name=&amp;quot;cvrp_dnn&amp;quot;&amp;gt;Tinghui Zhou, Matthew Brown, Noah Snavely, David G. Lowe &amp;quot;Unsupervised Learning of Depth and Ego-Motion from Video&amp;quot; [https://arxiv.org/abs/1704.07813v2]&amp;lt;/ref&amp;gt; предлагают методику оценки глубины одной картинки без учителя и движения камеры из беспорядочной видео нарезки. &lt;br /&gt;
&lt;br /&gt;
[[Файл:dnn.png|thumb|400px| Рисунок 5. Aрхитектура сети на базе DispNet  &amp;lt;ref name=&amp;quot;cvrp&amp;quot;&amp;gt;Tinghui Zhou, Matthew Brown, Noah Snavely, David G. Lowe &amp;quot;Unsupervised Learning of Depth and Ego-Motion from Video&amp;quot; Figure 4&amp;lt;/ref&amp;gt;]]&lt;br /&gt;
&lt;br /&gt;
Будем использовать сверточные нейронные сети c глубиной одного вида и многовидовой камерой из неупорядоченного видеоряда. Метод базируется на синтезе видов. Сеть загружает фото объекта в качестве данных ввода и выводит глубину пикселя. Вид объекта может быть синтезирован исходя из глубины на каждого пикселя снимка позиционирования и четкости ближнего вида. Синтез может быть  дифференцирован с CNN по геометрии и модулям позиционирования.&lt;br /&gt;
Авторы взяли на вооружение архитектуру DispNet&amp;lt;ref name=&amp;quot;dispNet&amp;quot;&amp;gt; Nikolaus Mayer, Eddy Ilg, Philip Hausser, Philipp Fischer &amp;quot;A Large Dataset to Train Convolutional Networks&lt;br /&gt;
for Disparity, Optical Flow, and Scene Flow Estimation&amp;quot; [https://arxiv.org/pdf/1512.02134.pdf]&amp;lt;/ref&amp;gt;, которая сконструирована в виде энкодера и декодера с пропущенными соединениями и многомасштабными блоками предсказания. Функция активации ReLU отслеживает все сверточные слои кроме предсказанных.&lt;br /&gt;
Вид объекта со всех источников формирует входные данные в сеть позиционной оценки. На выходе получается относительная позиция между видом объекта и видом каждого источника. Сеть состоит из двух 7 шаговых сверток за которым следует свертка 1 х 1. За исключением последнего слоя свертки, где применяется нелинейная активация, все другие отслеживаются функцией активации ReLU. Сеть объяснимых предсказаний дает доступ к первым пяти закодированным слоям сети позиционирования. За ней следуют 5 слоев обратной свертки с многомасштабными блоками предсказаний. Кроме слоев предсказаний все уровни свертки и обратной свертки отслеживаются ReLU.&lt;br /&gt;
&lt;br /&gt;
=== Неконтролируемая оценка глубины монокуляра с консистенцией слева направо (2017) ===&lt;br /&gt;
&lt;br /&gt;
[[Файл:Samplers.jpg|thumb|240px| Рисунок 6. Примерная архитектура сети с консистенцией слева направо &amp;lt;ref name=&amp;quot;cvrp2017&amp;quot;&amp;gt;Clément Godard, Oisin Mac Aodha, Gabriel J. Brostow &amp;quot;Unsupervised Monocular Depth Estimation with Left-Right Consistency&amp;quot; Figure 3 &amp;lt;/ref&amp;gt;]]&lt;br /&gt;
&lt;br /&gt;
В данной работе&amp;lt;ref name=&amp;quot;leftrigth&amp;quot;&amp;gt; Clément Godard, Oisin Mac Aodha, Gabriel J. Brostow &amp;quot;Unsupervised Monocular Depth Estimation with Left-Right Consistency&amp;quot; [https://arxiv.org/abs/1609.03677v3]&amp;lt;/ref&amp;gt; предлагается сверточная нейронная сеть, обученная выполнять оценку глубины одного изображения без реальных данных. Авторы предлагают сетевую архитектуру, которая выполняет сквозную оценку глубины изображения, полученного с 1 камеры, без учителя, что обеспечивает согласованность глубины слева направо внутри сети.&lt;br /&gt;
Сеть оценивает глубину, выводя смещения, которые искажают левое изображение, чтобы соответствовать правому. Левое входное изображение используется для вывода смещений слева направо и справа налево. Сеть генерирует предсказанное изображение с обратным отображением с помощью билинейного сэмплера. Это приводит к полностью дифференциальной модели формирования изображения.&lt;br /&gt;
Сверточная архитектура вдохновлена так же DispNet'ом. Она состоит из двух частей—кодера и декодера. Декодер использует пропуск соединений из блоков активации кодера, чтобы распознавать детали с высоким разрешением. Сеть предсказывает две карты смещений — слева направо и справа налево.&lt;br /&gt;
В процессе обучения сеть генерирует изображение путем выборки пикселей из противоположного стереоизображения. Модель формирования изображения использует сэмплер изображений из пространственной трансформаторной сети (STN) для выборки входного изображения с помощью карты смещений.&lt;br /&gt;
&lt;br /&gt;
=== Прогнозирование глубины без датчиков: использование структуры для обучения без учителя по монокулярным видео (2019) ===&lt;br /&gt;
&lt;br /&gt;
[[Файл:ego-motion.png|thumb|500px| Рисунок 7. Сравнение обычного метода построения карты глубин с помощью эго-движения и предложенного в статье, который использует движения для различных 3-D объектов &amp;lt;ref name=&amp;quot;aaaif&amp;quot;&amp;gt;Vincent Casser, Soeren Pirk, Reza Mahjourian, Anelia Angelova &amp;quot;Depth Prediction Without the Sensors: Leveraging Structure for Unsupervised Learning from Monocular Videos&amp;quot; Figure 2 &amp;lt;/ref&amp;gt;]]&lt;br /&gt;
&lt;br /&gt;
'''Визуальная одометрия''' &amp;lt;ref name=&amp;quot;визуальная одометрия&amp;quot;&amp;gt;Статья о визуальной одометрии[https://en.wikipedia.org/wiki/Visual_odometry]&amp;lt;/ref&amp;gt; {{---}} метод оценки положения и ориентации робота или иного устройства в пространстве с помощью анализа последовательности изображений, снятых установленной на нем камерой.&lt;br /&gt;
&lt;br /&gt;
Данная статья &amp;lt;ref name=&amp;quot;aaai&amp;quot;&amp;gt; Vincent Casser, Soeren Pirk, Reza Mahjourian, Anelia Angelova &amp;quot;Depth Prediction Without the Sensors: Leveraging Structure for Unsupervised Learning from Monocular Videos&amp;quot; [https://arxiv.org/abs/1811.06152v1]&amp;lt;/ref&amp;gt; посвящена задаче обучения без учителя глубины сцены и визуальной одометрии робота, где наблюдение обеспечивается видеозаписями с одной камеры. Это делается путем введения геометрической структуры в процесс обучения. Он включает в себя моделирование сцены и отдельных объектов, одометрии камеры и движения объектов, изучаемых с помощью монокулярных видеовходов. Авторы вводят модель движения объекта, которая имеет ту же архитектуру, что и сеть определения визуальной одометрии. Она принимает последовательность изображений RGB в качестве входных данных и дополняется предварительно вычисленными масками сегментации экземпляров. Работа модели движения заключается в том, чтобы научиться предсказывать векторы трансформации каждого объекта в трехмерном пространстве. Это создает видимость наблюдаемого объекта в соответствующем целевом кадре.&lt;br /&gt;
&lt;br /&gt;
== См. также ==&lt;br /&gt;
&lt;br /&gt;
* [[Компьютерное зрение]]&lt;br /&gt;
&lt;br /&gt;
* [[Оценка положения]]&lt;br /&gt;
&lt;br /&gt;
* [[Задача нахождения объектов на изображении]]&lt;br /&gt;
&lt;br /&gt;
== Примечания ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Источники информации ==&lt;br /&gt;
&lt;br /&gt;
* Чугунов Р. А., Кульневич А. Д., Аксенов С. В. Методика построения карт глубины стереоизображения с помощью капсульной нейронной сети //Доклады Томского государственного университета систем управления и радиоэлектроники. – 2019. – Т. 22. – №. 1.[https://cyberleninka.ru/article/n/metodika-postroeniya-kart-glubiny-stereoizobrazheniya-s-pomoschyu-kapsulnoy-neyronnoy-seti/viewer]&lt;br /&gt;
&lt;br /&gt;
* 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]&lt;br /&gt;
&lt;br /&gt;
*  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]&lt;br /&gt;
&lt;br /&gt;
* 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]&lt;br /&gt;
&lt;br /&gt;
* 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]&lt;br /&gt;
&lt;br /&gt;
[[Категория:Машинное обучение]]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Компьютерное зрение]]&lt;/div&gt;</summary>
		<author><name>Frak</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9A%D0%B0%D1%80%D1%82%D0%B0_%D0%B3%D0%BB%D1%83%D0%B1%D0%B8%D0%BD%D1%8B&amp;diff=80265</id>
		<title>Карта глубины</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9A%D0%B0%D1%80%D1%82%D0%B0_%D0%B3%D0%BB%D1%83%D0%B1%D0%B8%D0%BD%D1%8B&amp;diff=80265"/>
				<updated>2021-01-23T11:51:48Z</updated>
		
		<summary type="html">&lt;p&gt;Frak: /* Построение с помощью PlanetNet (2018) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Карта глубины''' (англ. depth map) — это изображение, где для каждого пикселя вместо цвета хранится его расстояние до камеры.&amp;lt;ref name=&amp;quot;def&amp;quot;&amp;gt;Alexey Kurakin &amp;quot;Основы стереозрения&amp;quot;[https://habr.com/ru/post/130300/]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В компьютерной 3D-графике и [[Компьютерное зрение|компьютерном зрении]] карта глубины представляет собой изображение или канал изображения, содержащий информацию о расстоянии поверхностей объектов сцены от точки обзора. &lt;br /&gt;
&lt;br /&gt;
== Мотивация ==&lt;br /&gt;
&lt;br /&gt;
Карта глубины изображения содержит в себе информацию о расстоянии между различными объектами или частями объектов, представленных на данном изображении. Эта информация может быть полезна во многих областях. &lt;br /&gt;
 &lt;br /&gt;
* Для создания 3D-сенсеров. Они способны строить трёхмерную картину своего окружения, используются для [[Оценка положения|ориентации]] автономного робота в пространстве.&lt;br /&gt;
&lt;br /&gt;
* Для систем, использующих технологии дополненной и виртуальной реальности. Например, камеры, которые фиксируют действия пользователя в видеоиграх с технологией виртуальной реальности.&lt;br /&gt;
&lt;br /&gt;
* В беспилотных автомобилях, которые также используют карты глубин для ориентации на дороге.&lt;br /&gt;
&lt;br /&gt;
* Для обработки фотографий. Например, карты глубин используют для размытия фона на фотографии, чтобы добиться более чёткого выделения человека&amp;lt;ref name=&amp;quot;expls&amp;quot;&amp;gt;Примеры из &amp;quot;Research Guide for Depth Estimation with Deep Learning&amp;quot;[https://www.kdnuggets.com/2019/11/research-guide-depth-estimation-deep-learning.html]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Методы построения карты глубины ==&lt;br /&gt;
&lt;br /&gt;
Карта глубины может быть получена с помощью '''специальной камеры глубины''', по '''стереопаре изображений''', а также с помощью [[Нейронные сети, перцептрон|'''нейронных сетей''']].&lt;br /&gt;
&lt;br /&gt;
== Построение с помощью специальных камер глубин == &lt;br /&gt;
&lt;br /&gt;
[[Файл:ToF.jpg|thumb|250px| Рисунок 1. Пример работы ToF-камеры.]]&lt;br /&gt;
&lt;br /&gt;
* '''ToF-камеры''' (англ. Time of Flight). Принцип работы данной камеры основан на измерении задержки света, с которой свет возвращается в каждую точку. Имея несколько сенсоров с разным временем накопления заряда и, зная сдвиг по времени относительно источника для каждого сенсора и снятой яркости вспышки, мы можем рассчитать сдвиг и, соответственно, расстояние до объекта. Причем чем больше сенсоров задействовано, тем выше точность метода.&lt;br /&gt;
&lt;br /&gt;
* '''Структурированные световые камеры''' (aнгл. Structured light camera). Принцип работы данной камеры один из самых старых. Ставим проектор, который создает, например, горизонтальные (а потом и вертикальные) полоски и рядом камеру, которая снимает картину с полосками. В некоторых вариантах используется псевдослучайный набор точек (например MS Kinect {{---}} бесконтактный сенсорный игровой контроллер, для консолей Xbox 360, Xbox One и персональных компьютеров под управлением ОС Windows&amp;lt;ref name=&amp;quot;kinect&amp;quot;&amp;gt; О MicriSoft Kinect [https://en.wikipedia.org/wiki/Kinect]&amp;lt;/ref&amp;gt;). Проекторы обычно работают в инфракрасном спектре, чтобы не мешать пользователям. Поскольку камера и проектор смещены друг относительно друга, то и полоски также будут смещаться пропорционально расстоянию до объекта. Измеряя это смещение, мы можем рассчитывать расстояние до объекта. Вполне понятны сложности, с которыми можно столкнуться при использовании этого метода: это необходимость настройки и калибровки проектора, и проблема того, что нам нужно относительно благоприятное освещение. К примеру, солнце может засветить полосы, и что-то распознать будет тяжело.&lt;br /&gt;
&lt;br /&gt;
== Построения карты глубины по стереопаре ==&lt;br /&gt;
&lt;br /&gt;
Идея, лежащая в основе построения карты глубины по '''стереопаре''', проста. Для каждой точки на одном изображении выполняется поиск [[Ключевые точки изображения|парной ей точки]]&amp;lt;sup&amp;gt;[на 21.01.21 не создан]&amp;lt;/sup&amp;gt; на другом изображении. А по паре соответствующих точек можно выполнить [[Триангуляция полигонов (ушная + монотонная)|триангуляцию]] и определить координаты их [[Отображения|прообраза]] в трехмерном пространстве. Зная трехмерные координаты прообраза, глубина вычисляется как расстояние до плоскости камеры.&lt;br /&gt;
&lt;br /&gt;
Парную точку нужно искать на эпиполярной&amp;lt;ref name=&amp;quot;Epipolar&amp;quot;&amp;gt;Информация о эпиполярной геометрии[https://ru.qaz.wiki/wiki/Epipolar_geometry]&amp;lt;/ref&amp;gt; линии. Соответственно, для упрощения поиска изображения выравнивают так, чтобы все эпиполярные линии были параллельны сторонам изображения (обычно горизонтальны). Более того, изображения выравнивают так, чтобы для точки с координатами &amp;lt;math&amp;gt;(x_0, y_0)&amp;lt;/math&amp;gt; соответствующая ей эпиполярная линия задавалась уравнением &amp;lt;math&amp;gt;x = x_0&amp;lt;/math&amp;gt;. Тогда для каждой точки, соответствующую ей парную точку, нужно искать в той-же строчке на изображении со второй камеры. Такой процесс выравнивания изображений называют '''ректификацией''' (rectification).&lt;br /&gt;
&lt;br /&gt;
[[Файл:Stereo.png|thumb|300px| Рисунок 2. Результат построения карты смещений по двум картинкам.&amp;lt;ref name=&amp;quot;img2&amp;quot;&amp;gt; &amp;quot;Основы стереозрения&amp;quot; Рис. 3 [https://habr.com/ru/post/130300/]&amp;lt;/ref&amp;gt;]]&lt;br /&gt;
&lt;br /&gt;
После того, как изображения '''ректифицированы''', выполняют поиск соответствующих пар точек. Для каждого пикселя одной картинки с координатами &amp;lt;math&amp;gt;(x_0, y_0)&amp;lt;/math&amp;gt; выполняется поиск пикселя на другой картинке. При этом предполагается, что пиксель на второй картинке должен иметь координаты &amp;lt;math&amp;gt;(x_0 - d, y_0)&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;d&amp;lt;/math&amp;gt; — величина называемая смещением. Поиск соответствующего пикселя выполняется путем вычисления максимума функции отклика, в качестве которой может выступать, например, [[Корреляция случайных величин|корреляция]] окрестностей пикселей. В результате получается карта смещений, пример которой приведен на рис. 2. &lt;br /&gt;
&lt;br /&gt;
Собственно значения глубины обратно пропорциональны величине смещения пикселей.&lt;br /&gt;
&lt;br /&gt;
== Использование нейронных сетей ==&lt;br /&gt;
&lt;br /&gt;
Существует множество методов, использующих нейронные сети. Приведём пару примеров таких решений.&lt;br /&gt;
&lt;br /&gt;
=== Построение с помощью свёрточных нейронных сетей ===&lt;br /&gt;
&lt;br /&gt;
Используем [[Сверточные нейронные сети|сверточные нейронные сети]] для построения карты глубины следующим образом&lt;br /&gt;
&amp;lt;ref name=&amp;quot;cnn_rew&amp;quot;&amp;gt; Xiaobai Ma, Zhenglin Geng, Zhi Bie &amp;quot;Depth Estimation from Single Image Using CNN-Residual Network&amp;quot; [http://cs231n.stanford.edu/reports/2017/pdfs/203.pdf]&amp;lt;/ref&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
*  '''Создаем карту смещений''': используя два изображения с камер, близко расположенных друг к другу, создаем карту различий, точно так же как в методе построения по стереопаре.&lt;br /&gt;
&lt;br /&gt;
* '''Ищем реальную карту глубины для обучения''': с помощью карты смещений, можем построить карту глубины &amp;lt;math&amp;gt;y&amp;lt;/math&amp;gt; вышеописанным способом. Также допустимы другие способы построения карты глубины для обучения нейронной сети.&lt;br /&gt;
&lt;br /&gt;
*  '''Функция потерь''': определим [[Функция потерь и эмпирический риск|функцию потерь]], для предсказанной карты &amp;lt;math&amp;gt;\hat y&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;d_i = log( y_i) - log (\hat y_i)&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;\lambda \in [0, 1]&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;n &amp;lt;/math&amp;gt; — количество пикселей. &amp;lt;math&amp;gt;L(y, \hat y) =  \frac{1}{n} \sum\limits_{i} d^2_i - \frac{\lambda}{n^2}(\sum\limits_{i} d_i)^2&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;y_i&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;\hat y_i&amp;lt;/math&amp;gt; это i пискель для для реальной карты глубин и для предсказанной карты, соответственно. Гиперпараметр &amp;lt;math&amp;gt;\lambda&amp;lt;/math&amp;gt;, нужен для того, чтобы функция потерь меньше росла при большом количестве пикселей, предсказание для которых достаточно близко к реальному. Например, если &amp;lt;math&amp;gt;\lambda = 0&amp;lt;/math&amp;gt;, то мы просто придём к оптимизации в L2 для &amp;lt;math&amp;gt;d_i&amp;lt;/math&amp;gt;, т.е. &amp;lt;math&amp;gt;L(y, \hat y) =  \frac{1}{n} \sum\limits_{i} d^2_i &amp;lt;/math&amp;gt;.&amp;lt;ref name=&amp;quot;loss&amp;quot;&amp;gt;David Eigen, Christian Puhrsch, Rob Fergus &amp;quot;Depth Map Prediction from a Single Imageusing a Multi-Scale Deep Network&amp;quot; стр. 5&amp;lt;/ref&amp;gt; &lt;br /&gt;
&lt;br /&gt;
* '''Обучение свёрточной нейронной сети''': далее идёт обычное обучение нейронной сети по карте различий путем обратного распространения ошибки, оптимизируя заданную выше функцию потерь.&lt;br /&gt;
&lt;br /&gt;
В итоге, по обученной нейронной сети мы можем создавать карту глубины, не проводя расчётов для поиска карт смещения и имея только изображение объекта или пространства. &amp;lt;ref name=&amp;quot;cnn&amp;quot;&amp;gt;Реализация, основанная на свёрточных нейронных сетях [https://www.kaggle.com/kmader/cnn-for-generating-depth-maps-from-rgb-images]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Также возможно использование усложнённых архитектур свёрточных нейронных сетей типа '''DenseNet'''.&lt;br /&gt;
&lt;br /&gt;
'''DenseNet'''&amp;lt;ref name=&amp;quot;DenseNet&amp;quot;&amp;gt;Оригинальная статья описывающая DenseNet [https://arxiv.org/abs/1611.09326]&amp;lt;/ref&amp;gt; {{---}} это свёрточная нейронные сеть, в которой выход каждого из слоев подаётся на вход всем слоям, лежащих ниже.&lt;br /&gt;
&lt;br /&gt;
=== Построение с помощью капсульных нейронных сетей ===&lt;br /&gt;
&lt;br /&gt;
Свёрточные нейронные сети способны регистрировать только наличие какого-либо объекта на картинке, не кодируя его ориентацию и положение. Но '''капсульные нейронные сети''' (англ. Capsule Neural Network)&amp;lt;ref name=&amp;quot;CapsNet&amp;quot;&amp;gt;Sara Sabour, Nicholas Frosst, Geoffrey E. Hinton &amp;quot;Dynamic Routing Between Capsules&amp;quot; [https://arxiv.org/pdf/1710.09829.pdf]&amp;lt;/ref&amp;gt; лишены этого недостатка.&lt;br /&gt;
&lt;br /&gt;
[[Файл:capsnet.jpg|thumb|400px| Рисунок 3. Структура капсульной нейронной сети &amp;lt;ref name=&amp;quot;img&amp;quot;&amp;gt; &amp;quot;Design and Investigation of Capsule Networks for Sentence Classification&amp;quot; Figure 2. [https://www.mdpi.com/2076-3417/9/11/2200/htm]&amp;lt;/ref&amp;gt;.]]&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Капсульная нейронная сеть&amp;quot; состоит из капсул или групп нейронов, чтобы идентифицировать закономерности в изображении. Эта информация поступает в виде векторов, содержащих ориентацию и положение узоров на изображении, которое затем принимается капсулами более высокого уровня. Капсулы более высокого уровня обрабатывают эту информацию из нескольких капсул более низкого уровня и впоследствии выдают прогноз. Капсулы одного уровня не имеют связей друг с другом и вычисляют информацию независимо друг от друга. Капсулы образуются путем разделения выходных данных из свёрточного слоя. Мы делим наш трехмерный вектор на капсулы методом &amp;quot;нарезания&amp;quot; таким образом, чтобы в каждой капсуле была информация о каждом пикселе, т.е. по трехмерной координате.&lt;br /&gt;
 &lt;br /&gt;
Состояние нейронов капсульной нейронной сети внутри изображения фиксирует свойство области или объекта внутри изображения: его положение и ориентацию.&lt;br /&gt;
&lt;br /&gt;
Использование капсульной нейронной сети аналогично использованию обычных свёрточных сетей, описанному выше. &lt;br /&gt;
В целом, данная сеть показывает более точные результаты предсказания глубины.&lt;br /&gt;
&lt;br /&gt;
=== Построение с помощью PlanetNet (2018)===&lt;br /&gt;
&lt;br /&gt;
Так же есть архитектуры, решающие данную задачу и без обучения на карте смещений, построенной с помощью двух изображений. Одной из таких является '''PlaneNet'''. &lt;br /&gt;
&lt;br /&gt;
'''PlaneNet'''&amp;lt;ref name=&amp;quot;planetNet&amp;quot;&amp;gt; Chen Liu, Jimei Yang, Duygu Ceylan, Ersin Yumer, Yasutaka Furukawa &amp;quot;PlaneNet: Piece-wise Planar Reconstruction from a Single RGB Image&amp;quot; [https://arxiv.org/abs/1804.06278v1]&amp;lt;/ref&amp;gt; {{---}} глубокая нейронная сеть, построенная на расширенных остаточных сетях (aнгл. Dilated Residual Networks или DRN)&amp;lt;ref name=&amp;quot;drn&amp;quot;&amp;gt; Fisher Yu, Vladlen Koltun, Thomas Funkhouser &amp;quot;Dilated Residual Networks&amp;quot; [https://arxiv.org/abs/1705.09914]&amp;lt;/ref&amp;gt;. Она получает карту глубин путем композиции выходов трех подзадач:&lt;br /&gt;
&lt;br /&gt;
[[Файл:Plane net2.jpg|thumb|500px| Рисунок 4. Прогнозируемые PlaneNet параметры по одной rgb картинке: cегметация плоскости, параметры плоскостей, неплоская карта глубины&amp;lt;ref name=&amp;quot;img4&amp;quot;&amp;gt; Chen Liu, Jimei Yang, Duygu Ceylan, Ersin Yumer, Yasutaka Furukawa &amp;quot;PlaneNet: Piece-wise Planar Reconstruction from a Single RGB Image&amp;quot; Figure 2.&amp;lt;/ref&amp;gt;.]]&lt;br /&gt;
&lt;br /&gt;
* '''Параметры плоскостей''': пытаемся предсказать количество плоскостей $K$, а после ищем на изображение $K$ плоских поверхностей, каждая поверхность задаётся тремя параметрами &amp;lt;math&amp;gt;P_i&amp;lt;/math&amp;gt;: нормальная, прямая и сдвиг. Функцию ошибки определим следующим образом: &amp;lt;math&amp;gt;L = \sum_{i=1}^{K} \min_{j \in [1, \hat K]} \| \hat P_j - P_i \|&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;\hat K, \hat P_i&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;K, P_i&amp;lt;/math&amp;gt;, предсказанные и реальные, количество и параметры плоскостей.&lt;br /&gt;
&lt;br /&gt;
* [[Сегментация изображений|'''Сегментация плоскости''']]: ищем группы пикселей, каждая из которых характеризует один смысловой объект.&lt;br /&gt;
&lt;br /&gt;
* '''Неплоская карта глубины''': ищем одно-канальную (или неплоскую) карту глубины, то есть карту глубины, где каждый пиксель, либо на глубине 0, либо на глубине 1.&lt;br /&gt;
&lt;br /&gt;
=== Обучение без учителя поиска карты глубины из видео (2017) ===&lt;br /&gt;
&lt;br /&gt;
Авторы данной статьи &amp;lt;ref name=&amp;quot;cvrp_dnn&amp;quot;&amp;gt;Tinghui Zhou, Matthew Brown, Noah Snavely, David G. Lowe &amp;quot;Unsupervised Learning of Depth and Ego-Motion from Video&amp;quot; [https://arxiv.org/abs/1704.07813v2]&amp;lt;/ref&amp;gt; предлагают методику оценки глубины одной картинки без учителя и движения камеры из беспорядочной видео нарезки. &lt;br /&gt;
&lt;br /&gt;
[[Файл:dnn.png|thumb|400px| Рисунок 5. Aрхитектура сети на базе DispNet  &amp;lt;ref name=&amp;quot;cvrp&amp;quot;&amp;gt;Tinghui Zhou, Matthew Brown, Noah Snavely, David G. Lowe &amp;quot;Unsupervised Learning of Depth and Ego-Motion from Video&amp;quot; Figure 4&amp;lt;/ref&amp;gt;]]&lt;br /&gt;
&lt;br /&gt;
Будем использовать сверточные нейронные сети c глубиной одного вида и многовидовой камерой из неупорядоченного видеоряда. Метод базируется на синтезе видов. Сеть загружает фото объекта в качестве данных ввода и выводит глубину пикселя. Вид объекта может быть синтезирован исходя из глубины на каждого пикселя снимка позиционирования и четкости ближнего вида. Синтез может быть  дифференцирован с CNN по геометрии и модулям позиционирования.&lt;br /&gt;
Авторы взяли на вооружение архитектуру DispNet&amp;lt;ref name=&amp;quot;dispNet&amp;quot;&amp;gt; Nikolaus Mayer, Eddy Ilg, Philip Hausser, Philipp Fischer &amp;quot;A Large Dataset to Train Convolutional Networks&lt;br /&gt;
for Disparity, Optical Flow, and Scene Flow Estimation&amp;quot; [https://arxiv.org/pdf/1512.02134.pdf]&amp;lt;/ref&amp;gt;, которая сконструирована в виде энкодера и декодера с пропущенными соединениями и многомасштабными блоками предсказания. Функция активации ReLU отслеживает все сверточные слои кроме предсказанных.&lt;br /&gt;
Вид объекта со всех источников формирует входные данные в сеть позиционной оценки. На выходе получается относительная позиция между видом объекта и видом каждого источника. Сеть состоит из двух 7 шаговых сверток за которым следует свертка 1 х 1. За исключением последнего слоя свертки, где применяется нелинейная активация, все другие отслеживаются функцией активации ReLU. Сеть объяснимых предсказаний дает доступ к первым пяти закодированным слоям сети позиционирования. За ней следуют 5 слоев обратной свертки с многомасштабными блоками предсказаний. Кроме слоев предсказаний все уровни свертки и обратной свертки отслеживаются ReLU.&lt;br /&gt;
&lt;br /&gt;
=== Неконтролируемая оценка глубины монокуляра с консистенцией слева направо (2017) ===&lt;br /&gt;
&lt;br /&gt;
[[Файл:Samplers.jpg|thumb|240px| Рисунок 6. Примерная архитектура сети с консистенцией слева направо &amp;lt;ref name=&amp;quot;cvrp2017&amp;quot;&amp;gt;Clément Godard, Oisin Mac Aodha, Gabriel J. Brostow &amp;quot;Unsupervised Monocular Depth Estimation with Left-Right Consistency&amp;quot; Figure 3 &amp;lt;/ref&amp;gt;]]&lt;br /&gt;
&lt;br /&gt;
В данной работе&amp;lt;ref name=&amp;quot;leftrigth&amp;quot;&amp;gt; Clément Godard, Oisin Mac Aodha, Gabriel J. Brostow &amp;quot;Unsupervised Monocular Depth Estimation with Left-Right Consistency&amp;quot; [https://arxiv.org/abs/1609.03677v3]&amp;lt;/ref&amp;gt; предлагается сверточная нейронная сеть, обученная выполнять оценку глубины одного изображения без реальных данных. Авторы предлагают сетевую архитектуру, которая выполняет сквозную оценку глубины изображения, полученного с 1 камеры, без учителя, что обеспечивает согласованность глубины слева направо внутри сети.&lt;br /&gt;
Сеть оценивает глубину, выводя смещения, которые искажают левое изображение, чтобы соответствовать правому. Левое входное изображение используется для вывода смещений слева направо и справа налево. Сеть генерирует предсказанное изображение с обратным отображением с помощью билинейного сэмплера. Это приводит к полностью дифференциальной модели формирования изображения.&lt;br /&gt;
Сверточная архитектура вдохновлена так же DispNet'ом. Она состоит из двух частей—кодера и декодера. Декодер использует пропуск соединений из блоков активации кодера, чтобы распознавать детали с высоким разрешением. Сеть предсказывает две карты смещений — слева направо и справа налево.&lt;br /&gt;
В процессе обучения сеть генерирует изображение путем выборки пикселей из противоположного стереоизображения. Модель формирования изображения использует сэмплер изображений из пространственной трансформаторной сети (STN) для выборки входного изображения с помощью карты смещений.&lt;br /&gt;
&lt;br /&gt;
=== Прогнозирование глубины без датчиков: использование структуры для обучения без учителя по монокулярным видео (2019) ===&lt;br /&gt;
&lt;br /&gt;
[[Файл:ego-motion.png|thumb|500px| Рисунок 7. Сравнение обычного метода построения карты глубин с помощью эго-движения и предложенного в статье, который использует движения для различных 3-D объектов &amp;lt;ref name=&amp;quot;aaaif&amp;quot;&amp;gt;Vincent Casser, Soeren Pirk, Reza Mahjourian, Anelia Angelova &amp;quot;Depth Prediction Without the Sensors: Leveraging Structure for Unsupervised Learning from Monocular Videos&amp;quot; Figure 2 &amp;lt;/ref&amp;gt;]]&lt;br /&gt;
&lt;br /&gt;
'''Визуальная одометрия''' &amp;lt;ref name=&amp;quot;визуальная одометрия&amp;quot;&amp;gt;Статья о визуальной одометрии[https://en.wikipedia.org/wiki/Visual_odometry]&amp;lt;/ref&amp;gt; {{---}} метод оценки положения и ориентации робота или иного устройства в пространстве с помощью анализа последовательности изображений, снятых установленной на нем камерой.&lt;br /&gt;
&lt;br /&gt;
Данная статья &amp;lt;ref name=&amp;quot;aaai&amp;quot;&amp;gt; Vincent Casser, Soeren Pirk, Reza Mahjourian, Anelia Angelova &amp;quot;Depth Prediction Without the Sensors: Leveraging Structure for Unsupervised Learning from Monocular Videos&amp;quot; [https://arxiv.org/abs/1811.06152v1]&amp;lt;/ref&amp;gt; посвящена задаче обучения без учителя глубины сцены и визуальной одометрии робота, где наблюдение обеспечивается видеозаписями с одной камеры. Это делается путем введения геометрической структуры в процесс обучения. Он включает в себя моделирование сцены и отдельных объектов, одометрии камеры и движения объектов, изучаемых с помощью монокулярных видеовходов. Авторы вводят модель движения объекта, которая имеет ту же архитектуру, что и сеть определения визуальной одометрии. Она принимает последовательность изображений RGB в качестве входных данных и дополняется предварительно вычисленными масками сегментации экземпляров. Работа модели движения заключается в том, чтобы научиться предсказывать векторы трансформации каждого объекта в трехмерном пространстве. Это создает видимость наблюдаемого объекта в соответствующем целевом кадре.&lt;br /&gt;
&lt;br /&gt;
== См. также ==&lt;br /&gt;
&lt;br /&gt;
* [[Компьютерное зрение]]&lt;br /&gt;
&lt;br /&gt;
* [[Оценка положения]]&lt;br /&gt;
&lt;br /&gt;
* [[Задача нахождения объектов на изображении]]&lt;br /&gt;
&lt;br /&gt;
== Примечания ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Источники информации ==&lt;br /&gt;
&lt;br /&gt;
* Чугунов Р. А., Кульневич А. Д., Аксенов С. В. Методика построения карт глубины стереоизображения с помощью капсульной нейронной сети //Доклады Томского государственного университета систем управления и радиоэлектроники. – 2019. – Т. 22. – №. 1.[https://cyberleninka.ru/article/n/metodika-postroeniya-kart-glubiny-stereoizobrazheniya-s-pomoschyu-kapsulnoy-neyronnoy-seti/viewer]&lt;br /&gt;
&lt;br /&gt;
* 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]&lt;br /&gt;
&lt;br /&gt;
*  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]&lt;br /&gt;
&lt;br /&gt;
* 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]&lt;br /&gt;
&lt;br /&gt;
* 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]&lt;br /&gt;
&lt;br /&gt;
[[Категория:Машинное обучение]]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Компьютерное зрение]]&lt;/div&gt;</summary>
		<author><name>Frak</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9A%D0%B0%D1%80%D1%82%D0%B0_%D0%B3%D0%BB%D1%83%D0%B1%D0%B8%D0%BD%D1%8B&amp;diff=80264</id>
		<title>Карта глубины</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9A%D0%B0%D1%80%D1%82%D0%B0_%D0%B3%D0%BB%D1%83%D0%B1%D0%B8%D0%BD%D1%8B&amp;diff=80264"/>
				<updated>2021-01-23T11:51:18Z</updated>
		
		<summary type="html">&lt;p&gt;Frak: /* Построение с помощью PlanetNet (2018) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Карта глубины''' (англ. depth map) — это изображение, где для каждого пикселя вместо цвета хранится его расстояние до камеры.&amp;lt;ref name=&amp;quot;def&amp;quot;&amp;gt;Alexey Kurakin &amp;quot;Основы стереозрения&amp;quot;[https://habr.com/ru/post/130300/]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В компьютерной 3D-графике и [[Компьютерное зрение|компьютерном зрении]] карта глубины представляет собой изображение или канал изображения, содержащий информацию о расстоянии поверхностей объектов сцены от точки обзора. &lt;br /&gt;
&lt;br /&gt;
== Мотивация ==&lt;br /&gt;
&lt;br /&gt;
Карта глубины изображения содержит в себе информацию о расстоянии между различными объектами или частями объектов, представленных на данном изображении. Эта информация может быть полезна во многих областях. &lt;br /&gt;
 &lt;br /&gt;
* Для создания 3D-сенсеров. Они способны строить трёхмерную картину своего окружения, используются для [[Оценка положения|ориентации]] автономного робота в пространстве.&lt;br /&gt;
&lt;br /&gt;
* Для систем, использующих технологии дополненной и виртуальной реальности. Например, камеры, которые фиксируют действия пользователя в видеоиграх с технологией виртуальной реальности.&lt;br /&gt;
&lt;br /&gt;
* В беспилотных автомобилях, которые также используют карты глубин для ориентации на дороге.&lt;br /&gt;
&lt;br /&gt;
* Для обработки фотографий. Например, карты глубин используют для размытия фона на фотографии, чтобы добиться более чёткого выделения человека&amp;lt;ref name=&amp;quot;expls&amp;quot;&amp;gt;Примеры из &amp;quot;Research Guide for Depth Estimation with Deep Learning&amp;quot;[https://www.kdnuggets.com/2019/11/research-guide-depth-estimation-deep-learning.html]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Методы построения карты глубины ==&lt;br /&gt;
&lt;br /&gt;
Карта глубины может быть получена с помощью '''специальной камеры глубины''', по '''стереопаре изображений''', а также с помощью [[Нейронные сети, перцептрон|'''нейронных сетей''']].&lt;br /&gt;
&lt;br /&gt;
== Построение с помощью специальных камер глубин == &lt;br /&gt;
&lt;br /&gt;
[[Файл:ToF.jpg|thumb|250px| Рисунок 1. Пример работы ToF-камеры.]]&lt;br /&gt;
&lt;br /&gt;
* '''ToF-камеры''' (англ. Time of Flight). Принцип работы данной камеры основан на измерении задержки света, с которой свет возвращается в каждую точку. Имея несколько сенсоров с разным временем накопления заряда и, зная сдвиг по времени относительно источника для каждого сенсора и снятой яркости вспышки, мы можем рассчитать сдвиг и, соответственно, расстояние до объекта. Причем чем больше сенсоров задействовано, тем выше точность метода.&lt;br /&gt;
&lt;br /&gt;
* '''Структурированные световые камеры''' (aнгл. Structured light camera). Принцип работы данной камеры один из самых старых. Ставим проектор, который создает, например, горизонтальные (а потом и вертикальные) полоски и рядом камеру, которая снимает картину с полосками. В некоторых вариантах используется псевдослучайный набор точек (например MS Kinect {{---}} бесконтактный сенсорный игровой контроллер, для консолей Xbox 360, Xbox One и персональных компьютеров под управлением ОС Windows&amp;lt;ref name=&amp;quot;kinect&amp;quot;&amp;gt; О MicriSoft Kinect [https://en.wikipedia.org/wiki/Kinect]&amp;lt;/ref&amp;gt;). Проекторы обычно работают в инфракрасном спектре, чтобы не мешать пользователям. Поскольку камера и проектор смещены друг относительно друга, то и полоски также будут смещаться пропорционально расстоянию до объекта. Измеряя это смещение, мы можем рассчитывать расстояние до объекта. Вполне понятны сложности, с которыми можно столкнуться при использовании этого метода: это необходимость настройки и калибровки проектора, и проблема того, что нам нужно относительно благоприятное освещение. К примеру, солнце может засветить полосы, и что-то распознать будет тяжело.&lt;br /&gt;
&lt;br /&gt;
== Построения карты глубины по стереопаре ==&lt;br /&gt;
&lt;br /&gt;
Идея, лежащая в основе построения карты глубины по '''стереопаре''', проста. Для каждой точки на одном изображении выполняется поиск [[Ключевые точки изображения|парной ей точки]]&amp;lt;sup&amp;gt;[на 21.01.21 не создан]&amp;lt;/sup&amp;gt; на другом изображении. А по паре соответствующих точек можно выполнить [[Триангуляция полигонов (ушная + монотонная)|триангуляцию]] и определить координаты их [[Отображения|прообраза]] в трехмерном пространстве. Зная трехмерные координаты прообраза, глубина вычисляется как расстояние до плоскости камеры.&lt;br /&gt;
&lt;br /&gt;
Парную точку нужно искать на эпиполярной&amp;lt;ref name=&amp;quot;Epipolar&amp;quot;&amp;gt;Информация о эпиполярной геометрии[https://ru.qaz.wiki/wiki/Epipolar_geometry]&amp;lt;/ref&amp;gt; линии. Соответственно, для упрощения поиска изображения выравнивают так, чтобы все эпиполярные линии были параллельны сторонам изображения (обычно горизонтальны). Более того, изображения выравнивают так, чтобы для точки с координатами &amp;lt;math&amp;gt;(x_0, y_0)&amp;lt;/math&amp;gt; соответствующая ей эпиполярная линия задавалась уравнением &amp;lt;math&amp;gt;x = x_0&amp;lt;/math&amp;gt;. Тогда для каждой точки, соответствующую ей парную точку, нужно искать в той-же строчке на изображении со второй камеры. Такой процесс выравнивания изображений называют '''ректификацией''' (rectification).&lt;br /&gt;
&lt;br /&gt;
[[Файл:Stereo.png|thumb|300px| Рисунок 2. Результат построения карты смещений по двум картинкам.&amp;lt;ref name=&amp;quot;img2&amp;quot;&amp;gt; &amp;quot;Основы стереозрения&amp;quot; Рис. 3 [https://habr.com/ru/post/130300/]&amp;lt;/ref&amp;gt;]]&lt;br /&gt;
&lt;br /&gt;
После того, как изображения '''ректифицированы''', выполняют поиск соответствующих пар точек. Для каждого пикселя одной картинки с координатами &amp;lt;math&amp;gt;(x_0, y_0)&amp;lt;/math&amp;gt; выполняется поиск пикселя на другой картинке. При этом предполагается, что пиксель на второй картинке должен иметь координаты &amp;lt;math&amp;gt;(x_0 - d, y_0)&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;d&amp;lt;/math&amp;gt; — величина называемая смещением. Поиск соответствующего пикселя выполняется путем вычисления максимума функции отклика, в качестве которой может выступать, например, [[Корреляция случайных величин|корреляция]] окрестностей пикселей. В результате получается карта смещений, пример которой приведен на рис. 2. &lt;br /&gt;
&lt;br /&gt;
Собственно значения глубины обратно пропорциональны величине смещения пикселей.&lt;br /&gt;
&lt;br /&gt;
== Использование нейронных сетей ==&lt;br /&gt;
&lt;br /&gt;
Существует множество методов, использующих нейронные сети. Приведём пару примеров таких решений.&lt;br /&gt;
&lt;br /&gt;
=== Построение с помощью свёрточных нейронных сетей ===&lt;br /&gt;
&lt;br /&gt;
Используем [[Сверточные нейронные сети|сверточные нейронные сети]] для построения карты глубины следующим образом&lt;br /&gt;
&amp;lt;ref name=&amp;quot;cnn_rew&amp;quot;&amp;gt; Xiaobai Ma, Zhenglin Geng, Zhi Bie &amp;quot;Depth Estimation from Single Image Using CNN-Residual Network&amp;quot; [http://cs231n.stanford.edu/reports/2017/pdfs/203.pdf]&amp;lt;/ref&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
*  '''Создаем карту смещений''': используя два изображения с камер, близко расположенных друг к другу, создаем карту различий, точно так же как в методе построения по стереопаре.&lt;br /&gt;
&lt;br /&gt;
* '''Ищем реальную карту глубины для обучения''': с помощью карты смещений, можем построить карту глубины &amp;lt;math&amp;gt;y&amp;lt;/math&amp;gt; вышеописанным способом. Также допустимы другие способы построения карты глубины для обучения нейронной сети.&lt;br /&gt;
&lt;br /&gt;
*  '''Функция потерь''': определим [[Функция потерь и эмпирический риск|функцию потерь]], для предсказанной карты &amp;lt;math&amp;gt;\hat y&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;d_i = log( y_i) - log (\hat y_i)&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;\lambda \in [0, 1]&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;n &amp;lt;/math&amp;gt; — количество пикселей. &amp;lt;math&amp;gt;L(y, \hat y) =  \frac{1}{n} \sum\limits_{i} d^2_i - \frac{\lambda}{n^2}(\sum\limits_{i} d_i)^2&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;y_i&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;\hat y_i&amp;lt;/math&amp;gt; это i пискель для для реальной карты глубин и для предсказанной карты, соответственно. Гиперпараметр &amp;lt;math&amp;gt;\lambda&amp;lt;/math&amp;gt;, нужен для того, чтобы функция потерь меньше росла при большом количестве пикселей, предсказание для которых достаточно близко к реальному. Например, если &amp;lt;math&amp;gt;\lambda = 0&amp;lt;/math&amp;gt;, то мы просто придём к оптимизации в L2 для &amp;lt;math&amp;gt;d_i&amp;lt;/math&amp;gt;, т.е. &amp;lt;math&amp;gt;L(y, \hat y) =  \frac{1}{n} \sum\limits_{i} d^2_i &amp;lt;/math&amp;gt;.&amp;lt;ref name=&amp;quot;loss&amp;quot;&amp;gt;David Eigen, Christian Puhrsch, Rob Fergus &amp;quot;Depth Map Prediction from a Single Imageusing a Multi-Scale Deep Network&amp;quot; стр. 5&amp;lt;/ref&amp;gt; &lt;br /&gt;
&lt;br /&gt;
* '''Обучение свёрточной нейронной сети''': далее идёт обычное обучение нейронной сети по карте различий путем обратного распространения ошибки, оптимизируя заданную выше функцию потерь.&lt;br /&gt;
&lt;br /&gt;
В итоге, по обученной нейронной сети мы можем создавать карту глубины, не проводя расчётов для поиска карт смещения и имея только изображение объекта или пространства. &amp;lt;ref name=&amp;quot;cnn&amp;quot;&amp;gt;Реализация, основанная на свёрточных нейронных сетях [https://www.kaggle.com/kmader/cnn-for-generating-depth-maps-from-rgb-images]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Также возможно использование усложнённых архитектур свёрточных нейронных сетей типа '''DenseNet'''.&lt;br /&gt;
&lt;br /&gt;
'''DenseNet'''&amp;lt;ref name=&amp;quot;DenseNet&amp;quot;&amp;gt;Оригинальная статья описывающая DenseNet [https://arxiv.org/abs/1611.09326]&amp;lt;/ref&amp;gt; {{---}} это свёрточная нейронные сеть, в которой выход каждого из слоев подаётся на вход всем слоям, лежащих ниже.&lt;br /&gt;
&lt;br /&gt;
=== Построение с помощью капсульных нейронных сетей ===&lt;br /&gt;
&lt;br /&gt;
Свёрточные нейронные сети способны регистрировать только наличие какого-либо объекта на картинке, не кодируя его ориентацию и положение. Но '''капсульные нейронные сети''' (англ. Capsule Neural Network)&amp;lt;ref name=&amp;quot;CapsNet&amp;quot;&amp;gt;Sara Sabour, Nicholas Frosst, Geoffrey E. Hinton &amp;quot;Dynamic Routing Between Capsules&amp;quot; [https://arxiv.org/pdf/1710.09829.pdf]&amp;lt;/ref&amp;gt; лишены этого недостатка.&lt;br /&gt;
&lt;br /&gt;
[[Файл:capsnet.jpg|thumb|400px| Рисунок 3. Структура капсульной нейронной сети &amp;lt;ref name=&amp;quot;img&amp;quot;&amp;gt; &amp;quot;Design and Investigation of Capsule Networks for Sentence Classification&amp;quot; Figure 2. [https://www.mdpi.com/2076-3417/9/11/2200/htm]&amp;lt;/ref&amp;gt;.]]&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Капсульная нейронная сеть&amp;quot; состоит из капсул или групп нейронов, чтобы идентифицировать закономерности в изображении. Эта информация поступает в виде векторов, содержащих ориентацию и положение узоров на изображении, которое затем принимается капсулами более высокого уровня. Капсулы более высокого уровня обрабатывают эту информацию из нескольких капсул более низкого уровня и впоследствии выдают прогноз. Капсулы одного уровня не имеют связей друг с другом и вычисляют информацию независимо друг от друга. Капсулы образуются путем разделения выходных данных из свёрточного слоя. Мы делим наш трехмерный вектор на капсулы методом &amp;quot;нарезания&amp;quot; таким образом, чтобы в каждой капсуле была информация о каждом пикселе, т.е. по трехмерной координате.&lt;br /&gt;
 &lt;br /&gt;
Состояние нейронов капсульной нейронной сети внутри изображения фиксирует свойство области или объекта внутри изображения: его положение и ориентацию.&lt;br /&gt;
&lt;br /&gt;
Использование капсульной нейронной сети аналогично использованию обычных свёрточных сетей, описанному выше. &lt;br /&gt;
В целом, данная сеть показывает более точные результаты предсказания глубины.&lt;br /&gt;
&lt;br /&gt;
=== Построение с помощью PlanetNet (2018)===&lt;br /&gt;
&lt;br /&gt;
Так же есть архитектуры, решающие данную задачу и без обучения на карте смещений, построенной с помощью двух изображений. Одной из таких является '''PlaneNet'''. &lt;br /&gt;
&lt;br /&gt;
'''PlaneNet'''&amp;lt;ref name=&amp;quot;planetNet&amp;quot;&amp;gt; Chen Liu, Jimei Yang, Duygu Ceylan, Ersin Yumer, Yasutaka Furukawa &amp;quot;PlaneNet: Piece-wise Planar Reconstruction from a Single RGB Image&amp;quot; [https://arxiv.org/abs/1804.06278v1]&amp;lt;/ref&amp;gt; {{---}} глубокая нейронная сеть, построенная на расширенных остаточных сетях (aнгл. Dilated Residual Networks или DRN)&amp;lt;ref name=&amp;quot;drn&amp;quot;&amp;gt; Fisher Yu, Vladlen Koltun, Thomas Funkhouser &amp;quot;Dilated Residual Networks&amp;quot; [https://arxiv.org/abs/1705.09914]&amp;lt;/ref&amp;gt;. Она получает карту глубин путем композиции выходов трех подзадач:&lt;br /&gt;
&lt;br /&gt;
[[Файл:Plane net.jpg|thumb|500px| Рисунок 4. Прогнозируемые PlaneNet параметры по одной rgb картинке: cегметация плоскости, параметры плоскостей, неплоская карта глубины&amp;lt;ref name=&amp;quot;img4&amp;quot;&amp;gt; Chen Liu, Jimei Yang, Duygu Ceylan, Ersin Yumer, Yasutaka Furukawa &amp;quot;PlaneNet: Piece-wise Planar Reconstruction from a Single RGB Image&amp;quot; Figure 2.&amp;lt;/ref&amp;gt;.]]&lt;br /&gt;
&lt;br /&gt;
* '''Параметры плоскостей''': пытаемся предсказать количество плоскостей $K$, а после ищем на изображение $K$ плоских поверхностей, каждая поверхность задаётся тремя параметрами &amp;lt;math&amp;gt;P_i&amp;lt;/math&amp;gt;: нормальная, прямая и сдвиг. Функцию ошибки определим следующим образом: &amp;lt;math&amp;gt;L = \sum_{i=1}^{K} \min_{j \in [1, \hat K]} \| \hat P_j - P_i \|&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;\hat K, \hat P_i&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;K, P_i&amp;lt;/math&amp;gt;, предсказанные и реальные, количество и параметры плоскостей.&lt;br /&gt;
&lt;br /&gt;
* [[Сегментация изображений|'''Сегментация плоскости''']]: ищем группы пикселей, каждая из которых характеризует один смысловой объект.&lt;br /&gt;
&lt;br /&gt;
* '''Неплоская карта глубины''': ищем одно-канальную (или неплоскую) карту глубины, то есть карту глубины, где каждый пиксель, либо на глубине 0, либо на глубине 1.&lt;br /&gt;
&lt;br /&gt;
=== Обучение без учителя поиска карты глубины из видео (2017) ===&lt;br /&gt;
&lt;br /&gt;
Авторы данной статьи &amp;lt;ref name=&amp;quot;cvrp_dnn&amp;quot;&amp;gt;Tinghui Zhou, Matthew Brown, Noah Snavely, David G. Lowe &amp;quot;Unsupervised Learning of Depth and Ego-Motion from Video&amp;quot; [https://arxiv.org/abs/1704.07813v2]&amp;lt;/ref&amp;gt; предлагают методику оценки глубины одной картинки без учителя и движения камеры из беспорядочной видео нарезки. &lt;br /&gt;
&lt;br /&gt;
[[Файл:dnn.png|thumb|400px| Рисунок 5. Aрхитектура сети на базе DispNet  &amp;lt;ref name=&amp;quot;cvrp&amp;quot;&amp;gt;Tinghui Zhou, Matthew Brown, Noah Snavely, David G. Lowe &amp;quot;Unsupervised Learning of Depth and Ego-Motion from Video&amp;quot; Figure 4&amp;lt;/ref&amp;gt;]]&lt;br /&gt;
&lt;br /&gt;
Будем использовать сверточные нейронные сети c глубиной одного вида и многовидовой камерой из неупорядоченного видеоряда. Метод базируется на синтезе видов. Сеть загружает фото объекта в качестве данных ввода и выводит глубину пикселя. Вид объекта может быть синтезирован исходя из глубины на каждого пикселя снимка позиционирования и четкости ближнего вида. Синтез может быть  дифференцирован с CNN по геометрии и модулям позиционирования.&lt;br /&gt;
Авторы взяли на вооружение архитектуру DispNet&amp;lt;ref name=&amp;quot;dispNet&amp;quot;&amp;gt; Nikolaus Mayer, Eddy Ilg, Philip Hausser, Philipp Fischer &amp;quot;A Large Dataset to Train Convolutional Networks&lt;br /&gt;
for Disparity, Optical Flow, and Scene Flow Estimation&amp;quot; [https://arxiv.org/pdf/1512.02134.pdf]&amp;lt;/ref&amp;gt;, которая сконструирована в виде энкодера и декодера с пропущенными соединениями и многомасштабными блоками предсказания. Функция активации ReLU отслеживает все сверточные слои кроме предсказанных.&lt;br /&gt;
Вид объекта со всех источников формирует входные данные в сеть позиционной оценки. На выходе получается относительная позиция между видом объекта и видом каждого источника. Сеть состоит из двух 7 шаговых сверток за которым следует свертка 1 х 1. За исключением последнего слоя свертки, где применяется нелинейная активация, все другие отслеживаются функцией активации ReLU. Сеть объяснимых предсказаний дает доступ к первым пяти закодированным слоям сети позиционирования. За ней следуют 5 слоев обратной свертки с многомасштабными блоками предсказаний. Кроме слоев предсказаний все уровни свертки и обратной свертки отслеживаются ReLU.&lt;br /&gt;
&lt;br /&gt;
=== Неконтролируемая оценка глубины монокуляра с консистенцией слева направо (2017) ===&lt;br /&gt;
&lt;br /&gt;
[[Файл:Samplers.jpg|thumb|240px| Рисунок 6. Примерная архитектура сети с консистенцией слева направо &amp;lt;ref name=&amp;quot;cvrp2017&amp;quot;&amp;gt;Clément Godard, Oisin Mac Aodha, Gabriel J. Brostow &amp;quot;Unsupervised Monocular Depth Estimation with Left-Right Consistency&amp;quot; Figure 3 &amp;lt;/ref&amp;gt;]]&lt;br /&gt;
&lt;br /&gt;
В данной работе&amp;lt;ref name=&amp;quot;leftrigth&amp;quot;&amp;gt; Clément Godard, Oisin Mac Aodha, Gabriel J. Brostow &amp;quot;Unsupervised Monocular Depth Estimation with Left-Right Consistency&amp;quot; [https://arxiv.org/abs/1609.03677v3]&amp;lt;/ref&amp;gt; предлагается сверточная нейронная сеть, обученная выполнять оценку глубины одного изображения без реальных данных. Авторы предлагают сетевую архитектуру, которая выполняет сквозную оценку глубины изображения, полученного с 1 камеры, без учителя, что обеспечивает согласованность глубины слева направо внутри сети.&lt;br /&gt;
Сеть оценивает глубину, выводя смещения, которые искажают левое изображение, чтобы соответствовать правому. Левое входное изображение используется для вывода смещений слева направо и справа налево. Сеть генерирует предсказанное изображение с обратным отображением с помощью билинейного сэмплера. Это приводит к полностью дифференциальной модели формирования изображения.&lt;br /&gt;
Сверточная архитектура вдохновлена так же DispNet'ом. Она состоит из двух частей—кодера и декодера. Декодер использует пропуск соединений из блоков активации кодера, чтобы распознавать детали с высоким разрешением. Сеть предсказывает две карты смещений — слева направо и справа налево.&lt;br /&gt;
В процессе обучения сеть генерирует изображение путем выборки пикселей из противоположного стереоизображения. Модель формирования изображения использует сэмплер изображений из пространственной трансформаторной сети (STN) для выборки входного изображения с помощью карты смещений.&lt;br /&gt;
&lt;br /&gt;
=== Прогнозирование глубины без датчиков: использование структуры для обучения без учителя по монокулярным видео (2019) ===&lt;br /&gt;
&lt;br /&gt;
[[Файл:ego-motion.png|thumb|500px| Рисунок 7. Сравнение обычного метода построения карты глубин с помощью эго-движения и предложенного в статье, который использует движения для различных 3-D объектов &amp;lt;ref name=&amp;quot;aaaif&amp;quot;&amp;gt;Vincent Casser, Soeren Pirk, Reza Mahjourian, Anelia Angelova &amp;quot;Depth Prediction Without the Sensors: Leveraging Structure for Unsupervised Learning from Monocular Videos&amp;quot; Figure 2 &amp;lt;/ref&amp;gt;]]&lt;br /&gt;
&lt;br /&gt;
'''Визуальная одометрия''' &amp;lt;ref name=&amp;quot;визуальная одометрия&amp;quot;&amp;gt;Статья о визуальной одометрии[https://en.wikipedia.org/wiki/Visual_odometry]&amp;lt;/ref&amp;gt; {{---}} метод оценки положения и ориентации робота или иного устройства в пространстве с помощью анализа последовательности изображений, снятых установленной на нем камерой.&lt;br /&gt;
&lt;br /&gt;
Данная статья &amp;lt;ref name=&amp;quot;aaai&amp;quot;&amp;gt; Vincent Casser, Soeren Pirk, Reza Mahjourian, Anelia Angelova &amp;quot;Depth Prediction Without the Sensors: Leveraging Structure for Unsupervised Learning from Monocular Videos&amp;quot; [https://arxiv.org/abs/1811.06152v1]&amp;lt;/ref&amp;gt; посвящена задаче обучения без учителя глубины сцены и визуальной одометрии робота, где наблюдение обеспечивается видеозаписями с одной камеры. Это делается путем введения геометрической структуры в процесс обучения. Он включает в себя моделирование сцены и отдельных объектов, одометрии камеры и движения объектов, изучаемых с помощью монокулярных видеовходов. Авторы вводят модель движения объекта, которая имеет ту же архитектуру, что и сеть определения визуальной одометрии. Она принимает последовательность изображений RGB в качестве входных данных и дополняется предварительно вычисленными масками сегментации экземпляров. Работа модели движения заключается в том, чтобы научиться предсказывать векторы трансформации каждого объекта в трехмерном пространстве. Это создает видимость наблюдаемого объекта в соответствующем целевом кадре.&lt;br /&gt;
&lt;br /&gt;
== См. также ==&lt;br /&gt;
&lt;br /&gt;
* [[Компьютерное зрение]]&lt;br /&gt;
&lt;br /&gt;
* [[Оценка положения]]&lt;br /&gt;
&lt;br /&gt;
* [[Задача нахождения объектов на изображении]]&lt;br /&gt;
&lt;br /&gt;
== Примечания ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Источники информации ==&lt;br /&gt;
&lt;br /&gt;
* Чугунов Р. А., Кульневич А. Д., Аксенов С. В. Методика построения карт глубины стереоизображения с помощью капсульной нейронной сети //Доклады Томского государственного университета систем управления и радиоэлектроники. – 2019. – Т. 22. – №. 1.[https://cyberleninka.ru/article/n/metodika-postroeniya-kart-glubiny-stereoizobrazheniya-s-pomoschyu-kapsulnoy-neyronnoy-seti/viewer]&lt;br /&gt;
&lt;br /&gt;
* 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]&lt;br /&gt;
&lt;br /&gt;
*  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]&lt;br /&gt;
&lt;br /&gt;
* 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]&lt;br /&gt;
&lt;br /&gt;
* 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]&lt;br /&gt;
&lt;br /&gt;
[[Категория:Машинное обучение]]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Компьютерное зрение]]&lt;/div&gt;</summary>
		<author><name>Frak</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9A%D0%B0%D1%80%D1%82%D0%B0_%D0%B3%D0%BB%D1%83%D0%B1%D0%B8%D0%BD%D1%8B&amp;diff=80260</id>
		<title>Карта глубины</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9A%D0%B0%D1%80%D1%82%D0%B0_%D0%B3%D0%BB%D1%83%D0%B1%D0%B8%D0%BD%D1%8B&amp;diff=80260"/>
				<updated>2021-01-23T11:25:22Z</updated>
		
		<summary type="html">&lt;p&gt;Frak: /* Прогнозирование глубины без датчиков: использование структуры для обучения без учителя по монокулярным видео (2019) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Карта глубины''' (англ. depth map) — это изображение, где для каждого пикселя вместо цвета хранится его расстояние до камеры.&amp;lt;ref name=&amp;quot;def&amp;quot;&amp;gt;Alexey Kurakin &amp;quot;Основы стереозрения&amp;quot;[https://habr.com/ru/post/130300/]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В компьютерной 3D-графике и [[Компьютерное зрение|компьютерном зрении]] карта глубины представляет собой изображение или канал изображения, содержащий информацию о расстоянии поверхностей объектов сцены от точки обзора. &lt;br /&gt;
&lt;br /&gt;
== Мотивация ==&lt;br /&gt;
&lt;br /&gt;
Карта глубины изображения содержит в себе информацию о расстоянии между различными объектами или частями объектов, представленных на данном изображении. Эта информация может быть полезна во многих областях. &lt;br /&gt;
 &lt;br /&gt;
* Для создания 3D-сенсеров. Они способны строить трёхмерную картину своего окружения, используются для [[Оценка положения|ориентации]] автономного робота в пространстве.&lt;br /&gt;
&lt;br /&gt;
* Для систем, использующих технологии дополненной и виртуальной реальности. Например, камеры, которые фиксируют действия пользователя в видеоиграх с технологией виртуальной реальности.&lt;br /&gt;
&lt;br /&gt;
* В беспилотных автомобилях, которые также используют карты глубин для ориентации на дороге.&lt;br /&gt;
&lt;br /&gt;
* Для обработки фотографий. Например, карты глубин используют для размытия фона на фотографии, чтобы добиться более чёткого выделения человека&amp;lt;ref name=&amp;quot;expls&amp;quot;&amp;gt;Примеры из &amp;quot;Research Guide for Depth Estimation with Deep Learning&amp;quot;[https://www.kdnuggets.com/2019/11/research-guide-depth-estimation-deep-learning.html]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Методы построения карты глубины ==&lt;br /&gt;
&lt;br /&gt;
Карта глубины может быть получена с помощью '''специальной камеры глубины''', по '''стереопаре изображений''', а также с помощью [[Нейронные сети, перцептрон|'''нейронных сетей''']].&lt;br /&gt;
&lt;br /&gt;
== Построение с помощью специальных камер глубин == &lt;br /&gt;
&lt;br /&gt;
[[Файл:ToF.jpg|thumb|250px| Рисунок 1. Пример работы ToF-камеры.]]&lt;br /&gt;
&lt;br /&gt;
* '''ToF-камеры''' (англ. Time of Flight). Принцип работы данной камеры основан на измерении задержки света, с которой свет возвращается в каждую точку. Имея несколько сенсоров с разным временем накопления заряда и, зная сдвиг по времени относительно источника для каждого сенсора и снятой яркости вспышки, мы можем рассчитать сдвиг и, соответственно, расстояние до объекта. Причем чем больше сенсоров задействовано, тем выше точность метода.&lt;br /&gt;
&lt;br /&gt;
* '''Структурированные световые камеры''' (aнгл. Structured light camera). Принцип работы данной камеры один из самых старых. Ставим проектор, который создает, например, горизонтальные (а потом и вертикальные) полоски и рядом камеру, которая снимает картину с полосками. В некоторых вариантах используется псевдослучайный набор точек (например MS Kinect {{---}} бесконтактный сенсорный игровой контроллер, для консолей Xbox 360, Xbox One и персональных компьютеров под управлением ОС Windows&amp;lt;ref name=&amp;quot;kinect&amp;quot;&amp;gt; О MicriSoft Kinect [https://en.wikipedia.org/wiki/Kinect]&amp;lt;/ref&amp;gt;). Проекторы обычно работают в инфракрасном спектре, чтобы не мешать пользователям. Поскольку камера и проектор смещены друг относительно друга, то и полоски также будут смещаться пропорционально расстоянию до объекта. Измеряя это смещение, мы можем рассчитывать расстояние до объекта. Вполне понятны сложности, с которыми можно столкнуться при использовании этого метода: это необходимость настройки и калибровки проектора, и проблема того, что нам нужно относительно благоприятное освещение. К примеру, солнце может засветить полосы, и что-то распознать будет тяжело.&lt;br /&gt;
&lt;br /&gt;
== Построения карты глубины по стереопаре ==&lt;br /&gt;
&lt;br /&gt;
Идея, лежащая в основе построения карты глубины по '''стереопаре''', проста. Для каждой точки на одном изображении выполняется поиск [[Ключевые точки изображения|парной ей точки]]&amp;lt;sup&amp;gt;[на 21.01.21 не создан]&amp;lt;/sup&amp;gt; на другом изображении. А по паре соответствующих точек можно выполнить [[Триангуляция полигонов (ушная + монотонная)|триангуляцию]] и определить координаты их [[Отображения|прообраза]] в трехмерном пространстве. Зная трехмерные координаты прообраза, глубина вычисляется как расстояние до плоскости камеры.&lt;br /&gt;
&lt;br /&gt;
Парную точку нужно искать на эпиполярной&amp;lt;ref name=&amp;quot;Epipolar&amp;quot;&amp;gt;Информация о эпиполярной геометрии[https://ru.qaz.wiki/wiki/Epipolar_geometry]&amp;lt;/ref&amp;gt; линии. Соответственно, для упрощения поиска изображения выравнивают так, чтобы все эпиполярные линии были параллельны сторонам изображения (обычно горизонтальны). Более того, изображения выравнивают так, чтобы для точки с координатами &amp;lt;math&amp;gt;(x_0, y_0)&amp;lt;/math&amp;gt; соответствующая ей эпиполярная линия задавалась уравнением &amp;lt;math&amp;gt;x = x_0&amp;lt;/math&amp;gt;. Тогда для каждой точки, соответствующую ей парную точку, нужно искать в той-же строчке на изображении со второй камеры. Такой процесс выравнивания изображений называют '''ректификацией''' (rectification).&lt;br /&gt;
&lt;br /&gt;
[[Файл:Stereo.png|thumb|300px| Рисунок 2. Результат построения карты смещений по двум картинкам.&amp;lt;ref name=&amp;quot;img2&amp;quot;&amp;gt; &amp;quot;Основы стереозрения&amp;quot; Рис. 3 [https://habr.com/ru/post/130300/]&amp;lt;/ref&amp;gt;]]&lt;br /&gt;
&lt;br /&gt;
После того, как изображения '''ректифицированы''', выполняют поиск соответствующих пар точек. Для каждого пикселя одной картинки с координатами &amp;lt;math&amp;gt;(x_0, y_0)&amp;lt;/math&amp;gt; выполняется поиск пикселя на другой картинке. При этом предполагается, что пиксель на второй картинке должен иметь координаты &amp;lt;math&amp;gt;(x_0 - d, y_0)&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;d&amp;lt;/math&amp;gt; — величина называемая смещением. Поиск соответствующего пикселя выполняется путем вычисления максимума функции отклика, в качестве которой может выступать, например, [[Корреляция случайных величин|корреляция]] окрестностей пикселей. В результате получается карта смещений, пример которой приведен на рис. 2. &lt;br /&gt;
&lt;br /&gt;
Собственно значения глубины обратно пропорциональны величине смещения пикселей.&lt;br /&gt;
&lt;br /&gt;
== Использование нейронных сетей ==&lt;br /&gt;
&lt;br /&gt;
Существует множество методов, использующих нейронные сети. Приведём пару примеров таких решений.&lt;br /&gt;
&lt;br /&gt;
=== Построение с помощью свёрточных нейронных сетей ===&lt;br /&gt;
&lt;br /&gt;
Используем [[Сверточные нейронные сети|сверточные нейронные сети]] для построения карты глубины следующим образом&lt;br /&gt;
&amp;lt;ref name=&amp;quot;cnn_rew&amp;quot;&amp;gt; Xiaobai Ma, Zhenglin Geng, Zhi Bie &amp;quot;Depth Estimation from Single Image Using CNN-Residual Network&amp;quot; [http://cs231n.stanford.edu/reports/2017/pdfs/203.pdf]&amp;lt;/ref&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
*  '''Создаем карту смещений''': используя два изображения с камер, близко расположенных друг к другу, создаем карту различий, точно так же как в методе построения по стереопаре.&lt;br /&gt;
&lt;br /&gt;
* '''Ищем реальную карту глубины для обучения''': с помощью карты смещений, можем построить карту глубины &amp;lt;math&amp;gt;y&amp;lt;/math&amp;gt; вышеописанным способом. Также допустимы другие способы построения карты глубины для обучения нейронной сети.&lt;br /&gt;
&lt;br /&gt;
*  '''Функция потерь''': определим [[Функция потерь и эмпирический риск|функцию потерь]], для предсказанной карты &amp;lt;math&amp;gt;\hat y&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;d_i = log( y_i) - log (\hat y_i)&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;\lambda \in [0, 1]&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;n &amp;lt;/math&amp;gt; — количество пикселей. &amp;lt;math&amp;gt;L(y, \hat y) =  \frac{1}{n} \sum\limits_{i} d^2_i - \frac{\lambda}{n^2}(\sum\limits_{i} d_i)^2&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;y_i&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;\hat y_i&amp;lt;/math&amp;gt; это i пискель для для реальной карты глубин и для предсказанной карты, соответственно. Гиперпараметр &amp;lt;math&amp;gt;\lambda&amp;lt;/math&amp;gt;, нужен для того, чтобы функция потерь меньше росла при большом количестве пикселей, предсказание для которых достаточно близко к реальному. Например, если &amp;lt;math&amp;gt;\lambda = 0&amp;lt;/math&amp;gt;, то мы просто придём к оптимизации в L2 для &amp;lt;math&amp;gt;d_i&amp;lt;/math&amp;gt;, т.е. &amp;lt;math&amp;gt;L(y, \hat y) =  \frac{1}{n} \sum\limits_{i} d^2_i &amp;lt;/math&amp;gt;.&amp;lt;ref name=&amp;quot;loss&amp;quot;&amp;gt;David Eigen, Christian Puhrsch, Rob Fergus &amp;quot;Depth Map Prediction from a Single Imageusing a Multi-Scale Deep Network&amp;quot; стр. 5&amp;lt;/ref&amp;gt; &lt;br /&gt;
&lt;br /&gt;
* '''Обучение свёрточной нейронной сети''': далее идёт обычное обучение нейронной сети по карте различий путем обратного распространения ошибки, оптимизируя заданную выше функцию потерь.&lt;br /&gt;
&lt;br /&gt;
В итоге, по обученной нейронной сети мы можем создавать карту глубины, не проводя расчётов для поиска карт смещения и имея только изображение объекта или пространства. &amp;lt;ref name=&amp;quot;cnn&amp;quot;&amp;gt;Реализация, основанная на свёрточных нейронных сетях [https://www.kaggle.com/kmader/cnn-for-generating-depth-maps-from-rgb-images]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Также возможно использование усложнённых архитектур свёрточных нейронных сетей типа '''DenseNet'''.&lt;br /&gt;
&lt;br /&gt;
'''DenseNet'''&amp;lt;ref name=&amp;quot;DenseNet&amp;quot;&amp;gt;Оригинальная статья описывающая DenseNet [https://arxiv.org/abs/1611.09326]&amp;lt;/ref&amp;gt; {{---}} это свёрточная нейронные сеть, в которой выход каждого из слоев подаётся на вход всем слоям, лежащих ниже.&lt;br /&gt;
&lt;br /&gt;
=== Построение с помощью капсульных нейронных сетей ===&lt;br /&gt;
&lt;br /&gt;
Свёрточные нейронные сети способны регистрировать только наличие какого-либо объекта на картинке, не кодируя его ориентацию и положение. Но '''капсульные нейронные сети''' (англ. Capsule Neural Network)&amp;lt;ref name=&amp;quot;CapsNet&amp;quot;&amp;gt;Sara Sabour, Nicholas Frosst, Geoffrey E. Hinton &amp;quot;Dynamic Routing Between Capsules&amp;quot; [https://arxiv.org/pdf/1710.09829.pdf]&amp;lt;/ref&amp;gt; лишены этого недостатка.&lt;br /&gt;
&lt;br /&gt;
[[Файл:capsnet.jpg|thumb|400px| Рисунок 3. Структура капсульной нейронной сети &amp;lt;ref name=&amp;quot;img&amp;quot;&amp;gt; &amp;quot;Design and Investigation of Capsule Networks for Sentence Classification&amp;quot; Figure 2. [https://www.mdpi.com/2076-3417/9/11/2200/htm]&amp;lt;/ref&amp;gt;.]]&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Капсульная нейронная сеть&amp;quot; состоит из капсул или групп нейронов, чтобы идентифицировать закономерности в изображении. Эта информация поступает в виде векторов, содержащих ориентацию и положение узоров на изображении, которое затем принимается капсулами более высокого уровня. Капсулы более высокого уровня обрабатывают эту информацию из нескольких капсул более низкого уровня и впоследствии выдают прогноз. Капсулы одного уровня не имеют связей друг с другом и вычисляют информацию независимо друг от друга. Капсулы образуются путем разделения выходных данных из свёрточного слоя. Мы делим наш трехмерный вектор на капсулы методом &amp;quot;нарезания&amp;quot; таким образом, чтобы в каждой капсуле была информация о каждом пикселе, т.е. по трехмерной координате.&lt;br /&gt;
 &lt;br /&gt;
Состояние нейронов капсульной нейронной сети внутри изображения фиксирует свойство области или объекта внутри изображения: его положение и ориентацию.&lt;br /&gt;
&lt;br /&gt;
Использование капсульной нейронной сети аналогично использованию обычных свёрточных сетей, описанному выше. &lt;br /&gt;
В целом, данная сеть показывает более точные результаты предсказания глубины.&lt;br /&gt;
&lt;br /&gt;
=== Построение с помощью PlanetNet (2018)===&lt;br /&gt;
&lt;br /&gt;
Так же есть архитектуры, решающие данную задачу и без обучения на карте смещений, построенной с помощью двух изображений. Одной из таких является '''PlaneNet'''. &lt;br /&gt;
&lt;br /&gt;
'''PlaneNet'''&amp;lt;ref name=&amp;quot;planetNet&amp;quot;&amp;gt; Chen Liu, Jimei Yang, Duygu Ceylan, Ersin Yumer, Yasutaka Furukawa &amp;quot;PlaneNet: Piece-wise Planar Reconstruction from a Single RGB Image&amp;quot; [https://arxiv.org/abs/1804.06278v1]&amp;lt;/ref&amp;gt; {{---}} глубокая нейронная сеть, построенная на расширенных остаточных сетях (aнгл. Dilated Residual Networks или DRN)&amp;lt;ref name=&amp;quot;drn&amp;quot;&amp;gt; Fisher Yu, Vladlen Koltun, Thomas Funkhouser &amp;quot;Dilated Residual Networks&amp;quot; [https://arxiv.org/abs/1705.09914]&amp;lt;/ref&amp;gt;. Она получает карту глубин путем композиции выходов трех подзадач:&lt;br /&gt;
&lt;br /&gt;
[[Файл:Plane net2.jpg|thumb|500px| Рисунок 4. Прогнозируемые PlaneNet параметры по одной rgb картинке: cегметация плоскости, параметры плоскостей, неплоская карта глубины&amp;lt;ref name=&amp;quot;img4&amp;quot;&amp;gt; Chen Liu, Jimei Yang, Duygu Ceylan, Ersin Yumer, Yasutaka Furukawa &amp;quot;PlaneNet: Piece-wise Planar Reconstruction from a Single RGB Image&amp;quot; Figure 2.&amp;lt;/ref&amp;gt;.]]&lt;br /&gt;
&lt;br /&gt;
* '''Параметры плоскостей''': пытаемся предсказать количество плоскостей $K$, а после ищем на изображение $K$ плоских поверхностей, каждая поверхность задаётся тремя параметрами: нормальная, прямая и сдвиг.&lt;br /&gt;
&lt;br /&gt;
* [[Сегментация изображений|'''Сегментация плоскости''']]: ищем группы пикселей, каждая из которых характеризует один смысловой объект.&lt;br /&gt;
&lt;br /&gt;
* '''Неплоская карта глубины''': ищем одно-канальную (или неплоскую) карту глубины, то есть карту глубины, где каждый пиксель, либо на глубине 0, либо на глубине 1.&lt;br /&gt;
&lt;br /&gt;
=== Обучение без учителя поиска карты глубины из видео (2017) ===&lt;br /&gt;
&lt;br /&gt;
Авторы данной статьи &amp;lt;ref name=&amp;quot;cvrp_dnn&amp;quot;&amp;gt;Tinghui Zhou, Matthew Brown, Noah Snavely, David G. Lowe &amp;quot;Unsupervised Learning of Depth and Ego-Motion from Video&amp;quot; [https://arxiv.org/abs/1704.07813v2]&amp;lt;/ref&amp;gt; предлагают методику оценки глубины одной картинки без учителя и движения камеры из беспорядочной видео нарезки. &lt;br /&gt;
&lt;br /&gt;
[[Файл:dnn.png|thumb|400px| Рисунок 5. Aрхитектура сети на базе DispNet  &amp;lt;ref name=&amp;quot;cvrp&amp;quot;&amp;gt;Tinghui Zhou, Matthew Brown, Noah Snavely, David G. Lowe &amp;quot;Unsupervised Learning of Depth and Ego-Motion from Video&amp;quot; Figure 4&amp;lt;/ref&amp;gt;]]&lt;br /&gt;
&lt;br /&gt;
Будем использовать сверточные нейронные сети c глубиной одного вида и многовидовой камерой из неупорядоченного видеоряда. Метод базируется на синтезе видов. Сеть загружает фото объекта в качестве данных ввода и выводит глубину пикселя. Вид объекта может быть синтезирован исходя из глубины на каждого пикселя снимка позиционирования и четкости ближнего вида. Синтез может быть  дифференцирован с CNN по геометрии и модулям позиционирования.&lt;br /&gt;
Авторы взяли на вооружение архитектуру DispNet&amp;lt;ref name=&amp;quot;dispNet&amp;quot;&amp;gt; Nikolaus Mayer, Eddy Ilg, Philip Hausser, Philipp Fischer &amp;quot;A Large Dataset to Train Convolutional Networks&lt;br /&gt;
for Disparity, Optical Flow, and Scene Flow Estimation&amp;quot; [https://arxiv.org/pdf/1512.02134.pdf]&amp;lt;/ref&amp;gt;, которая сконструирована в виде энкодера и декодера с пропущенными соединениями и многомасштабными блоками предсказания. Функция активации ReLU отслеживает все сверточные слои кроме предсказанных.&lt;br /&gt;
Вид объекта со всех источников формирует входные данные в сеть позиционной оценки. На выходе получается относительная позиция между видом объекта и видом каждого источника. Сеть состоит из двух 7 шаговых сверток за которым следует свертка 1 х 1. За исключением последнего слоя свертки, где применяется нелинейная активация, все другие отслеживаются функцией активации ReLU. Сеть объяснимых предсказаний дает доступ к первым пяти закодированным слоям сети позиционирования. За ней следуют 5 слоев обратной свертки с многомасштабными блоками предсказаний. Кроме слоев предсказаний все уровни свертки и обратной свертки отслеживаются ReLU.&lt;br /&gt;
&lt;br /&gt;
=== Неконтролируемая оценка глубины монокуляра с консистенцией слева направо (2017) ===&lt;br /&gt;
&lt;br /&gt;
[[Файл:Samplers.jpg|thumb|240px| Рисунок 6. Примерная архитектура сети с консистенцией слева направо &amp;lt;ref name=&amp;quot;cvrp2017&amp;quot;&amp;gt;Clément Godard, Oisin Mac Aodha, Gabriel J. Brostow &amp;quot;Unsupervised Monocular Depth Estimation with Left-Right Consistency&amp;quot; Figure 3 &amp;lt;/ref&amp;gt;]]&lt;br /&gt;
&lt;br /&gt;
В данной работе&amp;lt;ref name=&amp;quot;leftrigth&amp;quot;&amp;gt; Clément Godard, Oisin Mac Aodha, Gabriel J. Brostow &amp;quot;Unsupervised Monocular Depth Estimation with Left-Right Consistency&amp;quot; [https://arxiv.org/abs/1609.03677v3]&amp;lt;/ref&amp;gt; предлагается сверточная нейронная сеть, обученная выполнять оценку глубины одного изображения без реальных данных. Авторы предлагают сетевую архитектуру, которая выполняет сквозную оценку глубины изображения, полученного с 1 камеры, без учителя, что обеспечивает согласованность глубины слева направо внутри сети.&lt;br /&gt;
Сеть оценивает глубину, выводя смещения, которые искажают левое изображение, чтобы соответствовать правому. Левое входное изображение используется для вывода смещений слева направо и справа налево. Сеть генерирует предсказанное изображение с обратным отображением с помощью билинейного сэмплера. Это приводит к полностью дифференциальной модели формирования изображения.&lt;br /&gt;
Сверточная архитектура вдохновлена так же DispNet'ом. Она состоит из двух частей—кодера и декодера. Декодер использует пропуск соединений из блоков активации кодера, чтобы распознавать детали с высоким разрешением. Сеть предсказывает две карты смещений — слева направо и справа налево.&lt;br /&gt;
В процессе обучения сеть генерирует изображение путем выборки пикселей из противоположного стереоизображения. Модель формирования изображения использует сэмплер изображений из пространственной трансформаторной сети (STN) для выборки входного изображения с помощью карты смещений.&lt;br /&gt;
&lt;br /&gt;
=== Прогнозирование глубины без датчиков: использование структуры для обучения без учителя по монокулярным видео (2019) ===&lt;br /&gt;
&lt;br /&gt;
[[Файл:ego-motion.png|thumb|500px| Рисунок 7. Сравнение обычного метода построения карты глубин с помощью эго-движения и предложенного в статье, который использует движения для различных 3-D объектов &amp;lt;ref name=&amp;quot;aaaif&amp;quot;&amp;gt;Vincent Casser, Soeren Pirk, Reza Mahjourian, Anelia Angelova &amp;quot;Depth Prediction Without the Sensors: Leveraging Structure for Unsupervised Learning from Monocular Videos&amp;quot; Figure 2 &amp;lt;/ref&amp;gt;]]&lt;br /&gt;
&lt;br /&gt;
'''Визуальная одометрия''' &amp;lt;ref name=&amp;quot;визуальная одометрия&amp;quot;&amp;gt;Статья о визуальной одометрии[https://en.wikipedia.org/wiki/Visual_odometry]&amp;lt;/ref&amp;gt; {{---}} метод оценки положения и ориентации робота или иного устройства в пространстве с помощью анализа последовательности изображений, снятых установленной на нем камерой.&lt;br /&gt;
&lt;br /&gt;
Данная статья &amp;lt;ref name=&amp;quot;aaai&amp;quot;&amp;gt; Vincent Casser, Soeren Pirk, Reza Mahjourian, Anelia Angelova &amp;quot;Depth Prediction Without the Sensors: Leveraging Structure for Unsupervised Learning from Monocular Videos&amp;quot; [https://arxiv.org/abs/1811.06152v1]&amp;lt;/ref&amp;gt; посвящена задаче обучения без учителя глубины сцены и визуальной одометрии робота, где наблюдение обеспечивается видеозаписями с одной камеры. Это делается путем введения геометрической структуры в процесс обучения. Он включает в себя моделирование сцены и отдельных объектов, одометрии камеры и движения объектов, изучаемых с помощью монокулярных видеовходов. Авторы вводят модель движения объекта, которая имеет ту же архитектуру, что и сеть определения визуальной одометрии. Она принимает последовательность изображений RGB в качестве входных данных и дополняется предварительно вычисленными масками сегментации экземпляров. Работа модели движения заключается в том, чтобы научиться предсказывать векторы трансформации каждого объекта в трехмерном пространстве. Это создает видимость наблюдаемого объекта в соответствующем целевом кадре.&lt;br /&gt;
&lt;br /&gt;
== См. также ==&lt;br /&gt;
&lt;br /&gt;
* [[Компьютерное зрение]]&lt;br /&gt;
&lt;br /&gt;
* [[Оценка положения]]&lt;br /&gt;
&lt;br /&gt;
* [[Задача нахождения объектов на изображении]]&lt;br /&gt;
&lt;br /&gt;
== Примечания ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Источники информации ==&lt;br /&gt;
&lt;br /&gt;
* Чугунов Р. А., Кульневич А. Д., Аксенов С. В. Методика построения карт глубины стереоизображения с помощью капсульной нейронной сети //Доклады Томского государственного университета систем управления и радиоэлектроники. – 2019. – Т. 22. – №. 1.[https://cyberleninka.ru/article/n/metodika-postroeniya-kart-glubiny-stereoizobrazheniya-s-pomoschyu-kapsulnoy-neyronnoy-seti/viewer]&lt;br /&gt;
&lt;br /&gt;
* 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]&lt;br /&gt;
&lt;br /&gt;
*  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]&lt;br /&gt;
&lt;br /&gt;
* 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]&lt;br /&gt;
&lt;br /&gt;
* 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]&lt;br /&gt;
&lt;br /&gt;
[[Категория:Машинное обучение]]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Компьютерное зрение]]&lt;/div&gt;</summary>
		<author><name>Frak</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9A%D0%B0%D1%80%D1%82%D0%B0_%D0%B3%D0%BB%D1%83%D0%B1%D0%B8%D0%BD%D1%8B&amp;diff=80259</id>
		<title>Карта глубины</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9A%D0%B0%D1%80%D1%82%D0%B0_%D0%B3%D0%BB%D1%83%D0%B1%D0%B8%D0%BD%D1%8B&amp;diff=80259"/>
				<updated>2021-01-23T11:25:09Z</updated>
		
		<summary type="html">&lt;p&gt;Frak: /* Прогнозирование глубины без датчиков: использование структуры для обучения без учителя по монокулярным видео (2019) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Карта глубины''' (англ. depth map) — это изображение, где для каждого пикселя вместо цвета хранится его расстояние до камеры.&amp;lt;ref name=&amp;quot;def&amp;quot;&amp;gt;Alexey Kurakin &amp;quot;Основы стереозрения&amp;quot;[https://habr.com/ru/post/130300/]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В компьютерной 3D-графике и [[Компьютерное зрение|компьютерном зрении]] карта глубины представляет собой изображение или канал изображения, содержащий информацию о расстоянии поверхностей объектов сцены от точки обзора. &lt;br /&gt;
&lt;br /&gt;
== Мотивация ==&lt;br /&gt;
&lt;br /&gt;
Карта глубины изображения содержит в себе информацию о расстоянии между различными объектами или частями объектов, представленных на данном изображении. Эта информация может быть полезна во многих областях. &lt;br /&gt;
 &lt;br /&gt;
* Для создания 3D-сенсеров. Они способны строить трёхмерную картину своего окружения, используются для [[Оценка положения|ориентации]] автономного робота в пространстве.&lt;br /&gt;
&lt;br /&gt;
* Для систем, использующих технологии дополненной и виртуальной реальности. Например, камеры, которые фиксируют действия пользователя в видеоиграх с технологией виртуальной реальности.&lt;br /&gt;
&lt;br /&gt;
* В беспилотных автомобилях, которые также используют карты глубин для ориентации на дороге.&lt;br /&gt;
&lt;br /&gt;
* Для обработки фотографий. Например, карты глубин используют для размытия фона на фотографии, чтобы добиться более чёткого выделения человека&amp;lt;ref name=&amp;quot;expls&amp;quot;&amp;gt;Примеры из &amp;quot;Research Guide for Depth Estimation with Deep Learning&amp;quot;[https://www.kdnuggets.com/2019/11/research-guide-depth-estimation-deep-learning.html]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Методы построения карты глубины ==&lt;br /&gt;
&lt;br /&gt;
Карта глубины может быть получена с помощью '''специальной камеры глубины''', по '''стереопаре изображений''', а также с помощью [[Нейронные сети, перцептрон|'''нейронных сетей''']].&lt;br /&gt;
&lt;br /&gt;
== Построение с помощью специальных камер глубин == &lt;br /&gt;
&lt;br /&gt;
[[Файл:ToF.jpg|thumb|250px| Рисунок 1. Пример работы ToF-камеры.]]&lt;br /&gt;
&lt;br /&gt;
* '''ToF-камеры''' (англ. Time of Flight). Принцип работы данной камеры основан на измерении задержки света, с которой свет возвращается в каждую точку. Имея несколько сенсоров с разным временем накопления заряда и, зная сдвиг по времени относительно источника для каждого сенсора и снятой яркости вспышки, мы можем рассчитать сдвиг и, соответственно, расстояние до объекта. Причем чем больше сенсоров задействовано, тем выше точность метода.&lt;br /&gt;
&lt;br /&gt;
* '''Структурированные световые камеры''' (aнгл. Structured light camera). Принцип работы данной камеры один из самых старых. Ставим проектор, который создает, например, горизонтальные (а потом и вертикальные) полоски и рядом камеру, которая снимает картину с полосками. В некоторых вариантах используется псевдослучайный набор точек (например MS Kinect {{---}} бесконтактный сенсорный игровой контроллер, для консолей Xbox 360, Xbox One и персональных компьютеров под управлением ОС Windows&amp;lt;ref name=&amp;quot;kinect&amp;quot;&amp;gt; О MicriSoft Kinect [https://en.wikipedia.org/wiki/Kinect]&amp;lt;/ref&amp;gt;). Проекторы обычно работают в инфракрасном спектре, чтобы не мешать пользователям. Поскольку камера и проектор смещены друг относительно друга, то и полоски также будут смещаться пропорционально расстоянию до объекта. Измеряя это смещение, мы можем рассчитывать расстояние до объекта. Вполне понятны сложности, с которыми можно столкнуться при использовании этого метода: это необходимость настройки и калибровки проектора, и проблема того, что нам нужно относительно благоприятное освещение. К примеру, солнце может засветить полосы, и что-то распознать будет тяжело.&lt;br /&gt;
&lt;br /&gt;
== Построения карты глубины по стереопаре ==&lt;br /&gt;
&lt;br /&gt;
Идея, лежащая в основе построения карты глубины по '''стереопаре''', проста. Для каждой точки на одном изображении выполняется поиск [[Ключевые точки изображения|парной ей точки]]&amp;lt;sup&amp;gt;[на 21.01.21 не создан]&amp;lt;/sup&amp;gt; на другом изображении. А по паре соответствующих точек можно выполнить [[Триангуляция полигонов (ушная + монотонная)|триангуляцию]] и определить координаты их [[Отображения|прообраза]] в трехмерном пространстве. Зная трехмерные координаты прообраза, глубина вычисляется как расстояние до плоскости камеры.&lt;br /&gt;
&lt;br /&gt;
Парную точку нужно искать на эпиполярной&amp;lt;ref name=&amp;quot;Epipolar&amp;quot;&amp;gt;Информация о эпиполярной геометрии[https://ru.qaz.wiki/wiki/Epipolar_geometry]&amp;lt;/ref&amp;gt; линии. Соответственно, для упрощения поиска изображения выравнивают так, чтобы все эпиполярные линии были параллельны сторонам изображения (обычно горизонтальны). Более того, изображения выравнивают так, чтобы для точки с координатами &amp;lt;math&amp;gt;(x_0, y_0)&amp;lt;/math&amp;gt; соответствующая ей эпиполярная линия задавалась уравнением &amp;lt;math&amp;gt;x = x_0&amp;lt;/math&amp;gt;. Тогда для каждой точки, соответствующую ей парную точку, нужно искать в той-же строчке на изображении со второй камеры. Такой процесс выравнивания изображений называют '''ректификацией''' (rectification).&lt;br /&gt;
&lt;br /&gt;
[[Файл:Stereo.png|thumb|300px| Рисунок 2. Результат построения карты смещений по двум картинкам.&amp;lt;ref name=&amp;quot;img2&amp;quot;&amp;gt; &amp;quot;Основы стереозрения&amp;quot; Рис. 3 [https://habr.com/ru/post/130300/]&amp;lt;/ref&amp;gt;]]&lt;br /&gt;
&lt;br /&gt;
После того, как изображения '''ректифицированы''', выполняют поиск соответствующих пар точек. Для каждого пикселя одной картинки с координатами &amp;lt;math&amp;gt;(x_0, y_0)&amp;lt;/math&amp;gt; выполняется поиск пикселя на другой картинке. При этом предполагается, что пиксель на второй картинке должен иметь координаты &amp;lt;math&amp;gt;(x_0 - d, y_0)&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;d&amp;lt;/math&amp;gt; — величина называемая смещением. Поиск соответствующего пикселя выполняется путем вычисления максимума функции отклика, в качестве которой может выступать, например, [[Корреляция случайных величин|корреляция]] окрестностей пикселей. В результате получается карта смещений, пример которой приведен на рис. 2. &lt;br /&gt;
&lt;br /&gt;
Собственно значения глубины обратно пропорциональны величине смещения пикселей.&lt;br /&gt;
&lt;br /&gt;
== Использование нейронных сетей ==&lt;br /&gt;
&lt;br /&gt;
Существует множество методов, использующих нейронные сети. Приведём пару примеров таких решений.&lt;br /&gt;
&lt;br /&gt;
=== Построение с помощью свёрточных нейронных сетей ===&lt;br /&gt;
&lt;br /&gt;
Используем [[Сверточные нейронные сети|сверточные нейронные сети]] для построения карты глубины следующим образом&lt;br /&gt;
&amp;lt;ref name=&amp;quot;cnn_rew&amp;quot;&amp;gt; Xiaobai Ma, Zhenglin Geng, Zhi Bie &amp;quot;Depth Estimation from Single Image Using CNN-Residual Network&amp;quot; [http://cs231n.stanford.edu/reports/2017/pdfs/203.pdf]&amp;lt;/ref&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
*  '''Создаем карту смещений''': используя два изображения с камер, близко расположенных друг к другу, создаем карту различий, точно так же как в методе построения по стереопаре.&lt;br /&gt;
&lt;br /&gt;
* '''Ищем реальную карту глубины для обучения''': с помощью карты смещений, можем построить карту глубины &amp;lt;math&amp;gt;y&amp;lt;/math&amp;gt; вышеописанным способом. Также допустимы другие способы построения карты глубины для обучения нейронной сети.&lt;br /&gt;
&lt;br /&gt;
*  '''Функция потерь''': определим [[Функция потерь и эмпирический риск|функцию потерь]], для предсказанной карты &amp;lt;math&amp;gt;\hat y&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;d_i = log( y_i) - log (\hat y_i)&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;\lambda \in [0, 1]&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;n &amp;lt;/math&amp;gt; — количество пикселей. &amp;lt;math&amp;gt;L(y, \hat y) =  \frac{1}{n} \sum\limits_{i} d^2_i - \frac{\lambda}{n^2}(\sum\limits_{i} d_i)^2&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;y_i&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;\hat y_i&amp;lt;/math&amp;gt; это i пискель для для реальной карты глубин и для предсказанной карты, соответственно. Гиперпараметр &amp;lt;math&amp;gt;\lambda&amp;lt;/math&amp;gt;, нужен для того, чтобы функция потерь меньше росла при большом количестве пикселей, предсказание для которых достаточно близко к реальному. Например, если &amp;lt;math&amp;gt;\lambda = 0&amp;lt;/math&amp;gt;, то мы просто придём к оптимизации в L2 для &amp;lt;math&amp;gt;d_i&amp;lt;/math&amp;gt;, т.е. &amp;lt;math&amp;gt;L(y, \hat y) =  \frac{1}{n} \sum\limits_{i} d^2_i &amp;lt;/math&amp;gt;.&amp;lt;ref name=&amp;quot;loss&amp;quot;&amp;gt;David Eigen, Christian Puhrsch, Rob Fergus &amp;quot;Depth Map Prediction from a Single Imageusing a Multi-Scale Deep Network&amp;quot; стр. 5&amp;lt;/ref&amp;gt; &lt;br /&gt;
&lt;br /&gt;
* '''Обучение свёрточной нейронной сети''': далее идёт обычное обучение нейронной сети по карте различий путем обратного распространения ошибки, оптимизируя заданную выше функцию потерь.&lt;br /&gt;
&lt;br /&gt;
В итоге, по обученной нейронной сети мы можем создавать карту глубины, не проводя расчётов для поиска карт смещения и имея только изображение объекта или пространства. &amp;lt;ref name=&amp;quot;cnn&amp;quot;&amp;gt;Реализация, основанная на свёрточных нейронных сетях [https://www.kaggle.com/kmader/cnn-for-generating-depth-maps-from-rgb-images]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Также возможно использование усложнённых архитектур свёрточных нейронных сетей типа '''DenseNet'''.&lt;br /&gt;
&lt;br /&gt;
'''DenseNet'''&amp;lt;ref name=&amp;quot;DenseNet&amp;quot;&amp;gt;Оригинальная статья описывающая DenseNet [https://arxiv.org/abs/1611.09326]&amp;lt;/ref&amp;gt; {{---}} это свёрточная нейронные сеть, в которой выход каждого из слоев подаётся на вход всем слоям, лежащих ниже.&lt;br /&gt;
&lt;br /&gt;
=== Построение с помощью капсульных нейронных сетей ===&lt;br /&gt;
&lt;br /&gt;
Свёрточные нейронные сети способны регистрировать только наличие какого-либо объекта на картинке, не кодируя его ориентацию и положение. Но '''капсульные нейронные сети''' (англ. Capsule Neural Network)&amp;lt;ref name=&amp;quot;CapsNet&amp;quot;&amp;gt;Sara Sabour, Nicholas Frosst, Geoffrey E. Hinton &amp;quot;Dynamic Routing Between Capsules&amp;quot; [https://arxiv.org/pdf/1710.09829.pdf]&amp;lt;/ref&amp;gt; лишены этого недостатка.&lt;br /&gt;
&lt;br /&gt;
[[Файл:capsnet.jpg|thumb|400px| Рисунок 3. Структура капсульной нейронной сети &amp;lt;ref name=&amp;quot;img&amp;quot;&amp;gt; &amp;quot;Design and Investigation of Capsule Networks for Sentence Classification&amp;quot; Figure 2. [https://www.mdpi.com/2076-3417/9/11/2200/htm]&amp;lt;/ref&amp;gt;.]]&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Капсульная нейронная сеть&amp;quot; состоит из капсул или групп нейронов, чтобы идентифицировать закономерности в изображении. Эта информация поступает в виде векторов, содержащих ориентацию и положение узоров на изображении, которое затем принимается капсулами более высокого уровня. Капсулы более высокого уровня обрабатывают эту информацию из нескольких капсул более низкого уровня и впоследствии выдают прогноз. Капсулы одного уровня не имеют связей друг с другом и вычисляют информацию независимо друг от друга. Капсулы образуются путем разделения выходных данных из свёрточного слоя. Мы делим наш трехмерный вектор на капсулы методом &amp;quot;нарезания&amp;quot; таким образом, чтобы в каждой капсуле была информация о каждом пикселе, т.е. по трехмерной координате.&lt;br /&gt;
 &lt;br /&gt;
Состояние нейронов капсульной нейронной сети внутри изображения фиксирует свойство области или объекта внутри изображения: его положение и ориентацию.&lt;br /&gt;
&lt;br /&gt;
Использование капсульной нейронной сети аналогично использованию обычных свёрточных сетей, описанному выше. &lt;br /&gt;
В целом, данная сеть показывает более точные результаты предсказания глубины.&lt;br /&gt;
&lt;br /&gt;
=== Построение с помощью PlanetNet (2018)===&lt;br /&gt;
&lt;br /&gt;
Так же есть архитектуры, решающие данную задачу и без обучения на карте смещений, построенной с помощью двух изображений. Одной из таких является '''PlaneNet'''. &lt;br /&gt;
&lt;br /&gt;
'''PlaneNet'''&amp;lt;ref name=&amp;quot;planetNet&amp;quot;&amp;gt; Chen Liu, Jimei Yang, Duygu Ceylan, Ersin Yumer, Yasutaka Furukawa &amp;quot;PlaneNet: Piece-wise Planar Reconstruction from a Single RGB Image&amp;quot; [https://arxiv.org/abs/1804.06278v1]&amp;lt;/ref&amp;gt; {{---}} глубокая нейронная сеть, построенная на расширенных остаточных сетях (aнгл. Dilated Residual Networks или DRN)&amp;lt;ref name=&amp;quot;drn&amp;quot;&amp;gt; Fisher Yu, Vladlen Koltun, Thomas Funkhouser &amp;quot;Dilated Residual Networks&amp;quot; [https://arxiv.org/abs/1705.09914]&amp;lt;/ref&amp;gt;. Она получает карту глубин путем композиции выходов трех подзадач:&lt;br /&gt;
&lt;br /&gt;
[[Файл:Plane net2.jpg|thumb|500px| Рисунок 4. Прогнозируемые PlaneNet параметры по одной rgb картинке: cегметация плоскости, параметры плоскостей, неплоская карта глубины&amp;lt;ref name=&amp;quot;img4&amp;quot;&amp;gt; Chen Liu, Jimei Yang, Duygu Ceylan, Ersin Yumer, Yasutaka Furukawa &amp;quot;PlaneNet: Piece-wise Planar Reconstruction from a Single RGB Image&amp;quot; Figure 2.&amp;lt;/ref&amp;gt;.]]&lt;br /&gt;
&lt;br /&gt;
* '''Параметры плоскостей''': пытаемся предсказать количество плоскостей $K$, а после ищем на изображение $K$ плоских поверхностей, каждая поверхность задаётся тремя параметрами: нормальная, прямая и сдвиг.&lt;br /&gt;
&lt;br /&gt;
* [[Сегментация изображений|'''Сегментация плоскости''']]: ищем группы пикселей, каждая из которых характеризует один смысловой объект.&lt;br /&gt;
&lt;br /&gt;
* '''Неплоская карта глубины''': ищем одно-канальную (или неплоскую) карту глубины, то есть карту глубины, где каждый пиксель, либо на глубине 0, либо на глубине 1.&lt;br /&gt;
&lt;br /&gt;
=== Обучение без учителя поиска карты глубины из видео (2017) ===&lt;br /&gt;
&lt;br /&gt;
Авторы данной статьи &amp;lt;ref name=&amp;quot;cvrp_dnn&amp;quot;&amp;gt;Tinghui Zhou, Matthew Brown, Noah Snavely, David G. Lowe &amp;quot;Unsupervised Learning of Depth and Ego-Motion from Video&amp;quot; [https://arxiv.org/abs/1704.07813v2]&amp;lt;/ref&amp;gt; предлагают методику оценки глубины одной картинки без учителя и движения камеры из беспорядочной видео нарезки. &lt;br /&gt;
&lt;br /&gt;
[[Файл:dnn.png|thumb|400px| Рисунок 5. Aрхитектура сети на базе DispNet  &amp;lt;ref name=&amp;quot;cvrp&amp;quot;&amp;gt;Tinghui Zhou, Matthew Brown, Noah Snavely, David G. Lowe &amp;quot;Unsupervised Learning of Depth and Ego-Motion from Video&amp;quot; Figure 4&amp;lt;/ref&amp;gt;]]&lt;br /&gt;
&lt;br /&gt;
Будем использовать сверточные нейронные сети c глубиной одного вида и многовидовой камерой из неупорядоченного видеоряда. Метод базируется на синтезе видов. Сеть загружает фото объекта в качестве данных ввода и выводит глубину пикселя. Вид объекта может быть синтезирован исходя из глубины на каждого пикселя снимка позиционирования и четкости ближнего вида. Синтез может быть  дифференцирован с CNN по геометрии и модулям позиционирования.&lt;br /&gt;
Авторы взяли на вооружение архитектуру DispNet&amp;lt;ref name=&amp;quot;dispNet&amp;quot;&amp;gt; Nikolaus Mayer, Eddy Ilg, Philip Hausser, Philipp Fischer &amp;quot;A Large Dataset to Train Convolutional Networks&lt;br /&gt;
for Disparity, Optical Flow, and Scene Flow Estimation&amp;quot; [https://arxiv.org/pdf/1512.02134.pdf]&amp;lt;/ref&amp;gt;, которая сконструирована в виде энкодера и декодера с пропущенными соединениями и многомасштабными блоками предсказания. Функция активации ReLU отслеживает все сверточные слои кроме предсказанных.&lt;br /&gt;
Вид объекта со всех источников формирует входные данные в сеть позиционной оценки. На выходе получается относительная позиция между видом объекта и видом каждого источника. Сеть состоит из двух 7 шаговых сверток за которым следует свертка 1 х 1. За исключением последнего слоя свертки, где применяется нелинейная активация, все другие отслеживаются функцией активации ReLU. Сеть объяснимых предсказаний дает доступ к первым пяти закодированным слоям сети позиционирования. За ней следуют 5 слоев обратной свертки с многомасштабными блоками предсказаний. Кроме слоев предсказаний все уровни свертки и обратной свертки отслеживаются ReLU.&lt;br /&gt;
&lt;br /&gt;
=== Неконтролируемая оценка глубины монокуляра с консистенцией слева направо (2017) ===&lt;br /&gt;
&lt;br /&gt;
[[Файл:Samplers.jpg|thumb|240px| Рисунок 6. Примерная архитектура сети с консистенцией слева направо &amp;lt;ref name=&amp;quot;cvrp2017&amp;quot;&amp;gt;Clément Godard, Oisin Mac Aodha, Gabriel J. Brostow &amp;quot;Unsupervised Monocular Depth Estimation with Left-Right Consistency&amp;quot; Figure 3 &amp;lt;/ref&amp;gt;]]&lt;br /&gt;
&lt;br /&gt;
В данной работе&amp;lt;ref name=&amp;quot;leftrigth&amp;quot;&amp;gt; Clément Godard, Oisin Mac Aodha, Gabriel J. Brostow &amp;quot;Unsupervised Monocular Depth Estimation with Left-Right Consistency&amp;quot; [https://arxiv.org/abs/1609.03677v3]&amp;lt;/ref&amp;gt; предлагается сверточная нейронная сеть, обученная выполнять оценку глубины одного изображения без реальных данных. Авторы предлагают сетевую архитектуру, которая выполняет сквозную оценку глубины изображения, полученного с 1 камеры, без учителя, что обеспечивает согласованность глубины слева направо внутри сети.&lt;br /&gt;
Сеть оценивает глубину, выводя смещения, которые искажают левое изображение, чтобы соответствовать правому. Левое входное изображение используется для вывода смещений слева направо и справа налево. Сеть генерирует предсказанное изображение с обратным отображением с помощью билинейного сэмплера. Это приводит к полностью дифференциальной модели формирования изображения.&lt;br /&gt;
Сверточная архитектура вдохновлена так же DispNet'ом. Она состоит из двух частей—кодера и декодера. Декодер использует пропуск соединений из блоков активации кодера, чтобы распознавать детали с высоким разрешением. Сеть предсказывает две карты смещений — слева направо и справа налево.&lt;br /&gt;
В процессе обучения сеть генерирует изображение путем выборки пикселей из противоположного стереоизображения. Модель формирования изображения использует сэмплер изображений из пространственной трансформаторной сети (STN) для выборки входного изображения с помощью карты смещений.&lt;br /&gt;
&lt;br /&gt;
=== Прогнозирование глубины без датчиков: использование структуры для обучения без учителя по монокулярным видео (2019) ===&lt;br /&gt;
&lt;br /&gt;
[[Файл:ego-motion.png|thumb|500px| Рисунок 7. Сравнение обычного метода построения карты глубин с помощью эго-движения и предложенного в статье, который использует движения для различных 3-D объектов &amp;lt;ref name=&amp;quot;aaaif&amp;quot;&amp;gt;Vincent Casser, Soeren Pirk, Reza Mahjourian, Anelia Angelova &amp;quot;Depth Prediction Without the Sensors: Leveraging Structure for Unsupervised Learning from Monocular Videos&amp;quot; Figure 2 &amp;lt;/ref&amp;gt;]]&lt;br /&gt;
&lt;br /&gt;
'''Визуальная одометрия'''Ы &amp;lt;ref name=&amp;quot;визуальная одометрия&amp;quot;&amp;gt;Статья о визуальной одометрии[https://en.wikipedia.org/wiki/Visual_odometry]&amp;lt;/ref&amp;gt; {{---}} метод оценки положения и ориентации робота или иного устройства в пространстве с помощью анализа последовательности изображений, снятых установленной на нем камерой.&lt;br /&gt;
&lt;br /&gt;
Данная статья &amp;lt;ref name=&amp;quot;aaai&amp;quot;&amp;gt; Vincent Casser, Soeren Pirk, Reza Mahjourian, Anelia Angelova &amp;quot;Depth Prediction Without the Sensors: Leveraging Structure for Unsupervised Learning from Monocular Videos&amp;quot; [https://arxiv.org/abs/1811.06152v1]&amp;lt;/ref&amp;gt; посвящена задаче обучения без учителя глубины сцены и визуальной одометрии робота, где наблюдение обеспечивается видеозаписями с одной камеры. Это делается путем введения геометрической структуры в процесс обучения. Он включает в себя моделирование сцены и отдельных объектов, одометрии камеры и движения объектов, изучаемых с помощью монокулярных видеовходов. Авторы вводят модель движения объекта, которая имеет ту же архитектуру, что и сеть определения визуальной одометрии. Она принимает последовательность изображений RGB в качестве входных данных и дополняется предварительно вычисленными масками сегментации экземпляров. Работа модели движения заключается в том, чтобы научиться предсказывать векторы трансформации каждого объекта в трехмерном пространстве. Это создает видимость наблюдаемого объекта в соответствующем целевом кадре.&lt;br /&gt;
&lt;br /&gt;
== См. также ==&lt;br /&gt;
&lt;br /&gt;
* [[Компьютерное зрение]]&lt;br /&gt;
&lt;br /&gt;
* [[Оценка положения]]&lt;br /&gt;
&lt;br /&gt;
* [[Задача нахождения объектов на изображении]]&lt;br /&gt;
&lt;br /&gt;
== Примечания ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Источники информации ==&lt;br /&gt;
&lt;br /&gt;
* Чугунов Р. А., Кульневич А. Д., Аксенов С. В. Методика построения карт глубины стереоизображения с помощью капсульной нейронной сети //Доклады Томского государственного университета систем управления и радиоэлектроники. – 2019. – Т. 22. – №. 1.[https://cyberleninka.ru/article/n/metodika-postroeniya-kart-glubiny-stereoizobrazheniya-s-pomoschyu-kapsulnoy-neyronnoy-seti/viewer]&lt;br /&gt;
&lt;br /&gt;
* 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]&lt;br /&gt;
&lt;br /&gt;
*  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]&lt;br /&gt;
&lt;br /&gt;
* 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]&lt;br /&gt;
&lt;br /&gt;
* 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]&lt;br /&gt;
&lt;br /&gt;
[[Категория:Машинное обучение]]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Компьютерное зрение]]&lt;/div&gt;</summary>
		<author><name>Frak</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9A%D0%B0%D1%80%D1%82%D0%B0_%D0%B3%D0%BB%D1%83%D0%B1%D0%B8%D0%BD%D1%8B&amp;diff=80258</id>
		<title>Карта глубины</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9A%D0%B0%D1%80%D1%82%D0%B0_%D0%B3%D0%BB%D1%83%D0%B1%D0%B8%D0%BD%D1%8B&amp;diff=80258"/>
				<updated>2021-01-23T11:24:32Z</updated>
		
		<summary type="html">&lt;p&gt;Frak: /* Прогнозирование глубины без датчиков: использование структуры для обучения без учителя по монокулярным видео (2019) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Карта глубины''' (англ. depth map) — это изображение, где для каждого пикселя вместо цвета хранится его расстояние до камеры.&amp;lt;ref name=&amp;quot;def&amp;quot;&amp;gt;Alexey Kurakin &amp;quot;Основы стереозрения&amp;quot;[https://habr.com/ru/post/130300/]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В компьютерной 3D-графике и [[Компьютерное зрение|компьютерном зрении]] карта глубины представляет собой изображение или канал изображения, содержащий информацию о расстоянии поверхностей объектов сцены от точки обзора. &lt;br /&gt;
&lt;br /&gt;
== Мотивация ==&lt;br /&gt;
&lt;br /&gt;
Карта глубины изображения содержит в себе информацию о расстоянии между различными объектами или частями объектов, представленных на данном изображении. Эта информация может быть полезна во многих областях. &lt;br /&gt;
 &lt;br /&gt;
* Для создания 3D-сенсеров. Они способны строить трёхмерную картину своего окружения, используются для [[Оценка положения|ориентации]] автономного робота в пространстве.&lt;br /&gt;
&lt;br /&gt;
* Для систем, использующих технологии дополненной и виртуальной реальности. Например, камеры, которые фиксируют действия пользователя в видеоиграх с технологией виртуальной реальности.&lt;br /&gt;
&lt;br /&gt;
* В беспилотных автомобилях, которые также используют карты глубин для ориентации на дороге.&lt;br /&gt;
&lt;br /&gt;
* Для обработки фотографий. Например, карты глубин используют для размытия фона на фотографии, чтобы добиться более чёткого выделения человека&amp;lt;ref name=&amp;quot;expls&amp;quot;&amp;gt;Примеры из &amp;quot;Research Guide for Depth Estimation with Deep Learning&amp;quot;[https://www.kdnuggets.com/2019/11/research-guide-depth-estimation-deep-learning.html]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Методы построения карты глубины ==&lt;br /&gt;
&lt;br /&gt;
Карта глубины может быть получена с помощью '''специальной камеры глубины''', по '''стереопаре изображений''', а также с помощью [[Нейронные сети, перцептрон|'''нейронных сетей''']].&lt;br /&gt;
&lt;br /&gt;
== Построение с помощью специальных камер глубин == &lt;br /&gt;
&lt;br /&gt;
[[Файл:ToF.jpg|thumb|250px| Рисунок 1. Пример работы ToF-камеры.]]&lt;br /&gt;
&lt;br /&gt;
* '''ToF-камеры''' (англ. Time of Flight). Принцип работы данной камеры основан на измерении задержки света, с которой свет возвращается в каждую точку. Имея несколько сенсоров с разным временем накопления заряда и, зная сдвиг по времени относительно источника для каждого сенсора и снятой яркости вспышки, мы можем рассчитать сдвиг и, соответственно, расстояние до объекта. Причем чем больше сенсоров задействовано, тем выше точность метода.&lt;br /&gt;
&lt;br /&gt;
* '''Структурированные световые камеры''' (aнгл. Structured light camera). Принцип работы данной камеры один из самых старых. Ставим проектор, который создает, например, горизонтальные (а потом и вертикальные) полоски и рядом камеру, которая снимает картину с полосками. В некоторых вариантах используется псевдослучайный набор точек (например MS Kinect {{---}} бесконтактный сенсорный игровой контроллер, для консолей Xbox 360, Xbox One и персональных компьютеров под управлением ОС Windows&amp;lt;ref name=&amp;quot;kinect&amp;quot;&amp;gt; О MicriSoft Kinect [https://en.wikipedia.org/wiki/Kinect]&amp;lt;/ref&amp;gt;). Проекторы обычно работают в инфракрасном спектре, чтобы не мешать пользователям. Поскольку камера и проектор смещены друг относительно друга, то и полоски также будут смещаться пропорционально расстоянию до объекта. Измеряя это смещение, мы можем рассчитывать расстояние до объекта. Вполне понятны сложности, с которыми можно столкнуться при использовании этого метода: это необходимость настройки и калибровки проектора, и проблема того, что нам нужно относительно благоприятное освещение. К примеру, солнце может засветить полосы, и что-то распознать будет тяжело.&lt;br /&gt;
&lt;br /&gt;
== Построения карты глубины по стереопаре ==&lt;br /&gt;
&lt;br /&gt;
Идея, лежащая в основе построения карты глубины по '''стереопаре''', проста. Для каждой точки на одном изображении выполняется поиск [[Ключевые точки изображения|парной ей точки]]&amp;lt;sup&amp;gt;[на 21.01.21 не создан]&amp;lt;/sup&amp;gt; на другом изображении. А по паре соответствующих точек можно выполнить [[Триангуляция полигонов (ушная + монотонная)|триангуляцию]] и определить координаты их [[Отображения|прообраза]] в трехмерном пространстве. Зная трехмерные координаты прообраза, глубина вычисляется как расстояние до плоскости камеры.&lt;br /&gt;
&lt;br /&gt;
Парную точку нужно искать на эпиполярной&amp;lt;ref name=&amp;quot;Epipolar&amp;quot;&amp;gt;Информация о эпиполярной геометрии[https://ru.qaz.wiki/wiki/Epipolar_geometry]&amp;lt;/ref&amp;gt; линии. Соответственно, для упрощения поиска изображения выравнивают так, чтобы все эпиполярные линии были параллельны сторонам изображения (обычно горизонтальны). Более того, изображения выравнивают так, чтобы для точки с координатами &amp;lt;math&amp;gt;(x_0, y_0)&amp;lt;/math&amp;gt; соответствующая ей эпиполярная линия задавалась уравнением &amp;lt;math&amp;gt;x = x_0&amp;lt;/math&amp;gt;. Тогда для каждой точки, соответствующую ей парную точку, нужно искать в той-же строчке на изображении со второй камеры. Такой процесс выравнивания изображений называют '''ректификацией''' (rectification).&lt;br /&gt;
&lt;br /&gt;
[[Файл:Stereo.png|thumb|300px| Рисунок 2. Результат построения карты смещений по двум картинкам.&amp;lt;ref name=&amp;quot;img2&amp;quot;&amp;gt; &amp;quot;Основы стереозрения&amp;quot; Рис. 3 [https://habr.com/ru/post/130300/]&amp;lt;/ref&amp;gt;]]&lt;br /&gt;
&lt;br /&gt;
После того, как изображения '''ректифицированы''', выполняют поиск соответствующих пар точек. Для каждого пикселя одной картинки с координатами &amp;lt;math&amp;gt;(x_0, y_0)&amp;lt;/math&amp;gt; выполняется поиск пикселя на другой картинке. При этом предполагается, что пиксель на второй картинке должен иметь координаты &amp;lt;math&amp;gt;(x_0 - d, y_0)&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;d&amp;lt;/math&amp;gt; — величина называемая смещением. Поиск соответствующего пикселя выполняется путем вычисления максимума функции отклика, в качестве которой может выступать, например, [[Корреляция случайных величин|корреляция]] окрестностей пикселей. В результате получается карта смещений, пример которой приведен на рис. 2. &lt;br /&gt;
&lt;br /&gt;
Собственно значения глубины обратно пропорциональны величине смещения пикселей.&lt;br /&gt;
&lt;br /&gt;
== Использование нейронных сетей ==&lt;br /&gt;
&lt;br /&gt;
Существует множество методов, использующих нейронные сети. Приведём пару примеров таких решений.&lt;br /&gt;
&lt;br /&gt;
=== Построение с помощью свёрточных нейронных сетей ===&lt;br /&gt;
&lt;br /&gt;
Используем [[Сверточные нейронные сети|сверточные нейронные сети]] для построения карты глубины следующим образом&lt;br /&gt;
&amp;lt;ref name=&amp;quot;cnn_rew&amp;quot;&amp;gt; Xiaobai Ma, Zhenglin Geng, Zhi Bie &amp;quot;Depth Estimation from Single Image Using CNN-Residual Network&amp;quot; [http://cs231n.stanford.edu/reports/2017/pdfs/203.pdf]&amp;lt;/ref&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
*  '''Создаем карту смещений''': используя два изображения с камер, близко расположенных друг к другу, создаем карту различий, точно так же как в методе построения по стереопаре.&lt;br /&gt;
&lt;br /&gt;
* '''Ищем реальную карту глубины для обучения''': с помощью карты смещений, можем построить карту глубины &amp;lt;math&amp;gt;y&amp;lt;/math&amp;gt; вышеописанным способом. Также допустимы другие способы построения карты глубины для обучения нейронной сети.&lt;br /&gt;
&lt;br /&gt;
*  '''Функция потерь''': определим [[Функция потерь и эмпирический риск|функцию потерь]], для предсказанной карты &amp;lt;math&amp;gt;\hat y&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;d_i = log( y_i) - log (\hat y_i)&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;\lambda \in [0, 1]&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;n &amp;lt;/math&amp;gt; — количество пикселей. &amp;lt;math&amp;gt;L(y, \hat y) =  \frac{1}{n} \sum\limits_{i} d^2_i - \frac{\lambda}{n^2}(\sum\limits_{i} d_i)^2&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;y_i&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;\hat y_i&amp;lt;/math&amp;gt; это i пискель для для реальной карты глубин и для предсказанной карты, соответственно. Гиперпараметр &amp;lt;math&amp;gt;\lambda&amp;lt;/math&amp;gt;, нужен для того, чтобы функция потерь меньше росла при большом количестве пикселей, предсказание для которых достаточно близко к реальному. Например, если &amp;lt;math&amp;gt;\lambda = 0&amp;lt;/math&amp;gt;, то мы просто придём к оптимизации в L2 для &amp;lt;math&amp;gt;d_i&amp;lt;/math&amp;gt;, т.е. &amp;lt;math&amp;gt;L(y, \hat y) =  \frac{1}{n} \sum\limits_{i} d^2_i &amp;lt;/math&amp;gt;.&amp;lt;ref name=&amp;quot;loss&amp;quot;&amp;gt;David Eigen, Christian Puhrsch, Rob Fergus &amp;quot;Depth Map Prediction from a Single Imageusing a Multi-Scale Deep Network&amp;quot; стр. 5&amp;lt;/ref&amp;gt; &lt;br /&gt;
&lt;br /&gt;
* '''Обучение свёрточной нейронной сети''': далее идёт обычное обучение нейронной сети по карте различий путем обратного распространения ошибки, оптимизируя заданную выше функцию потерь.&lt;br /&gt;
&lt;br /&gt;
В итоге, по обученной нейронной сети мы можем создавать карту глубины, не проводя расчётов для поиска карт смещения и имея только изображение объекта или пространства. &amp;lt;ref name=&amp;quot;cnn&amp;quot;&amp;gt;Реализация, основанная на свёрточных нейронных сетях [https://www.kaggle.com/kmader/cnn-for-generating-depth-maps-from-rgb-images]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Также возможно использование усложнённых архитектур свёрточных нейронных сетей типа '''DenseNet'''.&lt;br /&gt;
&lt;br /&gt;
'''DenseNet'''&amp;lt;ref name=&amp;quot;DenseNet&amp;quot;&amp;gt;Оригинальная статья описывающая DenseNet [https://arxiv.org/abs/1611.09326]&amp;lt;/ref&amp;gt; {{---}} это свёрточная нейронные сеть, в которой выход каждого из слоев подаётся на вход всем слоям, лежащих ниже.&lt;br /&gt;
&lt;br /&gt;
=== Построение с помощью капсульных нейронных сетей ===&lt;br /&gt;
&lt;br /&gt;
Свёрточные нейронные сети способны регистрировать только наличие какого-либо объекта на картинке, не кодируя его ориентацию и положение. Но '''капсульные нейронные сети''' (англ. Capsule Neural Network)&amp;lt;ref name=&amp;quot;CapsNet&amp;quot;&amp;gt;Sara Sabour, Nicholas Frosst, Geoffrey E. Hinton &amp;quot;Dynamic Routing Between Capsules&amp;quot; [https://arxiv.org/pdf/1710.09829.pdf]&amp;lt;/ref&amp;gt; лишены этого недостатка.&lt;br /&gt;
&lt;br /&gt;
[[Файл:capsnet.jpg|thumb|400px| Рисунок 3. Структура капсульной нейронной сети &amp;lt;ref name=&amp;quot;img&amp;quot;&amp;gt; &amp;quot;Design and Investigation of Capsule Networks for Sentence Classification&amp;quot; Figure 2. [https://www.mdpi.com/2076-3417/9/11/2200/htm]&amp;lt;/ref&amp;gt;.]]&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Капсульная нейронная сеть&amp;quot; состоит из капсул или групп нейронов, чтобы идентифицировать закономерности в изображении. Эта информация поступает в виде векторов, содержащих ориентацию и положение узоров на изображении, которое затем принимается капсулами более высокого уровня. Капсулы более высокого уровня обрабатывают эту информацию из нескольких капсул более низкого уровня и впоследствии выдают прогноз. Капсулы одного уровня не имеют связей друг с другом и вычисляют информацию независимо друг от друга. Капсулы образуются путем разделения выходных данных из свёрточного слоя. Мы делим наш трехмерный вектор на капсулы методом &amp;quot;нарезания&amp;quot; таким образом, чтобы в каждой капсуле была информация о каждом пикселе, т.е. по трехмерной координате.&lt;br /&gt;
 &lt;br /&gt;
Состояние нейронов капсульной нейронной сети внутри изображения фиксирует свойство области или объекта внутри изображения: его положение и ориентацию.&lt;br /&gt;
&lt;br /&gt;
Использование капсульной нейронной сети аналогично использованию обычных свёрточных сетей, описанному выше. &lt;br /&gt;
В целом, данная сеть показывает более точные результаты предсказания глубины.&lt;br /&gt;
&lt;br /&gt;
=== Построение с помощью PlanetNet (2018)===&lt;br /&gt;
&lt;br /&gt;
Так же есть архитектуры, решающие данную задачу и без обучения на карте смещений, построенной с помощью двух изображений. Одной из таких является '''PlaneNet'''. &lt;br /&gt;
&lt;br /&gt;
'''PlaneNet'''&amp;lt;ref name=&amp;quot;planetNet&amp;quot;&amp;gt; Chen Liu, Jimei Yang, Duygu Ceylan, Ersin Yumer, Yasutaka Furukawa &amp;quot;PlaneNet: Piece-wise Planar Reconstruction from a Single RGB Image&amp;quot; [https://arxiv.org/abs/1804.06278v1]&amp;lt;/ref&amp;gt; {{---}} глубокая нейронная сеть, построенная на расширенных остаточных сетях (aнгл. Dilated Residual Networks или DRN)&amp;lt;ref name=&amp;quot;drn&amp;quot;&amp;gt; Fisher Yu, Vladlen Koltun, Thomas Funkhouser &amp;quot;Dilated Residual Networks&amp;quot; [https://arxiv.org/abs/1705.09914]&amp;lt;/ref&amp;gt;. Она получает карту глубин путем композиции выходов трех подзадач:&lt;br /&gt;
&lt;br /&gt;
[[Файл:Plane net2.jpg|thumb|500px| Рисунок 4. Прогнозируемые PlaneNet параметры по одной rgb картинке: cегметация плоскости, параметры плоскостей, неплоская карта глубины&amp;lt;ref name=&amp;quot;img4&amp;quot;&amp;gt; Chen Liu, Jimei Yang, Duygu Ceylan, Ersin Yumer, Yasutaka Furukawa &amp;quot;PlaneNet: Piece-wise Planar Reconstruction from a Single RGB Image&amp;quot; Figure 2.&amp;lt;/ref&amp;gt;.]]&lt;br /&gt;
&lt;br /&gt;
* '''Параметры плоскостей''': пытаемся предсказать количество плоскостей $K$, а после ищем на изображение $K$ плоских поверхностей, каждая поверхность задаётся тремя параметрами: нормальная, прямая и сдвиг.&lt;br /&gt;
&lt;br /&gt;
* [[Сегментация изображений|'''Сегментация плоскости''']]: ищем группы пикселей, каждая из которых характеризует один смысловой объект.&lt;br /&gt;
&lt;br /&gt;
* '''Неплоская карта глубины''': ищем одно-канальную (или неплоскую) карту глубины, то есть карту глубины, где каждый пиксель, либо на глубине 0, либо на глубине 1.&lt;br /&gt;
&lt;br /&gt;
=== Обучение без учителя поиска карты глубины из видео (2017) ===&lt;br /&gt;
&lt;br /&gt;
Авторы данной статьи &amp;lt;ref name=&amp;quot;cvrp_dnn&amp;quot;&amp;gt;Tinghui Zhou, Matthew Brown, Noah Snavely, David G. Lowe &amp;quot;Unsupervised Learning of Depth and Ego-Motion from Video&amp;quot; [https://arxiv.org/abs/1704.07813v2]&amp;lt;/ref&amp;gt; предлагают методику оценки глубины одной картинки без учителя и движения камеры из беспорядочной видео нарезки. &lt;br /&gt;
&lt;br /&gt;
[[Файл:dnn.png|thumb|400px| Рисунок 5. Aрхитектура сети на базе DispNet  &amp;lt;ref name=&amp;quot;cvrp&amp;quot;&amp;gt;Tinghui Zhou, Matthew Brown, Noah Snavely, David G. Lowe &amp;quot;Unsupervised Learning of Depth and Ego-Motion from Video&amp;quot; Figure 4&amp;lt;/ref&amp;gt;]]&lt;br /&gt;
&lt;br /&gt;
Будем использовать сверточные нейронные сети c глубиной одного вида и многовидовой камерой из неупорядоченного видеоряда. Метод базируется на синтезе видов. Сеть загружает фото объекта в качестве данных ввода и выводит глубину пикселя. Вид объекта может быть синтезирован исходя из глубины на каждого пикселя снимка позиционирования и четкости ближнего вида. Синтез может быть  дифференцирован с CNN по геометрии и модулям позиционирования.&lt;br /&gt;
Авторы взяли на вооружение архитектуру DispNet&amp;lt;ref name=&amp;quot;dispNet&amp;quot;&amp;gt; Nikolaus Mayer, Eddy Ilg, Philip Hausser, Philipp Fischer &amp;quot;A Large Dataset to Train Convolutional Networks&lt;br /&gt;
for Disparity, Optical Flow, and Scene Flow Estimation&amp;quot; [https://arxiv.org/pdf/1512.02134.pdf]&amp;lt;/ref&amp;gt;, которая сконструирована в виде энкодера и декодера с пропущенными соединениями и многомасштабными блоками предсказания. Функция активации ReLU отслеживает все сверточные слои кроме предсказанных.&lt;br /&gt;
Вид объекта со всех источников формирует входные данные в сеть позиционной оценки. На выходе получается относительная позиция между видом объекта и видом каждого источника. Сеть состоит из двух 7 шаговых сверток за которым следует свертка 1 х 1. За исключением последнего слоя свертки, где применяется нелинейная активация, все другие отслеживаются функцией активации ReLU. Сеть объяснимых предсказаний дает доступ к первым пяти закодированным слоям сети позиционирования. За ней следуют 5 слоев обратной свертки с многомасштабными блоками предсказаний. Кроме слоев предсказаний все уровни свертки и обратной свертки отслеживаются ReLU.&lt;br /&gt;
&lt;br /&gt;
=== Неконтролируемая оценка глубины монокуляра с консистенцией слева направо (2017) ===&lt;br /&gt;
&lt;br /&gt;
[[Файл:Samplers.jpg|thumb|240px| Рисунок 6. Примерная архитектура сети с консистенцией слева направо &amp;lt;ref name=&amp;quot;cvrp2017&amp;quot;&amp;gt;Clément Godard, Oisin Mac Aodha, Gabriel J. Brostow &amp;quot;Unsupervised Monocular Depth Estimation with Left-Right Consistency&amp;quot; Figure 3 &amp;lt;/ref&amp;gt;]]&lt;br /&gt;
&lt;br /&gt;
В данной работе&amp;lt;ref name=&amp;quot;leftrigth&amp;quot;&amp;gt; Clément Godard, Oisin Mac Aodha, Gabriel J. Brostow &amp;quot;Unsupervised Monocular Depth Estimation with Left-Right Consistency&amp;quot; [https://arxiv.org/abs/1609.03677v3]&amp;lt;/ref&amp;gt; предлагается сверточная нейронная сеть, обученная выполнять оценку глубины одного изображения без реальных данных. Авторы предлагают сетевую архитектуру, которая выполняет сквозную оценку глубины изображения, полученного с 1 камеры, без учителя, что обеспечивает согласованность глубины слева направо внутри сети.&lt;br /&gt;
Сеть оценивает глубину, выводя смещения, которые искажают левое изображение, чтобы соответствовать правому. Левое входное изображение используется для вывода смещений слева направо и справа налево. Сеть генерирует предсказанное изображение с обратным отображением с помощью билинейного сэмплера. Это приводит к полностью дифференциальной модели формирования изображения.&lt;br /&gt;
Сверточная архитектура вдохновлена так же DispNet'ом. Она состоит из двух частей—кодера и декодера. Декодер использует пропуск соединений из блоков активации кодера, чтобы распознавать детали с высоким разрешением. Сеть предсказывает две карты смещений — слева направо и справа налево.&lt;br /&gt;
В процессе обучения сеть генерирует изображение путем выборки пикселей из противоположного стереоизображения. Модель формирования изображения использует сэмплер изображений из пространственной трансформаторной сети (STN) для выборки входного изображения с помощью карты смещений.&lt;br /&gt;
&lt;br /&gt;
=== Прогнозирование глубины без датчиков: использование структуры для обучения без учителя по монокулярным видео (2019) ===&lt;br /&gt;
&lt;br /&gt;
[[Файл:ego-motion.png|thumb|500px| Рисунок 7. Сравнение обычного метода построения карты глубин с помощью эго-движения и предложенного в статье, который использует движения для различных 3-D объектов &amp;lt;ref name=&amp;quot;aaaif&amp;quot;&amp;gt;Vincent Casser, Soeren Pirk, Reza Mahjourian, Anelia Angelova &amp;quot;Depth Prediction Without the Sensors: Leveraging Structure for Unsupervised Learning from Monocular Videos&amp;quot; Figure 2 &amp;lt;/ref&amp;gt;]]&lt;br /&gt;
&lt;br /&gt;
Визуальная одометрия &amp;lt;ref name=&amp;quot;визуальная одометрия&amp;quot;&amp;gt;Статья о визуальной одометрии[https://en.wikipedia.org/wiki/Visual_odometry]&amp;lt;/ref&amp;gt; {{---}} метод оценки положения и ориентации робота или иного устройства в пространстве с помощью анализа последовательности изображений, снятых установленной на нем камерой.&lt;br /&gt;
&lt;br /&gt;
Данная статья &amp;lt;ref name=&amp;quot;aaai&amp;quot;&amp;gt; Vincent Casser, Soeren Pirk, Reza Mahjourian, Anelia Angelova &amp;quot;Depth Prediction Without the Sensors: Leveraging Structure for Unsupervised Learning from Monocular Videos&amp;quot; [https://arxiv.org/abs/1811.06152v1]&amp;lt;/ref&amp;gt; посвящена задаче обучения без учителя глубины сцены и визуальной одометрии робота, где наблюдение обеспечивается видеозаписями с одной камеры. Это делается путем введения геометрической структуры в процесс обучения. Он включает в себя моделирование сцены и отдельных объектов, одометрии камеры и движения объектов, изучаемых с помощью монокулярных видеовходов. Авторы вводят модель движения объекта, которая имеет ту же архитектуру, что и сеть определения визуальной одометрии. Она принимает последовательность изображений RGB в качестве входных данных и дополняется предварительно вычисленными масками сегментации экземпляров. Работа модели движения заключается в том, чтобы научиться предсказывать векторы трансформации каждого объекта в трехмерном пространстве. Это создает видимость наблюдаемого объекта в соответствующем целевом кадре.&lt;br /&gt;
&lt;br /&gt;
== См. также ==&lt;br /&gt;
&lt;br /&gt;
* [[Компьютерное зрение]]&lt;br /&gt;
&lt;br /&gt;
* [[Оценка положения]]&lt;br /&gt;
&lt;br /&gt;
* [[Задача нахождения объектов на изображении]]&lt;br /&gt;
&lt;br /&gt;
== Примечания ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Источники информации ==&lt;br /&gt;
&lt;br /&gt;
* Чугунов Р. А., Кульневич А. Д., Аксенов С. В. Методика построения карт глубины стереоизображения с помощью капсульной нейронной сети //Доклады Томского государственного университета систем управления и радиоэлектроники. – 2019. – Т. 22. – №. 1.[https://cyberleninka.ru/article/n/metodika-postroeniya-kart-glubiny-stereoizobrazheniya-s-pomoschyu-kapsulnoy-neyronnoy-seti/viewer]&lt;br /&gt;
&lt;br /&gt;
* 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]&lt;br /&gt;
&lt;br /&gt;
*  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]&lt;br /&gt;
&lt;br /&gt;
* 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]&lt;br /&gt;
&lt;br /&gt;
* 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]&lt;br /&gt;
&lt;br /&gt;
[[Категория:Машинное обучение]]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Компьютерное зрение]]&lt;/div&gt;</summary>
		<author><name>Frak</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9A%D0%B0%D1%80%D1%82%D0%B0_%D0%B3%D0%BB%D1%83%D0%B1%D0%B8%D0%BD%D1%8B&amp;diff=80257</id>
		<title>Карта глубины</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9A%D0%B0%D1%80%D1%82%D0%B0_%D0%B3%D0%BB%D1%83%D0%B1%D0%B8%D0%BD%D1%8B&amp;diff=80257"/>
				<updated>2021-01-23T11:17:23Z</updated>
		
		<summary type="html">&lt;p&gt;Frak: /* Неконтролируемая оценка глубины монокуляра с консистенцией слева направо (2017) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Карта глубины''' (англ. depth map) — это изображение, где для каждого пикселя вместо цвета хранится его расстояние до камеры.&amp;lt;ref name=&amp;quot;def&amp;quot;&amp;gt;Alexey Kurakin &amp;quot;Основы стереозрения&amp;quot;[https://habr.com/ru/post/130300/]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В компьютерной 3D-графике и [[Компьютерное зрение|компьютерном зрении]] карта глубины представляет собой изображение или канал изображения, содержащий информацию о расстоянии поверхностей объектов сцены от точки обзора. &lt;br /&gt;
&lt;br /&gt;
== Мотивация ==&lt;br /&gt;
&lt;br /&gt;
Карта глубины изображения содержит в себе информацию о расстоянии между различными объектами или частями объектов, представленных на данном изображении. Эта информация может быть полезна во многих областях. &lt;br /&gt;
 &lt;br /&gt;
* Для создания 3D-сенсеров. Они способны строить трёхмерную картину своего окружения, используются для [[Оценка положения|ориентации]] автономного робота в пространстве.&lt;br /&gt;
&lt;br /&gt;
* Для систем, использующих технологии дополненной и виртуальной реальности. Например, камеры, которые фиксируют действия пользователя в видеоиграх с технологией виртуальной реальности.&lt;br /&gt;
&lt;br /&gt;
* В беспилотных автомобилях, которые также используют карты глубин для ориентации на дороге.&lt;br /&gt;
&lt;br /&gt;
* Для обработки фотографий. Например, карты глубин используют для размытия фона на фотографии, чтобы добиться более чёткого выделения человека&amp;lt;ref name=&amp;quot;expls&amp;quot;&amp;gt;Примеры из &amp;quot;Research Guide for Depth Estimation with Deep Learning&amp;quot;[https://www.kdnuggets.com/2019/11/research-guide-depth-estimation-deep-learning.html]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Методы построения карты глубины ==&lt;br /&gt;
&lt;br /&gt;
Карта глубины может быть получена с помощью '''специальной камеры глубины''', по '''стереопаре изображений''', а также с помощью [[Нейронные сети, перцептрон|'''нейронных сетей''']].&lt;br /&gt;
&lt;br /&gt;
== Построение с помощью специальных камер глубин == &lt;br /&gt;
&lt;br /&gt;
[[Файл:ToF.jpg|thumb|250px| Рисунок 1. Пример работы ToF-камеры.]]&lt;br /&gt;
&lt;br /&gt;
* '''ToF-камеры''' (англ. Time of Flight). Принцип работы данной камеры основан на измерении задержки света, с которой свет возвращается в каждую точку. Имея несколько сенсоров с разным временем накопления заряда и, зная сдвиг по времени относительно источника для каждого сенсора и снятой яркости вспышки, мы можем рассчитать сдвиг и, соответственно, расстояние до объекта. Причем чем больше сенсоров задействовано, тем выше точность метода.&lt;br /&gt;
&lt;br /&gt;
* '''Структурированные световые камеры''' (aнгл. Structured light camera). Принцип работы данной камеры один из самых старых. Ставим проектор, который создает, например, горизонтальные (а потом и вертикальные) полоски и рядом камеру, которая снимает картину с полосками. В некоторых вариантах используется псевдослучайный набор точек (например MS Kinect {{---}} бесконтактный сенсорный игровой контроллер, для консолей Xbox 360, Xbox One и персональных компьютеров под управлением ОС Windows&amp;lt;ref name=&amp;quot;kinect&amp;quot;&amp;gt; О MicriSoft Kinect [https://en.wikipedia.org/wiki/Kinect]&amp;lt;/ref&amp;gt;). Проекторы обычно работают в инфракрасном спектре, чтобы не мешать пользователям. Поскольку камера и проектор смещены друг относительно друга, то и полоски также будут смещаться пропорционально расстоянию до объекта. Измеряя это смещение, мы можем рассчитывать расстояние до объекта. Вполне понятны сложности, с которыми можно столкнуться при использовании этого метода: это необходимость настройки и калибровки проектора, и проблема того, что нам нужно относительно благоприятное освещение. К примеру, солнце может засветить полосы, и что-то распознать будет тяжело.&lt;br /&gt;
&lt;br /&gt;
== Построения карты глубины по стереопаре ==&lt;br /&gt;
&lt;br /&gt;
Идея, лежащая в основе построения карты глубины по '''стереопаре''', проста. Для каждой точки на одном изображении выполняется поиск [[Ключевые точки изображения|парной ей точки]]&amp;lt;sup&amp;gt;[на 21.01.21 не создан]&amp;lt;/sup&amp;gt; на другом изображении. А по паре соответствующих точек можно выполнить [[Триангуляция полигонов (ушная + монотонная)|триангуляцию]] и определить координаты их [[Отображения|прообраза]] в трехмерном пространстве. Зная трехмерные координаты прообраза, глубина вычисляется как расстояние до плоскости камеры.&lt;br /&gt;
&lt;br /&gt;
Парную точку нужно искать на эпиполярной&amp;lt;ref name=&amp;quot;Epipolar&amp;quot;&amp;gt;Информация о эпиполярной геометрии[https://ru.qaz.wiki/wiki/Epipolar_geometry]&amp;lt;/ref&amp;gt; линии. Соответственно, для упрощения поиска изображения выравнивают так, чтобы все эпиполярные линии были параллельны сторонам изображения (обычно горизонтальны). Более того, изображения выравнивают так, чтобы для точки с координатами &amp;lt;math&amp;gt;(x_0, y_0)&amp;lt;/math&amp;gt; соответствующая ей эпиполярная линия задавалась уравнением &amp;lt;math&amp;gt;x = x_0&amp;lt;/math&amp;gt;. Тогда для каждой точки, соответствующую ей парную точку, нужно искать в той-же строчке на изображении со второй камеры. Такой процесс выравнивания изображений называют '''ректификацией''' (rectification).&lt;br /&gt;
&lt;br /&gt;
[[Файл:Stereo.png|thumb|300px| Рисунок 2. Результат построения карты смещений по двум картинкам.&amp;lt;ref name=&amp;quot;img2&amp;quot;&amp;gt; &amp;quot;Основы стереозрения&amp;quot; Рис. 3 [https://habr.com/ru/post/130300/]&amp;lt;/ref&amp;gt;]]&lt;br /&gt;
&lt;br /&gt;
После того, как изображения '''ректифицированы''', выполняют поиск соответствующих пар точек. Для каждого пикселя одной картинки с координатами &amp;lt;math&amp;gt;(x_0, y_0)&amp;lt;/math&amp;gt; выполняется поиск пикселя на другой картинке. При этом предполагается, что пиксель на второй картинке должен иметь координаты &amp;lt;math&amp;gt;(x_0 - d, y_0)&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;d&amp;lt;/math&amp;gt; — величина называемая смещением. Поиск соответствующего пикселя выполняется путем вычисления максимума функции отклика, в качестве которой может выступать, например, [[Корреляция случайных величин|корреляция]] окрестностей пикселей. В результате получается карта смещений, пример которой приведен на рис. 2. &lt;br /&gt;
&lt;br /&gt;
Собственно значения глубины обратно пропорциональны величине смещения пикселей.&lt;br /&gt;
&lt;br /&gt;
== Использование нейронных сетей ==&lt;br /&gt;
&lt;br /&gt;
Существует множество методов, использующих нейронные сети. Приведём пару примеров таких решений.&lt;br /&gt;
&lt;br /&gt;
=== Построение с помощью свёрточных нейронных сетей ===&lt;br /&gt;
&lt;br /&gt;
Используем [[Сверточные нейронные сети|сверточные нейронные сети]] для построения карты глубины следующим образом&lt;br /&gt;
&amp;lt;ref name=&amp;quot;cnn_rew&amp;quot;&amp;gt; Xiaobai Ma, Zhenglin Geng, Zhi Bie &amp;quot;Depth Estimation from Single Image Using CNN-Residual Network&amp;quot; [http://cs231n.stanford.edu/reports/2017/pdfs/203.pdf]&amp;lt;/ref&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
*  '''Создаем карту смещений''': используя два изображения с камер, близко расположенных друг к другу, создаем карту различий, точно так же как в методе построения по стереопаре.&lt;br /&gt;
&lt;br /&gt;
* '''Ищем реальную карту глубины для обучения''': с помощью карты смещений, можем построить карту глубины &amp;lt;math&amp;gt;y&amp;lt;/math&amp;gt; вышеописанным способом. Также допустимы другие способы построения карты глубины для обучения нейронной сети.&lt;br /&gt;
&lt;br /&gt;
*  '''Функция потерь''': определим [[Функция потерь и эмпирический риск|функцию потерь]], для предсказанной карты &amp;lt;math&amp;gt;\hat y&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;d_i = log( y_i) - log (\hat y_i)&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;\lambda \in [0, 1]&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;n &amp;lt;/math&amp;gt; — количество пикселей. &amp;lt;math&amp;gt;L(y, \hat y) =  \frac{1}{n} \sum\limits_{i} d^2_i - \frac{\lambda}{n^2}(\sum\limits_{i} d_i)^2&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;y_i&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;\hat y_i&amp;lt;/math&amp;gt; это i пискель для для реальной карты глубин и для предсказанной карты, соответственно. Гиперпараметр &amp;lt;math&amp;gt;\lambda&amp;lt;/math&amp;gt;, нужен для того, чтобы функция потерь меньше росла при большом количестве пикселей, предсказание для которых достаточно близко к реальному. Например, если &amp;lt;math&amp;gt;\lambda = 0&amp;lt;/math&amp;gt;, то мы просто придём к оптимизации в L2 для &amp;lt;math&amp;gt;d_i&amp;lt;/math&amp;gt;, т.е. &amp;lt;math&amp;gt;L(y, \hat y) =  \frac{1}{n} \sum\limits_{i} d^2_i &amp;lt;/math&amp;gt;.&amp;lt;ref name=&amp;quot;loss&amp;quot;&amp;gt;David Eigen, Christian Puhrsch, Rob Fergus &amp;quot;Depth Map Prediction from a Single Imageusing a Multi-Scale Deep Network&amp;quot; стр. 5&amp;lt;/ref&amp;gt; &lt;br /&gt;
&lt;br /&gt;
* '''Обучение свёрточной нейронной сети''': далее идёт обычное обучение нейронной сети по карте различий путем обратного распространения ошибки, оптимизируя заданную выше функцию потерь.&lt;br /&gt;
&lt;br /&gt;
В итоге, по обученной нейронной сети мы можем создавать карту глубины, не проводя расчётов для поиска карт смещения и имея только изображение объекта или пространства. &amp;lt;ref name=&amp;quot;cnn&amp;quot;&amp;gt;Реализация, основанная на свёрточных нейронных сетях [https://www.kaggle.com/kmader/cnn-for-generating-depth-maps-from-rgb-images]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Также возможно использование усложнённых архитектур свёрточных нейронных сетей типа '''DenseNet'''.&lt;br /&gt;
&lt;br /&gt;
'''DenseNet'''&amp;lt;ref name=&amp;quot;DenseNet&amp;quot;&amp;gt;Оригинальная статья описывающая DenseNet [https://arxiv.org/abs/1611.09326]&amp;lt;/ref&amp;gt; {{---}} это свёрточная нейронные сеть, в которой выход каждого из слоев подаётся на вход всем слоям, лежащих ниже.&lt;br /&gt;
&lt;br /&gt;
=== Построение с помощью капсульных нейронных сетей ===&lt;br /&gt;
&lt;br /&gt;
Свёрточные нейронные сети способны регистрировать только наличие какого-либо объекта на картинке, не кодируя его ориентацию и положение. Но '''капсульные нейронные сети''' (англ. Capsule Neural Network)&amp;lt;ref name=&amp;quot;CapsNet&amp;quot;&amp;gt;Sara Sabour, Nicholas Frosst, Geoffrey E. Hinton &amp;quot;Dynamic Routing Between Capsules&amp;quot; [https://arxiv.org/pdf/1710.09829.pdf]&amp;lt;/ref&amp;gt; лишены этого недостатка.&lt;br /&gt;
&lt;br /&gt;
[[Файл:capsnet.jpg|thumb|400px| Рисунок 3. Структура капсульной нейронной сети &amp;lt;ref name=&amp;quot;img&amp;quot;&amp;gt; &amp;quot;Design and Investigation of Capsule Networks for Sentence Classification&amp;quot; Figure 2. [https://www.mdpi.com/2076-3417/9/11/2200/htm]&amp;lt;/ref&amp;gt;.]]&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Капсульная нейронная сеть&amp;quot; состоит из капсул или групп нейронов, чтобы идентифицировать закономерности в изображении. Эта информация поступает в виде векторов, содержащих ориентацию и положение узоров на изображении, которое затем принимается капсулами более высокого уровня. Капсулы более высокого уровня обрабатывают эту информацию из нескольких капсул более низкого уровня и впоследствии выдают прогноз. Капсулы одного уровня не имеют связей друг с другом и вычисляют информацию независимо друг от друга. Капсулы образуются путем разделения выходных данных из свёрточного слоя. Мы делим наш трехмерный вектор на капсулы методом &amp;quot;нарезания&amp;quot; таким образом, чтобы в каждой капсуле была информация о каждом пикселе, т.е. по трехмерной координате.&lt;br /&gt;
 &lt;br /&gt;
Состояние нейронов капсульной нейронной сети внутри изображения фиксирует свойство области или объекта внутри изображения: его положение и ориентацию.&lt;br /&gt;
&lt;br /&gt;
Использование капсульной нейронной сети аналогично использованию обычных свёрточных сетей, описанному выше. &lt;br /&gt;
В целом, данная сеть показывает более точные результаты предсказания глубины.&lt;br /&gt;
&lt;br /&gt;
=== Построение с помощью PlanetNet (2018)===&lt;br /&gt;
&lt;br /&gt;
Так же есть архитектуры, решающие данную задачу и без обучения на карте смещений, построенной с помощью двух изображений. Одной из таких является '''PlaneNet'''. &lt;br /&gt;
&lt;br /&gt;
'''PlaneNet'''&amp;lt;ref name=&amp;quot;planetNet&amp;quot;&amp;gt; Chen Liu, Jimei Yang, Duygu Ceylan, Ersin Yumer, Yasutaka Furukawa &amp;quot;PlaneNet: Piece-wise Planar Reconstruction from a Single RGB Image&amp;quot; [https://arxiv.org/abs/1804.06278v1]&amp;lt;/ref&amp;gt; {{---}} глубокая нейронная сеть, построенная на расширенных остаточных сетях (aнгл. Dilated Residual Networks или DRN)&amp;lt;ref name=&amp;quot;drn&amp;quot;&amp;gt; Fisher Yu, Vladlen Koltun, Thomas Funkhouser &amp;quot;Dilated Residual Networks&amp;quot; [https://arxiv.org/abs/1705.09914]&amp;lt;/ref&amp;gt;. Она получает карту глубин путем композиции выходов трех подзадач:&lt;br /&gt;
&lt;br /&gt;
[[Файл:Plane net2.jpg|thumb|500px| Рисунок 4. Прогнозируемые PlaneNet параметры по одной rgb картинке: cегметация плоскости, параметры плоскостей, неплоская карта глубины&amp;lt;ref name=&amp;quot;img4&amp;quot;&amp;gt; Chen Liu, Jimei Yang, Duygu Ceylan, Ersin Yumer, Yasutaka Furukawa &amp;quot;PlaneNet: Piece-wise Planar Reconstruction from a Single RGB Image&amp;quot; Figure 2.&amp;lt;/ref&amp;gt;.]]&lt;br /&gt;
&lt;br /&gt;
* '''Параметры плоскостей''': пытаемся предсказать количество плоскостей $K$, а после ищем на изображение $K$ плоских поверхностей, каждая поверхность задаётся тремя параметрами: нормальная, прямая и сдвиг.&lt;br /&gt;
&lt;br /&gt;
* [[Сегментация изображений|'''Сегментация плоскости''']]: ищем группы пикселей, каждая из которых характеризует один смысловой объект.&lt;br /&gt;
&lt;br /&gt;
* '''Неплоская карта глубины''': ищем одно-канальную (или неплоскую) карту глубины, то есть карту глубины, где каждый пиксель, либо на глубине 0, либо на глубине 1.&lt;br /&gt;
&lt;br /&gt;
=== Обучение без учителя поиска карты глубины из видео (2017) ===&lt;br /&gt;
&lt;br /&gt;
Авторы данной статьи &amp;lt;ref name=&amp;quot;cvrp_dnn&amp;quot;&amp;gt;Tinghui Zhou, Matthew Brown, Noah Snavely, David G. Lowe &amp;quot;Unsupervised Learning of Depth and Ego-Motion from Video&amp;quot; [https://arxiv.org/abs/1704.07813v2]&amp;lt;/ref&amp;gt; предлагают методику оценки глубины одной картинки без учителя и движения камеры из беспорядочной видео нарезки. &lt;br /&gt;
&lt;br /&gt;
[[Файл:dnn.png|thumb|400px| Рисунок 5. Aрхитектура сети на базе DispNet  &amp;lt;ref name=&amp;quot;cvrp&amp;quot;&amp;gt;Tinghui Zhou, Matthew Brown, Noah Snavely, David G. Lowe &amp;quot;Unsupervised Learning of Depth and Ego-Motion from Video&amp;quot; Figure 4&amp;lt;/ref&amp;gt;]]&lt;br /&gt;
&lt;br /&gt;
Будем использовать сверточные нейронные сети c глубиной одного вида и многовидовой камерой из неупорядоченного видеоряда. Метод базируется на синтезе видов. Сеть загружает фото объекта в качестве данных ввода и выводит глубину пикселя. Вид объекта может быть синтезирован исходя из глубины на каждого пикселя снимка позиционирования и четкости ближнего вида. Синтез может быть  дифференцирован с CNN по геометрии и модулям позиционирования.&lt;br /&gt;
Авторы взяли на вооружение архитектуру DispNet&amp;lt;ref name=&amp;quot;dispNet&amp;quot;&amp;gt; Nikolaus Mayer, Eddy Ilg, Philip Hausser, Philipp Fischer &amp;quot;A Large Dataset to Train Convolutional Networks&lt;br /&gt;
for Disparity, Optical Flow, and Scene Flow Estimation&amp;quot; [https://arxiv.org/pdf/1512.02134.pdf]&amp;lt;/ref&amp;gt;, которая сконструирована в виде энкодера и декодера с пропущенными соединениями и многомасштабными блоками предсказания. Функция активации ReLU отслеживает все сверточные слои кроме предсказанных.&lt;br /&gt;
Вид объекта со всех источников формирует входные данные в сеть позиционной оценки. На выходе получается относительная позиция между видом объекта и видом каждого источника. Сеть состоит из двух 7 шаговых сверток за которым следует свертка 1 х 1. За исключением последнего слоя свертки, где применяется нелинейная активация, все другие отслеживаются функцией активации ReLU. Сеть объяснимых предсказаний дает доступ к первым пяти закодированным слоям сети позиционирования. За ней следуют 5 слоев обратной свертки с многомасштабными блоками предсказаний. Кроме слоев предсказаний все уровни свертки и обратной свертки отслеживаются ReLU.&lt;br /&gt;
&lt;br /&gt;
=== Неконтролируемая оценка глубины монокуляра с консистенцией слева направо (2017) ===&lt;br /&gt;
&lt;br /&gt;
[[Файл:Samplers.jpg|thumb|240px| Рисунок 6. Примерная архитектура сети с консистенцией слева направо &amp;lt;ref name=&amp;quot;cvrp2017&amp;quot;&amp;gt;Clément Godard, Oisin Mac Aodha, Gabriel J. Brostow &amp;quot;Unsupervised Monocular Depth Estimation with Left-Right Consistency&amp;quot; Figure 3 &amp;lt;/ref&amp;gt;]]&lt;br /&gt;
&lt;br /&gt;
В данной работе&amp;lt;ref name=&amp;quot;leftrigth&amp;quot;&amp;gt; Clément Godard, Oisin Mac Aodha, Gabriel J. Brostow &amp;quot;Unsupervised Monocular Depth Estimation with Left-Right Consistency&amp;quot; [https://arxiv.org/abs/1609.03677v3]&amp;lt;/ref&amp;gt; предлагается сверточная нейронная сеть, обученная выполнять оценку глубины одного изображения без реальных данных. Авторы предлагают сетевую архитектуру, которая выполняет сквозную оценку глубины изображения, полученного с 1 камеры, без учителя, что обеспечивает согласованность глубины слева направо внутри сети.&lt;br /&gt;
Сеть оценивает глубину, выводя смещения, которые искажают левое изображение, чтобы соответствовать правому. Левое входное изображение используется для вывода смещений слева направо и справа налево. Сеть генерирует предсказанное изображение с обратным отображением с помощью билинейного сэмплера. Это приводит к полностью дифференциальной модели формирования изображения.&lt;br /&gt;
Сверточная архитектура вдохновлена так же DispNet'ом. Она состоит из двух частей—кодера и декодера. Декодер использует пропуск соединений из блоков активации кодера, чтобы распознавать детали с высоким разрешением. Сеть предсказывает две карты смещений — слева направо и справа налево.&lt;br /&gt;
В процессе обучения сеть генерирует изображение путем выборки пикселей из противоположного стереоизображения. Модель формирования изображения использует сэмплер изображений из пространственной трансформаторной сети (STN) для выборки входного изображения с помощью карты смещений.&lt;br /&gt;
&lt;br /&gt;
=== Прогнозирование глубины без датчиков: использование структуры для обучения без учителя по монокулярным видео (2019) ===&lt;br /&gt;
&lt;br /&gt;
[[Файл:ego-motion.png|thumb|500px| Рисунок 7. Сравнение обычного метода построения карты глубин с помощью эго-движения и предложенного в статье, который использует движения для различных 3-D объектов &amp;lt;ref name=&amp;quot;aaaif&amp;quot;&amp;gt;Vincent Casser, Soeren Pirk, Reza Mahjourian, Anelia Angelova &amp;quot;Depth Prediction Without the Sensors: Leveraging Structure for Unsupervised Learning from Monocular Videos&amp;quot; Figure 2 &amp;lt;/ref&amp;gt;]]&lt;br /&gt;
&lt;br /&gt;
Данная статья &amp;lt;ref name=&amp;quot;aaai&amp;quot;&amp;gt; Vincent Casser, Soeren Pirk, Reza Mahjourian, Anelia Angelova &amp;quot;Depth Prediction Without the Sensors: Leveraging Structure for Unsupervised Learning from Monocular Videos&amp;quot; [https://arxiv.org/abs/1811.06152v1]&amp;lt;/ref&amp;gt; посвящена задаче обучения без учителя глубины сцены и эго-движения робота, где наблюдение обеспечивается видеозаписями с одной камеры. Это делается путем введения геометрической структуры в процесс обучения. Он включает в себя моделирование сцены и отдельных объектов, эго-движения камеры и движения объектов, изучаемых с помощью монокулярных видеовходов. Авторы вводят модель движения объекта, которая имеет ту же архитектуру, что и сеть эго-движения. Она принимает последовательность изображений RGB в качестве входных данных и дополняется предварительно вычисленными масками сегментации экземпляров. Работа модели движения заключается в том, чтобы научиться предсказывать векторы трансформации каждого объекта в трехмерном пространстве. Это создает видимость наблюдаемого объекта в соответствующем целевом кадре.&lt;br /&gt;
&lt;br /&gt;
== См. также ==&lt;br /&gt;
&lt;br /&gt;
* [[Компьютерное зрение]]&lt;br /&gt;
&lt;br /&gt;
* [[Оценка положения]]&lt;br /&gt;
&lt;br /&gt;
* [[Задача нахождения объектов на изображении]]&lt;br /&gt;
&lt;br /&gt;
== Примечания ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Источники информации ==&lt;br /&gt;
&lt;br /&gt;
* Чугунов Р. А., Кульневич А. Д., Аксенов С. В. Методика построения карт глубины стереоизображения с помощью капсульной нейронной сети //Доклады Томского государственного университета систем управления и радиоэлектроники. – 2019. – Т. 22. – №. 1.[https://cyberleninka.ru/article/n/metodika-postroeniya-kart-glubiny-stereoizobrazheniya-s-pomoschyu-kapsulnoy-neyronnoy-seti/viewer]&lt;br /&gt;
&lt;br /&gt;
* 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]&lt;br /&gt;
&lt;br /&gt;
*  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]&lt;br /&gt;
&lt;br /&gt;
* 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]&lt;br /&gt;
&lt;br /&gt;
* 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]&lt;br /&gt;
&lt;br /&gt;
[[Категория:Машинное обучение]]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Компьютерное зрение]]&lt;/div&gt;</summary>
		<author><name>Frak</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Samplers.jpg&amp;diff=80256</id>
		<title>Файл:Samplers.jpg</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Samplers.jpg&amp;diff=80256"/>
				<updated>2021-01-23T11:16:43Z</updated>
		
		<summary type="html">&lt;p&gt;Frak: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Frak</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9A%D0%B0%D1%80%D1%82%D0%B0_%D0%B3%D0%BB%D1%83%D0%B1%D0%B8%D0%BD%D1%8B&amp;diff=80255</id>
		<title>Карта глубины</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9A%D0%B0%D1%80%D1%82%D0%B0_%D0%B3%D0%BB%D1%83%D0%B1%D0%B8%D0%BD%D1%8B&amp;diff=80255"/>
				<updated>2021-01-23T11:13:07Z</updated>
		
		<summary type="html">&lt;p&gt;Frak: /* Неконтролируемая оценка глубины монокуляра с консистенцией слева направо (2017) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Карта глубины''' (англ. depth map) — это изображение, где для каждого пикселя вместо цвета хранится его расстояние до камеры.&amp;lt;ref name=&amp;quot;def&amp;quot;&amp;gt;Alexey Kurakin &amp;quot;Основы стереозрения&amp;quot;[https://habr.com/ru/post/130300/]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В компьютерной 3D-графике и [[Компьютерное зрение|компьютерном зрении]] карта глубины представляет собой изображение или канал изображения, содержащий информацию о расстоянии поверхностей объектов сцены от точки обзора. &lt;br /&gt;
&lt;br /&gt;
== Мотивация ==&lt;br /&gt;
&lt;br /&gt;
Карта глубины изображения содержит в себе информацию о расстоянии между различными объектами или частями объектов, представленных на данном изображении. Эта информация может быть полезна во многих областях. &lt;br /&gt;
 &lt;br /&gt;
* Для создания 3D-сенсеров. Они способны строить трёхмерную картину своего окружения, используются для [[Оценка положения|ориентации]] автономного робота в пространстве.&lt;br /&gt;
&lt;br /&gt;
* Для систем, использующих технологии дополненной и виртуальной реальности. Например, камеры, которые фиксируют действия пользователя в видеоиграх с технологией виртуальной реальности.&lt;br /&gt;
&lt;br /&gt;
* В беспилотных автомобилях, которые также используют карты глубин для ориентации на дороге.&lt;br /&gt;
&lt;br /&gt;
* Для обработки фотографий. Например, карты глубин используют для размытия фона на фотографии, чтобы добиться более чёткого выделения человека&amp;lt;ref name=&amp;quot;expls&amp;quot;&amp;gt;Примеры из &amp;quot;Research Guide for Depth Estimation with Deep Learning&amp;quot;[https://www.kdnuggets.com/2019/11/research-guide-depth-estimation-deep-learning.html]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Методы построения карты глубины ==&lt;br /&gt;
&lt;br /&gt;
Карта глубины может быть получена с помощью '''специальной камеры глубины''', по '''стереопаре изображений''', а также с помощью [[Нейронные сети, перцептрон|'''нейронных сетей''']].&lt;br /&gt;
&lt;br /&gt;
== Построение с помощью специальных камер глубин == &lt;br /&gt;
&lt;br /&gt;
[[Файл:ToF.jpg|thumb|250px| Рисунок 1. Пример работы ToF-камеры.]]&lt;br /&gt;
&lt;br /&gt;
* '''ToF-камеры''' (англ. Time of Flight). Принцип работы данной камеры основан на измерении задержки света, с которой свет возвращается в каждую точку. Имея несколько сенсоров с разным временем накопления заряда и, зная сдвиг по времени относительно источника для каждого сенсора и снятой яркости вспышки, мы можем рассчитать сдвиг и, соответственно, расстояние до объекта. Причем чем больше сенсоров задействовано, тем выше точность метода.&lt;br /&gt;
&lt;br /&gt;
* '''Структурированные световые камеры''' (aнгл. Structured light camera). Принцип работы данной камеры один из самых старых. Ставим проектор, который создает, например, горизонтальные (а потом и вертикальные) полоски и рядом камеру, которая снимает картину с полосками. В некоторых вариантах используется псевдослучайный набор точек (например MS Kinect {{---}} бесконтактный сенсорный игровой контроллер, для консолей Xbox 360, Xbox One и персональных компьютеров под управлением ОС Windows&amp;lt;ref name=&amp;quot;kinect&amp;quot;&amp;gt; О MicriSoft Kinect [https://en.wikipedia.org/wiki/Kinect]&amp;lt;/ref&amp;gt;). Проекторы обычно работают в инфракрасном спектре, чтобы не мешать пользователям. Поскольку камера и проектор смещены друг относительно друга, то и полоски также будут смещаться пропорционально расстоянию до объекта. Измеряя это смещение, мы можем рассчитывать расстояние до объекта. Вполне понятны сложности, с которыми можно столкнуться при использовании этого метода: это необходимость настройки и калибровки проектора, и проблема того, что нам нужно относительно благоприятное освещение. К примеру, солнце может засветить полосы, и что-то распознать будет тяжело.&lt;br /&gt;
&lt;br /&gt;
== Построения карты глубины по стереопаре ==&lt;br /&gt;
&lt;br /&gt;
Идея, лежащая в основе построения карты глубины по '''стереопаре''', проста. Для каждой точки на одном изображении выполняется поиск [[Ключевые точки изображения|парной ей точки]]&amp;lt;sup&amp;gt;[на 21.01.21 не создан]&amp;lt;/sup&amp;gt; на другом изображении. А по паре соответствующих точек можно выполнить [[Триангуляция полигонов (ушная + монотонная)|триангуляцию]] и определить координаты их [[Отображения|прообраза]] в трехмерном пространстве. Зная трехмерные координаты прообраза, глубина вычисляется как расстояние до плоскости камеры.&lt;br /&gt;
&lt;br /&gt;
Парную точку нужно искать на эпиполярной&amp;lt;ref name=&amp;quot;Epipolar&amp;quot;&amp;gt;Информация о эпиполярной геометрии[https://ru.qaz.wiki/wiki/Epipolar_geometry]&amp;lt;/ref&amp;gt; линии. Соответственно, для упрощения поиска изображения выравнивают так, чтобы все эпиполярные линии были параллельны сторонам изображения (обычно горизонтальны). Более того, изображения выравнивают так, чтобы для точки с координатами &amp;lt;math&amp;gt;(x_0, y_0)&amp;lt;/math&amp;gt; соответствующая ей эпиполярная линия задавалась уравнением &amp;lt;math&amp;gt;x = x_0&amp;lt;/math&amp;gt;. Тогда для каждой точки, соответствующую ей парную точку, нужно искать в той-же строчке на изображении со второй камеры. Такой процесс выравнивания изображений называют '''ректификацией''' (rectification).&lt;br /&gt;
&lt;br /&gt;
[[Файл:Stereo.png|thumb|300px| Рисунок 2. Результат построения карты смещений по двум картинкам.&amp;lt;ref name=&amp;quot;img2&amp;quot;&amp;gt; &amp;quot;Основы стереозрения&amp;quot; Рис. 3 [https://habr.com/ru/post/130300/]&amp;lt;/ref&amp;gt;]]&lt;br /&gt;
&lt;br /&gt;
После того, как изображения '''ректифицированы''', выполняют поиск соответствующих пар точек. Для каждого пикселя одной картинки с координатами &amp;lt;math&amp;gt;(x_0, y_0)&amp;lt;/math&amp;gt; выполняется поиск пикселя на другой картинке. При этом предполагается, что пиксель на второй картинке должен иметь координаты &amp;lt;math&amp;gt;(x_0 - d, y_0)&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;d&amp;lt;/math&amp;gt; — величина называемая смещением. Поиск соответствующего пикселя выполняется путем вычисления максимума функции отклика, в качестве которой может выступать, например, [[Корреляция случайных величин|корреляция]] окрестностей пикселей. В результате получается карта смещений, пример которой приведен на рис. 2. &lt;br /&gt;
&lt;br /&gt;
Собственно значения глубины обратно пропорциональны величине смещения пикселей.&lt;br /&gt;
&lt;br /&gt;
== Использование нейронных сетей ==&lt;br /&gt;
&lt;br /&gt;
Существует множество методов, использующих нейронные сети. Приведём пару примеров таких решений.&lt;br /&gt;
&lt;br /&gt;
=== Построение с помощью свёрточных нейронных сетей ===&lt;br /&gt;
&lt;br /&gt;
Используем [[Сверточные нейронные сети|сверточные нейронные сети]] для построения карты глубины следующим образом&lt;br /&gt;
&amp;lt;ref name=&amp;quot;cnn_rew&amp;quot;&amp;gt; Xiaobai Ma, Zhenglin Geng, Zhi Bie &amp;quot;Depth Estimation from Single Image Using CNN-Residual Network&amp;quot; [http://cs231n.stanford.edu/reports/2017/pdfs/203.pdf]&amp;lt;/ref&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
*  '''Создаем карту смещений''': используя два изображения с камер, близко расположенных друг к другу, создаем карту различий, точно так же как в методе построения по стереопаре.&lt;br /&gt;
&lt;br /&gt;
* '''Ищем реальную карту глубины для обучения''': с помощью карты смещений, можем построить карту глубины &amp;lt;math&amp;gt;y&amp;lt;/math&amp;gt; вышеописанным способом. Также допустимы другие способы построения карты глубины для обучения нейронной сети.&lt;br /&gt;
&lt;br /&gt;
*  '''Функция потерь''': определим [[Функция потерь и эмпирический риск|функцию потерь]], для предсказанной карты &amp;lt;math&amp;gt;\hat y&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;d_i = log( y_i) - log (\hat y_i)&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;\lambda \in [0, 1]&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;n &amp;lt;/math&amp;gt; — количество пикселей. &amp;lt;math&amp;gt;L(y, \hat y) =  \frac{1}{n} \sum\limits_{i} d^2_i - \frac{\lambda}{n^2}(\sum\limits_{i} d_i)^2&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;y_i&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;\hat y_i&amp;lt;/math&amp;gt; это i пискель для для реальной карты глубин и для предсказанной карты, соответственно. Гиперпараметр &amp;lt;math&amp;gt;\lambda&amp;lt;/math&amp;gt;, нужен для того, чтобы функция потерь меньше росла при большом количестве пикселей, предсказание для которых достаточно близко к реальному. Например, если &amp;lt;math&amp;gt;\lambda = 0&amp;lt;/math&amp;gt;, то мы просто придём к оптимизации в L2 для &amp;lt;math&amp;gt;d_i&amp;lt;/math&amp;gt;, т.е. &amp;lt;math&amp;gt;L(y, \hat y) =  \frac{1}{n} \sum\limits_{i} d^2_i &amp;lt;/math&amp;gt;.&amp;lt;ref name=&amp;quot;loss&amp;quot;&amp;gt;David Eigen, Christian Puhrsch, Rob Fergus &amp;quot;Depth Map Prediction from a Single Imageusing a Multi-Scale Deep Network&amp;quot; стр. 5&amp;lt;/ref&amp;gt; &lt;br /&gt;
&lt;br /&gt;
* '''Обучение свёрточной нейронной сети''': далее идёт обычное обучение нейронной сети по карте различий путем обратного распространения ошибки, оптимизируя заданную выше функцию потерь.&lt;br /&gt;
&lt;br /&gt;
В итоге, по обученной нейронной сети мы можем создавать карту глубины, не проводя расчётов для поиска карт смещения и имея только изображение объекта или пространства. &amp;lt;ref name=&amp;quot;cnn&amp;quot;&amp;gt;Реализация, основанная на свёрточных нейронных сетях [https://www.kaggle.com/kmader/cnn-for-generating-depth-maps-from-rgb-images]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Также возможно использование усложнённых архитектур свёрточных нейронных сетей типа '''DenseNet'''.&lt;br /&gt;
&lt;br /&gt;
'''DenseNet'''&amp;lt;ref name=&amp;quot;DenseNet&amp;quot;&amp;gt;Оригинальная статья описывающая DenseNet [https://arxiv.org/abs/1611.09326]&amp;lt;/ref&amp;gt; {{---}} это свёрточная нейронные сеть, в которой выход каждого из слоев подаётся на вход всем слоям, лежащих ниже.&lt;br /&gt;
&lt;br /&gt;
=== Построение с помощью капсульных нейронных сетей ===&lt;br /&gt;
&lt;br /&gt;
Свёрточные нейронные сети способны регистрировать только наличие какого-либо объекта на картинке, не кодируя его ориентацию и положение. Но '''капсульные нейронные сети''' (англ. Capsule Neural Network)&amp;lt;ref name=&amp;quot;CapsNet&amp;quot;&amp;gt;Sara Sabour, Nicholas Frosst, Geoffrey E. Hinton &amp;quot;Dynamic Routing Between Capsules&amp;quot; [https://arxiv.org/pdf/1710.09829.pdf]&amp;lt;/ref&amp;gt; лишены этого недостатка.&lt;br /&gt;
&lt;br /&gt;
[[Файл:capsnet.jpg|thumb|400px| Рисунок 3. Структура капсульной нейронной сети &amp;lt;ref name=&amp;quot;img&amp;quot;&amp;gt; &amp;quot;Design and Investigation of Capsule Networks for Sentence Classification&amp;quot; Figure 2. [https://www.mdpi.com/2076-3417/9/11/2200/htm]&amp;lt;/ref&amp;gt;.]]&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Капсульная нейронная сеть&amp;quot; состоит из капсул или групп нейронов, чтобы идентифицировать закономерности в изображении. Эта информация поступает в виде векторов, содержащих ориентацию и положение узоров на изображении, которое затем принимается капсулами более высокого уровня. Капсулы более высокого уровня обрабатывают эту информацию из нескольких капсул более низкого уровня и впоследствии выдают прогноз. Капсулы одного уровня не имеют связей друг с другом и вычисляют информацию независимо друг от друга. Капсулы образуются путем разделения выходных данных из свёрточного слоя. Мы делим наш трехмерный вектор на капсулы методом &amp;quot;нарезания&amp;quot; таким образом, чтобы в каждой капсуле была информация о каждом пикселе, т.е. по трехмерной координате.&lt;br /&gt;
 &lt;br /&gt;
Состояние нейронов капсульной нейронной сети внутри изображения фиксирует свойство области или объекта внутри изображения: его положение и ориентацию.&lt;br /&gt;
&lt;br /&gt;
Использование капсульной нейронной сети аналогично использованию обычных свёрточных сетей, описанному выше. &lt;br /&gt;
В целом, данная сеть показывает более точные результаты предсказания глубины.&lt;br /&gt;
&lt;br /&gt;
=== Построение с помощью PlanetNet (2018)===&lt;br /&gt;
&lt;br /&gt;
Так же есть архитектуры, решающие данную задачу и без обучения на карте смещений, построенной с помощью двух изображений. Одной из таких является '''PlaneNet'''. &lt;br /&gt;
&lt;br /&gt;
'''PlaneNet'''&amp;lt;ref name=&amp;quot;planetNet&amp;quot;&amp;gt; Chen Liu, Jimei Yang, Duygu Ceylan, Ersin Yumer, Yasutaka Furukawa &amp;quot;PlaneNet: Piece-wise Planar Reconstruction from a Single RGB Image&amp;quot; [https://arxiv.org/abs/1804.06278v1]&amp;lt;/ref&amp;gt; {{---}} глубокая нейронная сеть, построенная на расширенных остаточных сетях (aнгл. Dilated Residual Networks или DRN)&amp;lt;ref name=&amp;quot;drn&amp;quot;&amp;gt; Fisher Yu, Vladlen Koltun, Thomas Funkhouser &amp;quot;Dilated Residual Networks&amp;quot; [https://arxiv.org/abs/1705.09914]&amp;lt;/ref&amp;gt;. Она получает карту глубин путем композиции выходов трех подзадач:&lt;br /&gt;
&lt;br /&gt;
[[Файл:Plane net2.jpg|thumb|500px| Рисунок 4. Прогнозируемые PlaneNet параметры по одной rgb картинке: cегметация плоскости, параметры плоскостей, неплоская карта глубины&amp;lt;ref name=&amp;quot;img4&amp;quot;&amp;gt; Chen Liu, Jimei Yang, Duygu Ceylan, Ersin Yumer, Yasutaka Furukawa &amp;quot;PlaneNet: Piece-wise Planar Reconstruction from a Single RGB Image&amp;quot; Figure 2.&amp;lt;/ref&amp;gt;.]]&lt;br /&gt;
&lt;br /&gt;
* '''Параметры плоскостей''': пытаемся предсказать количество плоскостей $K$, а после ищем на изображение $K$ плоских поверхностей, каждая поверхность задаётся тремя параметрами: нормальная, прямая и сдвиг.&lt;br /&gt;
&lt;br /&gt;
* [[Сегментация изображений|'''Сегментация плоскости''']]: ищем группы пикселей, каждая из которых характеризует один смысловой объект.&lt;br /&gt;
&lt;br /&gt;
* '''Неплоская карта глубины''': ищем одно-канальную (или неплоскую) карту глубины, то есть карту глубины, где каждый пиксель, либо на глубине 0, либо на глубине 1.&lt;br /&gt;
&lt;br /&gt;
=== Обучение без учителя поиска карты глубины из видео (2017) ===&lt;br /&gt;
&lt;br /&gt;
Авторы данной статьи &amp;lt;ref name=&amp;quot;cvrp_dnn&amp;quot;&amp;gt;Tinghui Zhou, Matthew Brown, Noah Snavely, David G. Lowe &amp;quot;Unsupervised Learning of Depth and Ego-Motion from Video&amp;quot; [https://arxiv.org/abs/1704.07813v2]&amp;lt;/ref&amp;gt; предлагают методику оценки глубины одной картинки без учителя и движения камеры из беспорядочной видео нарезки. &lt;br /&gt;
&lt;br /&gt;
[[Файл:dnn.png|thumb|400px| Рисунок 5. Aрхитектура сети на базе DispNet  &amp;lt;ref name=&amp;quot;cvrp&amp;quot;&amp;gt;Tinghui Zhou, Matthew Brown, Noah Snavely, David G. Lowe &amp;quot;Unsupervised Learning of Depth and Ego-Motion from Video&amp;quot; Figure 4&amp;lt;/ref&amp;gt;]]&lt;br /&gt;
&lt;br /&gt;
Будем использовать сверточные нейронные сети c глубиной одного вида и многовидовой камерой из неупорядоченного видеоряда. Метод базируется на синтезе видов. Сеть загружает фото объекта в качестве данных ввода и выводит глубину пикселя. Вид объекта может быть синтезирован исходя из глубины на каждого пикселя снимка позиционирования и четкости ближнего вида. Синтез может быть  дифференцирован с CNN по геометрии и модулям позиционирования.&lt;br /&gt;
Авторы взяли на вооружение архитектуру DispNet&amp;lt;ref name=&amp;quot;dispNet&amp;quot;&amp;gt; Nikolaus Mayer, Eddy Ilg, Philip Hausser, Philipp Fischer &amp;quot;A Large Dataset to Train Convolutional Networks&lt;br /&gt;
for Disparity, Optical Flow, and Scene Flow Estimation&amp;quot; [https://arxiv.org/pdf/1512.02134.pdf]&amp;lt;/ref&amp;gt;, которая сконструирована в виде энкодера и декодера с пропущенными соединениями и многомасштабными блоками предсказания. Функция активации ReLU отслеживает все сверточные слои кроме предсказанных.&lt;br /&gt;
Вид объекта со всех источников формирует входные данные в сеть позиционной оценки. На выходе получается относительная позиция между видом объекта и видом каждого источника. Сеть состоит из двух 7 шаговых сверток за которым следует свертка 1 х 1. За исключением последнего слоя свертки, где применяется нелинейная активация, все другие отслеживаются функцией активации ReLU. Сеть объяснимых предсказаний дает доступ к первым пяти закодированным слоям сети позиционирования. За ней следуют 5 слоев обратной свертки с многомасштабными блоками предсказаний. Кроме слоев предсказаний все уровни свертки и обратной свертки отслеживаются ReLU.&lt;br /&gt;
&lt;br /&gt;
=== Неконтролируемая оценка глубины монокуляра с консистенцией слева направо (2017) ===&lt;br /&gt;
&lt;br /&gt;
[[Файл:Samplers.png|thumb|240px| Рисунок 6. Примерная архитектура сети с консистенцией слева направо &amp;lt;ref name=&amp;quot;cvrp2017&amp;quot;&amp;gt;Clément Godard, Oisin Mac Aodha, Gabriel J. Brostow &amp;quot;Unsupervised Monocular Depth Estimation with Left-Right Consistency&amp;quot; Figure 3 &amp;lt;/ref&amp;gt;]]&lt;br /&gt;
&lt;br /&gt;
В данной работе&amp;lt;ref name=&amp;quot;leftrigth&amp;quot;&amp;gt; Clément Godard, Oisin Mac Aodha, Gabriel J. Brostow &amp;quot;Unsupervised Monocular Depth Estimation with Left-Right Consistency&amp;quot; [https://arxiv.org/abs/1609.03677v3]&amp;lt;/ref&amp;gt; предлагается сверточная нейронная сеть, обученная выполнять оценку глубины одного изображения без реальных данных. Авторы предлагают сетевую архитектуру, которая выполняет сквозную оценку глубины изображения, полученного с 1 камеры, без учителя, что обеспечивает согласованность глубины слева направо внутри сети.&lt;br /&gt;
Сеть оценивает глубину, выводя смещения, которые искажают левое изображение, чтобы соответствовать правому. Левое входное изображение используется для вывода смещений слева направо и справа налево. Сеть генерирует предсказанное изображение с обратным отображением с помощью билинейного сэмплера. Это приводит к полностью дифференциальной модели формирования изображения.&lt;br /&gt;
Сверточная архитектура вдохновлена так же DispNet'ом. Она состоит из двух частей—кодера и декодера. Декодер использует пропуск соединений из блоков активации кодера, чтобы распознавать детали с высоким разрешением. Сеть предсказывает две карты смещений — слева направо и справа налево.&lt;br /&gt;
В процессе обучения сеть генерирует изображение путем выборки пикселей из противоположного стереоизображения. Модель формирования изображения использует сэмплер изображений из пространственной трансформаторной сети (STN) для выборки входного изображения с помощью карты смещений.&lt;br /&gt;
&lt;br /&gt;
=== Прогнозирование глубины без датчиков: использование структуры для обучения без учителя по монокулярным видео (2019) ===&lt;br /&gt;
&lt;br /&gt;
[[Файл:ego-motion.png|thumb|500px| Рисунок 7. Сравнение обычного метода построения карты глубин с помощью эго-движения и предложенного в статье, который использует движения для различных 3-D объектов &amp;lt;ref name=&amp;quot;aaaif&amp;quot;&amp;gt;Vincent Casser, Soeren Pirk, Reza Mahjourian, Anelia Angelova &amp;quot;Depth Prediction Without the Sensors: Leveraging Structure for Unsupervised Learning from Monocular Videos&amp;quot; Figure 2 &amp;lt;/ref&amp;gt;]]&lt;br /&gt;
&lt;br /&gt;
Данная статья &amp;lt;ref name=&amp;quot;aaai&amp;quot;&amp;gt; Vincent Casser, Soeren Pirk, Reza Mahjourian, Anelia Angelova &amp;quot;Depth Prediction Without the Sensors: Leveraging Structure for Unsupervised Learning from Monocular Videos&amp;quot; [https://arxiv.org/abs/1811.06152v1]&amp;lt;/ref&amp;gt; посвящена задаче обучения без учителя глубины сцены и эго-движения робота, где наблюдение обеспечивается видеозаписями с одной камеры. Это делается путем введения геометрической структуры в процесс обучения. Он включает в себя моделирование сцены и отдельных объектов, эго-движения камеры и движения объектов, изучаемых с помощью монокулярных видеовходов. Авторы вводят модель движения объекта, которая имеет ту же архитектуру, что и сеть эго-движения. Она принимает последовательность изображений RGB в качестве входных данных и дополняется предварительно вычисленными масками сегментации экземпляров. Работа модели движения заключается в том, чтобы научиться предсказывать векторы трансформации каждого объекта в трехмерном пространстве. Это создает видимость наблюдаемого объекта в соответствующем целевом кадре.&lt;br /&gt;
&lt;br /&gt;
== См. также ==&lt;br /&gt;
&lt;br /&gt;
* [[Компьютерное зрение]]&lt;br /&gt;
&lt;br /&gt;
* [[Оценка положения]]&lt;br /&gt;
&lt;br /&gt;
* [[Задача нахождения объектов на изображении]]&lt;br /&gt;
&lt;br /&gt;
== Примечания ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Источники информации ==&lt;br /&gt;
&lt;br /&gt;
* Чугунов Р. А., Кульневич А. Д., Аксенов С. В. Методика построения карт глубины стереоизображения с помощью капсульной нейронной сети //Доклады Томского государственного университета систем управления и радиоэлектроники. – 2019. – Т. 22. – №. 1.[https://cyberleninka.ru/article/n/metodika-postroeniya-kart-glubiny-stereoizobrazheniya-s-pomoschyu-kapsulnoy-neyronnoy-seti/viewer]&lt;br /&gt;
&lt;br /&gt;
* 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]&lt;br /&gt;
&lt;br /&gt;
*  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]&lt;br /&gt;
&lt;br /&gt;
* 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]&lt;br /&gt;
&lt;br /&gt;
* 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]&lt;br /&gt;
&lt;br /&gt;
[[Категория:Машинное обучение]]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Компьютерное зрение]]&lt;/div&gt;</summary>
		<author><name>Frak</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9A%D0%B0%D1%80%D1%82%D0%B0_%D0%B3%D0%BB%D1%83%D0%B1%D0%B8%D0%BD%D1%8B&amp;diff=80254</id>
		<title>Карта глубины</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9A%D0%B0%D1%80%D1%82%D0%B0_%D0%B3%D0%BB%D1%83%D0%B1%D0%B8%D0%BD%D1%8B&amp;diff=80254"/>
				<updated>2021-01-23T11:11:57Z</updated>
		
		<summary type="html">&lt;p&gt;Frak: /* Построение с помощью PlanetNet (2018) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Карта глубины''' (англ. depth map) — это изображение, где для каждого пикселя вместо цвета хранится его расстояние до камеры.&amp;lt;ref name=&amp;quot;def&amp;quot;&amp;gt;Alexey Kurakin &amp;quot;Основы стереозрения&amp;quot;[https://habr.com/ru/post/130300/]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В компьютерной 3D-графике и [[Компьютерное зрение|компьютерном зрении]] карта глубины представляет собой изображение или канал изображения, содержащий информацию о расстоянии поверхностей объектов сцены от точки обзора. &lt;br /&gt;
&lt;br /&gt;
== Мотивация ==&lt;br /&gt;
&lt;br /&gt;
Карта глубины изображения содержит в себе информацию о расстоянии между различными объектами или частями объектов, представленных на данном изображении. Эта информация может быть полезна во многих областях. &lt;br /&gt;
 &lt;br /&gt;
* Для создания 3D-сенсеров. Они способны строить трёхмерную картину своего окружения, используются для [[Оценка положения|ориентации]] автономного робота в пространстве.&lt;br /&gt;
&lt;br /&gt;
* Для систем, использующих технологии дополненной и виртуальной реальности. Например, камеры, которые фиксируют действия пользователя в видеоиграх с технологией виртуальной реальности.&lt;br /&gt;
&lt;br /&gt;
* В беспилотных автомобилях, которые также используют карты глубин для ориентации на дороге.&lt;br /&gt;
&lt;br /&gt;
* Для обработки фотографий. Например, карты глубин используют для размытия фона на фотографии, чтобы добиться более чёткого выделения человека&amp;lt;ref name=&amp;quot;expls&amp;quot;&amp;gt;Примеры из &amp;quot;Research Guide for Depth Estimation with Deep Learning&amp;quot;[https://www.kdnuggets.com/2019/11/research-guide-depth-estimation-deep-learning.html]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Методы построения карты глубины ==&lt;br /&gt;
&lt;br /&gt;
Карта глубины может быть получена с помощью '''специальной камеры глубины''', по '''стереопаре изображений''', а также с помощью [[Нейронные сети, перцептрон|'''нейронных сетей''']].&lt;br /&gt;
&lt;br /&gt;
== Построение с помощью специальных камер глубин == &lt;br /&gt;
&lt;br /&gt;
[[Файл:ToF.jpg|thumb|250px| Рисунок 1. Пример работы ToF-камеры.]]&lt;br /&gt;
&lt;br /&gt;
* '''ToF-камеры''' (англ. Time of Flight). Принцип работы данной камеры основан на измерении задержки света, с которой свет возвращается в каждую точку. Имея несколько сенсоров с разным временем накопления заряда и, зная сдвиг по времени относительно источника для каждого сенсора и снятой яркости вспышки, мы можем рассчитать сдвиг и, соответственно, расстояние до объекта. Причем чем больше сенсоров задействовано, тем выше точность метода.&lt;br /&gt;
&lt;br /&gt;
* '''Структурированные световые камеры''' (aнгл. Structured light camera). Принцип работы данной камеры один из самых старых. Ставим проектор, который создает, например, горизонтальные (а потом и вертикальные) полоски и рядом камеру, которая снимает картину с полосками. В некоторых вариантах используется псевдослучайный набор точек (например MS Kinect {{---}} бесконтактный сенсорный игровой контроллер, для консолей Xbox 360, Xbox One и персональных компьютеров под управлением ОС Windows&amp;lt;ref name=&amp;quot;kinect&amp;quot;&amp;gt; О MicriSoft Kinect [https://en.wikipedia.org/wiki/Kinect]&amp;lt;/ref&amp;gt;). Проекторы обычно работают в инфракрасном спектре, чтобы не мешать пользователям. Поскольку камера и проектор смещены друг относительно друга, то и полоски также будут смещаться пропорционально расстоянию до объекта. Измеряя это смещение, мы можем рассчитывать расстояние до объекта. Вполне понятны сложности, с которыми можно столкнуться при использовании этого метода: это необходимость настройки и калибровки проектора, и проблема того, что нам нужно относительно благоприятное освещение. К примеру, солнце может засветить полосы, и что-то распознать будет тяжело.&lt;br /&gt;
&lt;br /&gt;
== Построения карты глубины по стереопаре ==&lt;br /&gt;
&lt;br /&gt;
Идея, лежащая в основе построения карты глубины по '''стереопаре''', проста. Для каждой точки на одном изображении выполняется поиск [[Ключевые точки изображения|парной ей точки]]&amp;lt;sup&amp;gt;[на 21.01.21 не создан]&amp;lt;/sup&amp;gt; на другом изображении. А по паре соответствующих точек можно выполнить [[Триангуляция полигонов (ушная + монотонная)|триангуляцию]] и определить координаты их [[Отображения|прообраза]] в трехмерном пространстве. Зная трехмерные координаты прообраза, глубина вычисляется как расстояние до плоскости камеры.&lt;br /&gt;
&lt;br /&gt;
Парную точку нужно искать на эпиполярной&amp;lt;ref name=&amp;quot;Epipolar&amp;quot;&amp;gt;Информация о эпиполярной геометрии[https://ru.qaz.wiki/wiki/Epipolar_geometry]&amp;lt;/ref&amp;gt; линии. Соответственно, для упрощения поиска изображения выравнивают так, чтобы все эпиполярные линии были параллельны сторонам изображения (обычно горизонтальны). Более того, изображения выравнивают так, чтобы для точки с координатами &amp;lt;math&amp;gt;(x_0, y_0)&amp;lt;/math&amp;gt; соответствующая ей эпиполярная линия задавалась уравнением &amp;lt;math&amp;gt;x = x_0&amp;lt;/math&amp;gt;. Тогда для каждой точки, соответствующую ей парную точку, нужно искать в той-же строчке на изображении со второй камеры. Такой процесс выравнивания изображений называют '''ректификацией''' (rectification).&lt;br /&gt;
&lt;br /&gt;
[[Файл:Stereo.png|thumb|300px| Рисунок 2. Результат построения карты смещений по двум картинкам.&amp;lt;ref name=&amp;quot;img2&amp;quot;&amp;gt; &amp;quot;Основы стереозрения&amp;quot; Рис. 3 [https://habr.com/ru/post/130300/]&amp;lt;/ref&amp;gt;]]&lt;br /&gt;
&lt;br /&gt;
После того, как изображения '''ректифицированы''', выполняют поиск соответствующих пар точек. Для каждого пикселя одной картинки с координатами &amp;lt;math&amp;gt;(x_0, y_0)&amp;lt;/math&amp;gt; выполняется поиск пикселя на другой картинке. При этом предполагается, что пиксель на второй картинке должен иметь координаты &amp;lt;math&amp;gt;(x_0 - d, y_0)&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;d&amp;lt;/math&amp;gt; — величина называемая смещением. Поиск соответствующего пикселя выполняется путем вычисления максимума функции отклика, в качестве которой может выступать, например, [[Корреляция случайных величин|корреляция]] окрестностей пикселей. В результате получается карта смещений, пример которой приведен на рис. 2. &lt;br /&gt;
&lt;br /&gt;
Собственно значения глубины обратно пропорциональны величине смещения пикселей.&lt;br /&gt;
&lt;br /&gt;
== Использование нейронных сетей ==&lt;br /&gt;
&lt;br /&gt;
Существует множество методов, использующих нейронные сети. Приведём пару примеров таких решений.&lt;br /&gt;
&lt;br /&gt;
=== Построение с помощью свёрточных нейронных сетей ===&lt;br /&gt;
&lt;br /&gt;
Используем [[Сверточные нейронные сети|сверточные нейронные сети]] для построения карты глубины следующим образом&lt;br /&gt;
&amp;lt;ref name=&amp;quot;cnn_rew&amp;quot;&amp;gt; Xiaobai Ma, Zhenglin Geng, Zhi Bie &amp;quot;Depth Estimation from Single Image Using CNN-Residual Network&amp;quot; [http://cs231n.stanford.edu/reports/2017/pdfs/203.pdf]&amp;lt;/ref&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
*  '''Создаем карту смещений''': используя два изображения с камер, близко расположенных друг к другу, создаем карту различий, точно так же как в методе построения по стереопаре.&lt;br /&gt;
&lt;br /&gt;
* '''Ищем реальную карту глубины для обучения''': с помощью карты смещений, можем построить карту глубины &amp;lt;math&amp;gt;y&amp;lt;/math&amp;gt; вышеописанным способом. Также допустимы другие способы построения карты глубины для обучения нейронной сети.&lt;br /&gt;
&lt;br /&gt;
*  '''Функция потерь''': определим [[Функция потерь и эмпирический риск|функцию потерь]], для предсказанной карты &amp;lt;math&amp;gt;\hat y&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;d_i = log( y_i) - log (\hat y_i)&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;\lambda \in [0, 1]&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;n &amp;lt;/math&amp;gt; — количество пикселей. &amp;lt;math&amp;gt;L(y, \hat y) =  \frac{1}{n} \sum\limits_{i} d^2_i - \frac{\lambda}{n^2}(\sum\limits_{i} d_i)^2&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;y_i&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;\hat y_i&amp;lt;/math&amp;gt; это i пискель для для реальной карты глубин и для предсказанной карты, соответственно. Гиперпараметр &amp;lt;math&amp;gt;\lambda&amp;lt;/math&amp;gt;, нужен для того, чтобы функция потерь меньше росла при большом количестве пикселей, предсказание для которых достаточно близко к реальному. Например, если &amp;lt;math&amp;gt;\lambda = 0&amp;lt;/math&amp;gt;, то мы просто придём к оптимизации в L2 для &amp;lt;math&amp;gt;d_i&amp;lt;/math&amp;gt;, т.е. &amp;lt;math&amp;gt;L(y, \hat y) =  \frac{1}{n} \sum\limits_{i} d^2_i &amp;lt;/math&amp;gt;.&amp;lt;ref name=&amp;quot;loss&amp;quot;&amp;gt;David Eigen, Christian Puhrsch, Rob Fergus &amp;quot;Depth Map Prediction from a Single Imageusing a Multi-Scale Deep Network&amp;quot; стр. 5&amp;lt;/ref&amp;gt; &lt;br /&gt;
&lt;br /&gt;
* '''Обучение свёрточной нейронной сети''': далее идёт обычное обучение нейронной сети по карте различий путем обратного распространения ошибки, оптимизируя заданную выше функцию потерь.&lt;br /&gt;
&lt;br /&gt;
В итоге, по обученной нейронной сети мы можем создавать карту глубины, не проводя расчётов для поиска карт смещения и имея только изображение объекта или пространства. &amp;lt;ref name=&amp;quot;cnn&amp;quot;&amp;gt;Реализация, основанная на свёрточных нейронных сетях [https://www.kaggle.com/kmader/cnn-for-generating-depth-maps-from-rgb-images]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Также возможно использование усложнённых архитектур свёрточных нейронных сетей типа '''DenseNet'''.&lt;br /&gt;
&lt;br /&gt;
'''DenseNet'''&amp;lt;ref name=&amp;quot;DenseNet&amp;quot;&amp;gt;Оригинальная статья описывающая DenseNet [https://arxiv.org/abs/1611.09326]&amp;lt;/ref&amp;gt; {{---}} это свёрточная нейронные сеть, в которой выход каждого из слоев подаётся на вход всем слоям, лежащих ниже.&lt;br /&gt;
&lt;br /&gt;
=== Построение с помощью капсульных нейронных сетей ===&lt;br /&gt;
&lt;br /&gt;
Свёрточные нейронные сети способны регистрировать только наличие какого-либо объекта на картинке, не кодируя его ориентацию и положение. Но '''капсульные нейронные сети''' (англ. Capsule Neural Network)&amp;lt;ref name=&amp;quot;CapsNet&amp;quot;&amp;gt;Sara Sabour, Nicholas Frosst, Geoffrey E. Hinton &amp;quot;Dynamic Routing Between Capsules&amp;quot; [https://arxiv.org/pdf/1710.09829.pdf]&amp;lt;/ref&amp;gt; лишены этого недостатка.&lt;br /&gt;
&lt;br /&gt;
[[Файл:capsnet.jpg|thumb|400px| Рисунок 3. Структура капсульной нейронной сети &amp;lt;ref name=&amp;quot;img&amp;quot;&amp;gt; &amp;quot;Design and Investigation of Capsule Networks for Sentence Classification&amp;quot; Figure 2. [https://www.mdpi.com/2076-3417/9/11/2200/htm]&amp;lt;/ref&amp;gt;.]]&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Капсульная нейронная сеть&amp;quot; состоит из капсул или групп нейронов, чтобы идентифицировать закономерности в изображении. Эта информация поступает в виде векторов, содержащих ориентацию и положение узоров на изображении, которое затем принимается капсулами более высокого уровня. Капсулы более высокого уровня обрабатывают эту информацию из нескольких капсул более низкого уровня и впоследствии выдают прогноз. Капсулы одного уровня не имеют связей друг с другом и вычисляют информацию независимо друг от друга. Капсулы образуются путем разделения выходных данных из свёрточного слоя. Мы делим наш трехмерный вектор на капсулы методом &amp;quot;нарезания&amp;quot; таким образом, чтобы в каждой капсуле была информация о каждом пикселе, т.е. по трехмерной координате.&lt;br /&gt;
 &lt;br /&gt;
Состояние нейронов капсульной нейронной сети внутри изображения фиксирует свойство области или объекта внутри изображения: его положение и ориентацию.&lt;br /&gt;
&lt;br /&gt;
Использование капсульной нейронной сети аналогично использованию обычных свёрточных сетей, описанному выше. &lt;br /&gt;
В целом, данная сеть показывает более точные результаты предсказания глубины.&lt;br /&gt;
&lt;br /&gt;
=== Построение с помощью PlanetNet (2018)===&lt;br /&gt;
&lt;br /&gt;
Так же есть архитектуры, решающие данную задачу и без обучения на карте смещений, построенной с помощью двух изображений. Одной из таких является '''PlaneNet'''. &lt;br /&gt;
&lt;br /&gt;
'''PlaneNet'''&amp;lt;ref name=&amp;quot;planetNet&amp;quot;&amp;gt; Chen Liu, Jimei Yang, Duygu Ceylan, Ersin Yumer, Yasutaka Furukawa &amp;quot;PlaneNet: Piece-wise Planar Reconstruction from a Single RGB Image&amp;quot; [https://arxiv.org/abs/1804.06278v1]&amp;lt;/ref&amp;gt; {{---}} глубокая нейронная сеть, построенная на расширенных остаточных сетях (aнгл. Dilated Residual Networks или DRN)&amp;lt;ref name=&amp;quot;drn&amp;quot;&amp;gt; Fisher Yu, Vladlen Koltun, Thomas Funkhouser &amp;quot;Dilated Residual Networks&amp;quot; [https://arxiv.org/abs/1705.09914]&amp;lt;/ref&amp;gt;. Она получает карту глубин путем композиции выходов трех подзадач:&lt;br /&gt;
&lt;br /&gt;
[[Файл:Plane net2.jpg|thumb|500px| Рисунок 4. Прогнозируемые PlaneNet параметры по одной rgb картинке: cегметация плоскости, параметры плоскостей, неплоская карта глубины&amp;lt;ref name=&amp;quot;img4&amp;quot;&amp;gt; Chen Liu, Jimei Yang, Duygu Ceylan, Ersin Yumer, Yasutaka Furukawa &amp;quot;PlaneNet: Piece-wise Planar Reconstruction from a Single RGB Image&amp;quot; Figure 2.&amp;lt;/ref&amp;gt;.]]&lt;br /&gt;
&lt;br /&gt;
* '''Параметры плоскостей''': пытаемся предсказать количество плоскостей $K$, а после ищем на изображение $K$ плоских поверхностей, каждая поверхность задаётся тремя параметрами: нормальная, прямая и сдвиг.&lt;br /&gt;
&lt;br /&gt;
* [[Сегментация изображений|'''Сегментация плоскости''']]: ищем группы пикселей, каждая из которых характеризует один смысловой объект.&lt;br /&gt;
&lt;br /&gt;
* '''Неплоская карта глубины''': ищем одно-канальную (или неплоскую) карту глубины, то есть карту глубины, где каждый пиксель, либо на глубине 0, либо на глубине 1.&lt;br /&gt;
&lt;br /&gt;
=== Обучение без учителя поиска карты глубины из видео (2017) ===&lt;br /&gt;
&lt;br /&gt;
Авторы данной статьи &amp;lt;ref name=&amp;quot;cvrp_dnn&amp;quot;&amp;gt;Tinghui Zhou, Matthew Brown, Noah Snavely, David G. Lowe &amp;quot;Unsupervised Learning of Depth and Ego-Motion from Video&amp;quot; [https://arxiv.org/abs/1704.07813v2]&amp;lt;/ref&amp;gt; предлагают методику оценки глубины одной картинки без учителя и движения камеры из беспорядочной видео нарезки. &lt;br /&gt;
&lt;br /&gt;
[[Файл:dnn.png|thumb|400px| Рисунок 5. Aрхитектура сети на базе DispNet  &amp;lt;ref name=&amp;quot;cvrp&amp;quot;&amp;gt;Tinghui Zhou, Matthew Brown, Noah Snavely, David G. Lowe &amp;quot;Unsupervised Learning of Depth and Ego-Motion from Video&amp;quot; Figure 4&amp;lt;/ref&amp;gt;]]&lt;br /&gt;
&lt;br /&gt;
Будем использовать сверточные нейронные сети c глубиной одного вида и многовидовой камерой из неупорядоченного видеоряда. Метод базируется на синтезе видов. Сеть загружает фото объекта в качестве данных ввода и выводит глубину пикселя. Вид объекта может быть синтезирован исходя из глубины на каждого пикселя снимка позиционирования и четкости ближнего вида. Синтез может быть  дифференцирован с CNN по геометрии и модулям позиционирования.&lt;br /&gt;
Авторы взяли на вооружение архитектуру DispNet&amp;lt;ref name=&amp;quot;dispNet&amp;quot;&amp;gt; Nikolaus Mayer, Eddy Ilg, Philip Hausser, Philipp Fischer &amp;quot;A Large Dataset to Train Convolutional Networks&lt;br /&gt;
for Disparity, Optical Flow, and Scene Flow Estimation&amp;quot; [https://arxiv.org/pdf/1512.02134.pdf]&amp;lt;/ref&amp;gt;, которая сконструирована в виде энкодера и декодера с пропущенными соединениями и многомасштабными блоками предсказания. Функция активации ReLU отслеживает все сверточные слои кроме предсказанных.&lt;br /&gt;
Вид объекта со всех источников формирует входные данные в сеть позиционной оценки. На выходе получается относительная позиция между видом объекта и видом каждого источника. Сеть состоит из двух 7 шаговых сверток за которым следует свертка 1 х 1. За исключением последнего слоя свертки, где применяется нелинейная активация, все другие отслеживаются функцией активации ReLU. Сеть объяснимых предсказаний дает доступ к первым пяти закодированным слоям сети позиционирования. За ней следуют 5 слоев обратной свертки с многомасштабными блоками предсказаний. Кроме слоев предсказаний все уровни свертки и обратной свертки отслеживаются ReLU.&lt;br /&gt;
&lt;br /&gt;
=== Неконтролируемая оценка глубины монокуляра с консистенцией слева направо (2017) ===&lt;br /&gt;
&lt;br /&gt;
[[Файл:Samplers.png|thumb|240px| Рисунок 6. Примерная архитектура сети с консистенцией слева направо &amp;lt;ref name=&amp;quot;cvrp2017&amp;quot;&amp;gt;Clément Godard, Oisin Mac Aodha, Gabriel J. Brostow &amp;quot;Unsupervised Monocular Depth Estimation with Left-Right Consistency&amp;quot; Figure 3 &amp;lt;/ref&amp;gt;]]&lt;br /&gt;
&lt;br /&gt;
В данной работе&amp;lt;ref name=&amp;quot;leftrigth&amp;quot;&amp;gt; Clément Godard, Oisin Mac Aodha, Gabriel J. Brostow &amp;quot;Unsupervised Monocular Depth Estimation with Left-Right Consistency&amp;quot; [https://arxiv.org/abs/1609.03677v3]&amp;lt;/ref&amp;gt; предлагается сверточная нейронная сеть, обученная выполнять оценку глубины одного изображения без реальных данных. Авторы предлагают сетевую архитектуру, которая выполняет сквозную оценку глубины изображения, полученного с 1 камеры, без учителя, что обеспечивает согласованность глубины слева направо внутри сети.&lt;br /&gt;
Сеть оценивает глубину, выводя смещения, которые искажают левое изображение, чтобы соответствовать правому. Левое входное изображение используется для вывода смещений слева направо и справа налево. Сеть генерирует предсказанное изображение с обратным отображением с помощью билинейного сэмплера. Это приводит к полностью дифференциальной модели формирования изображения.&lt;br /&gt;
Сверточная архитектура вдохновлена так же DipsNet'ом. Она состоит из двух частей—кодера и декодера. Декодер использует пропуск соединений из блоков активации кодера, чтобы распознавать детали с высоким разрешением. Сеть предсказывает две карты смещений — слева направо и справа налево.&lt;br /&gt;
В процессе обучения сеть генерирует изображение путем выборки пикселей из противоположного стереоизображения. Модель формирования изображения использует сэмплер изображений из пространственной трансформаторной сети (STN) для выборки входного изображения с помощью карты смещений.&lt;br /&gt;
&lt;br /&gt;
=== Прогнозирование глубины без датчиков: использование структуры для обучения без учителя по монокулярным видео (2019) ===&lt;br /&gt;
&lt;br /&gt;
[[Файл:ego-motion.png|thumb|500px| Рисунок 7. Сравнение обычного метода построения карты глубин с помощью эго-движения и предложенного в статье, который использует движения для различных 3-D объектов &amp;lt;ref name=&amp;quot;aaaif&amp;quot;&amp;gt;Vincent Casser, Soeren Pirk, Reza Mahjourian, Anelia Angelova &amp;quot;Depth Prediction Without the Sensors: Leveraging Structure for Unsupervised Learning from Monocular Videos&amp;quot; Figure 2 &amp;lt;/ref&amp;gt;]]&lt;br /&gt;
&lt;br /&gt;
Данная статья &amp;lt;ref name=&amp;quot;aaai&amp;quot;&amp;gt; Vincent Casser, Soeren Pirk, Reza Mahjourian, Anelia Angelova &amp;quot;Depth Prediction Without the Sensors: Leveraging Structure for Unsupervised Learning from Monocular Videos&amp;quot; [https://arxiv.org/abs/1811.06152v1]&amp;lt;/ref&amp;gt; посвящена задаче обучения без учителя глубины сцены и эго-движения робота, где наблюдение обеспечивается видеозаписями с одной камеры. Это делается путем введения геометрической структуры в процесс обучения. Он включает в себя моделирование сцены и отдельных объектов, эго-движения камеры и движения объектов, изучаемых с помощью монокулярных видеовходов. Авторы вводят модель движения объекта, которая имеет ту же архитектуру, что и сеть эго-движения. Она принимает последовательность изображений RGB в качестве входных данных и дополняется предварительно вычисленными масками сегментации экземпляров. Работа модели движения заключается в том, чтобы научиться предсказывать векторы трансформации каждого объекта в трехмерном пространстве. Это создает видимость наблюдаемого объекта в соответствующем целевом кадре.&lt;br /&gt;
&lt;br /&gt;
== См. также ==&lt;br /&gt;
&lt;br /&gt;
* [[Компьютерное зрение]]&lt;br /&gt;
&lt;br /&gt;
* [[Оценка положения]]&lt;br /&gt;
&lt;br /&gt;
* [[Задача нахождения объектов на изображении]]&lt;br /&gt;
&lt;br /&gt;
== Примечания ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Источники информации ==&lt;br /&gt;
&lt;br /&gt;
* Чугунов Р. А., Кульневич А. Д., Аксенов С. В. Методика построения карт глубины стереоизображения с помощью капсульной нейронной сети //Доклады Томского государственного университета систем управления и радиоэлектроники. – 2019. – Т. 22. – №. 1.[https://cyberleninka.ru/article/n/metodika-postroeniya-kart-glubiny-stereoizobrazheniya-s-pomoschyu-kapsulnoy-neyronnoy-seti/viewer]&lt;br /&gt;
&lt;br /&gt;
* 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]&lt;br /&gt;
&lt;br /&gt;
*  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]&lt;br /&gt;
&lt;br /&gt;
* 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]&lt;br /&gt;
&lt;br /&gt;
* 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]&lt;br /&gt;
&lt;br /&gt;
[[Категория:Машинное обучение]]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Компьютерное зрение]]&lt;/div&gt;</summary>
		<author><name>Frak</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Plane_net2.jpg&amp;diff=80253</id>
		<title>Файл:Plane net2.jpg</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Plane_net2.jpg&amp;diff=80253"/>
				<updated>2021-01-23T11:11:13Z</updated>
		
		<summary type="html">&lt;p&gt;Frak: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Frak</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Plane_net.png&amp;diff=80252</id>
		<title>Файл:Plane net.png</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Plane_net.png&amp;diff=80252"/>
				<updated>2021-01-23T11:08:01Z</updated>
		
		<summary type="html">&lt;p&gt;Frak: Frak загрузил новую версию Файл:Plane net.png&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Frak</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9A%D0%B0%D1%80%D1%82%D0%B0_%D0%B3%D0%BB%D1%83%D0%B1%D0%B8%D0%BD%D1%8B&amp;diff=79902</id>
		<title>Карта глубины</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9A%D0%B0%D1%80%D1%82%D0%B0_%D0%B3%D0%BB%D1%83%D0%B1%D0%B8%D0%BD%D1%8B&amp;diff=79902"/>
				<updated>2021-01-22T14:09:45Z</updated>
		
		<summary type="html">&lt;p&gt;Frak: /* Неконтролируемая оценка глубины монокуляра с консистенцией слева направо (CVPR 2017) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Карта глубины''' (англ. depth map) — это изображение, где для каждого пикселя вместо цвета хранится его расстояние до камеры.&amp;lt;ref name=&amp;quot;def&amp;quot;&amp;gt;Alexey Kurakin &amp;quot;Основы стереозрения&amp;quot;[https://habr.com/ru/post/130300/]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В компьютерной 3D-графике и [[Компьютерное зрение|компьютерном зрении]] карта глубины представляет собой изображение или канал изображения, содержащий информацию о расстоянии поверхностей объектов сцены от точки обзора. &lt;br /&gt;
&lt;br /&gt;
== Мотивация ==&lt;br /&gt;
&lt;br /&gt;
Карта глубины изображения содержит в себе информацию о расстоянии между различными объектами или частями объектов, представленных на данном изображении. Эта информация может быть полезна во многих областях. &lt;br /&gt;
 &lt;br /&gt;
* Для создания 3D-сенсеров. Они способны строить трёхмерную картину своего окружения, используются для [[Оценка положения|ориентации]] автономного робота в пространстве.&lt;br /&gt;
&lt;br /&gt;
* Для систем, использующих технологии дополненной и виртуальной реальности. Например, камеры, которые фиксируют действия пользователя в видеоиграх с технологией виртуальной реальности.&lt;br /&gt;
&lt;br /&gt;
* В беспилотных автомобилях, которые также используют карты глубин для ориентации на дороге.&lt;br /&gt;
&lt;br /&gt;
* Для обработки фотографий. Например, карты глубин используют для размытия фона на фотографии, чтобы добиться более чёткого выделения человека&amp;lt;ref name=&amp;quot;expls&amp;quot;&amp;gt;Примеры из &amp;quot;Research Guide for Depth Estimation with Deep Learning&amp;quot;[https://www.kdnuggets.com/2019/11/research-guide-depth-estimation-deep-learning.html]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Методы построения карты глубины ==&lt;br /&gt;
&lt;br /&gt;
Карта глубины может быть получена с помощью '''специальной камеры глубины''', по '''стереопаре изображений''', а также с помощью [[Нейронные сети, перцептрон|'''нейронных сетей''']].&lt;br /&gt;
&lt;br /&gt;
== Построение с помощью специальных камер глубин == &lt;br /&gt;
&lt;br /&gt;
[[Файл:ToF.jpg|thumb|250px| Рисунок 1. Пример работы ToF-камеры.]]&lt;br /&gt;
&lt;br /&gt;
* '''ToF-камеры''' (англ. Time of Flight). Принцип работы данной камеры основан на измерении задержки света, с которой свет возвращается в каждую точку. Имея несколько сенсоров с разным временем накопления заряда и, зная сдвиг по времени относительно источника для каждого сенсора и снятой яркости вспышки, мы можем рассчитать сдвиг и, соответственно, расстояние до объекта. Причем чем больше сенсоров задействовано, тем выше точность метода.&lt;br /&gt;
&lt;br /&gt;
* '''Структурированные световые камеры''' (aнгл. Structured light camera). Принцип работы данной камеры один из самых старых. Ставим проектор, который создает, например, горизонтальные (а потом и вертикальные) полоски и рядом камеру, которая снимает картину с полосками. В некоторых вариантах используется псевдослучайный набор точек (например MS Kinect {{---}} бесконтактный сенсорный игровой контроллер, для консолей Xbox 360, Xbox One и персональных компьютеров под управлением ОС Windows&amp;lt;ref name=&amp;quot;kinect&amp;quot;&amp;gt; О MicriSoft Kinect [https://en.wikipedia.org/wiki/Kinect]&amp;lt;/ref&amp;gt;). Проекторы обычно работают в инфракрасном спектре, чтобы не мешать пользователям. Поскольку камера и проектор смещены друг относительно друга, то и полоски также будут смещаться пропорционально расстоянию до объекта. Измеряя это смещение, мы можем рассчитывать расстояние до объекта. Вполне понятны сложности, с которыми можно столкнуться при использовании этого метода: это необходимость настройки и калибровки проектора, и проблема того, что нам нужно относительно благоприятное освещение. К примеру, солнце может засветить полосы, и что-то распознать будет тяжело.&lt;br /&gt;
&lt;br /&gt;
== Построения карты глубины по стереопаре ==&lt;br /&gt;
&lt;br /&gt;
Идея, лежащая в основе построения карты глубины по '''стереопаре''', проста. Для каждой точки на одном изображении выполняется поиск [[Ключевые точки изображения|парной ей точки]]&amp;lt;sup&amp;gt;[на 21.01.21 не создан]&amp;lt;/sup&amp;gt; на другом изображении. А по паре соответствующих точек можно выполнить [[Триангуляция полигонов (ушная + монотонная)|триангуляцию]] и определить координаты их [[Отображения|прообраза]] в трехмерном пространстве. Зная трехмерные координаты прообраза, глубина вычисляется как расстояние до плоскости камеры.&lt;br /&gt;
&lt;br /&gt;
Парную точку нужно искать на эпиполярной&amp;lt;ref name=&amp;quot;Epipolar&amp;quot;&amp;gt;Информация о эпиполярной геометрии[https://ru.qaz.wiki/wiki/Epipolar_geometry]&amp;lt;/ref&amp;gt; линии. Соответственно, для упрощения поиска изображения выравнивают так, чтобы все эпиполярные линии были параллельны сторонам изображения (обычно горизонтальны). Более того, изображения выравнивают так, чтобы для точки с координатами &amp;lt;math&amp;gt;(x_0, y_0)&amp;lt;/math&amp;gt; соответствующая ей эпиполярная линия задавалась уравнением &amp;lt;math&amp;gt;x = x_0&amp;lt;/math&amp;gt;. Тогда для каждой точки, соответствующую ей парную точку, нужно искать в той-же строчке на изображении со второй камеры. Такой процесс выравнивания изображений называют '''ректификацией''' (rectification).&lt;br /&gt;
&lt;br /&gt;
[[Файл:Stereo.png|thumb|300px| Рисунок 2. Результат построения карты смещений по двум картинкам.&amp;lt;ref name=&amp;quot;img2&amp;quot;&amp;gt; &amp;quot;Основы стереозрения&amp;quot; Рис. 3 [https://habr.com/ru/post/130300/]&amp;lt;/ref&amp;gt;]]&lt;br /&gt;
&lt;br /&gt;
После того, как изображения '''ректифицированы''', выполняют поиск соответствующих пар точек. Для каждого пикселя одной картинки с координатами &amp;lt;math&amp;gt;(x_0, y_0)&amp;lt;/math&amp;gt; выполняется поиск пикселя на другой картинке. При этом предполагается, что пиксель на второй картинке должен иметь координаты &amp;lt;math&amp;gt;(x_0 - d, y_0)&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;d&amp;lt;/math&amp;gt; — величина называемая смещением. Поиск соответствующего пикселя выполняется путем вычисления максимума функции отклика, в качестве которой может выступать, например, [[Корреляция случайных величин|корреляция]] окрестностей пикселей. В результате получается карта смещений, пример которой приведен на рис. 2. &lt;br /&gt;
&lt;br /&gt;
Собственно значения глубины обратно пропорциональны величине смещения пикселей.&lt;br /&gt;
&lt;br /&gt;
== Использование нейронных сетей ==&lt;br /&gt;
&lt;br /&gt;
Существует множество методов, использующих нейронные сети. Приведём пару примеров таких решений.&lt;br /&gt;
&lt;br /&gt;
=== Построение с помощью свёрточных нейронных сетей ===&lt;br /&gt;
&lt;br /&gt;
Используем [[Сверточные нейронные сети|сверточные нейронные сети]] для построения карты глубины следующим образом&lt;br /&gt;
&amp;lt;ref name=&amp;quot;cnn_rew&amp;quot;&amp;gt; Xiaobai Ma, Zhenglin Geng, Zhi Bie &amp;quot;Depth Estimation from Single Image Using CNN-Residual Network&amp;quot; [http://cs231n.stanford.edu/reports/2017/pdfs/203.pdf]&amp;lt;/ref&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
*  '''Создаем карту смещений''': используя два изображения с камер, близко расположенных друг к другу, создаем карту различий, точно так же как в методе построения по стереопаре.&lt;br /&gt;
&lt;br /&gt;
* '''Ищем реальную карту глубины для обучения''': с помощью карты смещений, можем построить карту глубины &amp;lt;math&amp;gt;y&amp;lt;/math&amp;gt; вышеописанным способом. Также допустимы другие способы построения карты глубины для обучения нейронной сети.&lt;br /&gt;
&lt;br /&gt;
*  '''Функция потерь''': определим [[Функция потерь и эмпирический риск|функцию потерь]], для предсказанной карты &amp;lt;math&amp;gt;\hat y&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;d_i = log( y_i) - log (\hat y_i)&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;\lambda \in [0, 1]&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;n &amp;lt;/math&amp;gt; — количество пикселей. &amp;lt;math&amp;gt;L(y, \hat y) =  \frac{1}{n} \sum\limits_{i} d^2_i - \frac{\lambda}{n^2}(\sum\limits_{i} d_i)^2&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;y_i&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;\hat y_i&amp;lt;/math&amp;gt; это i пискель для для реальной карты глубин и для предсказанной карты, соответственно. Гиперпараметр &amp;lt;math&amp;gt;\lambda&amp;lt;/math&amp;gt;, нужен для того, чтобы функция потерь меньше росла при большом количестве пикселей, предсказание для которых достаточно близко к реальному. Например, если &amp;lt;math&amp;gt;\lambda = 0&amp;lt;/math&amp;gt;, то мы просто придём к оптимизации в L2 для &amp;lt;math&amp;gt;d_i&amp;lt;/math&amp;gt;, т.е. &amp;lt;math&amp;gt;L(y, \hat y) =  \frac{1}{n} \sum\limits_{i} d^2_i &amp;lt;/math&amp;gt;.&amp;lt;ref name=&amp;quot;loss&amp;quot;&amp;gt;David Eigen, Christian Puhrsch, Rob Fergus &amp;quot;Depth Map Prediction from a Single Imageusing a Multi-Scale Deep Network&amp;quot; стр. 5&amp;lt;/ref&amp;gt; &lt;br /&gt;
&lt;br /&gt;
* '''Обучение свёрточной нейронной сети''': далее идёт обычное обучение нейронной сети по карте различий путем обратного распространения ошибки, оптимизируя заданную выше функцию потерь.&lt;br /&gt;
&lt;br /&gt;
В итоге, по обученной нейронной сети мы можем создавать карту глубины, не проводя расчётов для поиска карт смещения и имея только изображение объекта или пространства. &amp;lt;ref name=&amp;quot;cnn&amp;quot;&amp;gt;Реализация, основанная на свёрточных нейронных сетях [https://www.kaggle.com/kmader/cnn-for-generating-depth-maps-from-rgb-images]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Также возможно использование усложнённых архитектур свёрточных нейронных сетей типа '''DenseNet'''.&lt;br /&gt;
&lt;br /&gt;
'''DenseNet'''&amp;lt;ref name=&amp;quot;DenseNet&amp;quot;&amp;gt;Оригинальная статья описывающая DenseNet [https://arxiv.org/abs/1611.09326]&amp;lt;/ref&amp;gt; {{---}} это свёрточная нейронные сеть, в которой выход каждого из слоев подаётся на вход всем слоям, лежащих ниже.&lt;br /&gt;
&lt;br /&gt;
=== Построение с помощью капсульных нейронных сетей ===&lt;br /&gt;
&lt;br /&gt;
Свёрточные нейронные сети способны регистрировать только наличие какого-либо объекта на картинке, не кодируя его ориентацию и положение. Но '''капсульные нейронные сети''' (англ. Capsule Neural Network)&amp;lt;ref name=&amp;quot;CapsNet&amp;quot;&amp;gt;Sara Sabour, Nicholas Frosst, Geoffrey E. Hinton &amp;quot;Dynamic Routing Between Capsules&amp;quot; [https://arxiv.org/pdf/1710.09829.pdf]&amp;lt;/ref&amp;gt; лишены этого недостатка.&lt;br /&gt;
&lt;br /&gt;
[[Файл:capsnet.jpg|thumb|400px| Рисунок 3. Структура капсульной нейронной сети &amp;lt;ref name=&amp;quot;img&amp;quot;&amp;gt; &amp;quot;Design and Investigation of Capsule Networks for Sentence Classification&amp;quot; Figure 2. [https://www.mdpi.com/2076-3417/9/11/2200/htm]&amp;lt;/ref&amp;gt;.]]&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Капсульная нейронная сеть&amp;quot; состоит из капсул или групп нейронов, чтобы идентифицировать закономерности в изображении. Эта информация поступает в виде векторов, содержащих ориентацию и положение узоров на изображении, которое затем принимается капсулами более высокого уровня. Капсулы более высокого уровня обрабатывают эту информацию из нескольких капсул более низкого уровня и впоследствии выдают прогноз. Капсулы одного уровня не имеют связей друг с другом и вычисляют информацию независимо друг от друга. Капсулы образуются путем разделения выходных данных из свёрточного слоя. Мы делим наш трехмерный вектор на капсулы методом &amp;quot;нарезания&amp;quot; таким образом, чтобы в каждой капсуле была информация о каждом пикселе, т.е. по трехмерной координате.&lt;br /&gt;
 &lt;br /&gt;
Состояние нейронов капсульной нейронной сети внутри изображения фиксирует свойство области или объекта внутри изображения: его положение и ориентацию.&lt;br /&gt;
&lt;br /&gt;
Использование капсульной нейронной сети аналогично использованию обычных свёрточных сетей, описанному выше. &lt;br /&gt;
В целом, данная сеть показывает более точные результаты предсказания глубины.&lt;br /&gt;
&lt;br /&gt;
=== Построение с помощью PlanetNet ===&lt;br /&gt;
&lt;br /&gt;
Так же есть архитектуры, решающие данную задачу и без обучения на карте смещений, построенной с помощью двух изображений. Одной из таких является '''PlaneNet'''. &lt;br /&gt;
&lt;br /&gt;
'''PlaneNet'''&amp;lt;ref name=&amp;quot;planetNet&amp;quot;&amp;gt; Chen Liu, Jimei Yang, Duygu Ceylan, Ersin Yumer, Yasutaka Furukawa &amp;quot;PlaneNet: Piece-wise Planar Reconstruction from a Single RGB Image&amp;quot; [https://arxiv.org/abs/1804.06278v1]&amp;lt;/ref&amp;gt; {{---}} глубокая нейронная сеть, построенная на расширенных остаточных сетях (aнгл. Dilated Residual Networks или DRN)&amp;lt;ref name=&amp;quot;drn&amp;quot;&amp;gt; Fisher Yu, Vladlen Koltun, Thomas Funkhouser &amp;quot;Dilated Residual Networks&amp;quot; [https://arxiv.org/abs/1705.09914]&amp;lt;/ref&amp;gt;. Она получает карту глубин путем композиции выходов трех подзадач:&lt;br /&gt;
&lt;br /&gt;
[[Файл:plane_net.png|thumb|500px| Рисунок 4. Прогнозируемые PlaneNet параметры по одной rgb картинке: cегметация плоскости, параметры плоскостей, неплоская карта глубины&amp;lt;ref name=&amp;quot;img4&amp;quot;&amp;gt; Chen Liu, Jimei Yang, Duygu Ceylan, Ersin Yumer, Yasutaka Furukawa &amp;quot;PlaneNet: Piece-wise Planar Reconstruction from a Single RGB Image&amp;quot; Figure 2.&amp;lt;/ref&amp;gt;.]]&lt;br /&gt;
&lt;br /&gt;
* '''Параметры плоскостей''': пытаемся предсказать количество плоскостей K, а после ищем на изображение K плоских поверхностей, каждая поверхность задаётся тремя параметрами: нормальная, прямая и сдвиг.&lt;br /&gt;
&lt;br /&gt;
* [[Сегментация изображений|'''Сегментация плоскости''']]: ищем группы пикселей, каждая из которых характеризует один смысловой объект.&lt;br /&gt;
&lt;br /&gt;
* '''Неплоская карта глубины''': ищем одно-канальную (или неплоскую) карту глубины, то есть карту глубины, где каждый пиксель, либо на глубине 0, либо на глубине 1.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Обучение без учителя поиска карты глубины из видео (CVPR 2017) ===&lt;br /&gt;
&lt;br /&gt;
Авторы данной статьи &amp;lt;ref name=&amp;quot;cvrp_dnn&amp;quot;&amp;gt;Tinghui Zhou, Matthew Brown, Noah Snavely, David G. Lowe &amp;quot;Unsupervised Learning of Depth and Ego-Motion from Video&amp;quot; [https://arxiv.org/abs/1704.07813v2]&amp;lt;/ref&amp;gt; предлагают методику оценки глубины одной картинки без учителя и движения камеры из беспорядочной видео нарезки. &lt;br /&gt;
&lt;br /&gt;
[[Файл:dnn.png|thumb|400px| Рисунок 5. Aрхитектура сети на базе DispNet  &amp;lt;ref name=&amp;quot;cvrp&amp;quot;&amp;gt;Tinghui Zhou, Matthew Brown, Noah Snavely, David G. Lowe &amp;quot;Unsupervised Learning of Depth and Ego-Motion from Video&amp;quot; Figure 4&amp;lt;/ref&amp;gt;]]&lt;br /&gt;
&lt;br /&gt;
Будем использовать сверточные нейронные сети c глубиной одного вида и многовидовой камерой из неупорядоченного видеоряда. Метод базируется на синтезе видов. Сеть загружает фото объекта в качестве данных ввода и выводит карту глубины на каждый пиксель. Вид объекта может быть синтезирован исходя из глубины на каждый пиксель снимка позиционирования и четкости ближнего вида. Синтез может быть  дифференцирован с CNN по геометрии и модулям позиционирования.&lt;br /&gt;
Авторы взяли на вооружение архитектуру DispNet&amp;lt;ref name=&amp;quot;dispNet&amp;quot;&amp;gt; Nikolaus Mayer, Eddy Ilg, Philip Hausser, Philipp Fischer &amp;quot;A Large Dataset to Train Convolutional Networks&lt;br /&gt;
for Disparity, Optical Flow, and Scene Flow Estimation&amp;quot; [https://arxiv.org/pdf/1512.02134.pdf]&amp;lt;/ref&amp;gt;, которая сконструирована в виде енкодера - декодера с пропущенными соединениями и многомасштабными блоками предсказания. Функция активации ReLU отслеживает все сверточные слои кроме предсказанных.&lt;br /&gt;
Вид объекта со всех источников формирует входные данные в сеть позиционной оценки. На выходе получается относительная позиция между видом объекта и видом каждого источника. Сеть состоит из двух 7 шаговых сверток за которым следует свертка 1 х 1. За исключением последнего слоя свертки, где применяется нелинейная активация, все другие отслеживаются функцией активации ReLU. Сеть объяснимых предсказаний дает доступ к первым пяти закодированным слоям сети позиционирования. За ней следуют 5 слоев обратной свертки с многомасштабными блоками предсказаний. Кроме слоев предсказаний все уровни свертки и обратной свертки отслеживаются ReLU.&lt;br /&gt;
&lt;br /&gt;
=== Неконтролируемая оценка глубины монокуляра с консистенцией слева направо (CVPR 2017) ===&lt;br /&gt;
&lt;br /&gt;
[[Файл:Samplers.png|thumb|240px| Рисунок 6. Примерная архитектура сети с консистенцией слева направо &amp;lt;ref name=&amp;quot;cvrp2017&amp;quot;&amp;gt;Clément Godard, Oisin Mac Aodha, Gabriel J. Brostow &amp;quot;Unsupervised Monocular Depth Estimation with Left-Right Consistency&amp;quot; Figure 3 &amp;lt;/ref&amp;gt;]]&lt;br /&gt;
&lt;br /&gt;
В данной работе&amp;lt;ref name=&amp;quot;leftrigth&amp;quot;&amp;gt; Clément Godard, Oisin Mac Aodha, Gabriel J. Brostow &amp;quot;Unsupervised Monocular Depth Estimation with Left-Right Consistency&amp;quot; [https://arxiv.org/abs/1609.03677v3]&amp;lt;/ref&amp;gt; предлагается сверточная нейронная сеть, обученная выполнять оценку глубины одного изображения без реальных данных. Авторы предлагают сетевую архитектуру, которая выполняет сквозную оценку глубины изображения, полученного с 1 камеры, без учителя, что обеспечивает согласованность глубины слева направо внутри сети.&lt;br /&gt;
Сеть оценивает глубину, выводя смещения, которые искажают левое изображение, чтобы соответствовать правому. Левое входное изображение используется для вывода смещений слева направо и справа налево. Сеть генерирует предсказанное изображение с обратным отображением с помощью билинейного сэмплера. Это приводит к полностью дифференциальной модели формирования изображения.&lt;br /&gt;
Сверточная архитектура вдохновлена так же DipsNet'ом. Она состоит из двух частей—кодера и декодера. Декодер использует пропуск соединений из блоков активации кодера, чтобы распознавать детали с высоким разрешением. Сеть предсказывает две карты смещений — слева направо и справа налево.&lt;br /&gt;
В процессе обучения сеть генерирует изображение путем выборки пикселей из противоположного стереоизображения. Модель формирования изображения использует сэмплер изображений из пространственной трансформаторной сети (STN) для выборки входного изображения с помощью карты смещений.&lt;br /&gt;
&lt;br /&gt;
=== Прогнозирование глубины без датчиков: использование структуры для обучения без учителя по монокулярным видео (AAAI 2019) ===&lt;br /&gt;
&lt;br /&gt;
[[Файл:ego-motion.png|thumb|500px| Рисунок 7. Сравнение обычного метода построения карты глубин с помощью эго-движения и предложенного в статье, который использует движения для различных 3-D объектов &amp;lt;ref name=&amp;quot;aaaif&amp;quot;&amp;gt;Vincent Casser, Soeren Pirk, Reza Mahjourian, Anelia Angelova &amp;quot;Depth Prediction Without the Sensors: Leveraging Structure for Unsupervised Learning from Monocular Videos&amp;quot; Figure 2 &amp;lt;/ref&amp;gt;]]&lt;br /&gt;
&lt;br /&gt;
Данная статья &amp;lt;ref name=&amp;quot;aaai&amp;quot;&amp;gt; Vincent Casser, Soeren Pirk, Reza Mahjourian, Anelia Angelova &amp;quot;Depth Prediction Without the Sensors: Leveraging Structure for Unsupervised Learning from Monocular Videos&amp;quot; [https://arxiv.org/abs/1811.06152v1]&amp;lt;/ref&amp;gt; посвящена задаче обучения без учителя глубины сцены и эго-движения робота, где наблюдение обеспечивается видеозаписями с одной камеры. Это делается путем введения геометрической структуры в процесс обучения. Он включает в себя моделирование сцены и отдельных объектов, эго-движения камеры и движения объектов, изучаемых с помощью монокулярных видеовходов. Авторы вводят модель движения объекта, которая имеет ту же архитектуру, что и сеть эго-движения. Она принимает последовательность изображений RGB в качестве входных данных и дополняется предварительно вычисленными масками сегментации экземпляров. Работа модели движения заключается в том, чтобы научиться предсказывать векторы трансформации каждого объекта в трехмерном пространстве. Это создает видимость наблюдаемого объекта в соответствующем целевом кадре.&lt;br /&gt;
&lt;br /&gt;
== См. также ==&lt;br /&gt;
&lt;br /&gt;
* [[Компьютерное зрение]]&lt;br /&gt;
&lt;br /&gt;
* [[Оценка положения]]&lt;br /&gt;
&lt;br /&gt;
* [[Задача нахождения объектов на изображении]]&lt;br /&gt;
&lt;br /&gt;
== Примечания ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Источники информации ==&lt;br /&gt;
&lt;br /&gt;
* Чугунов Р. А., Кульневич А. Д., Аксенов С. В. Методика построения карт глубины стереоизображения с помощью капсульной нейронной сети //Доклады Томского государственного университета систем управления и радиоэлектроники. – 2019. – Т. 22. – №. 1.[https://cyberleninka.ru/article/n/metodika-postroeniya-kart-glubiny-stereoizobrazheniya-s-pomoschyu-kapsulnoy-neyronnoy-seti/viewer]&lt;br /&gt;
&lt;br /&gt;
* 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]&lt;br /&gt;
&lt;br /&gt;
*  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]&lt;br /&gt;
&lt;br /&gt;
* 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]&lt;br /&gt;
&lt;br /&gt;
* 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]&lt;br /&gt;
&lt;br /&gt;
[[Категория:Машинное обучение]]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Компьютерное зрение]]&lt;/div&gt;</summary>
		<author><name>Frak</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9A%D0%B0%D1%80%D1%82%D0%B0_%D0%B3%D0%BB%D1%83%D0%B1%D0%B8%D0%BD%D1%8B&amp;diff=79901</id>
		<title>Карта глубины</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9A%D0%B0%D1%80%D1%82%D0%B0_%D0%B3%D0%BB%D1%83%D0%B1%D0%B8%D0%BD%D1%8B&amp;diff=79901"/>
				<updated>2021-01-22T14:08:24Z</updated>
		
		<summary type="html">&lt;p&gt;Frak: /* Неконтролируемая оценка глубины монокуляра с консистенцией слева направо (CVPR 2017) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Карта глубины''' (англ. depth map) — это изображение, где для каждого пикселя вместо цвета хранится его расстояние до камеры.&amp;lt;ref name=&amp;quot;def&amp;quot;&amp;gt;Alexey Kurakin &amp;quot;Основы стереозрения&amp;quot;[https://habr.com/ru/post/130300/]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В компьютерной 3D-графике и [[Компьютерное зрение|компьютерном зрении]] карта глубины представляет собой изображение или канал изображения, содержащий информацию о расстоянии поверхностей объектов сцены от точки обзора. &lt;br /&gt;
&lt;br /&gt;
== Мотивация ==&lt;br /&gt;
&lt;br /&gt;
Карта глубины изображения содержит в себе информацию о расстоянии между различными объектами или частями объектов, представленных на данном изображении. Эта информация может быть полезна во многих областях. &lt;br /&gt;
 &lt;br /&gt;
* Для создания 3D-сенсеров. Они способны строить трёхмерную картину своего окружения, используются для [[Оценка положения|ориентации]] автономного робота в пространстве.&lt;br /&gt;
&lt;br /&gt;
* Для систем, использующих технологии дополненной и виртуальной реальности. Например, камеры, которые фиксируют действия пользователя в видеоиграх с технологией виртуальной реальности.&lt;br /&gt;
&lt;br /&gt;
* В беспилотных автомобилях, которые также используют карты глубин для ориентации на дороге.&lt;br /&gt;
&lt;br /&gt;
* Для обработки фотографий. Например, карты глубин используют для размытия фона на фотографии, чтобы добиться более чёткого выделения человека&amp;lt;ref name=&amp;quot;expls&amp;quot;&amp;gt;Примеры из &amp;quot;Research Guide for Depth Estimation with Deep Learning&amp;quot;[https://www.kdnuggets.com/2019/11/research-guide-depth-estimation-deep-learning.html]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Методы построения карты глубины ==&lt;br /&gt;
&lt;br /&gt;
Карта глубины может быть получена с помощью '''специальной камеры глубины''', по '''стереопаре изображений''', а также с помощью [[Нейронные сети, перцептрон|'''нейронных сетей''']].&lt;br /&gt;
&lt;br /&gt;
== Построение с помощью специальных камер глубин == &lt;br /&gt;
&lt;br /&gt;
[[Файл:ToF.jpg|thumb|250px| Рисунок 1. Пример работы ToF-камеры.]]&lt;br /&gt;
&lt;br /&gt;
* '''ToF-камеры''' (англ. Time of Flight). Принцип работы данной камеры основан на измерении задержки света, с которой свет возвращается в каждую точку. Имея несколько сенсоров с разным временем накопления заряда и, зная сдвиг по времени относительно источника для каждого сенсора и снятой яркости вспышки, мы можем рассчитать сдвиг и, соответственно, расстояние до объекта. Причем чем больше сенсоров задействовано, тем выше точность метода.&lt;br /&gt;
&lt;br /&gt;
* '''Структурированные световые камеры''' (aнгл. Structured light camera). Принцип работы данной камеры один из самых старых. Ставим проектор, который создает, например, горизонтальные (а потом и вертикальные) полоски и рядом камеру, которая снимает картину с полосками. В некоторых вариантах используется псевдослучайный набор точек (например MS Kinect {{---}} бесконтактный сенсорный игровой контроллер, для консолей Xbox 360, Xbox One и персональных компьютеров под управлением ОС Windows&amp;lt;ref name=&amp;quot;kinect&amp;quot;&amp;gt; О MicriSoft Kinect [https://en.wikipedia.org/wiki/Kinect]&amp;lt;/ref&amp;gt;). Проекторы обычно работают в инфракрасном спектре, чтобы не мешать пользователям. Поскольку камера и проектор смещены друг относительно друга, то и полоски также будут смещаться пропорционально расстоянию до объекта. Измеряя это смещение, мы можем рассчитывать расстояние до объекта. Вполне понятны сложности, с которыми можно столкнуться при использовании этого метода: это необходимость настройки и калибровки проектора, и проблема того, что нам нужно относительно благоприятное освещение. К примеру, солнце может засветить полосы, и что-то распознать будет тяжело.&lt;br /&gt;
&lt;br /&gt;
== Построения карты глубины по стереопаре ==&lt;br /&gt;
&lt;br /&gt;
Идея, лежащая в основе построения карты глубины по '''стереопаре''', проста. Для каждой точки на одном изображении выполняется поиск [[Ключевые точки изображения|парной ей точки]]&amp;lt;sup&amp;gt;[на 21.01.21 не создан]&amp;lt;/sup&amp;gt; на другом изображении. А по паре соответствующих точек можно выполнить [[Триангуляция полигонов (ушная + монотонная)|триангуляцию]] и определить координаты их [[Отображения|прообраза]] в трехмерном пространстве. Зная трехмерные координаты прообраза, глубина вычисляется как расстояние до плоскости камеры.&lt;br /&gt;
&lt;br /&gt;
Парную точку нужно искать на эпиполярной&amp;lt;ref name=&amp;quot;Epipolar&amp;quot;&amp;gt;Информация о эпиполярной геометрии[https://ru.qaz.wiki/wiki/Epipolar_geometry]&amp;lt;/ref&amp;gt; линии. Соответственно, для упрощения поиска изображения выравнивают так, чтобы все эпиполярные линии были параллельны сторонам изображения (обычно горизонтальны). Более того, изображения выравнивают так, чтобы для точки с координатами &amp;lt;math&amp;gt;(x_0, y_0)&amp;lt;/math&amp;gt; соответствующая ей эпиполярная линия задавалась уравнением &amp;lt;math&amp;gt;x = x_0&amp;lt;/math&amp;gt;. Тогда для каждой точки, соответствующую ей парную точку, нужно искать в той-же строчке на изображении со второй камеры. Такой процесс выравнивания изображений называют '''ректификацией''' (rectification).&lt;br /&gt;
&lt;br /&gt;
[[Файл:Stereo.png|thumb|300px| Рисунок 2. Результат построения карты смещений по двум картинкам.&amp;lt;ref name=&amp;quot;img2&amp;quot;&amp;gt; &amp;quot;Основы стереозрения&amp;quot; Рис. 3 [https://habr.com/ru/post/130300/]&amp;lt;/ref&amp;gt;]]&lt;br /&gt;
&lt;br /&gt;
После того, как изображения '''ректифицированы''', выполняют поиск соответствующих пар точек. Для каждого пикселя одной картинки с координатами &amp;lt;math&amp;gt;(x_0, y_0)&amp;lt;/math&amp;gt; выполняется поиск пикселя на другой картинке. При этом предполагается, что пиксель на второй картинке должен иметь координаты &amp;lt;math&amp;gt;(x_0 - d, y_0)&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;d&amp;lt;/math&amp;gt; — величина называемая смещением. Поиск соответствующего пикселя выполняется путем вычисления максимума функции отклика, в качестве которой может выступать, например, [[Корреляция случайных величин|корреляция]] окрестностей пикселей. В результате получается карта смещений, пример которой приведен на рис. 2. &lt;br /&gt;
&lt;br /&gt;
Собственно значения глубины обратно пропорциональны величине смещения пикселей.&lt;br /&gt;
&lt;br /&gt;
== Использование нейронных сетей ==&lt;br /&gt;
&lt;br /&gt;
Существует множество методов, использующих нейронные сети. Приведём пару примеров таких решений.&lt;br /&gt;
&lt;br /&gt;
=== Построение с помощью свёрточных нейронных сетей ===&lt;br /&gt;
&lt;br /&gt;
Используем [[Сверточные нейронные сети|сверточные нейронные сети]] для построения карты глубины следующим образом&lt;br /&gt;
&amp;lt;ref name=&amp;quot;cnn_rew&amp;quot;&amp;gt; Xiaobai Ma, Zhenglin Geng, Zhi Bie &amp;quot;Depth Estimation from Single Image Using CNN-Residual Network&amp;quot; [http://cs231n.stanford.edu/reports/2017/pdfs/203.pdf]&amp;lt;/ref&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
*  '''Создаем карту смещений''': используя два изображения с камер, близко расположенных друг к другу, создаем карту различий, точно так же как в методе построения по стереопаре.&lt;br /&gt;
&lt;br /&gt;
* '''Ищем реальную карту глубины для обучения''': с помощью карты смещений, можем построить карту глубины &amp;lt;math&amp;gt;y&amp;lt;/math&amp;gt; вышеописанным способом. Также допустимы другие способы построения карты глубины для обучения нейронной сети.&lt;br /&gt;
&lt;br /&gt;
*  '''Функция потерь''': определим [[Функция потерь и эмпирический риск|функцию потерь]], для предсказанной карты &amp;lt;math&amp;gt;\hat y&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;d_i = log( y_i) - log (\hat y_i)&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;\lambda \in [0, 1]&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;n &amp;lt;/math&amp;gt; — количество пикселей. &amp;lt;math&amp;gt;L(y, \hat y) =  \frac{1}{n} \sum\limits_{i} d^2_i - \frac{\lambda}{n^2}(\sum\limits_{i} d_i)^2&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;y_i&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;\hat y_i&amp;lt;/math&amp;gt; это i пискель для для реальной карты глубин и для предсказанной карты, соответственно. Гиперпараметр &amp;lt;math&amp;gt;\lambda&amp;lt;/math&amp;gt;, нужен для того, чтобы функция потерь меньше росла при большом количестве пикселей, предсказание для которых достаточно близко к реальному. Например, если &amp;lt;math&amp;gt;\lambda = 0&amp;lt;/math&amp;gt;, то мы просто придём к оптимизации в L2 для &amp;lt;math&amp;gt;d_i&amp;lt;/math&amp;gt;, т.е. &amp;lt;math&amp;gt;L(y, \hat y) =  \frac{1}{n} \sum\limits_{i} d^2_i &amp;lt;/math&amp;gt;.&amp;lt;ref name=&amp;quot;loss&amp;quot;&amp;gt;David Eigen, Christian Puhrsch, Rob Fergus &amp;quot;Depth Map Prediction from a Single Imageusing a Multi-Scale Deep Network&amp;quot; стр. 5&amp;lt;/ref&amp;gt; &lt;br /&gt;
&lt;br /&gt;
* '''Обучение свёрточной нейронной сети''': далее идёт обычное обучение нейронной сети по карте различий путем обратного распространения ошибки, оптимизируя заданную выше функцию потерь.&lt;br /&gt;
&lt;br /&gt;
В итоге, по обученной нейронной сети мы можем создавать карту глубины, не проводя расчётов для поиска карт смещения и имея только изображение объекта или пространства. &amp;lt;ref name=&amp;quot;cnn&amp;quot;&amp;gt;Реализация, основанная на свёрточных нейронных сетях [https://www.kaggle.com/kmader/cnn-for-generating-depth-maps-from-rgb-images]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Также возможно использование усложнённых архитектур свёрточных нейронных сетей типа '''DenseNet'''.&lt;br /&gt;
&lt;br /&gt;
'''DenseNet'''&amp;lt;ref name=&amp;quot;DenseNet&amp;quot;&amp;gt;Оригинальная статья описывающая DenseNet [https://arxiv.org/abs/1611.09326]&amp;lt;/ref&amp;gt; {{---}} это свёрточная нейронные сеть, в которой выход каждого из слоев подаётся на вход всем слоям, лежащих ниже.&lt;br /&gt;
&lt;br /&gt;
=== Построение с помощью капсульных нейронных сетей ===&lt;br /&gt;
&lt;br /&gt;
Свёрточные нейронные сети способны регистрировать только наличие какого-либо объекта на картинке, не кодируя его ориентацию и положение. Но '''капсульные нейронные сети''' (англ. Capsule Neural Network)&amp;lt;ref name=&amp;quot;CapsNet&amp;quot;&amp;gt;Sara Sabour, Nicholas Frosst, Geoffrey E. Hinton &amp;quot;Dynamic Routing Between Capsules&amp;quot; [https://arxiv.org/pdf/1710.09829.pdf]&amp;lt;/ref&amp;gt; лишены этого недостатка.&lt;br /&gt;
&lt;br /&gt;
[[Файл:capsnet.jpg|thumb|400px| Рисунок 3. Структура капсульной нейронной сети &amp;lt;ref name=&amp;quot;img&amp;quot;&amp;gt; &amp;quot;Design and Investigation of Capsule Networks for Sentence Classification&amp;quot; Figure 2. [https://www.mdpi.com/2076-3417/9/11/2200/htm]&amp;lt;/ref&amp;gt;.]]&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Капсульная нейронная сеть&amp;quot; состоит из капсул или групп нейронов, чтобы идентифицировать закономерности в изображении. Эта информация поступает в виде векторов, содержащих ориентацию и положение узоров на изображении, которое затем принимается капсулами более высокого уровня. Капсулы более высокого уровня обрабатывают эту информацию из нескольких капсул более низкого уровня и впоследствии выдают прогноз. Капсулы одного уровня не имеют связей друг с другом и вычисляют информацию независимо друг от друга. Капсулы образуются путем разделения выходных данных из свёрточного слоя. Мы делим наш трехмерный вектор на капсулы методом &amp;quot;нарезания&amp;quot; таким образом, чтобы в каждой капсуле была информация о каждом пикселе, т.е. по трехмерной координате.&lt;br /&gt;
 &lt;br /&gt;
Состояние нейронов капсульной нейронной сети внутри изображения фиксирует свойство области или объекта внутри изображения: его положение и ориентацию.&lt;br /&gt;
&lt;br /&gt;
Использование капсульной нейронной сети аналогично использованию обычных свёрточных сетей, описанному выше. &lt;br /&gt;
В целом, данная сеть показывает более точные результаты предсказания глубины.&lt;br /&gt;
&lt;br /&gt;
=== Построение с помощью PlanetNet ===&lt;br /&gt;
&lt;br /&gt;
Так же есть архитектуры, решающие данную задачу и без обучения на карте смещений, построенной с помощью двух изображений. Одной из таких является '''PlaneNet'''. &lt;br /&gt;
&lt;br /&gt;
'''PlaneNet'''&amp;lt;ref name=&amp;quot;planetNet&amp;quot;&amp;gt; Chen Liu, Jimei Yang, Duygu Ceylan, Ersin Yumer, Yasutaka Furukawa &amp;quot;PlaneNet: Piece-wise Planar Reconstruction from a Single RGB Image&amp;quot; [https://arxiv.org/abs/1804.06278v1]&amp;lt;/ref&amp;gt; {{---}} глубокая нейронная сеть, построенная на расширенных остаточных сетях (aнгл. Dilated Residual Networks или DRN)&amp;lt;ref name=&amp;quot;drn&amp;quot;&amp;gt; Fisher Yu, Vladlen Koltun, Thomas Funkhouser &amp;quot;Dilated Residual Networks&amp;quot; [https://arxiv.org/abs/1705.09914]&amp;lt;/ref&amp;gt;. Она получает карту глубин путем композиции выходов трех подзадач:&lt;br /&gt;
&lt;br /&gt;
[[Файл:plane_net.png|thumb|500px| Рисунок 4. Прогнозируемые PlaneNet параметры по одной rgb картинке: cегметация плоскости, параметры плоскостей, неплоская карта глубины&amp;lt;ref name=&amp;quot;img4&amp;quot;&amp;gt; Chen Liu, Jimei Yang, Duygu Ceylan, Ersin Yumer, Yasutaka Furukawa &amp;quot;PlaneNet: Piece-wise Planar Reconstruction from a Single RGB Image&amp;quot; Figure 2.&amp;lt;/ref&amp;gt;.]]&lt;br /&gt;
&lt;br /&gt;
* '''Параметры плоскостей''': пытаемся предсказать количество плоскостей K, а после ищем на изображение K плоских поверхностей, каждая поверхность задаётся тремя параметрами: нормальная, прямая и сдвиг.&lt;br /&gt;
&lt;br /&gt;
* [[Сегментация изображений|'''Сегментация плоскости''']]: ищем группы пикселей, каждая из которых характеризует один смысловой объект.&lt;br /&gt;
&lt;br /&gt;
* '''Неплоская карта глубины''': ищем одно-канальную (или неплоскую) карту глубины, то есть карту глубины, где каждый пиксель, либо на глубине 0, либо на глубине 1.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Обучение без учителя поиска карты глубины из видео (CVPR 2017) ===&lt;br /&gt;
&lt;br /&gt;
Авторы данной статьи &amp;lt;ref name=&amp;quot;cvrp_dnn&amp;quot;&amp;gt;Tinghui Zhou, Matthew Brown, Noah Snavely, David G. Lowe &amp;quot;Unsupervised Learning of Depth and Ego-Motion from Video&amp;quot; [https://arxiv.org/abs/1704.07813v2]&amp;lt;/ref&amp;gt; предлагают методику оценки глубины одной картинки без учителя и движения камеры из беспорядочной видео нарезки. &lt;br /&gt;
&lt;br /&gt;
[[Файл:dnn.png|thumb|400px| Рисунок 5. Aрхитектура сети на базе DispNet  &amp;lt;ref name=&amp;quot;cvrp&amp;quot;&amp;gt;Tinghui Zhou, Matthew Brown, Noah Snavely, David G. Lowe &amp;quot;Unsupervised Learning of Depth and Ego-Motion from Video&amp;quot; Figure 4&amp;lt;/ref&amp;gt;]]&lt;br /&gt;
&lt;br /&gt;
Будем использовать сверточные нейронные сети c глубиной одного вида и многовидовой камерой из неупорядоченного видеоряда. Метод базируется на синтезе видов. Сеть загружает фото объекта в качестве данных ввода и выводит карту глубины на каждый пиксель. Вид объекта может быть синтезирован исходя из глубины на каждый пиксель снимка позиционирования и четкости ближнего вида. Синтез может быть  дифференцирован с CNN по геометрии и модулям позиционирования.&lt;br /&gt;
Авторы взяли на вооружение архитектуру DispNet&amp;lt;ref name=&amp;quot;dispNet&amp;quot;&amp;gt; Nikolaus Mayer, Eddy Ilg, Philip Hausser, Philipp Fischer &amp;quot;A Large Dataset to Train Convolutional Networks&lt;br /&gt;
for Disparity, Optical Flow, and Scene Flow Estimation&amp;quot; [https://arxiv.org/pdf/1512.02134.pdf]&amp;lt;/ref&amp;gt;, которая сконструирована в виде енкодера - декодера с пропущенными соединениями и многомасштабными блоками предсказания. Функция активации ReLU отслеживает все сверточные слои кроме предсказанных.&lt;br /&gt;
Вид объекта со всех источников формирует входные данные в сеть позиционной оценки. На выходе получается относительная позиция между видом объекта и видом каждого источника. Сеть состоит из двух 7 шаговых сверток за которым следует свертка 1 х 1. За исключением последнего слоя свертки, где применяется нелинейная активация, все другие отслеживаются функцией активации ReLU. Сеть объяснимых предсказаний дает доступ к первым пяти закодированным слоям сети позиционирования. За ней следуют 5 слоев обратной свертки с многомасштабными блоками предсказаний. Кроме слоев предсказаний все уровни свертки и обратной свертки отслеживаются ReLU.&lt;br /&gt;
&lt;br /&gt;
=== Неконтролируемая оценка глубины монокуляра с консистенцией слева направо (CVPR 2017) ===&lt;br /&gt;
&lt;br /&gt;
[[Файл:Samplers.png|thumb|240px| Рисунок 6. Примерная архитектура сети с консистенцией слева направо &amp;lt;ref name=&amp;quot;cvrp&amp;quot;&amp;gt;Clément Godard, Oisin Mac Aodha, Gabriel J. Brostow &amp;quot;Unsupervised Monocular Depth Estimation with Left-Right Consistency&amp;quot; Figure 3 &amp;lt;/ref&amp;gt;]]&lt;br /&gt;
&lt;br /&gt;
В данной работе&amp;lt;ref name=&amp;quot;leftrigth&amp;quot;&amp;gt; Clément Godard, Oisin Mac Aodha, Gabriel J. Brostow &amp;quot;Unsupervised Monocular Depth Estimation with Left-Right Consistency&amp;quot; [https://arxiv.org/abs/1609.03677v3]&amp;lt;/ref&amp;gt; предлагается сверточная нейронная сеть, обученная выполнять оценку глубины одного изображения без реальных данных. Авторы предлагают сетевую архитектуру, которая выполняет сквозную оценку глубины изображения, полученного с 1 камеры, без учителя, что обеспечивает согласованность глубины слева направо внутри сети.&lt;br /&gt;
Сеть оценивает глубину, выводя смещения, которые искажают левое изображение, чтобы соответствовать правому. Левое входное изображение используется для вывода смещений слева направо и справа налево. Сеть генерирует предсказанное изображение с обратным отображением с помощью билинейного сэмплера. Это приводит к полностью дифференциальной модели формирования изображения.&lt;br /&gt;
Сверточная архитектура вдохновлена так же DipsNet'ом. Она состоит из двух частей—кодера и декодера. Декодер использует пропуск соединений из блоков активации кодера, чтобы распознавать детали с высоким разрешением. Сеть предсказывает две карты смещений — слева направо и справа налево.&lt;br /&gt;
В процессе обучения сеть генерирует изображение путем выборки пикселей из противоположного стереоизображения. Модель формирования изображения использует сэмплер изображений из пространственной трансформаторной сети (STN) для выборки входного изображения с помощью карты смещений.&lt;br /&gt;
&lt;br /&gt;
=== Прогнозирование глубины без датчиков: использование структуры для обучения без учителя по монокулярным видео (AAAI 2019) ===&lt;br /&gt;
&lt;br /&gt;
[[Файл:ego-motion.png|thumb|500px| Рисунок 7. Сравнение обычного метода построения карты глубин с помощью эго-движения и предложенного в статье, который использует движения для различных 3-D объектов &amp;lt;ref name=&amp;quot;aaaif&amp;quot;&amp;gt;Vincent Casser, Soeren Pirk, Reza Mahjourian, Anelia Angelova &amp;quot;Depth Prediction Without the Sensors: Leveraging Structure for Unsupervised Learning from Monocular Videos&amp;quot; Figure 2 &amp;lt;/ref&amp;gt;]]&lt;br /&gt;
&lt;br /&gt;
Данная статья &amp;lt;ref name=&amp;quot;aaai&amp;quot;&amp;gt; Vincent Casser, Soeren Pirk, Reza Mahjourian, Anelia Angelova &amp;quot;Depth Prediction Without the Sensors: Leveraging Structure for Unsupervised Learning from Monocular Videos&amp;quot; [https://arxiv.org/abs/1811.06152v1]&amp;lt;/ref&amp;gt; посвящена задаче обучения без учителя глубины сцены и эго-движения робота, где наблюдение обеспечивается видеозаписями с одной камеры. Это делается путем введения геометрической структуры в процесс обучения. Он включает в себя моделирование сцены и отдельных объектов, эго-движения камеры и движения объектов, изучаемых с помощью монокулярных видеовходов. Авторы вводят модель движения объекта, которая имеет ту же архитектуру, что и сеть эго-движения. Она принимает последовательность изображений RGB в качестве входных данных и дополняется предварительно вычисленными масками сегментации экземпляров. Работа модели движения заключается в том, чтобы научиться предсказывать векторы трансформации каждого объекта в трехмерном пространстве. Это создает видимость наблюдаемого объекта в соответствующем целевом кадре.&lt;br /&gt;
&lt;br /&gt;
== См. также ==&lt;br /&gt;
&lt;br /&gt;
* [[Компьютерное зрение]]&lt;br /&gt;
&lt;br /&gt;
* [[Оценка положения]]&lt;br /&gt;
&lt;br /&gt;
* [[Задача нахождения объектов на изображении]]&lt;br /&gt;
&lt;br /&gt;
== Примечания ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Источники информации ==&lt;br /&gt;
&lt;br /&gt;
* Чугунов Р. А., Кульневич А. Д., Аксенов С. В. Методика построения карт глубины стереоизображения с помощью капсульной нейронной сети //Доклады Томского государственного университета систем управления и радиоэлектроники. – 2019. – Т. 22. – №. 1.[https://cyberleninka.ru/article/n/metodika-postroeniya-kart-glubiny-stereoizobrazheniya-s-pomoschyu-kapsulnoy-neyronnoy-seti/viewer]&lt;br /&gt;
&lt;br /&gt;
* 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]&lt;br /&gt;
&lt;br /&gt;
*  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]&lt;br /&gt;
&lt;br /&gt;
* 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]&lt;br /&gt;
&lt;br /&gt;
* 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]&lt;br /&gt;
&lt;br /&gt;
[[Категория:Машинное обучение]]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Компьютерное зрение]]&lt;/div&gt;</summary>
		<author><name>Frak</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9A%D0%B0%D1%80%D1%82%D0%B0_%D0%B3%D0%BB%D1%83%D0%B1%D0%B8%D0%BD%D1%8B&amp;diff=79900</id>
		<title>Карта глубины</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9A%D0%B0%D1%80%D1%82%D0%B0_%D0%B3%D0%BB%D1%83%D0%B1%D0%B8%D0%BD%D1%8B&amp;diff=79900"/>
				<updated>2021-01-22T14:08:08Z</updated>
		
		<summary type="html">&lt;p&gt;Frak: /* Неконтролируемая оценка глубины монокуляра с консистенцией слева направо (CVPR 2017) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Карта глубины''' (англ. depth map) — это изображение, где для каждого пикселя вместо цвета хранится его расстояние до камеры.&amp;lt;ref name=&amp;quot;def&amp;quot;&amp;gt;Alexey Kurakin &amp;quot;Основы стереозрения&amp;quot;[https://habr.com/ru/post/130300/]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В компьютерной 3D-графике и [[Компьютерное зрение|компьютерном зрении]] карта глубины представляет собой изображение или канал изображения, содержащий информацию о расстоянии поверхностей объектов сцены от точки обзора. &lt;br /&gt;
&lt;br /&gt;
== Мотивация ==&lt;br /&gt;
&lt;br /&gt;
Карта глубины изображения содержит в себе информацию о расстоянии между различными объектами или частями объектов, представленных на данном изображении. Эта информация может быть полезна во многих областях. &lt;br /&gt;
 &lt;br /&gt;
* Для создания 3D-сенсеров. Они способны строить трёхмерную картину своего окружения, используются для [[Оценка положения|ориентации]] автономного робота в пространстве.&lt;br /&gt;
&lt;br /&gt;
* Для систем, использующих технологии дополненной и виртуальной реальности. Например, камеры, которые фиксируют действия пользователя в видеоиграх с технологией виртуальной реальности.&lt;br /&gt;
&lt;br /&gt;
* В беспилотных автомобилях, которые также используют карты глубин для ориентации на дороге.&lt;br /&gt;
&lt;br /&gt;
* Для обработки фотографий. Например, карты глубин используют для размытия фона на фотографии, чтобы добиться более чёткого выделения человека&amp;lt;ref name=&amp;quot;expls&amp;quot;&amp;gt;Примеры из &amp;quot;Research Guide for Depth Estimation with Deep Learning&amp;quot;[https://www.kdnuggets.com/2019/11/research-guide-depth-estimation-deep-learning.html]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Методы построения карты глубины ==&lt;br /&gt;
&lt;br /&gt;
Карта глубины может быть получена с помощью '''специальной камеры глубины''', по '''стереопаре изображений''', а также с помощью [[Нейронные сети, перцептрон|'''нейронных сетей''']].&lt;br /&gt;
&lt;br /&gt;
== Построение с помощью специальных камер глубин == &lt;br /&gt;
&lt;br /&gt;
[[Файл:ToF.jpg|thumb|250px| Рисунок 1. Пример работы ToF-камеры.]]&lt;br /&gt;
&lt;br /&gt;
* '''ToF-камеры''' (англ. Time of Flight). Принцип работы данной камеры основан на измерении задержки света, с которой свет возвращается в каждую точку. Имея несколько сенсоров с разным временем накопления заряда и, зная сдвиг по времени относительно источника для каждого сенсора и снятой яркости вспышки, мы можем рассчитать сдвиг и, соответственно, расстояние до объекта. Причем чем больше сенсоров задействовано, тем выше точность метода.&lt;br /&gt;
&lt;br /&gt;
* '''Структурированные световые камеры''' (aнгл. Structured light camera). Принцип работы данной камеры один из самых старых. Ставим проектор, который создает, например, горизонтальные (а потом и вертикальные) полоски и рядом камеру, которая снимает картину с полосками. В некоторых вариантах используется псевдослучайный набор точек (например MS Kinect {{---}} бесконтактный сенсорный игровой контроллер, для консолей Xbox 360, Xbox One и персональных компьютеров под управлением ОС Windows&amp;lt;ref name=&amp;quot;kinect&amp;quot;&amp;gt; О MicriSoft Kinect [https://en.wikipedia.org/wiki/Kinect]&amp;lt;/ref&amp;gt;). Проекторы обычно работают в инфракрасном спектре, чтобы не мешать пользователям. Поскольку камера и проектор смещены друг относительно друга, то и полоски также будут смещаться пропорционально расстоянию до объекта. Измеряя это смещение, мы можем рассчитывать расстояние до объекта. Вполне понятны сложности, с которыми можно столкнуться при использовании этого метода: это необходимость настройки и калибровки проектора, и проблема того, что нам нужно относительно благоприятное освещение. К примеру, солнце может засветить полосы, и что-то распознать будет тяжело.&lt;br /&gt;
&lt;br /&gt;
== Построения карты глубины по стереопаре ==&lt;br /&gt;
&lt;br /&gt;
Идея, лежащая в основе построения карты глубины по '''стереопаре''', проста. Для каждой точки на одном изображении выполняется поиск [[Ключевые точки изображения|парной ей точки]]&amp;lt;sup&amp;gt;[на 21.01.21 не создан]&amp;lt;/sup&amp;gt; на другом изображении. А по паре соответствующих точек можно выполнить [[Триангуляция полигонов (ушная + монотонная)|триангуляцию]] и определить координаты их [[Отображения|прообраза]] в трехмерном пространстве. Зная трехмерные координаты прообраза, глубина вычисляется как расстояние до плоскости камеры.&lt;br /&gt;
&lt;br /&gt;
Парную точку нужно искать на эпиполярной&amp;lt;ref name=&amp;quot;Epipolar&amp;quot;&amp;gt;Информация о эпиполярной геометрии[https://ru.qaz.wiki/wiki/Epipolar_geometry]&amp;lt;/ref&amp;gt; линии. Соответственно, для упрощения поиска изображения выравнивают так, чтобы все эпиполярные линии были параллельны сторонам изображения (обычно горизонтальны). Более того, изображения выравнивают так, чтобы для точки с координатами &amp;lt;math&amp;gt;(x_0, y_0)&amp;lt;/math&amp;gt; соответствующая ей эпиполярная линия задавалась уравнением &amp;lt;math&amp;gt;x = x_0&amp;lt;/math&amp;gt;. Тогда для каждой точки, соответствующую ей парную точку, нужно искать в той-же строчке на изображении со второй камеры. Такой процесс выравнивания изображений называют '''ректификацией''' (rectification).&lt;br /&gt;
&lt;br /&gt;
[[Файл:Stereo.png|thumb|300px| Рисунок 2. Результат построения карты смещений по двум картинкам.&amp;lt;ref name=&amp;quot;img2&amp;quot;&amp;gt; &amp;quot;Основы стереозрения&amp;quot; Рис. 3 [https://habr.com/ru/post/130300/]&amp;lt;/ref&amp;gt;]]&lt;br /&gt;
&lt;br /&gt;
После того, как изображения '''ректифицированы''', выполняют поиск соответствующих пар точек. Для каждого пикселя одной картинки с координатами &amp;lt;math&amp;gt;(x_0, y_0)&amp;lt;/math&amp;gt; выполняется поиск пикселя на другой картинке. При этом предполагается, что пиксель на второй картинке должен иметь координаты &amp;lt;math&amp;gt;(x_0 - d, y_0)&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;d&amp;lt;/math&amp;gt; — величина называемая смещением. Поиск соответствующего пикселя выполняется путем вычисления максимума функции отклика, в качестве которой может выступать, например, [[Корреляция случайных величин|корреляция]] окрестностей пикселей. В результате получается карта смещений, пример которой приведен на рис. 2. &lt;br /&gt;
&lt;br /&gt;
Собственно значения глубины обратно пропорциональны величине смещения пикселей.&lt;br /&gt;
&lt;br /&gt;
== Использование нейронных сетей ==&lt;br /&gt;
&lt;br /&gt;
Существует множество методов, использующих нейронные сети. Приведём пару примеров таких решений.&lt;br /&gt;
&lt;br /&gt;
=== Построение с помощью свёрточных нейронных сетей ===&lt;br /&gt;
&lt;br /&gt;
Используем [[Сверточные нейронные сети|сверточные нейронные сети]] для построения карты глубины следующим образом&lt;br /&gt;
&amp;lt;ref name=&amp;quot;cnn_rew&amp;quot;&amp;gt; Xiaobai Ma, Zhenglin Geng, Zhi Bie &amp;quot;Depth Estimation from Single Image Using CNN-Residual Network&amp;quot; [http://cs231n.stanford.edu/reports/2017/pdfs/203.pdf]&amp;lt;/ref&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
*  '''Создаем карту смещений''': используя два изображения с камер, близко расположенных друг к другу, создаем карту различий, точно так же как в методе построения по стереопаре.&lt;br /&gt;
&lt;br /&gt;
* '''Ищем реальную карту глубины для обучения''': с помощью карты смещений, можем построить карту глубины &amp;lt;math&amp;gt;y&amp;lt;/math&amp;gt; вышеописанным способом. Также допустимы другие способы построения карты глубины для обучения нейронной сети.&lt;br /&gt;
&lt;br /&gt;
*  '''Функция потерь''': определим [[Функция потерь и эмпирический риск|функцию потерь]], для предсказанной карты &amp;lt;math&amp;gt;\hat y&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;d_i = log( y_i) - log (\hat y_i)&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;\lambda \in [0, 1]&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;n &amp;lt;/math&amp;gt; — количество пикселей. &amp;lt;math&amp;gt;L(y, \hat y) =  \frac{1}{n} \sum\limits_{i} d^2_i - \frac{\lambda}{n^2}(\sum\limits_{i} d_i)^2&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;y_i&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;\hat y_i&amp;lt;/math&amp;gt; это i пискель для для реальной карты глубин и для предсказанной карты, соответственно. Гиперпараметр &amp;lt;math&amp;gt;\lambda&amp;lt;/math&amp;gt;, нужен для того, чтобы функция потерь меньше росла при большом количестве пикселей, предсказание для которых достаточно близко к реальному. Например, если &amp;lt;math&amp;gt;\lambda = 0&amp;lt;/math&amp;gt;, то мы просто придём к оптимизации в L2 для &amp;lt;math&amp;gt;d_i&amp;lt;/math&amp;gt;, т.е. &amp;lt;math&amp;gt;L(y, \hat y) =  \frac{1}{n} \sum\limits_{i} d^2_i &amp;lt;/math&amp;gt;.&amp;lt;ref name=&amp;quot;loss&amp;quot;&amp;gt;David Eigen, Christian Puhrsch, Rob Fergus &amp;quot;Depth Map Prediction from a Single Imageusing a Multi-Scale Deep Network&amp;quot; стр. 5&amp;lt;/ref&amp;gt; &lt;br /&gt;
&lt;br /&gt;
* '''Обучение свёрточной нейронной сети''': далее идёт обычное обучение нейронной сети по карте различий путем обратного распространения ошибки, оптимизируя заданную выше функцию потерь.&lt;br /&gt;
&lt;br /&gt;
В итоге, по обученной нейронной сети мы можем создавать карту глубины, не проводя расчётов для поиска карт смещения и имея только изображение объекта или пространства. &amp;lt;ref name=&amp;quot;cnn&amp;quot;&amp;gt;Реализация, основанная на свёрточных нейронных сетях [https://www.kaggle.com/kmader/cnn-for-generating-depth-maps-from-rgb-images]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Также возможно использование усложнённых архитектур свёрточных нейронных сетей типа '''DenseNet'''.&lt;br /&gt;
&lt;br /&gt;
'''DenseNet'''&amp;lt;ref name=&amp;quot;DenseNet&amp;quot;&amp;gt;Оригинальная статья описывающая DenseNet [https://arxiv.org/abs/1611.09326]&amp;lt;/ref&amp;gt; {{---}} это свёрточная нейронные сеть, в которой выход каждого из слоев подаётся на вход всем слоям, лежащих ниже.&lt;br /&gt;
&lt;br /&gt;
=== Построение с помощью капсульных нейронных сетей ===&lt;br /&gt;
&lt;br /&gt;
Свёрточные нейронные сети способны регистрировать только наличие какого-либо объекта на картинке, не кодируя его ориентацию и положение. Но '''капсульные нейронные сети''' (англ. Capsule Neural Network)&amp;lt;ref name=&amp;quot;CapsNet&amp;quot;&amp;gt;Sara Sabour, Nicholas Frosst, Geoffrey E. Hinton &amp;quot;Dynamic Routing Between Capsules&amp;quot; [https://arxiv.org/pdf/1710.09829.pdf]&amp;lt;/ref&amp;gt; лишены этого недостатка.&lt;br /&gt;
&lt;br /&gt;
[[Файл:capsnet.jpg|thumb|400px| Рисунок 3. Структура капсульной нейронной сети &amp;lt;ref name=&amp;quot;img&amp;quot;&amp;gt; &amp;quot;Design and Investigation of Capsule Networks for Sentence Classification&amp;quot; Figure 2. [https://www.mdpi.com/2076-3417/9/11/2200/htm]&amp;lt;/ref&amp;gt;.]]&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Капсульная нейронная сеть&amp;quot; состоит из капсул или групп нейронов, чтобы идентифицировать закономерности в изображении. Эта информация поступает в виде векторов, содержащих ориентацию и положение узоров на изображении, которое затем принимается капсулами более высокого уровня. Капсулы более высокого уровня обрабатывают эту информацию из нескольких капсул более низкого уровня и впоследствии выдают прогноз. Капсулы одного уровня не имеют связей друг с другом и вычисляют информацию независимо друг от друга. Капсулы образуются путем разделения выходных данных из свёрточного слоя. Мы делим наш трехмерный вектор на капсулы методом &amp;quot;нарезания&amp;quot; таким образом, чтобы в каждой капсуле была информация о каждом пикселе, т.е. по трехмерной координате.&lt;br /&gt;
 &lt;br /&gt;
Состояние нейронов капсульной нейронной сети внутри изображения фиксирует свойство области или объекта внутри изображения: его положение и ориентацию.&lt;br /&gt;
&lt;br /&gt;
Использование капсульной нейронной сети аналогично использованию обычных свёрточных сетей, описанному выше. &lt;br /&gt;
В целом, данная сеть показывает более точные результаты предсказания глубины.&lt;br /&gt;
&lt;br /&gt;
=== Построение с помощью PlanetNet ===&lt;br /&gt;
&lt;br /&gt;
Так же есть архитектуры, решающие данную задачу и без обучения на карте смещений, построенной с помощью двух изображений. Одной из таких является '''PlaneNet'''. &lt;br /&gt;
&lt;br /&gt;
'''PlaneNet'''&amp;lt;ref name=&amp;quot;planetNet&amp;quot;&amp;gt; Chen Liu, Jimei Yang, Duygu Ceylan, Ersin Yumer, Yasutaka Furukawa &amp;quot;PlaneNet: Piece-wise Planar Reconstruction from a Single RGB Image&amp;quot; [https://arxiv.org/abs/1804.06278v1]&amp;lt;/ref&amp;gt; {{---}} глубокая нейронная сеть, построенная на расширенных остаточных сетях (aнгл. Dilated Residual Networks или DRN)&amp;lt;ref name=&amp;quot;drn&amp;quot;&amp;gt; Fisher Yu, Vladlen Koltun, Thomas Funkhouser &amp;quot;Dilated Residual Networks&amp;quot; [https://arxiv.org/abs/1705.09914]&amp;lt;/ref&amp;gt;. Она получает карту глубин путем композиции выходов трех подзадач:&lt;br /&gt;
&lt;br /&gt;
[[Файл:plane_net.png|thumb|500px| Рисунок 4. Прогнозируемые PlaneNet параметры по одной rgb картинке: cегметация плоскости, параметры плоскостей, неплоская карта глубины&amp;lt;ref name=&amp;quot;img4&amp;quot;&amp;gt; Chen Liu, Jimei Yang, Duygu Ceylan, Ersin Yumer, Yasutaka Furukawa &amp;quot;PlaneNet: Piece-wise Planar Reconstruction from a Single RGB Image&amp;quot; Figure 2.&amp;lt;/ref&amp;gt;.]]&lt;br /&gt;
&lt;br /&gt;
* '''Параметры плоскостей''': пытаемся предсказать количество плоскостей K, а после ищем на изображение K плоских поверхностей, каждая поверхность задаётся тремя параметрами: нормальная, прямая и сдвиг.&lt;br /&gt;
&lt;br /&gt;
* [[Сегментация изображений|'''Сегментация плоскости''']]: ищем группы пикселей, каждая из которых характеризует один смысловой объект.&lt;br /&gt;
&lt;br /&gt;
* '''Неплоская карта глубины''': ищем одно-канальную (или неплоскую) карту глубины, то есть карту глубины, где каждый пиксель, либо на глубине 0, либо на глубине 1.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Обучение без учителя поиска карты глубины из видео (CVPR 2017) ===&lt;br /&gt;
&lt;br /&gt;
Авторы данной статьи &amp;lt;ref name=&amp;quot;cvrp_dnn&amp;quot;&amp;gt;Tinghui Zhou, Matthew Brown, Noah Snavely, David G. Lowe &amp;quot;Unsupervised Learning of Depth and Ego-Motion from Video&amp;quot; [https://arxiv.org/abs/1704.07813v2]&amp;lt;/ref&amp;gt; предлагают методику оценки глубины одной картинки без учителя и движения камеры из беспорядочной видео нарезки. &lt;br /&gt;
&lt;br /&gt;
[[Файл:dnn.png|thumb|400px| Рисунок 5. Aрхитектура сети на базе DispNet  &amp;lt;ref name=&amp;quot;cvrp&amp;quot;&amp;gt;Tinghui Zhou, Matthew Brown, Noah Snavely, David G. Lowe &amp;quot;Unsupervised Learning of Depth and Ego-Motion from Video&amp;quot; Figure 4&amp;lt;/ref&amp;gt;]]&lt;br /&gt;
&lt;br /&gt;
Будем использовать сверточные нейронные сети c глубиной одного вида и многовидовой камерой из неупорядоченного видеоряда. Метод базируется на синтезе видов. Сеть загружает фото объекта в качестве данных ввода и выводит карту глубины на каждый пиксель. Вид объекта может быть синтезирован исходя из глубины на каждый пиксель снимка позиционирования и четкости ближнего вида. Синтез может быть  дифференцирован с CNN по геометрии и модулям позиционирования.&lt;br /&gt;
Авторы взяли на вооружение архитектуру DispNet&amp;lt;ref name=&amp;quot;dispNet&amp;quot;&amp;gt; Nikolaus Mayer, Eddy Ilg, Philip Hausser, Philipp Fischer &amp;quot;A Large Dataset to Train Convolutional Networks&lt;br /&gt;
for Disparity, Optical Flow, and Scene Flow Estimation&amp;quot; [https://arxiv.org/pdf/1512.02134.pdf]&amp;lt;/ref&amp;gt;, которая сконструирована в виде енкодера - декодера с пропущенными соединениями и многомасштабными блоками предсказания. Функция активации ReLU отслеживает все сверточные слои кроме предсказанных.&lt;br /&gt;
Вид объекта со всех источников формирует входные данные в сеть позиционной оценки. На выходе получается относительная позиция между видом объекта и видом каждого источника. Сеть состоит из двух 7 шаговых сверток за которым следует свертка 1 х 1. За исключением последнего слоя свертки, где применяется нелинейная активация, все другие отслеживаются функцией активации ReLU. Сеть объяснимых предсказаний дает доступ к первым пяти закодированным слоям сети позиционирования. За ней следуют 5 слоев обратной свертки с многомасштабными блоками предсказаний. Кроме слоев предсказаний все уровни свертки и обратной свертки отслеживаются ReLU.&lt;br /&gt;
&lt;br /&gt;
=== Неконтролируемая оценка глубины монокуляра с консистенцией слева направо (CVPR 2017) ===&lt;br /&gt;
&lt;br /&gt;
[[Файл:Samplers.png|thumb|200px| Рисунок 6. Примерная архитектура сети с консистенцией слева направо &amp;lt;ref name=&amp;quot;cvrp&amp;quot;&amp;gt;Clément Godard, Oisin Mac Aodha, Gabriel J. Brostow &amp;quot;Unsupervised Monocular Depth Estimation with Left-Right Consistency&amp;quot; Figure 3 &amp;lt;/ref&amp;gt;]]&lt;br /&gt;
&lt;br /&gt;
В данной работе&amp;lt;ref name=&amp;quot;leftrigth&amp;quot;&amp;gt; Clément Godard, Oisin Mac Aodha, Gabriel J. Brostow &amp;quot;Unsupervised Monocular Depth Estimation with Left-Right Consistency&amp;quot; [https://arxiv.org/abs/1609.03677v3]&amp;lt;/ref&amp;gt; предлагается сверточная нейронная сеть, обученная выполнять оценку глубины одного изображения без реальных данных. Авторы предлагают сетевую архитектуру, которая выполняет сквозную оценку глубины изображения, полученного с 1 камеры, без учителя, что обеспечивает согласованность глубины слева направо внутри сети.&lt;br /&gt;
Сеть оценивает глубину, выводя смещения, которые искажают левое изображение, чтобы соответствовать правому. Левое входное изображение используется для вывода смещений слева направо и справа налево. Сеть генерирует предсказанное изображение с обратным отображением с помощью билинейного сэмплера. Это приводит к полностью дифференциальной модели формирования изображения.&lt;br /&gt;
Сверточная архитектура вдохновлена так же DipsNet'ом. Она состоит из двух частей—кодера и декодера. Декодер использует пропуск соединений из блоков активации кодера, чтобы распознавать детали с высоким разрешением. Сеть предсказывает две карты смещений — слева направо и справа налево.&lt;br /&gt;
В процессе обучения сеть генерирует изображение путем выборки пикселей из противоположного стереоизображения. Модель формирования изображения использует сэмплер изображений из пространственной трансформаторной сети (STN) для выборки входного изображения с помощью карты смещений.&lt;br /&gt;
&lt;br /&gt;
=== Прогнозирование глубины без датчиков: использование структуры для обучения без учителя по монокулярным видео (AAAI 2019) ===&lt;br /&gt;
&lt;br /&gt;
[[Файл:ego-motion.png|thumb|500px| Рисунок 7. Сравнение обычного метода построения карты глубин с помощью эго-движения и предложенного в статье, который использует движения для различных 3-D объектов &amp;lt;ref name=&amp;quot;aaaif&amp;quot;&amp;gt;Vincent Casser, Soeren Pirk, Reza Mahjourian, Anelia Angelova &amp;quot;Depth Prediction Without the Sensors: Leveraging Structure for Unsupervised Learning from Monocular Videos&amp;quot; Figure 2 &amp;lt;/ref&amp;gt;]]&lt;br /&gt;
&lt;br /&gt;
Данная статья &amp;lt;ref name=&amp;quot;aaai&amp;quot;&amp;gt; Vincent Casser, Soeren Pirk, Reza Mahjourian, Anelia Angelova &amp;quot;Depth Prediction Without the Sensors: Leveraging Structure for Unsupervised Learning from Monocular Videos&amp;quot; [https://arxiv.org/abs/1811.06152v1]&amp;lt;/ref&amp;gt; посвящена задаче обучения без учителя глубины сцены и эго-движения робота, где наблюдение обеспечивается видеозаписями с одной камеры. Это делается путем введения геометрической структуры в процесс обучения. Он включает в себя моделирование сцены и отдельных объектов, эго-движения камеры и движения объектов, изучаемых с помощью монокулярных видеовходов. Авторы вводят модель движения объекта, которая имеет ту же архитектуру, что и сеть эго-движения. Она принимает последовательность изображений RGB в качестве входных данных и дополняется предварительно вычисленными масками сегментации экземпляров. Работа модели движения заключается в том, чтобы научиться предсказывать векторы трансформации каждого объекта в трехмерном пространстве. Это создает видимость наблюдаемого объекта в соответствующем целевом кадре.&lt;br /&gt;
&lt;br /&gt;
== См. также ==&lt;br /&gt;
&lt;br /&gt;
* [[Компьютерное зрение]]&lt;br /&gt;
&lt;br /&gt;
* [[Оценка положения]]&lt;br /&gt;
&lt;br /&gt;
* [[Задача нахождения объектов на изображении]]&lt;br /&gt;
&lt;br /&gt;
== Примечания ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Источники информации ==&lt;br /&gt;
&lt;br /&gt;
* Чугунов Р. А., Кульневич А. Д., Аксенов С. В. Методика построения карт глубины стереоизображения с помощью капсульной нейронной сети //Доклады Томского государственного университета систем управления и радиоэлектроники. – 2019. – Т. 22. – №. 1.[https://cyberleninka.ru/article/n/metodika-postroeniya-kart-glubiny-stereoizobrazheniya-s-pomoschyu-kapsulnoy-neyronnoy-seti/viewer]&lt;br /&gt;
&lt;br /&gt;
* 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]&lt;br /&gt;
&lt;br /&gt;
*  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]&lt;br /&gt;
&lt;br /&gt;
* 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]&lt;br /&gt;
&lt;br /&gt;
* 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]&lt;br /&gt;
&lt;br /&gt;
[[Категория:Машинное обучение]]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Компьютерное зрение]]&lt;/div&gt;</summary>
		<author><name>Frak</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9A%D0%B0%D1%80%D1%82%D0%B0_%D0%B3%D0%BB%D1%83%D0%B1%D0%B8%D0%BD%D1%8B&amp;diff=79899</id>
		<title>Карта глубины</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9A%D0%B0%D1%80%D1%82%D0%B0_%D0%B3%D0%BB%D1%83%D0%B1%D0%B8%D0%BD%D1%8B&amp;diff=79899"/>
				<updated>2021-01-22T14:07:29Z</updated>
		
		<summary type="html">&lt;p&gt;Frak: /* Неконтролируемая оценка глубины монокуляра с консистенцией слева направо (CVPR 2017) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Карта глубины''' (англ. depth map) — это изображение, где для каждого пикселя вместо цвета хранится его расстояние до камеры.&amp;lt;ref name=&amp;quot;def&amp;quot;&amp;gt;Alexey Kurakin &amp;quot;Основы стереозрения&amp;quot;[https://habr.com/ru/post/130300/]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В компьютерной 3D-графике и [[Компьютерное зрение|компьютерном зрении]] карта глубины представляет собой изображение или канал изображения, содержащий информацию о расстоянии поверхностей объектов сцены от точки обзора. &lt;br /&gt;
&lt;br /&gt;
== Мотивация ==&lt;br /&gt;
&lt;br /&gt;
Карта глубины изображения содержит в себе информацию о расстоянии между различными объектами или частями объектов, представленных на данном изображении. Эта информация может быть полезна во многих областях. &lt;br /&gt;
 &lt;br /&gt;
* Для создания 3D-сенсеров. Они способны строить трёхмерную картину своего окружения, используются для [[Оценка положения|ориентации]] автономного робота в пространстве.&lt;br /&gt;
&lt;br /&gt;
* Для систем, использующих технологии дополненной и виртуальной реальности. Например, камеры, которые фиксируют действия пользователя в видеоиграх с технологией виртуальной реальности.&lt;br /&gt;
&lt;br /&gt;
* В беспилотных автомобилях, которые также используют карты глубин для ориентации на дороге.&lt;br /&gt;
&lt;br /&gt;
* Для обработки фотографий. Например, карты глубин используют для размытия фона на фотографии, чтобы добиться более чёткого выделения человека&amp;lt;ref name=&amp;quot;expls&amp;quot;&amp;gt;Примеры из &amp;quot;Research Guide for Depth Estimation with Deep Learning&amp;quot;[https://www.kdnuggets.com/2019/11/research-guide-depth-estimation-deep-learning.html]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Методы построения карты глубины ==&lt;br /&gt;
&lt;br /&gt;
Карта глубины может быть получена с помощью '''специальной камеры глубины''', по '''стереопаре изображений''', а также с помощью [[Нейронные сети, перцептрон|'''нейронных сетей''']].&lt;br /&gt;
&lt;br /&gt;
== Построение с помощью специальных камер глубин == &lt;br /&gt;
&lt;br /&gt;
[[Файл:ToF.jpg|thumb|250px| Рисунок 1. Пример работы ToF-камеры.]]&lt;br /&gt;
&lt;br /&gt;
* '''ToF-камеры''' (англ. Time of Flight). Принцип работы данной камеры основан на измерении задержки света, с которой свет возвращается в каждую точку. Имея несколько сенсоров с разным временем накопления заряда и, зная сдвиг по времени относительно источника для каждого сенсора и снятой яркости вспышки, мы можем рассчитать сдвиг и, соответственно, расстояние до объекта. Причем чем больше сенсоров задействовано, тем выше точность метода.&lt;br /&gt;
&lt;br /&gt;
* '''Структурированные световые камеры''' (aнгл. Structured light camera). Принцип работы данной камеры один из самых старых. Ставим проектор, который создает, например, горизонтальные (а потом и вертикальные) полоски и рядом камеру, которая снимает картину с полосками. В некоторых вариантах используется псевдослучайный набор точек (например MS Kinect {{---}} бесконтактный сенсорный игровой контроллер, для консолей Xbox 360, Xbox One и персональных компьютеров под управлением ОС Windows&amp;lt;ref name=&amp;quot;kinect&amp;quot;&amp;gt; О MicriSoft Kinect [https://en.wikipedia.org/wiki/Kinect]&amp;lt;/ref&amp;gt;). Проекторы обычно работают в инфракрасном спектре, чтобы не мешать пользователям. Поскольку камера и проектор смещены друг относительно друга, то и полоски также будут смещаться пропорционально расстоянию до объекта. Измеряя это смещение, мы можем рассчитывать расстояние до объекта. Вполне понятны сложности, с которыми можно столкнуться при использовании этого метода: это необходимость настройки и калибровки проектора, и проблема того, что нам нужно относительно благоприятное освещение. К примеру, солнце может засветить полосы, и что-то распознать будет тяжело.&lt;br /&gt;
&lt;br /&gt;
== Построения карты глубины по стереопаре ==&lt;br /&gt;
&lt;br /&gt;
Идея, лежащая в основе построения карты глубины по '''стереопаре''', проста. Для каждой точки на одном изображении выполняется поиск [[Ключевые точки изображения|парной ей точки]]&amp;lt;sup&amp;gt;[на 21.01.21 не создан]&amp;lt;/sup&amp;gt; на другом изображении. А по паре соответствующих точек можно выполнить [[Триангуляция полигонов (ушная + монотонная)|триангуляцию]] и определить координаты их [[Отображения|прообраза]] в трехмерном пространстве. Зная трехмерные координаты прообраза, глубина вычисляется как расстояние до плоскости камеры.&lt;br /&gt;
&lt;br /&gt;
Парную точку нужно искать на эпиполярной&amp;lt;ref name=&amp;quot;Epipolar&amp;quot;&amp;gt;Информация о эпиполярной геометрии[https://ru.qaz.wiki/wiki/Epipolar_geometry]&amp;lt;/ref&amp;gt; линии. Соответственно, для упрощения поиска изображения выравнивают так, чтобы все эпиполярные линии были параллельны сторонам изображения (обычно горизонтальны). Более того, изображения выравнивают так, чтобы для точки с координатами &amp;lt;math&amp;gt;(x_0, y_0)&amp;lt;/math&amp;gt; соответствующая ей эпиполярная линия задавалась уравнением &amp;lt;math&amp;gt;x = x_0&amp;lt;/math&amp;gt;. Тогда для каждой точки, соответствующую ей парную точку, нужно искать в той-же строчке на изображении со второй камеры. Такой процесс выравнивания изображений называют '''ректификацией''' (rectification).&lt;br /&gt;
&lt;br /&gt;
[[Файл:Stereo.png|thumb|300px| Рисунок 2. Результат построения карты смещений по двум картинкам.&amp;lt;ref name=&amp;quot;img2&amp;quot;&amp;gt; &amp;quot;Основы стереозрения&amp;quot; Рис. 3 [https://habr.com/ru/post/130300/]&amp;lt;/ref&amp;gt;]]&lt;br /&gt;
&lt;br /&gt;
После того, как изображения '''ректифицированы''', выполняют поиск соответствующих пар точек. Для каждого пикселя одной картинки с координатами &amp;lt;math&amp;gt;(x_0, y_0)&amp;lt;/math&amp;gt; выполняется поиск пикселя на другой картинке. При этом предполагается, что пиксель на второй картинке должен иметь координаты &amp;lt;math&amp;gt;(x_0 - d, y_0)&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;d&amp;lt;/math&amp;gt; — величина называемая смещением. Поиск соответствующего пикселя выполняется путем вычисления максимума функции отклика, в качестве которой может выступать, например, [[Корреляция случайных величин|корреляция]] окрестностей пикселей. В результате получается карта смещений, пример которой приведен на рис. 2. &lt;br /&gt;
&lt;br /&gt;
Собственно значения глубины обратно пропорциональны величине смещения пикселей.&lt;br /&gt;
&lt;br /&gt;
== Использование нейронных сетей ==&lt;br /&gt;
&lt;br /&gt;
Существует множество методов, использующих нейронные сети. Приведём пару примеров таких решений.&lt;br /&gt;
&lt;br /&gt;
=== Построение с помощью свёрточных нейронных сетей ===&lt;br /&gt;
&lt;br /&gt;
Используем [[Сверточные нейронные сети|сверточные нейронные сети]] для построения карты глубины следующим образом&lt;br /&gt;
&amp;lt;ref name=&amp;quot;cnn_rew&amp;quot;&amp;gt; Xiaobai Ma, Zhenglin Geng, Zhi Bie &amp;quot;Depth Estimation from Single Image Using CNN-Residual Network&amp;quot; [http://cs231n.stanford.edu/reports/2017/pdfs/203.pdf]&amp;lt;/ref&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
*  '''Создаем карту смещений''': используя два изображения с камер, близко расположенных друг к другу, создаем карту различий, точно так же как в методе построения по стереопаре.&lt;br /&gt;
&lt;br /&gt;
* '''Ищем реальную карту глубины для обучения''': с помощью карты смещений, можем построить карту глубины &amp;lt;math&amp;gt;y&amp;lt;/math&amp;gt; вышеописанным способом. Также допустимы другие способы построения карты глубины для обучения нейронной сети.&lt;br /&gt;
&lt;br /&gt;
*  '''Функция потерь''': определим [[Функция потерь и эмпирический риск|функцию потерь]], для предсказанной карты &amp;lt;math&amp;gt;\hat y&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;d_i = log( y_i) - log (\hat y_i)&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;\lambda \in [0, 1]&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;n &amp;lt;/math&amp;gt; — количество пикселей. &amp;lt;math&amp;gt;L(y, \hat y) =  \frac{1}{n} \sum\limits_{i} d^2_i - \frac{\lambda}{n^2}(\sum\limits_{i} d_i)^2&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;y_i&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;\hat y_i&amp;lt;/math&amp;gt; это i пискель для для реальной карты глубин и для предсказанной карты, соответственно. Гиперпараметр &amp;lt;math&amp;gt;\lambda&amp;lt;/math&amp;gt;, нужен для того, чтобы функция потерь меньше росла при большом количестве пикселей, предсказание для которых достаточно близко к реальному. Например, если &amp;lt;math&amp;gt;\lambda = 0&amp;lt;/math&amp;gt;, то мы просто придём к оптимизации в L2 для &amp;lt;math&amp;gt;d_i&amp;lt;/math&amp;gt;, т.е. &amp;lt;math&amp;gt;L(y, \hat y) =  \frac{1}{n} \sum\limits_{i} d^2_i &amp;lt;/math&amp;gt;.&amp;lt;ref name=&amp;quot;loss&amp;quot;&amp;gt;David Eigen, Christian Puhrsch, Rob Fergus &amp;quot;Depth Map Prediction from a Single Imageusing a Multi-Scale Deep Network&amp;quot; стр. 5&amp;lt;/ref&amp;gt; &lt;br /&gt;
&lt;br /&gt;
* '''Обучение свёрточной нейронной сети''': далее идёт обычное обучение нейронной сети по карте различий путем обратного распространения ошибки, оптимизируя заданную выше функцию потерь.&lt;br /&gt;
&lt;br /&gt;
В итоге, по обученной нейронной сети мы можем создавать карту глубины, не проводя расчётов для поиска карт смещения и имея только изображение объекта или пространства. &amp;lt;ref name=&amp;quot;cnn&amp;quot;&amp;gt;Реализация, основанная на свёрточных нейронных сетях [https://www.kaggle.com/kmader/cnn-for-generating-depth-maps-from-rgb-images]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Также возможно использование усложнённых архитектур свёрточных нейронных сетей типа '''DenseNet'''.&lt;br /&gt;
&lt;br /&gt;
'''DenseNet'''&amp;lt;ref name=&amp;quot;DenseNet&amp;quot;&amp;gt;Оригинальная статья описывающая DenseNet [https://arxiv.org/abs/1611.09326]&amp;lt;/ref&amp;gt; {{---}} это свёрточная нейронные сеть, в которой выход каждого из слоев подаётся на вход всем слоям, лежащих ниже.&lt;br /&gt;
&lt;br /&gt;
=== Построение с помощью капсульных нейронных сетей ===&lt;br /&gt;
&lt;br /&gt;
Свёрточные нейронные сети способны регистрировать только наличие какого-либо объекта на картинке, не кодируя его ориентацию и положение. Но '''капсульные нейронные сети''' (англ. Capsule Neural Network)&amp;lt;ref name=&amp;quot;CapsNet&amp;quot;&amp;gt;Sara Sabour, Nicholas Frosst, Geoffrey E. Hinton &amp;quot;Dynamic Routing Between Capsules&amp;quot; [https://arxiv.org/pdf/1710.09829.pdf]&amp;lt;/ref&amp;gt; лишены этого недостатка.&lt;br /&gt;
&lt;br /&gt;
[[Файл:capsnet.jpg|thumb|400px| Рисунок 3. Структура капсульной нейронной сети &amp;lt;ref name=&amp;quot;img&amp;quot;&amp;gt; &amp;quot;Design and Investigation of Capsule Networks for Sentence Classification&amp;quot; Figure 2. [https://www.mdpi.com/2076-3417/9/11/2200/htm]&amp;lt;/ref&amp;gt;.]]&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Капсульная нейронная сеть&amp;quot; состоит из капсул или групп нейронов, чтобы идентифицировать закономерности в изображении. Эта информация поступает в виде векторов, содержащих ориентацию и положение узоров на изображении, которое затем принимается капсулами более высокого уровня. Капсулы более высокого уровня обрабатывают эту информацию из нескольких капсул более низкого уровня и впоследствии выдают прогноз. Капсулы одного уровня не имеют связей друг с другом и вычисляют информацию независимо друг от друга. Капсулы образуются путем разделения выходных данных из свёрточного слоя. Мы делим наш трехмерный вектор на капсулы методом &amp;quot;нарезания&amp;quot; таким образом, чтобы в каждой капсуле была информация о каждом пикселе, т.е. по трехмерной координате.&lt;br /&gt;
 &lt;br /&gt;
Состояние нейронов капсульной нейронной сети внутри изображения фиксирует свойство области или объекта внутри изображения: его положение и ориентацию.&lt;br /&gt;
&lt;br /&gt;
Использование капсульной нейронной сети аналогично использованию обычных свёрточных сетей, описанному выше. &lt;br /&gt;
В целом, данная сеть показывает более точные результаты предсказания глубины.&lt;br /&gt;
&lt;br /&gt;
=== Построение с помощью PlanetNet ===&lt;br /&gt;
&lt;br /&gt;
Так же есть архитектуры, решающие данную задачу и без обучения на карте смещений, построенной с помощью двух изображений. Одной из таких является '''PlaneNet'''. &lt;br /&gt;
&lt;br /&gt;
'''PlaneNet'''&amp;lt;ref name=&amp;quot;planetNet&amp;quot;&amp;gt; Chen Liu, Jimei Yang, Duygu Ceylan, Ersin Yumer, Yasutaka Furukawa &amp;quot;PlaneNet: Piece-wise Planar Reconstruction from a Single RGB Image&amp;quot; [https://arxiv.org/abs/1804.06278v1]&amp;lt;/ref&amp;gt; {{---}} глубокая нейронная сеть, построенная на расширенных остаточных сетях (aнгл. Dilated Residual Networks или DRN)&amp;lt;ref name=&amp;quot;drn&amp;quot;&amp;gt; Fisher Yu, Vladlen Koltun, Thomas Funkhouser &amp;quot;Dilated Residual Networks&amp;quot; [https://arxiv.org/abs/1705.09914]&amp;lt;/ref&amp;gt;. Она получает карту глубин путем композиции выходов трех подзадач:&lt;br /&gt;
&lt;br /&gt;
[[Файл:plane_net.png|thumb|500px| Рисунок 4. Прогнозируемые PlaneNet параметры по одной rgb картинке: cегметация плоскости, параметры плоскостей, неплоская карта глубины&amp;lt;ref name=&amp;quot;img4&amp;quot;&amp;gt; Chen Liu, Jimei Yang, Duygu Ceylan, Ersin Yumer, Yasutaka Furukawa &amp;quot;PlaneNet: Piece-wise Planar Reconstruction from a Single RGB Image&amp;quot; Figure 2.&amp;lt;/ref&amp;gt;.]]&lt;br /&gt;
&lt;br /&gt;
* '''Параметры плоскостей''': пытаемся предсказать количество плоскостей K, а после ищем на изображение K плоских поверхностей, каждая поверхность задаётся тремя параметрами: нормальная, прямая и сдвиг.&lt;br /&gt;
&lt;br /&gt;
* [[Сегментация изображений|'''Сегментация плоскости''']]: ищем группы пикселей, каждая из которых характеризует один смысловой объект.&lt;br /&gt;
&lt;br /&gt;
* '''Неплоская карта глубины''': ищем одно-канальную (или неплоскую) карту глубины, то есть карту глубины, где каждый пиксель, либо на глубине 0, либо на глубине 1.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Обучение без учителя поиска карты глубины из видео (CVPR 2017) ===&lt;br /&gt;
&lt;br /&gt;
Авторы данной статьи &amp;lt;ref name=&amp;quot;cvrp_dnn&amp;quot;&amp;gt;Tinghui Zhou, Matthew Brown, Noah Snavely, David G. Lowe &amp;quot;Unsupervised Learning of Depth and Ego-Motion from Video&amp;quot; [https://arxiv.org/abs/1704.07813v2]&amp;lt;/ref&amp;gt; предлагают методику оценки глубины одной картинки без учителя и движения камеры из беспорядочной видео нарезки. &lt;br /&gt;
&lt;br /&gt;
[[Файл:dnn.png|thumb|400px| Рисунок 5. Aрхитектура сети на базе DispNet  &amp;lt;ref name=&amp;quot;cvrp&amp;quot;&amp;gt;Tinghui Zhou, Matthew Brown, Noah Snavely, David G. Lowe &amp;quot;Unsupervised Learning of Depth and Ego-Motion from Video&amp;quot; Figure 4&amp;lt;/ref&amp;gt;]]&lt;br /&gt;
&lt;br /&gt;
Будем использовать сверточные нейронные сети c глубиной одного вида и многовидовой камерой из неупорядоченного видеоряда. Метод базируется на синтезе видов. Сеть загружает фото объекта в качестве данных ввода и выводит карту глубины на каждый пиксель. Вид объекта может быть синтезирован исходя из глубины на каждый пиксель снимка позиционирования и четкости ближнего вида. Синтез может быть  дифференцирован с CNN по геометрии и модулям позиционирования.&lt;br /&gt;
Авторы взяли на вооружение архитектуру DispNet&amp;lt;ref name=&amp;quot;dispNet&amp;quot;&amp;gt; Nikolaus Mayer, Eddy Ilg, Philip Hausser, Philipp Fischer &amp;quot;A Large Dataset to Train Convolutional Networks&lt;br /&gt;
for Disparity, Optical Flow, and Scene Flow Estimation&amp;quot; [https://arxiv.org/pdf/1512.02134.pdf]&amp;lt;/ref&amp;gt;, которая сконструирована в виде енкодера - декодера с пропущенными соединениями и многомасштабными блоками предсказания. Функция активации ReLU отслеживает все сверточные слои кроме предсказанных.&lt;br /&gt;
Вид объекта со всех источников формирует входные данные в сеть позиционной оценки. На выходе получается относительная позиция между видом объекта и видом каждого источника. Сеть состоит из двух 7 шаговых сверток за которым следует свертка 1 х 1. За исключением последнего слоя свертки, где применяется нелинейная активация, все другие отслеживаются функцией активации ReLU. Сеть объяснимых предсказаний дает доступ к первым пяти закодированным слоям сети позиционирования. За ней следуют 5 слоев обратной свертки с многомасштабными блоками предсказаний. Кроме слоев предсказаний все уровни свертки и обратной свертки отслеживаются ReLU.&lt;br /&gt;
&lt;br /&gt;
=== Неконтролируемая оценка глубины монокуляра с консистенцией слева направо (CVPR 2017) ===&lt;br /&gt;
&lt;br /&gt;
[[Файл:Samplers.png|thumb|300px| Рисунок 6. Примерная архитектура сети с консистенцией слева направо &amp;lt;ref name=&amp;quot;cvrp&amp;quot;&amp;gt;Clément Godard, Oisin Mac Aodha, Gabriel J. Brostow &amp;quot;Unsupervised Monocular Depth Estimation with Left-Right Consistency&amp;quot; Figure 3 &amp;lt;/ref&amp;gt;]]&lt;br /&gt;
&lt;br /&gt;
В данной работе&amp;lt;ref name=&amp;quot;leftrigth&amp;quot;&amp;gt; Clément Godard, Oisin Mac Aodha, Gabriel J. Brostow &amp;quot;Unsupervised Monocular Depth Estimation with Left-Right Consistency&amp;quot; [https://arxiv.org/abs/1609.03677v3]&amp;lt;/ref&amp;gt; предлагается сверточная нейронная сеть, обученная выполнять оценку глубины одного изображения без реальных данных. Авторы предлагают сетевую архитектуру, которая выполняет сквозную оценку глубины изображения, полученного с 1 камеры, без учителя, что обеспечивает согласованность глубины слева направо внутри сети.&lt;br /&gt;
Сеть оценивает глубину, выводя смещения, которые искажают левое изображение, чтобы соответствовать правому. Левое входное изображение используется для вывода смещений слева направо и справа налево. Сеть генерирует предсказанное изображение с обратным отображением с помощью билинейного сэмплера. Это приводит к полностью дифференциальной модели формирования изображения.&lt;br /&gt;
Сверточная архитектура вдохновлена так же DipsNet'ом. Она состоит из двух частей—кодера и декодера. Декодер использует пропуск соединений из блоков активации кодера, чтобы распознавать детали с высоким разрешением. Сеть предсказывает две карты смещений — слева направо и справа налево.&lt;br /&gt;
В процессе обучения сеть генерирует изображение путем выборки пикселей из противоположного стереоизображения. Модель формирования изображения использует сэмплер изображений из пространственной трансформаторной сети (STN) для выборки входного изображения с помощью карты смещений.&lt;br /&gt;
&lt;br /&gt;
=== Прогнозирование глубины без датчиков: использование структуры для обучения без учителя по монокулярным видео (AAAI 2019) ===&lt;br /&gt;
&lt;br /&gt;
[[Файл:ego-motion.png|thumb|500px| Рисунок 7. Сравнение обычного метода построения карты глубин с помощью эго-движения и предложенного в статье, который использует движения для различных 3-D объектов &amp;lt;ref name=&amp;quot;aaaif&amp;quot;&amp;gt;Vincent Casser, Soeren Pirk, Reza Mahjourian, Anelia Angelova &amp;quot;Depth Prediction Without the Sensors: Leveraging Structure for Unsupervised Learning from Monocular Videos&amp;quot; Figure 2 &amp;lt;/ref&amp;gt;]]&lt;br /&gt;
&lt;br /&gt;
Данная статья &amp;lt;ref name=&amp;quot;aaai&amp;quot;&amp;gt; Vincent Casser, Soeren Pirk, Reza Mahjourian, Anelia Angelova &amp;quot;Depth Prediction Without the Sensors: Leveraging Structure for Unsupervised Learning from Monocular Videos&amp;quot; [https://arxiv.org/abs/1811.06152v1]&amp;lt;/ref&amp;gt; посвящена задаче обучения без учителя глубины сцены и эго-движения робота, где наблюдение обеспечивается видеозаписями с одной камеры. Это делается путем введения геометрической структуры в процесс обучения. Он включает в себя моделирование сцены и отдельных объектов, эго-движения камеры и движения объектов, изучаемых с помощью монокулярных видеовходов. Авторы вводят модель движения объекта, которая имеет ту же архитектуру, что и сеть эго-движения. Она принимает последовательность изображений RGB в качестве входных данных и дополняется предварительно вычисленными масками сегментации экземпляров. Работа модели движения заключается в том, чтобы научиться предсказывать векторы трансформации каждого объекта в трехмерном пространстве. Это создает видимость наблюдаемого объекта в соответствующем целевом кадре.&lt;br /&gt;
&lt;br /&gt;
== См. также ==&lt;br /&gt;
&lt;br /&gt;
* [[Компьютерное зрение]]&lt;br /&gt;
&lt;br /&gt;
* [[Оценка положения]]&lt;br /&gt;
&lt;br /&gt;
* [[Задача нахождения объектов на изображении]]&lt;br /&gt;
&lt;br /&gt;
== Примечания ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Источники информации ==&lt;br /&gt;
&lt;br /&gt;
* Чугунов Р. А., Кульневич А. Д., Аксенов С. В. Методика построения карт глубины стереоизображения с помощью капсульной нейронной сети //Доклады Томского государственного университета систем управления и радиоэлектроники. – 2019. – Т. 22. – №. 1.[https://cyberleninka.ru/article/n/metodika-postroeniya-kart-glubiny-stereoizobrazheniya-s-pomoschyu-kapsulnoy-neyronnoy-seti/viewer]&lt;br /&gt;
&lt;br /&gt;
* 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]&lt;br /&gt;
&lt;br /&gt;
*  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]&lt;br /&gt;
&lt;br /&gt;
* 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]&lt;br /&gt;
&lt;br /&gt;
* 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]&lt;br /&gt;
&lt;br /&gt;
[[Категория:Машинное обучение]]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Компьютерное зрение]]&lt;/div&gt;</summary>
		<author><name>Frak</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9A%D0%B0%D1%80%D1%82%D0%B0_%D0%B3%D0%BB%D1%83%D0%B1%D0%B8%D0%BD%D1%8B&amp;diff=79897</id>
		<title>Карта глубины</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9A%D0%B0%D1%80%D1%82%D0%B0_%D0%B3%D0%BB%D1%83%D0%B1%D0%B8%D0%BD%D1%8B&amp;diff=79897"/>
				<updated>2021-01-22T14:06:49Z</updated>
		
		<summary type="html">&lt;p&gt;Frak: /* Использование нейронных сетей */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Карта глубины''' (англ. depth map) — это изображение, где для каждого пикселя вместо цвета хранится его расстояние до камеры.&amp;lt;ref name=&amp;quot;def&amp;quot;&amp;gt;Alexey Kurakin &amp;quot;Основы стереозрения&amp;quot;[https://habr.com/ru/post/130300/]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В компьютерной 3D-графике и [[Компьютерное зрение|компьютерном зрении]] карта глубины представляет собой изображение или канал изображения, содержащий информацию о расстоянии поверхностей объектов сцены от точки обзора. &lt;br /&gt;
&lt;br /&gt;
== Мотивация ==&lt;br /&gt;
&lt;br /&gt;
Карта глубины изображения содержит в себе информацию о расстоянии между различными объектами или частями объектов, представленных на данном изображении. Эта информация может быть полезна во многих областях. &lt;br /&gt;
 &lt;br /&gt;
* Для создания 3D-сенсеров. Они способны строить трёхмерную картину своего окружения, используются для [[Оценка положения|ориентации]] автономного робота в пространстве.&lt;br /&gt;
&lt;br /&gt;
* Для систем, использующих технологии дополненной и виртуальной реальности. Например, камеры, которые фиксируют действия пользователя в видеоиграх с технологией виртуальной реальности.&lt;br /&gt;
&lt;br /&gt;
* В беспилотных автомобилях, которые также используют карты глубин для ориентации на дороге.&lt;br /&gt;
&lt;br /&gt;
* Для обработки фотографий. Например, карты глубин используют для размытия фона на фотографии, чтобы добиться более чёткого выделения человека&amp;lt;ref name=&amp;quot;expls&amp;quot;&amp;gt;Примеры из &amp;quot;Research Guide for Depth Estimation with Deep Learning&amp;quot;[https://www.kdnuggets.com/2019/11/research-guide-depth-estimation-deep-learning.html]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Методы построения карты глубины ==&lt;br /&gt;
&lt;br /&gt;
Карта глубины может быть получена с помощью '''специальной камеры глубины''', по '''стереопаре изображений''', а также с помощью [[Нейронные сети, перцептрон|'''нейронных сетей''']].&lt;br /&gt;
&lt;br /&gt;
== Построение с помощью специальных камер глубин == &lt;br /&gt;
&lt;br /&gt;
[[Файл:ToF.jpg|thumb|250px| Рисунок 1. Пример работы ToF-камеры.]]&lt;br /&gt;
&lt;br /&gt;
* '''ToF-камеры''' (англ. Time of Flight). Принцип работы данной камеры основан на измерении задержки света, с которой свет возвращается в каждую точку. Имея несколько сенсоров с разным временем накопления заряда и, зная сдвиг по времени относительно источника для каждого сенсора и снятой яркости вспышки, мы можем рассчитать сдвиг и, соответственно, расстояние до объекта. Причем чем больше сенсоров задействовано, тем выше точность метода.&lt;br /&gt;
&lt;br /&gt;
* '''Структурированные световые камеры''' (aнгл. Structured light camera). Принцип работы данной камеры один из самых старых. Ставим проектор, который создает, например, горизонтальные (а потом и вертикальные) полоски и рядом камеру, которая снимает картину с полосками. В некоторых вариантах используется псевдослучайный набор точек (например MS Kinect {{---}} бесконтактный сенсорный игровой контроллер, для консолей Xbox 360, Xbox One и персональных компьютеров под управлением ОС Windows&amp;lt;ref name=&amp;quot;kinect&amp;quot;&amp;gt; О MicriSoft Kinect [https://en.wikipedia.org/wiki/Kinect]&amp;lt;/ref&amp;gt;). Проекторы обычно работают в инфракрасном спектре, чтобы не мешать пользователям. Поскольку камера и проектор смещены друг относительно друга, то и полоски также будут смещаться пропорционально расстоянию до объекта. Измеряя это смещение, мы можем рассчитывать расстояние до объекта. Вполне понятны сложности, с которыми можно столкнуться при использовании этого метода: это необходимость настройки и калибровки проектора, и проблема того, что нам нужно относительно благоприятное освещение. К примеру, солнце может засветить полосы, и что-то распознать будет тяжело.&lt;br /&gt;
&lt;br /&gt;
== Построения карты глубины по стереопаре ==&lt;br /&gt;
&lt;br /&gt;
Идея, лежащая в основе построения карты глубины по '''стереопаре''', проста. Для каждой точки на одном изображении выполняется поиск [[Ключевые точки изображения|парной ей точки]]&amp;lt;sup&amp;gt;[на 21.01.21 не создан]&amp;lt;/sup&amp;gt; на другом изображении. А по паре соответствующих точек можно выполнить [[Триангуляция полигонов (ушная + монотонная)|триангуляцию]] и определить координаты их [[Отображения|прообраза]] в трехмерном пространстве. Зная трехмерные координаты прообраза, глубина вычисляется как расстояние до плоскости камеры.&lt;br /&gt;
&lt;br /&gt;
Парную точку нужно искать на эпиполярной&amp;lt;ref name=&amp;quot;Epipolar&amp;quot;&amp;gt;Информация о эпиполярной геометрии[https://ru.qaz.wiki/wiki/Epipolar_geometry]&amp;lt;/ref&amp;gt; линии. Соответственно, для упрощения поиска изображения выравнивают так, чтобы все эпиполярные линии были параллельны сторонам изображения (обычно горизонтальны). Более того, изображения выравнивают так, чтобы для точки с координатами &amp;lt;math&amp;gt;(x_0, y_0)&amp;lt;/math&amp;gt; соответствующая ей эпиполярная линия задавалась уравнением &amp;lt;math&amp;gt;x = x_0&amp;lt;/math&amp;gt;. Тогда для каждой точки, соответствующую ей парную точку, нужно искать в той-же строчке на изображении со второй камеры. Такой процесс выравнивания изображений называют '''ректификацией''' (rectification).&lt;br /&gt;
&lt;br /&gt;
[[Файл:Stereo.png|thumb|300px| Рисунок 2. Результат построения карты смещений по двум картинкам.&amp;lt;ref name=&amp;quot;img2&amp;quot;&amp;gt; &amp;quot;Основы стереозрения&amp;quot; Рис. 3 [https://habr.com/ru/post/130300/]&amp;lt;/ref&amp;gt;]]&lt;br /&gt;
&lt;br /&gt;
После того, как изображения '''ректифицированы''', выполняют поиск соответствующих пар точек. Для каждого пикселя одной картинки с координатами &amp;lt;math&amp;gt;(x_0, y_0)&amp;lt;/math&amp;gt; выполняется поиск пикселя на другой картинке. При этом предполагается, что пиксель на второй картинке должен иметь координаты &amp;lt;math&amp;gt;(x_0 - d, y_0)&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;d&amp;lt;/math&amp;gt; — величина называемая смещением. Поиск соответствующего пикселя выполняется путем вычисления максимума функции отклика, в качестве которой может выступать, например, [[Корреляция случайных величин|корреляция]] окрестностей пикселей. В результате получается карта смещений, пример которой приведен на рис. 2. &lt;br /&gt;
&lt;br /&gt;
Собственно значения глубины обратно пропорциональны величине смещения пикселей.&lt;br /&gt;
&lt;br /&gt;
== Использование нейронных сетей ==&lt;br /&gt;
&lt;br /&gt;
Существует множество методов, использующих нейронные сети. Приведём пару примеров таких решений.&lt;br /&gt;
&lt;br /&gt;
=== Построение с помощью свёрточных нейронных сетей ===&lt;br /&gt;
&lt;br /&gt;
Используем [[Сверточные нейронные сети|сверточные нейронные сети]] для построения карты глубины следующим образом&lt;br /&gt;
&amp;lt;ref name=&amp;quot;cnn_rew&amp;quot;&amp;gt; Xiaobai Ma, Zhenglin Geng, Zhi Bie &amp;quot;Depth Estimation from Single Image Using CNN-Residual Network&amp;quot; [http://cs231n.stanford.edu/reports/2017/pdfs/203.pdf]&amp;lt;/ref&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
*  '''Создаем карту смещений''': используя два изображения с камер, близко расположенных друг к другу, создаем карту различий, точно так же как в методе построения по стереопаре.&lt;br /&gt;
&lt;br /&gt;
* '''Ищем реальную карту глубины для обучения''': с помощью карты смещений, можем построить карту глубины &amp;lt;math&amp;gt;y&amp;lt;/math&amp;gt; вышеописанным способом. Также допустимы другие способы построения карты глубины для обучения нейронной сети.&lt;br /&gt;
&lt;br /&gt;
*  '''Функция потерь''': определим [[Функция потерь и эмпирический риск|функцию потерь]], для предсказанной карты &amp;lt;math&amp;gt;\hat y&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;d_i = log( y_i) - log (\hat y_i)&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;\lambda \in [0, 1]&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;n &amp;lt;/math&amp;gt; — количество пикселей. &amp;lt;math&amp;gt;L(y, \hat y) =  \frac{1}{n} \sum\limits_{i} d^2_i - \frac{\lambda}{n^2}(\sum\limits_{i} d_i)^2&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;y_i&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;\hat y_i&amp;lt;/math&amp;gt; это i пискель для для реальной карты глубин и для предсказанной карты, соответственно. Гиперпараметр &amp;lt;math&amp;gt;\lambda&amp;lt;/math&amp;gt;, нужен для того, чтобы функция потерь меньше росла при большом количестве пикселей, предсказание для которых достаточно близко к реальному. Например, если &amp;lt;math&amp;gt;\lambda = 0&amp;lt;/math&amp;gt;, то мы просто придём к оптимизации в L2 для &amp;lt;math&amp;gt;d_i&amp;lt;/math&amp;gt;, т.е. &amp;lt;math&amp;gt;L(y, \hat y) =  \frac{1}{n} \sum\limits_{i} d^2_i &amp;lt;/math&amp;gt;.&amp;lt;ref name=&amp;quot;loss&amp;quot;&amp;gt;David Eigen, Christian Puhrsch, Rob Fergus &amp;quot;Depth Map Prediction from a Single Imageusing a Multi-Scale Deep Network&amp;quot; стр. 5&amp;lt;/ref&amp;gt; &lt;br /&gt;
&lt;br /&gt;
* '''Обучение свёрточной нейронной сети''': далее идёт обычное обучение нейронной сети по карте различий путем обратного распространения ошибки, оптимизируя заданную выше функцию потерь.&lt;br /&gt;
&lt;br /&gt;
В итоге, по обученной нейронной сети мы можем создавать карту глубины, не проводя расчётов для поиска карт смещения и имея только изображение объекта или пространства. &amp;lt;ref name=&amp;quot;cnn&amp;quot;&amp;gt;Реализация, основанная на свёрточных нейронных сетях [https://www.kaggle.com/kmader/cnn-for-generating-depth-maps-from-rgb-images]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Также возможно использование усложнённых архитектур свёрточных нейронных сетей типа '''DenseNet'''.&lt;br /&gt;
&lt;br /&gt;
'''DenseNet'''&amp;lt;ref name=&amp;quot;DenseNet&amp;quot;&amp;gt;Оригинальная статья описывающая DenseNet [https://arxiv.org/abs/1611.09326]&amp;lt;/ref&amp;gt; {{---}} это свёрточная нейронные сеть, в которой выход каждого из слоев подаётся на вход всем слоям, лежащих ниже.&lt;br /&gt;
&lt;br /&gt;
=== Построение с помощью капсульных нейронных сетей ===&lt;br /&gt;
&lt;br /&gt;
Свёрточные нейронные сети способны регистрировать только наличие какого-либо объекта на картинке, не кодируя его ориентацию и положение. Но '''капсульные нейронные сети''' (англ. Capsule Neural Network)&amp;lt;ref name=&amp;quot;CapsNet&amp;quot;&amp;gt;Sara Sabour, Nicholas Frosst, Geoffrey E. Hinton &amp;quot;Dynamic Routing Between Capsules&amp;quot; [https://arxiv.org/pdf/1710.09829.pdf]&amp;lt;/ref&amp;gt; лишены этого недостатка.&lt;br /&gt;
&lt;br /&gt;
[[Файл:capsnet.jpg|thumb|400px| Рисунок 3. Структура капсульной нейронной сети &amp;lt;ref name=&amp;quot;img&amp;quot;&amp;gt; &amp;quot;Design and Investigation of Capsule Networks for Sentence Classification&amp;quot; Figure 2. [https://www.mdpi.com/2076-3417/9/11/2200/htm]&amp;lt;/ref&amp;gt;.]]&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Капсульная нейронная сеть&amp;quot; состоит из капсул или групп нейронов, чтобы идентифицировать закономерности в изображении. Эта информация поступает в виде векторов, содержащих ориентацию и положение узоров на изображении, которое затем принимается капсулами более высокого уровня. Капсулы более высокого уровня обрабатывают эту информацию из нескольких капсул более низкого уровня и впоследствии выдают прогноз. Капсулы одного уровня не имеют связей друг с другом и вычисляют информацию независимо друг от друга. Капсулы образуются путем разделения выходных данных из свёрточного слоя. Мы делим наш трехмерный вектор на капсулы методом &amp;quot;нарезания&amp;quot; таким образом, чтобы в каждой капсуле была информация о каждом пикселе, т.е. по трехмерной координате.&lt;br /&gt;
 &lt;br /&gt;
Состояние нейронов капсульной нейронной сети внутри изображения фиксирует свойство области или объекта внутри изображения: его положение и ориентацию.&lt;br /&gt;
&lt;br /&gt;
Использование капсульной нейронной сети аналогично использованию обычных свёрточных сетей, описанному выше. &lt;br /&gt;
В целом, данная сеть показывает более точные результаты предсказания глубины.&lt;br /&gt;
&lt;br /&gt;
=== Построение с помощью PlanetNet ===&lt;br /&gt;
&lt;br /&gt;
Так же есть архитектуры, решающие данную задачу и без обучения на карте смещений, построенной с помощью двух изображений. Одной из таких является '''PlaneNet'''. &lt;br /&gt;
&lt;br /&gt;
'''PlaneNet'''&amp;lt;ref name=&amp;quot;planetNet&amp;quot;&amp;gt; Chen Liu, Jimei Yang, Duygu Ceylan, Ersin Yumer, Yasutaka Furukawa &amp;quot;PlaneNet: Piece-wise Planar Reconstruction from a Single RGB Image&amp;quot; [https://arxiv.org/abs/1804.06278v1]&amp;lt;/ref&amp;gt; {{---}} глубокая нейронная сеть, построенная на расширенных остаточных сетях (aнгл. Dilated Residual Networks или DRN)&amp;lt;ref name=&amp;quot;drn&amp;quot;&amp;gt; Fisher Yu, Vladlen Koltun, Thomas Funkhouser &amp;quot;Dilated Residual Networks&amp;quot; [https://arxiv.org/abs/1705.09914]&amp;lt;/ref&amp;gt;. Она получает карту глубин путем композиции выходов трех подзадач:&lt;br /&gt;
&lt;br /&gt;
[[Файл:plane_net.png|thumb|500px| Рисунок 4. Прогнозируемые PlaneNet параметры по одной rgb картинке: cегметация плоскости, параметры плоскостей, неплоская карта глубины&amp;lt;ref name=&amp;quot;img4&amp;quot;&amp;gt; Chen Liu, Jimei Yang, Duygu Ceylan, Ersin Yumer, Yasutaka Furukawa &amp;quot;PlaneNet: Piece-wise Planar Reconstruction from a Single RGB Image&amp;quot; Figure 2.&amp;lt;/ref&amp;gt;.]]&lt;br /&gt;
&lt;br /&gt;
* '''Параметры плоскостей''': пытаемся предсказать количество плоскостей K, а после ищем на изображение K плоских поверхностей, каждая поверхность задаётся тремя параметрами: нормальная, прямая и сдвиг.&lt;br /&gt;
&lt;br /&gt;
* [[Сегментация изображений|'''Сегментация плоскости''']]: ищем группы пикселей, каждая из которых характеризует один смысловой объект.&lt;br /&gt;
&lt;br /&gt;
* '''Неплоская карта глубины''': ищем одно-канальную (или неплоскую) карту глубины, то есть карту глубины, где каждый пиксель, либо на глубине 0, либо на глубине 1.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Обучение без учителя поиска карты глубины из видео (CVPR 2017) ===&lt;br /&gt;
&lt;br /&gt;
Авторы данной статьи &amp;lt;ref name=&amp;quot;cvrp_dnn&amp;quot;&amp;gt;Tinghui Zhou, Matthew Brown, Noah Snavely, David G. Lowe &amp;quot;Unsupervised Learning of Depth and Ego-Motion from Video&amp;quot; [https://arxiv.org/abs/1704.07813v2]&amp;lt;/ref&amp;gt; предлагают методику оценки глубины одной картинки без учителя и движения камеры из беспорядочной видео нарезки. &lt;br /&gt;
&lt;br /&gt;
[[Файл:dnn.png|thumb|400px| Рисунок 5. Aрхитектура сети на базе DispNet  &amp;lt;ref name=&amp;quot;cvrp&amp;quot;&amp;gt;Tinghui Zhou, Matthew Brown, Noah Snavely, David G. Lowe &amp;quot;Unsupervised Learning of Depth and Ego-Motion from Video&amp;quot; Figure 4&amp;lt;/ref&amp;gt;]]&lt;br /&gt;
&lt;br /&gt;
Будем использовать сверточные нейронные сети c глубиной одного вида и многовидовой камерой из неупорядоченного видеоряда. Метод базируется на синтезе видов. Сеть загружает фото объекта в качестве данных ввода и выводит карту глубины на каждый пиксель. Вид объекта может быть синтезирован исходя из глубины на каждый пиксель снимка позиционирования и четкости ближнего вида. Синтез может быть  дифференцирован с CNN по геометрии и модулям позиционирования.&lt;br /&gt;
Авторы взяли на вооружение архитектуру DispNet&amp;lt;ref name=&amp;quot;dispNet&amp;quot;&amp;gt; Nikolaus Mayer, Eddy Ilg, Philip Hausser, Philipp Fischer &amp;quot;A Large Dataset to Train Convolutional Networks&lt;br /&gt;
for Disparity, Optical Flow, and Scene Flow Estimation&amp;quot; [https://arxiv.org/pdf/1512.02134.pdf]&amp;lt;/ref&amp;gt;, которая сконструирована в виде енкодера - декодера с пропущенными соединениями и многомасштабными блоками предсказания. Функция активации ReLU отслеживает все сверточные слои кроме предсказанных.&lt;br /&gt;
Вид объекта со всех источников формирует входные данные в сеть позиционной оценки. На выходе получается относительная позиция между видом объекта и видом каждого источника. Сеть состоит из двух 7 шаговых сверток за которым следует свертка 1 х 1. За исключением последнего слоя свертки, где применяется нелинейная активация, все другие отслеживаются функцией активации ReLU. Сеть объяснимых предсказаний дает доступ к первым пяти закодированным слоям сети позиционирования. За ней следуют 5 слоев обратной свертки с многомасштабными блоками предсказаний. Кроме слоев предсказаний все уровни свертки и обратной свертки отслеживаются ReLU.&lt;br /&gt;
&lt;br /&gt;
=== Неконтролируемая оценка глубины монокуляра с консистенцией слева направо (CVPR 2017) ===&lt;br /&gt;
&lt;br /&gt;
[[Файл:Samplers.png|thumb|350px| Рисунок 6. Примерная архитектура сети с консистенцией слева направо &amp;lt;ref name=&amp;quot;cvrp&amp;quot;&amp;gt;Clément Godard, Oisin Mac Aodha, Gabriel J. Brostow &amp;quot;Unsupervised Monocular Depth Estimation with Left-Right Consistency&amp;quot; Figure 3 &amp;lt;/ref&amp;gt;]]&lt;br /&gt;
&lt;br /&gt;
В данной работе&amp;lt;ref name=&amp;quot;leftrigth&amp;quot;&amp;gt; Clément Godard, Oisin Mac Aodha, Gabriel J. Brostow &amp;quot;Unsupervised Monocular Depth Estimation with Left-Right Consistency&amp;quot; [https://arxiv.org/abs/1609.03677v3]&amp;lt;/ref&amp;gt; предлагается сверточная нейронная сеть, обученная выполнять оценку глубины одного изображения без реальных данных. Авторы предлагают сетевую архитектуру, которая выполняет сквозную оценку глубины изображения, полученного с 1 камеры, без учителя, что обеспечивает согласованность глубины слева направо внутри сети.&lt;br /&gt;
Сеть оценивает глубину, выводя смещения, которые искажают левое изображение, чтобы соответствовать правому. Левое входное изображение используется для вывода смещений слева направо и справа налево. Сеть генерирует предсказанное изображение с обратным отображением с помощью билинейного сэмплера. Это приводит к полностью дифференциальной модели формирования изображения.&lt;br /&gt;
Сверточная архитектура вдохновлена так же DipsNet'ом. Она состоит из двух частей—кодера и декодера. Декодер использует пропуск соединений из блоков активации кодера, чтобы распознавать детали с высоким разрешением. Сеть предсказывает две карты смещений — слева направо и справа налево.&lt;br /&gt;
В процессе обучения сеть генерирует изображение путем выборки пикселей из противоположного стереоизображения. Модель формирования изображения использует сэмплер изображений из пространственной трансформаторной сети (STN) для выборки входного изображения с помощью карты смещений.&lt;br /&gt;
&lt;br /&gt;
=== Прогнозирование глубины без датчиков: использование структуры для обучения без учителя по монокулярным видео (AAAI 2019) ===&lt;br /&gt;
&lt;br /&gt;
[[Файл:ego-motion.png|thumb|500px| Рисунок 7. Сравнение обычного метода построения карты глубин с помощью эго-движения и предложенного в статье, который использует движения для различных 3-D объектов &amp;lt;ref name=&amp;quot;aaaif&amp;quot;&amp;gt;Vincent Casser, Soeren Pirk, Reza Mahjourian, Anelia Angelova &amp;quot;Depth Prediction Without the Sensors: Leveraging Structure for Unsupervised Learning from Monocular Videos&amp;quot; Figure 2 &amp;lt;/ref&amp;gt;]]&lt;br /&gt;
&lt;br /&gt;
Данная статья &amp;lt;ref name=&amp;quot;aaai&amp;quot;&amp;gt; Vincent Casser, Soeren Pirk, Reza Mahjourian, Anelia Angelova &amp;quot;Depth Prediction Without the Sensors: Leveraging Structure for Unsupervised Learning from Monocular Videos&amp;quot; [https://arxiv.org/abs/1811.06152v1]&amp;lt;/ref&amp;gt; посвящена задаче обучения без учителя глубины сцены и эго-движения робота, где наблюдение обеспечивается видеозаписями с одной камеры. Это делается путем введения геометрической структуры в процесс обучения. Он включает в себя моделирование сцены и отдельных объектов, эго-движения камеры и движения объектов, изучаемых с помощью монокулярных видеовходов. Авторы вводят модель движения объекта, которая имеет ту же архитектуру, что и сеть эго-движения. Она принимает последовательность изображений RGB в качестве входных данных и дополняется предварительно вычисленными масками сегментации экземпляров. Работа модели движения заключается в том, чтобы научиться предсказывать векторы трансформации каждого объекта в трехмерном пространстве. Это создает видимость наблюдаемого объекта в соответствующем целевом кадре.&lt;br /&gt;
&lt;br /&gt;
== См. также ==&lt;br /&gt;
&lt;br /&gt;
* [[Компьютерное зрение]]&lt;br /&gt;
&lt;br /&gt;
* [[Оценка положения]]&lt;br /&gt;
&lt;br /&gt;
* [[Задача нахождения объектов на изображении]]&lt;br /&gt;
&lt;br /&gt;
== Примечания ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Источники информации ==&lt;br /&gt;
&lt;br /&gt;
* Чугунов Р. А., Кульневич А. Д., Аксенов С. В. Методика построения карт глубины стереоизображения с помощью капсульной нейронной сети //Доклады Томского государственного университета систем управления и радиоэлектроники. – 2019. – Т. 22. – №. 1.[https://cyberleninka.ru/article/n/metodika-postroeniya-kart-glubiny-stereoizobrazheniya-s-pomoschyu-kapsulnoy-neyronnoy-seti/viewer]&lt;br /&gt;
&lt;br /&gt;
* 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]&lt;br /&gt;
&lt;br /&gt;
*  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]&lt;br /&gt;
&lt;br /&gt;
* 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]&lt;br /&gt;
&lt;br /&gt;
* 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]&lt;br /&gt;
&lt;br /&gt;
[[Категория:Машинное обучение]]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Компьютерное зрение]]&lt;/div&gt;</summary>
		<author><name>Frak</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Samplers.png&amp;diff=79893</id>
		<title>Файл:Samplers.png</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Samplers.png&amp;diff=79893"/>
				<updated>2021-01-22T14:04:32Z</updated>
		
		<summary type="html">&lt;p&gt;Frak: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Frak</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9A%D0%B0%D1%80%D1%82%D0%B0_%D0%B3%D0%BB%D1%83%D0%B1%D0%B8%D0%BD%D1%8B&amp;diff=79891</id>
		<title>Карта глубины</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9A%D0%B0%D1%80%D1%82%D0%B0_%D0%B3%D0%BB%D1%83%D0%B1%D0%B8%D0%BD%D1%8B&amp;diff=79891"/>
				<updated>2021-01-22T13:52:40Z</updated>
		
		<summary type="html">&lt;p&gt;Frak: /* Неконтролируемая оценка глубины монокуляра с консистенцией слева направо (CVPR 2017) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Карта глубины''' (англ. depth map) — это изображение, где для каждого пикселя вместо цвета хранится его расстояние до камеры.&amp;lt;ref name=&amp;quot;def&amp;quot;&amp;gt;Alexey Kurakin &amp;quot;Основы стереозрения&amp;quot;[https://habr.com/ru/post/130300/]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В компьютерной 3D-графике и [[Компьютерное зрение|компьютерном зрении]] карта глубины представляет собой изображение или канал изображения, содержащий информацию о расстоянии поверхностей объектов сцены от точки обзора. &lt;br /&gt;
&lt;br /&gt;
== Мотивация ==&lt;br /&gt;
&lt;br /&gt;
Карта глубины изображения содержит в себе информацию о расстоянии между различными объектами или частями объектов, представленных на данном изображении. Эта информация может быть полезна во многих областях. &lt;br /&gt;
 &lt;br /&gt;
* Для создания 3D-сенсеров. Они способны строить трёхмерную картину своего окружения, используются для [[Оценка положения|ориентации]] автономного робота в пространстве.&lt;br /&gt;
&lt;br /&gt;
* Для систем, использующих технологии дополненной и виртуальной реальности. Например, камеры, которые фиксируют действия пользователя в видеоиграх с технологией виртуальной реальности.&lt;br /&gt;
&lt;br /&gt;
* В беспилотных автомобилях, которые также используют карты глубин для ориентации на дороге.&lt;br /&gt;
&lt;br /&gt;
* Для обработки фотографий. Например, карты глубин используют для размытия фона на фотографии, чтобы добиться более чёткого выделения человека&amp;lt;ref name=&amp;quot;expls&amp;quot;&amp;gt;Примеры из &amp;quot;Research Guide for Depth Estimation with Deep Learning&amp;quot;[https://www.kdnuggets.com/2019/11/research-guide-depth-estimation-deep-learning.html]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Методы построения карты глубины ==&lt;br /&gt;
&lt;br /&gt;
Карта глубины может быть получена с помощью '''специальной камеры глубины''', по '''стереопаре изображений''', а также с помощью [[Нейронные сети, перцептрон|'''нейронных сетей''']].&lt;br /&gt;
&lt;br /&gt;
== Построение с помощью специальных камер глубин == &lt;br /&gt;
&lt;br /&gt;
[[Файл:ToF.jpg|thumb|250px| Рисунок 1. Пример работы ToF-камеры.]]&lt;br /&gt;
&lt;br /&gt;
* '''ToF-камеры''' (англ. Time of Flight). Принцип работы данной камеры основан на измерении задержки света, с которой свет возвращается в каждую точку. Имея несколько сенсоров с разным временем накопления заряда и, зная сдвиг по времени относительно источника для каждого сенсора и снятой яркости вспышки, мы можем рассчитать сдвиг и, соответственно, расстояние до объекта. Причем чем больше сенсоров задействовано, тем выше точность метода.&lt;br /&gt;
&lt;br /&gt;
* '''Структурированные световые камеры''' (aнгл. Structured light camera). Принцип работы данной камеры один из самых старых. Ставим проектор, который создает, например, горизонтальные (а потом и вертикальные) полоски и рядом камеру, которая снимает картину с полосками. В некоторых вариантах используется псевдослучайный набор точек (например MS Kinect {{---}} бесконтактный сенсорный игровой контроллер, для консолей Xbox 360, Xbox One и персональных компьютеров под управлением ОС Windows&amp;lt;ref name=&amp;quot;kinect&amp;quot;&amp;gt; О MicriSoft Kinect [https://en.wikipedia.org/wiki/Kinect]&amp;lt;/ref&amp;gt;). Проекторы обычно работают в инфракрасном спектре, чтобы не мешать пользователям. Поскольку камера и проектор смещены друг относительно друга, то и полоски также будут смещаться пропорционально расстоянию до объекта. Измеряя это смещение, мы можем рассчитывать расстояние до объекта. Вполне понятны сложности, с которыми можно столкнуться при использовании этого метода: это необходимость настройки и калибровки проектора, и проблема того, что нам нужно относительно благоприятное освещение. К примеру, солнце может засветить полосы, и что-то распознать будет тяжело.&lt;br /&gt;
&lt;br /&gt;
== Построения карты глубины по стереопаре ==&lt;br /&gt;
&lt;br /&gt;
Идея, лежащая в основе построения карты глубины по '''стереопаре''', проста. Для каждой точки на одном изображении выполняется поиск [[Ключевые точки изображения|парной ей точки]]&amp;lt;sup&amp;gt;[на 21.01.21 не создан]&amp;lt;/sup&amp;gt; на другом изображении. А по паре соответствующих точек можно выполнить [[Триангуляция полигонов (ушная + монотонная)|триангуляцию]] и определить координаты их [[Отображения|прообраза]] в трехмерном пространстве. Зная трехмерные координаты прообраза, глубина вычисляется как расстояние до плоскости камеры.&lt;br /&gt;
&lt;br /&gt;
Парную точку нужно искать на эпиполярной&amp;lt;ref name=&amp;quot;Epipolar&amp;quot;&amp;gt;Информация о эпиполярной геометрии[https://ru.qaz.wiki/wiki/Epipolar_geometry]&amp;lt;/ref&amp;gt; линии. Соответственно, для упрощения поиска изображения выравнивают так, чтобы все эпиполярные линии были параллельны сторонам изображения (обычно горизонтальны). Более того, изображения выравнивают так, чтобы для точки с координатами &amp;lt;math&amp;gt;(x_0, y_0)&amp;lt;/math&amp;gt; соответствующая ей эпиполярная линия задавалась уравнением &amp;lt;math&amp;gt;x = x_0&amp;lt;/math&amp;gt;. Тогда для каждой точки, соответствующую ей парную точку, нужно искать в той-же строчке на изображении со второй камеры. Такой процесс выравнивания изображений называют '''ректификацией''' (rectification).&lt;br /&gt;
&lt;br /&gt;
[[Файл:Stereo.png|thumb|300px| Рисунок 2. Результат построения карты смещений по двум картинкам.&amp;lt;ref name=&amp;quot;img2&amp;quot;&amp;gt; &amp;quot;Основы стереозрения&amp;quot; Рис. 3 [https://habr.com/ru/post/130300/]&amp;lt;/ref&amp;gt;]]&lt;br /&gt;
&lt;br /&gt;
После того, как изображения '''ректифицированы''', выполняют поиск соответствующих пар точек. Для каждого пикселя одной картинки с координатами &amp;lt;math&amp;gt;(x_0, y_0)&amp;lt;/math&amp;gt; выполняется поиск пикселя на другой картинке. При этом предполагается, что пиксель на второй картинке должен иметь координаты &amp;lt;math&amp;gt;(x_0 - d, y_0)&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;d&amp;lt;/math&amp;gt; — величина называемая смещением. Поиск соответствующего пикселя выполняется путем вычисления максимума функции отклика, в качестве которой может выступать, например, [[Корреляция случайных величин|корреляция]] окрестностей пикселей. В результате получается карта смещений, пример которой приведен на рис. 2. &lt;br /&gt;
&lt;br /&gt;
Собственно значения глубины обратно пропорциональны величине смещения пикселей.&lt;br /&gt;
&lt;br /&gt;
== Использование нейронных сетей ==&lt;br /&gt;
&lt;br /&gt;
Существует множество методов, использующих нейронные сети. Приведём пару примеров таких решений.&lt;br /&gt;
&lt;br /&gt;
=== Построение с помощью свёрточных нейронных сетей ===&lt;br /&gt;
&lt;br /&gt;
Используем [[Сверточные нейронные сети|сверточные нейронные сети]] для построения карты глубины следующим образом&lt;br /&gt;
&amp;lt;ref name=&amp;quot;cnn_rew&amp;quot;&amp;gt; Xiaobai Ma, Zhenglin Geng, Zhi Bie &amp;quot;Depth Estimation from Single Image Using CNN-Residual Network&amp;quot; [http://cs231n.stanford.edu/reports/2017/pdfs/203.pdf]&amp;lt;/ref&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
*  '''Создаем карту смещений''': используя два изображения с камер, близко расположенных друг к другу, создаем карту различий, точно так же как в методе построения по стереопаре.&lt;br /&gt;
&lt;br /&gt;
* '''Ищем реальную карту глубины для обучения''': с помощью карты смещений, можем построить карту глубины &amp;lt;math&amp;gt;y&amp;lt;/math&amp;gt; вышеописанным способом. Также допустимы другие способы построения карты глубины для обучения нейронной сети.&lt;br /&gt;
&lt;br /&gt;
*  '''Функция потерь''': определим [[Функция потерь и эмпирический риск|функцию потерь]], для предсказанной карты &amp;lt;math&amp;gt;\hat y&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;d_i = log( y_i) - log (\hat y_i)&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;\lambda \in [0, 1]&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;n &amp;lt;/math&amp;gt; — количество пикселей. &amp;lt;math&amp;gt;L(y, \hat y) =  \frac{1}{n} \sum\limits_{i} d^2_i - \frac{\lambda}{n^2}(\sum\limits_{i} d_i)^2&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;y_i&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;\hat y_i&amp;lt;/math&amp;gt; это i пискель для для реальной карты глубин и для предсказанной карты, соответственно. Гиперпараметр &amp;lt;math&amp;gt;\lambda&amp;lt;/math&amp;gt;, нужен для того, чтобы функция потерь меньше росла при большом количестве пикселей, предсказание для которых достаточно близко к реальному. Например, если &amp;lt;math&amp;gt;\lambda = 0&amp;lt;/math&amp;gt;, то мы просто придём к оптимизации в L2 для &amp;lt;math&amp;gt;d_i&amp;lt;/math&amp;gt;, т.е. &amp;lt;math&amp;gt;L(y, \hat y) =  \frac{1}{n} \sum\limits_{i} d^2_i &amp;lt;/math&amp;gt;.&amp;lt;ref name=&amp;quot;loss&amp;quot;&amp;gt;David Eigen, Christian Puhrsch, Rob Fergus &amp;quot;Depth Map Prediction from a Single Imageusing a Multi-Scale Deep Network&amp;quot; стр. 5&amp;lt;/ref&amp;gt; &lt;br /&gt;
&lt;br /&gt;
* '''Обучение свёрточной нейронной сети''': далее идёт обычное обучение нейронной сети по карте различий путем обратного распространения ошибки, оптимизируя заданную выше функцию потерь.&lt;br /&gt;
&lt;br /&gt;
В итоге, по обученной нейронной сети мы можем создавать карту глубины, не проводя расчётов для поиска карт смещения и имея только изображение объекта или пространства. &amp;lt;ref name=&amp;quot;cnn&amp;quot;&amp;gt;Реализация, основанная на свёрточных нейронных сетях [https://www.kaggle.com/kmader/cnn-for-generating-depth-maps-from-rgb-images]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Также возможно использование усложнённых архитектур свёрточных нейронных сетей типа '''DenseNet'''.&lt;br /&gt;
&lt;br /&gt;
'''DenseNet'''&amp;lt;ref name=&amp;quot;DenseNet&amp;quot;&amp;gt;Оригинальная статья описывающая DenseNet [https://arxiv.org/abs/1611.09326]&amp;lt;/ref&amp;gt; {{---}} это свёрточная нейронные сеть, в которой выход каждого из слоев подаётся на вход всем слоям, лежащих ниже.&lt;br /&gt;
&lt;br /&gt;
=== Построение с помощью капсульных нейронных сетей ===&lt;br /&gt;
&lt;br /&gt;
Свёрточные нейронные сети способны регистрировать только наличие какого-либо объекта на картинке, не кодируя его ориентацию и положение. Но '''капсульные нейронные сети''' (англ. Capsule Neural Network)&amp;lt;ref name=&amp;quot;CapsNet&amp;quot;&amp;gt;Sara Sabour, Nicholas Frosst, Geoffrey E. Hinton &amp;quot;Dynamic Routing Between Capsules&amp;quot; [https://arxiv.org/pdf/1710.09829.pdf]&amp;lt;/ref&amp;gt; лишены этого недостатка.&lt;br /&gt;
&lt;br /&gt;
[[Файл:capsnet.jpg|thumb|400px| Рисунок 3. Структура капсульной нейронной сети &amp;lt;ref name=&amp;quot;img&amp;quot;&amp;gt; &amp;quot;Design and Investigation of Capsule Networks for Sentence Classification&amp;quot; Figure 2. [https://www.mdpi.com/2076-3417/9/11/2200/htm]&amp;lt;/ref&amp;gt;.]]&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Капсульная нейронная сеть&amp;quot; состоит из капсул или групп нейронов, чтобы идентифицировать закономерности в изображении. Эта информация поступает в виде векторов, содержащих ориентацию и положение узоров на изображении, которое затем принимается капсулами более высокого уровня. Капсулы более высокого уровня обрабатывают эту информацию из нескольких капсул более низкого уровня и впоследствии выдают прогноз. Капсулы одного уровня не имеют связей друг с другом и вычисляют информацию независимо друг от друга. Капсулы образуются путем разделения выходных данных из свёрточного слоя. Мы делим наш трехмерный вектор на капсулы методом &amp;quot;нарезания&amp;quot; таким образом, чтобы в каждой капсуле была информация о каждом пикселе, т.е. по трехмерной координате.&lt;br /&gt;
 &lt;br /&gt;
Состояние нейронов капсульной нейронной сети внутри изображения фиксирует свойство области или объекта внутри изображения: его положение и ориентацию.&lt;br /&gt;
&lt;br /&gt;
Использование капсульной нейронной сети аналогично использованию обычных свёрточных сетей, описанному выше. &lt;br /&gt;
В целом, данная сеть показывает более точные результаты предсказания глубины.&lt;br /&gt;
&lt;br /&gt;
=== Построение с помощью PlanetNet ===&lt;br /&gt;
&lt;br /&gt;
Так же есть архитектуры, решающие данную задачу и без обучения на карте смещений, построенной с помощью двух изображений. Одной из таких является '''PlaneNet'''. &lt;br /&gt;
&lt;br /&gt;
'''PlaneNet'''&amp;lt;ref name=&amp;quot;planetNet&amp;quot;&amp;gt; Chen Liu, Jimei Yang, Duygu Ceylan, Ersin Yumer, Yasutaka Furukawa &amp;quot;PlaneNet: Piece-wise Planar Reconstruction from a Single RGB Image&amp;quot; [https://arxiv.org/abs/1804.06278v1]&amp;lt;/ref&amp;gt; {{---}} глубокая нейронная сеть, построенная на расширенных остаточных сетях (aнгл. Dilated Residual Networks или DRN)&amp;lt;ref name=&amp;quot;drn&amp;quot;&amp;gt; Fisher Yu, Vladlen Koltun, Thomas Funkhouser &amp;quot;Dilated Residual Networks&amp;quot; [https://arxiv.org/abs/1705.09914]&amp;lt;/ref&amp;gt;. Она получает карту глубин путем композиции выходов трех подзадач:&lt;br /&gt;
&lt;br /&gt;
[[Файл:plane_net.png|thumb|500px| Рисунок 4. Прогнозируемые PlaneNet параметры по одной rgb картинке: cегметация плоскости, параметры плоскостей, неплоская карта глубины&amp;lt;ref name=&amp;quot;img4&amp;quot;&amp;gt; Chen Liu, Jimei Yang, Duygu Ceylan, Ersin Yumer, Yasutaka Furukawa &amp;quot;PlaneNet: Piece-wise Planar Reconstruction from a Single RGB Image&amp;quot; Figure 2.&amp;lt;/ref&amp;gt;.]]&lt;br /&gt;
&lt;br /&gt;
* '''Параметры плоскостей''': пытаемся предсказать количество плоскостей K, а после ищем на изображение K плоских поверхностей, каждая поверхность задаётся тремя параметрами: нормальная, прямая и сдвиг.&lt;br /&gt;
&lt;br /&gt;
* [[Сегментация изображений|'''Сегментация плоскости''']]: ищем группы пикселей, каждая из которых характеризует один смысловой объект.&lt;br /&gt;
&lt;br /&gt;
* '''Неплоская карта глубины''': ищем одно-канальную (или неплоскую) карту глубины, то есть карту глубины, где каждый пиксель, либо на глубине 0, либо на глубине 1.&lt;br /&gt;
&lt;br /&gt;
=== Неконтролируемая оценка глубины монокуляра с консистенцией слева направо (CVPR 2017) ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
В данной работе&amp;lt;ref name=&amp;quot;leftrigth&amp;quot;&amp;gt; Clément Godard, Oisin Mac Aodha, Gabriel J. Brostow &amp;quot;Unsupervised Monocular Depth Estimation with Left-Right Consistency&amp;quot; [https://arxiv.org/abs/1609.03677v3]&amp;lt;/ref&amp;gt; предлагается сверточная нейронная сеть, обученная выполнять оценку глубины одного изображения без реальных данных. Авторы предлагают сетевую архитектуру, которая выполняет сквозную оценку глубины изображения, полученного с 1 камеры, без учителя, что обеспечивает согласованность глубины слева направо внутри сети.&lt;br /&gt;
Сеть оценивает глубину, выводя смещения, которые искажают левое изображение, чтобы соответствовать правому. Левое входное изображение используется для вывода смещений слева направо и справа налево. Сеть генерирует предсказанное изображение с обратным отображением с помощью билинейного сэмплера. Это приводит к полностью дифференциальной модели формирования изображения.&lt;br /&gt;
Сверточная архитектура вдохновлена так же DipsNet'ом. Она состоит из двух частей—кодера и декодера. Декодер использует пропуск соединений из блоков активации кодера, чтобы распознавать детали с высоким разрешением. Сеть предсказывает две карты смещений — слева направо и справа налево.&lt;br /&gt;
В процессе обучения сеть генерирует изображение путем выборки пикселей из противоположного стереоизображения. Модель формирования изображения использует сэмплер изображений из пространственной трансформаторной сети (STN) для выборки входного изображения с помощью карты смещений.&lt;br /&gt;
&lt;br /&gt;
=== Обучение без учителя поиска карты глубины из видео (CVPR 2017) ===&lt;br /&gt;
&lt;br /&gt;
Авторы данной статьи &amp;lt;ref name=&amp;quot;cvrp_dnn&amp;quot;&amp;gt;Tinghui Zhou, Matthew Brown, Noah Snavely, David G. Lowe &amp;quot;Unsupervised Learning of Depth and Ego-Motion from Video&amp;quot; [https://arxiv.org/abs/1704.07813v2]&amp;lt;/ref&amp;gt; предлагают методику оценки глубины одной картинки без учителя и движения камеры из беспорядочной видео нарезки. &lt;br /&gt;
&lt;br /&gt;
[[Файл:dnn.png|thumb|400px| Рисунок 5. Aрхитектура сети на базе DispNet  &amp;lt;ref name=&amp;quot;cvrp&amp;quot;&amp;gt;Tinghui Zhou, Matthew Brown, Noah Snavely, David G. Lowe &amp;quot;Unsupervised Learning of Depth and Ego-Motion from Video&amp;quot; Figure 4&amp;lt;/ref&amp;gt;]]&lt;br /&gt;
&lt;br /&gt;
Будем использовать сверточные нейронные сети c глубиной одного вида и многовидовой камерой из неупорядоченного видеоряда. Метод базируется на синтезе видов. Сеть загружает фото объекта в качестве данных ввода и выводит карту глубины на каждый пиксель. Вид объекта может быть синтезирован исходя из глубины на каждый пиксель снимка позиционирования и четкости ближнего вида. Синтез может быть  дифференцирован с CNN по геометрии и модулям позиционирования.&lt;br /&gt;
Авторы взяли на вооружение архитектуру DispNet&amp;lt;ref name=&amp;quot;dispNet&amp;quot;&amp;gt; Nikolaus Mayer, Eddy Ilg, Philip Hausser, Philipp Fischer &amp;quot;A Large Dataset to Train Convolutional Networks&lt;br /&gt;
for Disparity, Optical Flow, and Scene Flow Estimation&amp;quot; [https://arxiv.org/pdf/1512.02134.pdf]&amp;lt;/ref&amp;gt;, которая сконструирована в виде енкодера - декодера с пропущенными соединениями и многомасштабными блоками предсказания. Функция активации ReLU отслеживает все сверточные слои кроме предсказанных.&lt;br /&gt;
Вид объекта со всех источников формирует входные данные в сеть позиционной оценки. На выходе получается относительная позиция между видом объекта и видом каждого источника. Сеть состоит из двух 7 шаговых сверток за которым следует свертка 1 х 1. За исключением последнего слоя свертки, где применяется нелинейная активация, все другие отслеживаются функцией активации ReLU. Сеть объяснимых предсказаний дает доступ к первым пяти закодированным слоям сети позиционирования. За ней следуют 5 слоев обратной свертки с многомасштабными блоками предсказаний. Кроме слоев предсказаний все уровни свертки и обратной свертки отслеживаются ReLU.&lt;br /&gt;
&lt;br /&gt;
=== Прогнозирование глубины без датчиков: использование структуры для обучения без учителя по монокулярным видео (AAAI 2019) ===&lt;br /&gt;
&lt;br /&gt;
[[Файл:ego-motion.png|thumb|500px| Рисунок 5. Aрхитектура сети на базе DispNet  &amp;lt;ref name=&amp;quot;cvrp&amp;quot;&amp;gt;Tinghui Zhou, Matthew Brown, Noah Snavely, David G. Lowe &amp;quot;Unsupervised Learning of Depth and Ego-Motion from Video&amp;quot; Figure 4&amp;lt;/ref&amp;gt;]]&lt;br /&gt;
&lt;br /&gt;
Данная статья &amp;lt;ref name=&amp;quot;aaai&amp;quot;&amp;gt; Vincent Casser, Soeren Pirk, Reza Mahjourian, Anelia Angelova &amp;quot;Depth Prediction Without the Sensors: Leveraging Structure for Unsupervised Learning from Monocular Videos&amp;quot; [https://arxiv.org/abs/1811.06152v1]&amp;lt;/ref&amp;gt; посвящена задаче обучения без учителя глубины сцены и эго-движения робота, где наблюдение обеспечивается видеозаписями с одной камеры. Это делается путем введения геометрической структуры в процесс обучения. Он включает в себя моделирование сцены и отдельных объектов, эго-движения камеры и движения объектов, изучаемых с помощью монокулярных видеовходов. Авторы вводят модель движения объекта, которая имеет ту же архитектуру, что и сеть эго-движения. Она принимает последовательность изображений RGB в качестве входных данных и дополняется предварительно вычисленными масками сегментации экземпляров. Работа модели движения заключается в том, чтобы научиться предсказывать векторы трансформации каждого объекта в трехмерном пространстве. Это создает видимость наблюдаемого объекта в соответствующем целевом кадре.&lt;br /&gt;
&lt;br /&gt;
== См. также ==&lt;br /&gt;
&lt;br /&gt;
* [[Компьютерное зрение]]&lt;br /&gt;
&lt;br /&gt;
* [[Оценка положения]]&lt;br /&gt;
&lt;br /&gt;
* [[Задача нахождения объектов на изображении]]&lt;br /&gt;
&lt;br /&gt;
== Примечания ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Источники информации ==&lt;br /&gt;
&lt;br /&gt;
* Чугунов Р. А., Кульневич А. Д., Аксенов С. В. Методика построения карт глубины стереоизображения с помощью капсульной нейронной сети //Доклады Томского государственного университета систем управления и радиоэлектроники. – 2019. – Т. 22. – №. 1.[https://cyberleninka.ru/article/n/metodika-postroeniya-kart-glubiny-stereoizobrazheniya-s-pomoschyu-kapsulnoy-neyronnoy-seti/viewer]&lt;br /&gt;
&lt;br /&gt;
* 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]&lt;br /&gt;
&lt;br /&gt;
*  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]&lt;br /&gt;
&lt;br /&gt;
* 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]&lt;br /&gt;
&lt;br /&gt;
* 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]&lt;br /&gt;
&lt;br /&gt;
[[Категория:Машинное обучение]]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Компьютерное зрение]]&lt;/div&gt;</summary>
		<author><name>Frak</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9A%D0%B0%D1%80%D1%82%D0%B0_%D0%B3%D0%BB%D1%83%D0%B1%D0%B8%D0%BD%D1%8B&amp;diff=79890</id>
		<title>Карта глубины</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9A%D0%B0%D1%80%D1%82%D0%B0_%D0%B3%D0%BB%D1%83%D0%B1%D0%B8%D0%BD%D1%8B&amp;diff=79890"/>
				<updated>2021-01-22T13:52:25Z</updated>
		
		<summary type="html">&lt;p&gt;Frak: /* Неконтролируемая оценка глубины монокуляра с консистенцией слева направо (CVPR 2017) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Карта глубины''' (англ. depth map) — это изображение, где для каждого пикселя вместо цвета хранится его расстояние до камеры.&amp;lt;ref name=&amp;quot;def&amp;quot;&amp;gt;Alexey Kurakin &amp;quot;Основы стереозрения&amp;quot;[https://habr.com/ru/post/130300/]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В компьютерной 3D-графике и [[Компьютерное зрение|компьютерном зрении]] карта глубины представляет собой изображение или канал изображения, содержащий информацию о расстоянии поверхностей объектов сцены от точки обзора. &lt;br /&gt;
&lt;br /&gt;
== Мотивация ==&lt;br /&gt;
&lt;br /&gt;
Карта глубины изображения содержит в себе информацию о расстоянии между различными объектами или частями объектов, представленных на данном изображении. Эта информация может быть полезна во многих областях. &lt;br /&gt;
 &lt;br /&gt;
* Для создания 3D-сенсеров. Они способны строить трёхмерную картину своего окружения, используются для [[Оценка положения|ориентации]] автономного робота в пространстве.&lt;br /&gt;
&lt;br /&gt;
* Для систем, использующих технологии дополненной и виртуальной реальности. Например, камеры, которые фиксируют действия пользователя в видеоиграх с технологией виртуальной реальности.&lt;br /&gt;
&lt;br /&gt;
* В беспилотных автомобилях, которые также используют карты глубин для ориентации на дороге.&lt;br /&gt;
&lt;br /&gt;
* Для обработки фотографий. Например, карты глубин используют для размытия фона на фотографии, чтобы добиться более чёткого выделения человека&amp;lt;ref name=&amp;quot;expls&amp;quot;&amp;gt;Примеры из &amp;quot;Research Guide for Depth Estimation with Deep Learning&amp;quot;[https://www.kdnuggets.com/2019/11/research-guide-depth-estimation-deep-learning.html]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Методы построения карты глубины ==&lt;br /&gt;
&lt;br /&gt;
Карта глубины может быть получена с помощью '''специальной камеры глубины''', по '''стереопаре изображений''', а также с помощью [[Нейронные сети, перцептрон|'''нейронных сетей''']].&lt;br /&gt;
&lt;br /&gt;
== Построение с помощью специальных камер глубин == &lt;br /&gt;
&lt;br /&gt;
[[Файл:ToF.jpg|thumb|250px| Рисунок 1. Пример работы ToF-камеры.]]&lt;br /&gt;
&lt;br /&gt;
* '''ToF-камеры''' (англ. Time of Flight). Принцип работы данной камеры основан на измерении задержки света, с которой свет возвращается в каждую точку. Имея несколько сенсоров с разным временем накопления заряда и, зная сдвиг по времени относительно источника для каждого сенсора и снятой яркости вспышки, мы можем рассчитать сдвиг и, соответственно, расстояние до объекта. Причем чем больше сенсоров задействовано, тем выше точность метода.&lt;br /&gt;
&lt;br /&gt;
* '''Структурированные световые камеры''' (aнгл. Structured light camera). Принцип работы данной камеры один из самых старых. Ставим проектор, который создает, например, горизонтальные (а потом и вертикальные) полоски и рядом камеру, которая снимает картину с полосками. В некоторых вариантах используется псевдослучайный набор точек (например MS Kinect {{---}} бесконтактный сенсорный игровой контроллер, для консолей Xbox 360, Xbox One и персональных компьютеров под управлением ОС Windows&amp;lt;ref name=&amp;quot;kinect&amp;quot;&amp;gt; О MicriSoft Kinect [https://en.wikipedia.org/wiki/Kinect]&amp;lt;/ref&amp;gt;). Проекторы обычно работают в инфракрасном спектре, чтобы не мешать пользователям. Поскольку камера и проектор смещены друг относительно друга, то и полоски также будут смещаться пропорционально расстоянию до объекта. Измеряя это смещение, мы можем рассчитывать расстояние до объекта. Вполне понятны сложности, с которыми можно столкнуться при использовании этого метода: это необходимость настройки и калибровки проектора, и проблема того, что нам нужно относительно благоприятное освещение. К примеру, солнце может засветить полосы, и что-то распознать будет тяжело.&lt;br /&gt;
&lt;br /&gt;
== Построения карты глубины по стереопаре ==&lt;br /&gt;
&lt;br /&gt;
Идея, лежащая в основе построения карты глубины по '''стереопаре''', проста. Для каждой точки на одном изображении выполняется поиск [[Ключевые точки изображения|парной ей точки]]&amp;lt;sup&amp;gt;[на 21.01.21 не создан]&amp;lt;/sup&amp;gt; на другом изображении. А по паре соответствующих точек можно выполнить [[Триангуляция полигонов (ушная + монотонная)|триангуляцию]] и определить координаты их [[Отображения|прообраза]] в трехмерном пространстве. Зная трехмерные координаты прообраза, глубина вычисляется как расстояние до плоскости камеры.&lt;br /&gt;
&lt;br /&gt;
Парную точку нужно искать на эпиполярной&amp;lt;ref name=&amp;quot;Epipolar&amp;quot;&amp;gt;Информация о эпиполярной геометрии[https://ru.qaz.wiki/wiki/Epipolar_geometry]&amp;lt;/ref&amp;gt; линии. Соответственно, для упрощения поиска изображения выравнивают так, чтобы все эпиполярные линии были параллельны сторонам изображения (обычно горизонтальны). Более того, изображения выравнивают так, чтобы для точки с координатами &amp;lt;math&amp;gt;(x_0, y_0)&amp;lt;/math&amp;gt; соответствующая ей эпиполярная линия задавалась уравнением &amp;lt;math&amp;gt;x = x_0&amp;lt;/math&amp;gt;. Тогда для каждой точки, соответствующую ей парную точку, нужно искать в той-же строчке на изображении со второй камеры. Такой процесс выравнивания изображений называют '''ректификацией''' (rectification).&lt;br /&gt;
&lt;br /&gt;
[[Файл:Stereo.png|thumb|300px| Рисунок 2. Результат построения карты смещений по двум картинкам.&amp;lt;ref name=&amp;quot;img2&amp;quot;&amp;gt; &amp;quot;Основы стереозрения&amp;quot; Рис. 3 [https://habr.com/ru/post/130300/]&amp;lt;/ref&amp;gt;]]&lt;br /&gt;
&lt;br /&gt;
После того, как изображения '''ректифицированы''', выполняют поиск соответствующих пар точек. Для каждого пикселя одной картинки с координатами &amp;lt;math&amp;gt;(x_0, y_0)&amp;lt;/math&amp;gt; выполняется поиск пикселя на другой картинке. При этом предполагается, что пиксель на второй картинке должен иметь координаты &amp;lt;math&amp;gt;(x_0 - d, y_0)&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;d&amp;lt;/math&amp;gt; — величина называемая смещением. Поиск соответствующего пикселя выполняется путем вычисления максимума функции отклика, в качестве которой может выступать, например, [[Корреляция случайных величин|корреляция]] окрестностей пикселей. В результате получается карта смещений, пример которой приведен на рис. 2. &lt;br /&gt;
&lt;br /&gt;
Собственно значения глубины обратно пропорциональны величине смещения пикселей.&lt;br /&gt;
&lt;br /&gt;
== Использование нейронных сетей ==&lt;br /&gt;
&lt;br /&gt;
Существует множество методов, использующих нейронные сети. Приведём пару примеров таких решений.&lt;br /&gt;
&lt;br /&gt;
=== Построение с помощью свёрточных нейронных сетей ===&lt;br /&gt;
&lt;br /&gt;
Используем [[Сверточные нейронные сети|сверточные нейронные сети]] для построения карты глубины следующим образом&lt;br /&gt;
&amp;lt;ref name=&amp;quot;cnn_rew&amp;quot;&amp;gt; Xiaobai Ma, Zhenglin Geng, Zhi Bie &amp;quot;Depth Estimation from Single Image Using CNN-Residual Network&amp;quot; [http://cs231n.stanford.edu/reports/2017/pdfs/203.pdf]&amp;lt;/ref&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
*  '''Создаем карту смещений''': используя два изображения с камер, близко расположенных друг к другу, создаем карту различий, точно так же как в методе построения по стереопаре.&lt;br /&gt;
&lt;br /&gt;
* '''Ищем реальную карту глубины для обучения''': с помощью карты смещений, можем построить карту глубины &amp;lt;math&amp;gt;y&amp;lt;/math&amp;gt; вышеописанным способом. Также допустимы другие способы построения карты глубины для обучения нейронной сети.&lt;br /&gt;
&lt;br /&gt;
*  '''Функция потерь''': определим [[Функция потерь и эмпирический риск|функцию потерь]], для предсказанной карты &amp;lt;math&amp;gt;\hat y&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;d_i = log( y_i) - log (\hat y_i)&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;\lambda \in [0, 1]&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;n &amp;lt;/math&amp;gt; — количество пикселей. &amp;lt;math&amp;gt;L(y, \hat y) =  \frac{1}{n} \sum\limits_{i} d^2_i - \frac{\lambda}{n^2}(\sum\limits_{i} d_i)^2&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;y_i&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;\hat y_i&amp;lt;/math&amp;gt; это i пискель для для реальной карты глубин и для предсказанной карты, соответственно. Гиперпараметр &amp;lt;math&amp;gt;\lambda&amp;lt;/math&amp;gt;, нужен для того, чтобы функция потерь меньше росла при большом количестве пикселей, предсказание для которых достаточно близко к реальному. Например, если &amp;lt;math&amp;gt;\lambda = 0&amp;lt;/math&amp;gt;, то мы просто придём к оптимизации в L2 для &amp;lt;math&amp;gt;d_i&amp;lt;/math&amp;gt;, т.е. &amp;lt;math&amp;gt;L(y, \hat y) =  \frac{1}{n} \sum\limits_{i} d^2_i &amp;lt;/math&amp;gt;.&amp;lt;ref name=&amp;quot;loss&amp;quot;&amp;gt;David Eigen, Christian Puhrsch, Rob Fergus &amp;quot;Depth Map Prediction from a Single Imageusing a Multi-Scale Deep Network&amp;quot; стр. 5&amp;lt;/ref&amp;gt; &lt;br /&gt;
&lt;br /&gt;
* '''Обучение свёрточной нейронной сети''': далее идёт обычное обучение нейронной сети по карте различий путем обратного распространения ошибки, оптимизируя заданную выше функцию потерь.&lt;br /&gt;
&lt;br /&gt;
В итоге, по обученной нейронной сети мы можем создавать карту глубины, не проводя расчётов для поиска карт смещения и имея только изображение объекта или пространства. &amp;lt;ref name=&amp;quot;cnn&amp;quot;&amp;gt;Реализация, основанная на свёрточных нейронных сетях [https://www.kaggle.com/kmader/cnn-for-generating-depth-maps-from-rgb-images]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Также возможно использование усложнённых архитектур свёрточных нейронных сетей типа '''DenseNet'''.&lt;br /&gt;
&lt;br /&gt;
'''DenseNet'''&amp;lt;ref name=&amp;quot;DenseNet&amp;quot;&amp;gt;Оригинальная статья описывающая DenseNet [https://arxiv.org/abs/1611.09326]&amp;lt;/ref&amp;gt; {{---}} это свёрточная нейронные сеть, в которой выход каждого из слоев подаётся на вход всем слоям, лежащих ниже.&lt;br /&gt;
&lt;br /&gt;
=== Построение с помощью капсульных нейронных сетей ===&lt;br /&gt;
&lt;br /&gt;
Свёрточные нейронные сети способны регистрировать только наличие какого-либо объекта на картинке, не кодируя его ориентацию и положение. Но '''капсульные нейронные сети''' (англ. Capsule Neural Network)&amp;lt;ref name=&amp;quot;CapsNet&amp;quot;&amp;gt;Sara Sabour, Nicholas Frosst, Geoffrey E. Hinton &amp;quot;Dynamic Routing Between Capsules&amp;quot; [https://arxiv.org/pdf/1710.09829.pdf]&amp;lt;/ref&amp;gt; лишены этого недостатка.&lt;br /&gt;
&lt;br /&gt;
[[Файл:capsnet.jpg|thumb|400px| Рисунок 3. Структура капсульной нейронной сети &amp;lt;ref name=&amp;quot;img&amp;quot;&amp;gt; &amp;quot;Design and Investigation of Capsule Networks for Sentence Classification&amp;quot; Figure 2. [https://www.mdpi.com/2076-3417/9/11/2200/htm]&amp;lt;/ref&amp;gt;.]]&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Капсульная нейронная сеть&amp;quot; состоит из капсул или групп нейронов, чтобы идентифицировать закономерности в изображении. Эта информация поступает в виде векторов, содержащих ориентацию и положение узоров на изображении, которое затем принимается капсулами более высокого уровня. Капсулы более высокого уровня обрабатывают эту информацию из нескольких капсул более низкого уровня и впоследствии выдают прогноз. Капсулы одного уровня не имеют связей друг с другом и вычисляют информацию независимо друг от друга. Капсулы образуются путем разделения выходных данных из свёрточного слоя. Мы делим наш трехмерный вектор на капсулы методом &amp;quot;нарезания&amp;quot; таким образом, чтобы в каждой капсуле была информация о каждом пикселе, т.е. по трехмерной координате.&lt;br /&gt;
 &lt;br /&gt;
Состояние нейронов капсульной нейронной сети внутри изображения фиксирует свойство области или объекта внутри изображения: его положение и ориентацию.&lt;br /&gt;
&lt;br /&gt;
Использование капсульной нейронной сети аналогично использованию обычных свёрточных сетей, описанному выше. &lt;br /&gt;
В целом, данная сеть показывает более точные результаты предсказания глубины.&lt;br /&gt;
&lt;br /&gt;
=== Построение с помощью PlanetNet ===&lt;br /&gt;
&lt;br /&gt;
Так же есть архитектуры, решающие данную задачу и без обучения на карте смещений, построенной с помощью двух изображений. Одной из таких является '''PlaneNet'''. &lt;br /&gt;
&lt;br /&gt;
'''PlaneNet'''&amp;lt;ref name=&amp;quot;planetNet&amp;quot;&amp;gt; Chen Liu, Jimei Yang, Duygu Ceylan, Ersin Yumer, Yasutaka Furukawa &amp;quot;PlaneNet: Piece-wise Planar Reconstruction from a Single RGB Image&amp;quot; [https://arxiv.org/abs/1804.06278v1]&amp;lt;/ref&amp;gt; {{---}} глубокая нейронная сеть, построенная на расширенных остаточных сетях (aнгл. Dilated Residual Networks или DRN)&amp;lt;ref name=&amp;quot;drn&amp;quot;&amp;gt; Fisher Yu, Vladlen Koltun, Thomas Funkhouser &amp;quot;Dilated Residual Networks&amp;quot; [https://arxiv.org/abs/1705.09914]&amp;lt;/ref&amp;gt;. Она получает карту глубин путем композиции выходов трех подзадач:&lt;br /&gt;
&lt;br /&gt;
[[Файл:plane_net.png|thumb|500px| Рисунок 4. Прогнозируемые PlaneNet параметры по одной rgb картинке: cегметация плоскости, параметры плоскостей, неплоская карта глубины&amp;lt;ref name=&amp;quot;img4&amp;quot;&amp;gt; Chen Liu, Jimei Yang, Duygu Ceylan, Ersin Yumer, Yasutaka Furukawa &amp;quot;PlaneNet: Piece-wise Planar Reconstruction from a Single RGB Image&amp;quot; Figure 2.&amp;lt;/ref&amp;gt;.]]&lt;br /&gt;
&lt;br /&gt;
* '''Параметры плоскостей''': пытаемся предсказать количество плоскостей K, а после ищем на изображение K плоских поверхностей, каждая поверхность задаётся тремя параметрами: нормальная, прямая и сдвиг.&lt;br /&gt;
&lt;br /&gt;
* [[Сегментация изображений|'''Сегментация плоскости''']]: ищем группы пикселей, каждая из которых характеризует один смысловой объект.&lt;br /&gt;
&lt;br /&gt;
* '''Неплоская карта глубины''': ищем одно-канальную (или неплоскую) карту глубины, то есть карту глубины, где каждый пиксель, либо на глубине 0, либо на глубине 1.&lt;br /&gt;
&lt;br /&gt;
=== Неконтролируемая оценка глубины монокуляра с консистенцией слева направо (CVPR 2017) ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
В данной работе&amp;lt;ref namr=&amp;quot;leftrigth&amp;quot;&amp;gt; Clément Godard, Oisin Mac Aodha, Gabriel J. Brostow &amp;quot;Unsupervised Monocular Depth Estimation with Left-Right Consistency&amp;quot; [https://arxiv.org/abs/1609.03677v3]&amp;lt;/ref&amp;gt; предлагается сверточная нейронная сеть, обученная выполнять оценку глубины одного изображения без реальных данных. Авторы предлагают сетевую архитектуру, которая выполняет сквозную оценку глубины изображения, полученного с 1 камеры, без учителя, что обеспечивает согласованность глубины слева направо внутри сети.&lt;br /&gt;
Сеть оценивает глубину, выводя смещения, которые искажают левое изображение, чтобы соответствовать правому. Левое входное изображение используется для вывода смещений слева направо и справа налево. Сеть генерирует предсказанное изображение с обратным отображением с помощью билинейного сэмплера. Это приводит к полностью дифференциальной модели формирования изображения.&lt;br /&gt;
Сверточная архитектура вдохновлена так же DipsNet'ом. Она состоит из двух частей—кодера и декодера. Декодер использует пропуск соединений из блоков активации кодера, чтобы распознавать детали с высоким разрешением. Сеть предсказывает две карты смещений — слева направо и справа налево.&lt;br /&gt;
В процессе обучения сеть генерирует изображение путем выборки пикселей из противоположного стереоизображения. Модель формирования изображения использует сэмплер изображений из пространственной трансформаторной сети (STN) для выборки входного изображения с помощью карты смещений.&lt;br /&gt;
&lt;br /&gt;
=== Обучение без учителя поиска карты глубины из видео (CVPR 2017) ===&lt;br /&gt;
&lt;br /&gt;
Авторы данной статьи &amp;lt;ref name=&amp;quot;cvrp_dnn&amp;quot;&amp;gt;Tinghui Zhou, Matthew Brown, Noah Snavely, David G. Lowe &amp;quot;Unsupervised Learning of Depth and Ego-Motion from Video&amp;quot; [https://arxiv.org/abs/1704.07813v2]&amp;lt;/ref&amp;gt; предлагают методику оценки глубины одной картинки без учителя и движения камеры из беспорядочной видео нарезки. &lt;br /&gt;
&lt;br /&gt;
[[Файл:dnn.png|thumb|400px| Рисунок 5. Aрхитектура сети на базе DispNet  &amp;lt;ref name=&amp;quot;cvrp&amp;quot;&amp;gt;Tinghui Zhou, Matthew Brown, Noah Snavely, David G. Lowe &amp;quot;Unsupervised Learning of Depth and Ego-Motion from Video&amp;quot; Figure 4&amp;lt;/ref&amp;gt;]]&lt;br /&gt;
&lt;br /&gt;
Будем использовать сверточные нейронные сети c глубиной одного вида и многовидовой камерой из неупорядоченного видеоряда. Метод базируется на синтезе видов. Сеть загружает фото объекта в качестве данных ввода и выводит карту глубины на каждый пиксель. Вид объекта может быть синтезирован исходя из глубины на каждый пиксель снимка позиционирования и четкости ближнего вида. Синтез может быть  дифференцирован с CNN по геометрии и модулям позиционирования.&lt;br /&gt;
Авторы взяли на вооружение архитектуру DispNet&amp;lt;ref name=&amp;quot;dispNet&amp;quot;&amp;gt; Nikolaus Mayer, Eddy Ilg, Philip Hausser, Philipp Fischer &amp;quot;A Large Dataset to Train Convolutional Networks&lt;br /&gt;
for Disparity, Optical Flow, and Scene Flow Estimation&amp;quot; [https://arxiv.org/pdf/1512.02134.pdf]&amp;lt;/ref&amp;gt;, которая сконструирована в виде енкодера - декодера с пропущенными соединениями и многомасштабными блоками предсказания. Функция активации ReLU отслеживает все сверточные слои кроме предсказанных.&lt;br /&gt;
Вид объекта со всех источников формирует входные данные в сеть позиционной оценки. На выходе получается относительная позиция между видом объекта и видом каждого источника. Сеть состоит из двух 7 шаговых сверток за которым следует свертка 1 х 1. За исключением последнего слоя свертки, где применяется нелинейная активация, все другие отслеживаются функцией активации ReLU. Сеть объяснимых предсказаний дает доступ к первым пяти закодированным слоям сети позиционирования. За ней следуют 5 слоев обратной свертки с многомасштабными блоками предсказаний. Кроме слоев предсказаний все уровни свертки и обратной свертки отслеживаются ReLU.&lt;br /&gt;
&lt;br /&gt;
=== Прогнозирование глубины без датчиков: использование структуры для обучения без учителя по монокулярным видео (AAAI 2019) ===&lt;br /&gt;
&lt;br /&gt;
[[Файл:ego-motion.png|thumb|500px| Рисунок 5. Aрхитектура сети на базе DispNet  &amp;lt;ref name=&amp;quot;cvrp&amp;quot;&amp;gt;Tinghui Zhou, Matthew Brown, Noah Snavely, David G. Lowe &amp;quot;Unsupervised Learning of Depth and Ego-Motion from Video&amp;quot; Figure 4&amp;lt;/ref&amp;gt;]]&lt;br /&gt;
&lt;br /&gt;
Данная статья &amp;lt;ref name=&amp;quot;aaai&amp;quot;&amp;gt; Vincent Casser, Soeren Pirk, Reza Mahjourian, Anelia Angelova &amp;quot;Depth Prediction Without the Sensors: Leveraging Structure for Unsupervised Learning from Monocular Videos&amp;quot; [https://arxiv.org/abs/1811.06152v1]&amp;lt;/ref&amp;gt; посвящена задаче обучения без учителя глубины сцены и эго-движения робота, где наблюдение обеспечивается видеозаписями с одной камеры. Это делается путем введения геометрической структуры в процесс обучения. Он включает в себя моделирование сцены и отдельных объектов, эго-движения камеры и движения объектов, изучаемых с помощью монокулярных видеовходов. Авторы вводят модель движения объекта, которая имеет ту же архитектуру, что и сеть эго-движения. Она принимает последовательность изображений RGB в качестве входных данных и дополняется предварительно вычисленными масками сегментации экземпляров. Работа модели движения заключается в том, чтобы научиться предсказывать векторы трансформации каждого объекта в трехмерном пространстве. Это создает видимость наблюдаемого объекта в соответствующем целевом кадре.&lt;br /&gt;
&lt;br /&gt;
== См. также ==&lt;br /&gt;
&lt;br /&gt;
* [[Компьютерное зрение]]&lt;br /&gt;
&lt;br /&gt;
* [[Оценка положения]]&lt;br /&gt;
&lt;br /&gt;
* [[Задача нахождения объектов на изображении]]&lt;br /&gt;
&lt;br /&gt;
== Примечания ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Источники информации ==&lt;br /&gt;
&lt;br /&gt;
* Чугунов Р. А., Кульневич А. Д., Аксенов С. В. Методика построения карт глубины стереоизображения с помощью капсульной нейронной сети //Доклады Томского государственного университета систем управления и радиоэлектроники. – 2019. – Т. 22. – №. 1.[https://cyberleninka.ru/article/n/metodika-postroeniya-kart-glubiny-stereoizobrazheniya-s-pomoschyu-kapsulnoy-neyronnoy-seti/viewer]&lt;br /&gt;
&lt;br /&gt;
* 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]&lt;br /&gt;
&lt;br /&gt;
*  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]&lt;br /&gt;
&lt;br /&gt;
* 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]&lt;br /&gt;
&lt;br /&gt;
* 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]&lt;br /&gt;
&lt;br /&gt;
[[Категория:Машинное обучение]]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Компьютерное зрение]]&lt;/div&gt;</summary>
		<author><name>Frak</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9A%D0%B0%D1%80%D1%82%D0%B0_%D0%B3%D0%BB%D1%83%D0%B1%D0%B8%D0%BD%D1%8B&amp;diff=79889</id>
		<title>Карта глубины</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9A%D0%B0%D1%80%D1%82%D0%B0_%D0%B3%D0%BB%D1%83%D0%B1%D0%B8%D0%BD%D1%8B&amp;diff=79889"/>
				<updated>2021-01-22T13:52:03Z</updated>
		
		<summary type="html">&lt;p&gt;Frak: /* Неконтролируемая оценка глубины монокуляра с консистенцией слева направо (CVPR 2017) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Карта глубины''' (англ. depth map) — это изображение, где для каждого пикселя вместо цвета хранится его расстояние до камеры.&amp;lt;ref name=&amp;quot;def&amp;quot;&amp;gt;Alexey Kurakin &amp;quot;Основы стереозрения&amp;quot;[https://habr.com/ru/post/130300/]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В компьютерной 3D-графике и [[Компьютерное зрение|компьютерном зрении]] карта глубины представляет собой изображение или канал изображения, содержащий информацию о расстоянии поверхностей объектов сцены от точки обзора. &lt;br /&gt;
&lt;br /&gt;
== Мотивация ==&lt;br /&gt;
&lt;br /&gt;
Карта глубины изображения содержит в себе информацию о расстоянии между различными объектами или частями объектов, представленных на данном изображении. Эта информация может быть полезна во многих областях. &lt;br /&gt;
 &lt;br /&gt;
* Для создания 3D-сенсеров. Они способны строить трёхмерную картину своего окружения, используются для [[Оценка положения|ориентации]] автономного робота в пространстве.&lt;br /&gt;
&lt;br /&gt;
* Для систем, использующих технологии дополненной и виртуальной реальности. Например, камеры, которые фиксируют действия пользователя в видеоиграх с технологией виртуальной реальности.&lt;br /&gt;
&lt;br /&gt;
* В беспилотных автомобилях, которые также используют карты глубин для ориентации на дороге.&lt;br /&gt;
&lt;br /&gt;
* Для обработки фотографий. Например, карты глубин используют для размытия фона на фотографии, чтобы добиться более чёткого выделения человека&amp;lt;ref name=&amp;quot;expls&amp;quot;&amp;gt;Примеры из &amp;quot;Research Guide for Depth Estimation with Deep Learning&amp;quot;[https://www.kdnuggets.com/2019/11/research-guide-depth-estimation-deep-learning.html]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Методы построения карты глубины ==&lt;br /&gt;
&lt;br /&gt;
Карта глубины может быть получена с помощью '''специальной камеры глубины''', по '''стереопаре изображений''', а также с помощью [[Нейронные сети, перцептрон|'''нейронных сетей''']].&lt;br /&gt;
&lt;br /&gt;
== Построение с помощью специальных камер глубин == &lt;br /&gt;
&lt;br /&gt;
[[Файл:ToF.jpg|thumb|250px| Рисунок 1. Пример работы ToF-камеры.]]&lt;br /&gt;
&lt;br /&gt;
* '''ToF-камеры''' (англ. Time of Flight). Принцип работы данной камеры основан на измерении задержки света, с которой свет возвращается в каждую точку. Имея несколько сенсоров с разным временем накопления заряда и, зная сдвиг по времени относительно источника для каждого сенсора и снятой яркости вспышки, мы можем рассчитать сдвиг и, соответственно, расстояние до объекта. Причем чем больше сенсоров задействовано, тем выше точность метода.&lt;br /&gt;
&lt;br /&gt;
* '''Структурированные световые камеры''' (aнгл. Structured light camera). Принцип работы данной камеры один из самых старых. Ставим проектор, который создает, например, горизонтальные (а потом и вертикальные) полоски и рядом камеру, которая снимает картину с полосками. В некоторых вариантах используется псевдослучайный набор точек (например MS Kinect {{---}} бесконтактный сенсорный игровой контроллер, для консолей Xbox 360, Xbox One и персональных компьютеров под управлением ОС Windows&amp;lt;ref name=&amp;quot;kinect&amp;quot;&amp;gt; О MicriSoft Kinect [https://en.wikipedia.org/wiki/Kinect]&amp;lt;/ref&amp;gt;). Проекторы обычно работают в инфракрасном спектре, чтобы не мешать пользователям. Поскольку камера и проектор смещены друг относительно друга, то и полоски также будут смещаться пропорционально расстоянию до объекта. Измеряя это смещение, мы можем рассчитывать расстояние до объекта. Вполне понятны сложности, с которыми можно столкнуться при использовании этого метода: это необходимость настройки и калибровки проектора, и проблема того, что нам нужно относительно благоприятное освещение. К примеру, солнце может засветить полосы, и что-то распознать будет тяжело.&lt;br /&gt;
&lt;br /&gt;
== Построения карты глубины по стереопаре ==&lt;br /&gt;
&lt;br /&gt;
Идея, лежащая в основе построения карты глубины по '''стереопаре''', проста. Для каждой точки на одном изображении выполняется поиск [[Ключевые точки изображения|парной ей точки]]&amp;lt;sup&amp;gt;[на 21.01.21 не создан]&amp;lt;/sup&amp;gt; на другом изображении. А по паре соответствующих точек можно выполнить [[Триангуляция полигонов (ушная + монотонная)|триангуляцию]] и определить координаты их [[Отображения|прообраза]] в трехмерном пространстве. Зная трехмерные координаты прообраза, глубина вычисляется как расстояние до плоскости камеры.&lt;br /&gt;
&lt;br /&gt;
Парную точку нужно искать на эпиполярной&amp;lt;ref name=&amp;quot;Epipolar&amp;quot;&amp;gt;Информация о эпиполярной геометрии[https://ru.qaz.wiki/wiki/Epipolar_geometry]&amp;lt;/ref&amp;gt; линии. Соответственно, для упрощения поиска изображения выравнивают так, чтобы все эпиполярные линии были параллельны сторонам изображения (обычно горизонтальны). Более того, изображения выравнивают так, чтобы для точки с координатами &amp;lt;math&amp;gt;(x_0, y_0)&amp;lt;/math&amp;gt; соответствующая ей эпиполярная линия задавалась уравнением &amp;lt;math&amp;gt;x = x_0&amp;lt;/math&amp;gt;. Тогда для каждой точки, соответствующую ей парную точку, нужно искать в той-же строчке на изображении со второй камеры. Такой процесс выравнивания изображений называют '''ректификацией''' (rectification).&lt;br /&gt;
&lt;br /&gt;
[[Файл:Stereo.png|thumb|300px| Рисунок 2. Результат построения карты смещений по двум картинкам.&amp;lt;ref name=&amp;quot;img2&amp;quot;&amp;gt; &amp;quot;Основы стереозрения&amp;quot; Рис. 3 [https://habr.com/ru/post/130300/]&amp;lt;/ref&amp;gt;]]&lt;br /&gt;
&lt;br /&gt;
После того, как изображения '''ректифицированы''', выполняют поиск соответствующих пар точек. Для каждого пикселя одной картинки с координатами &amp;lt;math&amp;gt;(x_0, y_0)&amp;lt;/math&amp;gt; выполняется поиск пикселя на другой картинке. При этом предполагается, что пиксель на второй картинке должен иметь координаты &amp;lt;math&amp;gt;(x_0 - d, y_0)&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;d&amp;lt;/math&amp;gt; — величина называемая смещением. Поиск соответствующего пикселя выполняется путем вычисления максимума функции отклика, в качестве которой может выступать, например, [[Корреляция случайных величин|корреляция]] окрестностей пикселей. В результате получается карта смещений, пример которой приведен на рис. 2. &lt;br /&gt;
&lt;br /&gt;
Собственно значения глубины обратно пропорциональны величине смещения пикселей.&lt;br /&gt;
&lt;br /&gt;
== Использование нейронных сетей ==&lt;br /&gt;
&lt;br /&gt;
Существует множество методов, использующих нейронные сети. Приведём пару примеров таких решений.&lt;br /&gt;
&lt;br /&gt;
=== Построение с помощью свёрточных нейронных сетей ===&lt;br /&gt;
&lt;br /&gt;
Используем [[Сверточные нейронные сети|сверточные нейронные сети]] для построения карты глубины следующим образом&lt;br /&gt;
&amp;lt;ref name=&amp;quot;cnn_rew&amp;quot;&amp;gt; Xiaobai Ma, Zhenglin Geng, Zhi Bie &amp;quot;Depth Estimation from Single Image Using CNN-Residual Network&amp;quot; [http://cs231n.stanford.edu/reports/2017/pdfs/203.pdf]&amp;lt;/ref&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
*  '''Создаем карту смещений''': используя два изображения с камер, близко расположенных друг к другу, создаем карту различий, точно так же как в методе построения по стереопаре.&lt;br /&gt;
&lt;br /&gt;
* '''Ищем реальную карту глубины для обучения''': с помощью карты смещений, можем построить карту глубины &amp;lt;math&amp;gt;y&amp;lt;/math&amp;gt; вышеописанным способом. Также допустимы другие способы построения карты глубины для обучения нейронной сети.&lt;br /&gt;
&lt;br /&gt;
*  '''Функция потерь''': определим [[Функция потерь и эмпирический риск|функцию потерь]], для предсказанной карты &amp;lt;math&amp;gt;\hat y&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;d_i = log( y_i) - log (\hat y_i)&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;\lambda \in [0, 1]&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;n &amp;lt;/math&amp;gt; — количество пикселей. &amp;lt;math&amp;gt;L(y, \hat y) =  \frac{1}{n} \sum\limits_{i} d^2_i - \frac{\lambda}{n^2}(\sum\limits_{i} d_i)^2&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;y_i&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;\hat y_i&amp;lt;/math&amp;gt; это i пискель для для реальной карты глубин и для предсказанной карты, соответственно. Гиперпараметр &amp;lt;math&amp;gt;\lambda&amp;lt;/math&amp;gt;, нужен для того, чтобы функция потерь меньше росла при большом количестве пикселей, предсказание для которых достаточно близко к реальному. Например, если &amp;lt;math&amp;gt;\lambda = 0&amp;lt;/math&amp;gt;, то мы просто придём к оптимизации в L2 для &amp;lt;math&amp;gt;d_i&amp;lt;/math&amp;gt;, т.е. &amp;lt;math&amp;gt;L(y, \hat y) =  \frac{1}{n} \sum\limits_{i} d^2_i &amp;lt;/math&amp;gt;.&amp;lt;ref name=&amp;quot;loss&amp;quot;&amp;gt;David Eigen, Christian Puhrsch, Rob Fergus &amp;quot;Depth Map Prediction from a Single Imageusing a Multi-Scale Deep Network&amp;quot; стр. 5&amp;lt;/ref&amp;gt; &lt;br /&gt;
&lt;br /&gt;
* '''Обучение свёрточной нейронной сети''': далее идёт обычное обучение нейронной сети по карте различий путем обратного распространения ошибки, оптимизируя заданную выше функцию потерь.&lt;br /&gt;
&lt;br /&gt;
В итоге, по обученной нейронной сети мы можем создавать карту глубины, не проводя расчётов для поиска карт смещения и имея только изображение объекта или пространства. &amp;lt;ref name=&amp;quot;cnn&amp;quot;&amp;gt;Реализация, основанная на свёрточных нейронных сетях [https://www.kaggle.com/kmader/cnn-for-generating-depth-maps-from-rgb-images]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Также возможно использование усложнённых архитектур свёрточных нейронных сетей типа '''DenseNet'''.&lt;br /&gt;
&lt;br /&gt;
'''DenseNet'''&amp;lt;ref name=&amp;quot;DenseNet&amp;quot;&amp;gt;Оригинальная статья описывающая DenseNet [https://arxiv.org/abs/1611.09326]&amp;lt;/ref&amp;gt; {{---}} это свёрточная нейронные сеть, в которой выход каждого из слоев подаётся на вход всем слоям, лежащих ниже.&lt;br /&gt;
&lt;br /&gt;
=== Построение с помощью капсульных нейронных сетей ===&lt;br /&gt;
&lt;br /&gt;
Свёрточные нейронные сети способны регистрировать только наличие какого-либо объекта на картинке, не кодируя его ориентацию и положение. Но '''капсульные нейронные сети''' (англ. Capsule Neural Network)&amp;lt;ref name=&amp;quot;CapsNet&amp;quot;&amp;gt;Sara Sabour, Nicholas Frosst, Geoffrey E. Hinton &amp;quot;Dynamic Routing Between Capsules&amp;quot; [https://arxiv.org/pdf/1710.09829.pdf]&amp;lt;/ref&amp;gt; лишены этого недостатка.&lt;br /&gt;
&lt;br /&gt;
[[Файл:capsnet.jpg|thumb|400px| Рисунок 3. Структура капсульной нейронной сети &amp;lt;ref name=&amp;quot;img&amp;quot;&amp;gt; &amp;quot;Design and Investigation of Capsule Networks for Sentence Classification&amp;quot; Figure 2. [https://www.mdpi.com/2076-3417/9/11/2200/htm]&amp;lt;/ref&amp;gt;.]]&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Капсульная нейронная сеть&amp;quot; состоит из капсул или групп нейронов, чтобы идентифицировать закономерности в изображении. Эта информация поступает в виде векторов, содержащих ориентацию и положение узоров на изображении, которое затем принимается капсулами более высокого уровня. Капсулы более высокого уровня обрабатывают эту информацию из нескольких капсул более низкого уровня и впоследствии выдают прогноз. Капсулы одного уровня не имеют связей друг с другом и вычисляют информацию независимо друг от друга. Капсулы образуются путем разделения выходных данных из свёрточного слоя. Мы делим наш трехмерный вектор на капсулы методом &amp;quot;нарезания&amp;quot; таким образом, чтобы в каждой капсуле была информация о каждом пикселе, т.е. по трехмерной координате.&lt;br /&gt;
 &lt;br /&gt;
Состояние нейронов капсульной нейронной сети внутри изображения фиксирует свойство области или объекта внутри изображения: его положение и ориентацию.&lt;br /&gt;
&lt;br /&gt;
Использование капсульной нейронной сети аналогично использованию обычных свёрточных сетей, описанному выше. &lt;br /&gt;
В целом, данная сеть показывает более точные результаты предсказания глубины.&lt;br /&gt;
&lt;br /&gt;
=== Построение с помощью PlanetNet ===&lt;br /&gt;
&lt;br /&gt;
Так же есть архитектуры, решающие данную задачу и без обучения на карте смещений, построенной с помощью двух изображений. Одной из таких является '''PlaneNet'''. &lt;br /&gt;
&lt;br /&gt;
'''PlaneNet'''&amp;lt;ref name=&amp;quot;planetNet&amp;quot;&amp;gt; Chen Liu, Jimei Yang, Duygu Ceylan, Ersin Yumer, Yasutaka Furukawa &amp;quot;PlaneNet: Piece-wise Planar Reconstruction from a Single RGB Image&amp;quot; [https://arxiv.org/abs/1804.06278v1]&amp;lt;/ref&amp;gt; {{---}} глубокая нейронная сеть, построенная на расширенных остаточных сетях (aнгл. Dilated Residual Networks или DRN)&amp;lt;ref name=&amp;quot;drn&amp;quot;&amp;gt; Fisher Yu, Vladlen Koltun, Thomas Funkhouser &amp;quot;Dilated Residual Networks&amp;quot; [https://arxiv.org/abs/1705.09914]&amp;lt;/ref&amp;gt;. Она получает карту глубин путем композиции выходов трех подзадач:&lt;br /&gt;
&lt;br /&gt;
[[Файл:plane_net.png|thumb|500px| Рисунок 4. Прогнозируемые PlaneNet параметры по одной rgb картинке: cегметация плоскости, параметры плоскостей, неплоская карта глубины&amp;lt;ref name=&amp;quot;img4&amp;quot;&amp;gt; Chen Liu, Jimei Yang, Duygu Ceylan, Ersin Yumer, Yasutaka Furukawa &amp;quot;PlaneNet: Piece-wise Planar Reconstruction from a Single RGB Image&amp;quot; Figure 2.&amp;lt;/ref&amp;gt;.]]&lt;br /&gt;
&lt;br /&gt;
* '''Параметры плоскостей''': пытаемся предсказать количество плоскостей K, а после ищем на изображение K плоских поверхностей, каждая поверхность задаётся тремя параметрами: нормальная, прямая и сдвиг.&lt;br /&gt;
&lt;br /&gt;
* [[Сегментация изображений|'''Сегментация плоскости''']]: ищем группы пикселей, каждая из которых характеризует один смысловой объект.&lt;br /&gt;
&lt;br /&gt;
* '''Неплоская карта глубины''': ищем одно-канальную (или неплоскую) карту глубины, то есть карту глубины, где каждый пиксель, либо на глубине 0, либо на глубине 1.&lt;br /&gt;
&lt;br /&gt;
=== Неконтролируемая оценка глубины монокуляра с консистенцией слева направо (CVPR 2017) ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
В данной работе&amp;lt;ref namr=&amp;quot;left-rigth&amp;quot;&amp;gt; Clément Godard, Oisin Mac Aodha, Gabriel J. Brostow &amp;quot;Unsupervised Monocular Depth Estimation with Left-Right Consistency&amp;quot; [https://arxiv.org/abs/1609.03677v3]&amp;lt;/ref&amp;gt; предлагается сверточная нейронная сеть, обученная выполнять оценку глубины одного изображения без реальных данных. Авторы предлагают сетевую архитектуру, которая выполняет сквозную оценку глубины изображения, полученного с 1 камеры, без учителя, что обеспечивает согласованность глубины слева направо внутри сети.&lt;br /&gt;
Сеть оценивает глубину, выводя смещения, которые искажают левое изображение, чтобы соответствовать правому. Левое входное изображение используется для вывода смещений слева направо и справа налево. Сеть генерирует предсказанное изображение с обратным отображением с помощью билинейного сэмплера. Это приводит к полностью дифференциальной модели формирования изображения.&lt;br /&gt;
Сверточная архитектура вдохновлена так же DipsNet'ом. Она состоит из двух частей—кодера и декодера. Декодер использует пропуск соединений из блоков активации кодера, чтобы распознавать детали с высоким разрешением. Сеть предсказывает две карты смещений — слева направо и справа налево.&lt;br /&gt;
В процессе обучения сеть генерирует изображение путем выборки пикселей из противоположного стереоизображения. Модель формирования изображения использует сэмплер изображений из пространственной трансформаторной сети (STN) для выборки входного изображения с помощью карты смещений.&lt;br /&gt;
&lt;br /&gt;
=== Обучение без учителя поиска карты глубины из видео (CVPR 2017) ===&lt;br /&gt;
&lt;br /&gt;
Авторы данной статьи &amp;lt;ref name=&amp;quot;cvrp_dnn&amp;quot;&amp;gt;Tinghui Zhou, Matthew Brown, Noah Snavely, David G. Lowe &amp;quot;Unsupervised Learning of Depth and Ego-Motion from Video&amp;quot; [https://arxiv.org/abs/1704.07813v2]&amp;lt;/ref&amp;gt; предлагают методику оценки глубины одной картинки без учителя и движения камеры из беспорядочной видео нарезки. &lt;br /&gt;
&lt;br /&gt;
[[Файл:dnn.png|thumb|400px| Рисунок 5. Aрхитектура сети на базе DispNet  &amp;lt;ref name=&amp;quot;cvrp&amp;quot;&amp;gt;Tinghui Zhou, Matthew Brown, Noah Snavely, David G. Lowe &amp;quot;Unsupervised Learning of Depth and Ego-Motion from Video&amp;quot; Figure 4&amp;lt;/ref&amp;gt;]]&lt;br /&gt;
&lt;br /&gt;
Будем использовать сверточные нейронные сети c глубиной одного вида и многовидовой камерой из неупорядоченного видеоряда. Метод базируется на синтезе видов. Сеть загружает фото объекта в качестве данных ввода и выводит карту глубины на каждый пиксель. Вид объекта может быть синтезирован исходя из глубины на каждый пиксель снимка позиционирования и четкости ближнего вида. Синтез может быть  дифференцирован с CNN по геометрии и модулям позиционирования.&lt;br /&gt;
Авторы взяли на вооружение архитектуру DispNet&amp;lt;ref name=&amp;quot;dispNet&amp;quot;&amp;gt; Nikolaus Mayer, Eddy Ilg, Philip Hausser, Philipp Fischer &amp;quot;A Large Dataset to Train Convolutional Networks&lt;br /&gt;
for Disparity, Optical Flow, and Scene Flow Estimation&amp;quot; [https://arxiv.org/pdf/1512.02134.pdf]&amp;lt;/ref&amp;gt;, которая сконструирована в виде енкодера - декодера с пропущенными соединениями и многомасштабными блоками предсказания. Функция активации ReLU отслеживает все сверточные слои кроме предсказанных.&lt;br /&gt;
Вид объекта со всех источников формирует входные данные в сеть позиционной оценки. На выходе получается относительная позиция между видом объекта и видом каждого источника. Сеть состоит из двух 7 шаговых сверток за которым следует свертка 1 х 1. За исключением последнего слоя свертки, где применяется нелинейная активация, все другие отслеживаются функцией активации ReLU. Сеть объяснимых предсказаний дает доступ к первым пяти закодированным слоям сети позиционирования. За ней следуют 5 слоев обратной свертки с многомасштабными блоками предсказаний. Кроме слоев предсказаний все уровни свертки и обратной свертки отслеживаются ReLU.&lt;br /&gt;
&lt;br /&gt;
=== Прогнозирование глубины без датчиков: использование структуры для обучения без учителя по монокулярным видео (AAAI 2019) ===&lt;br /&gt;
&lt;br /&gt;
[[Файл:ego-motion.png|thumb|500px| Рисунок 5. Aрхитектура сети на базе DispNet  &amp;lt;ref name=&amp;quot;cvrp&amp;quot;&amp;gt;Tinghui Zhou, Matthew Brown, Noah Snavely, David G. Lowe &amp;quot;Unsupervised Learning of Depth and Ego-Motion from Video&amp;quot; Figure 4&amp;lt;/ref&amp;gt;]]&lt;br /&gt;
&lt;br /&gt;
Данная статья &amp;lt;ref name=&amp;quot;aaai&amp;quot;&amp;gt; Vincent Casser, Soeren Pirk, Reza Mahjourian, Anelia Angelova &amp;quot;Depth Prediction Without the Sensors: Leveraging Structure for Unsupervised Learning from Monocular Videos&amp;quot; [https://arxiv.org/abs/1811.06152v1]&amp;lt;/ref&amp;gt; посвящена задаче обучения без учителя глубины сцены и эго-движения робота, где наблюдение обеспечивается видеозаписями с одной камеры. Это делается путем введения геометрической структуры в процесс обучения. Он включает в себя моделирование сцены и отдельных объектов, эго-движения камеры и движения объектов, изучаемых с помощью монокулярных видеовходов. Авторы вводят модель движения объекта, которая имеет ту же архитектуру, что и сеть эго-движения. Она принимает последовательность изображений RGB в качестве входных данных и дополняется предварительно вычисленными масками сегментации экземпляров. Работа модели движения заключается в том, чтобы научиться предсказывать векторы трансформации каждого объекта в трехмерном пространстве. Это создает видимость наблюдаемого объекта в соответствующем целевом кадре.&lt;br /&gt;
&lt;br /&gt;
== См. также ==&lt;br /&gt;
&lt;br /&gt;
* [[Компьютерное зрение]]&lt;br /&gt;
&lt;br /&gt;
* [[Оценка положения]]&lt;br /&gt;
&lt;br /&gt;
* [[Задача нахождения объектов на изображении]]&lt;br /&gt;
&lt;br /&gt;
== Примечания ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Источники информации ==&lt;br /&gt;
&lt;br /&gt;
* Чугунов Р. А., Кульневич А. Д., Аксенов С. В. Методика построения карт глубины стереоизображения с помощью капсульной нейронной сети //Доклады Томского государственного университета систем управления и радиоэлектроники. – 2019. – Т. 22. – №. 1.[https://cyberleninka.ru/article/n/metodika-postroeniya-kart-glubiny-stereoizobrazheniya-s-pomoschyu-kapsulnoy-neyronnoy-seti/viewer]&lt;br /&gt;
&lt;br /&gt;
* 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]&lt;br /&gt;
&lt;br /&gt;
*  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]&lt;br /&gt;
&lt;br /&gt;
* 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]&lt;br /&gt;
&lt;br /&gt;
* 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]&lt;br /&gt;
&lt;br /&gt;
[[Категория:Машинное обучение]]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Компьютерное зрение]]&lt;/div&gt;</summary>
		<author><name>Frak</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9A%D0%B0%D1%80%D1%82%D0%B0_%D0%B3%D0%BB%D1%83%D0%B1%D0%B8%D0%BD%D1%8B&amp;diff=79884</id>
		<title>Карта глубины</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9A%D0%B0%D1%80%D1%82%D0%B0_%D0%B3%D0%BB%D1%83%D0%B1%D0%B8%D0%BD%D1%8B&amp;diff=79884"/>
				<updated>2021-01-22T13:43:05Z</updated>
		
		<summary type="html">&lt;p&gt;Frak: /* Прогнозирование глубины без датчиков: использование структуры для обучения без учителя по монокулярным видео (AAAI 2019) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Карта глубины''' (англ. depth map) — это изображение, где для каждого пикселя вместо цвета хранится его расстояние до камеры.&amp;lt;ref name=&amp;quot;def&amp;quot;&amp;gt;Alexey Kurakin &amp;quot;Основы стереозрения&amp;quot;[https://habr.com/ru/post/130300/]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В компьютерной 3D-графике и [[Компьютерное зрение|компьютерном зрении]] карта глубины представляет собой изображение или канал изображения, содержащий информацию о расстоянии поверхностей объектов сцены от точки обзора. &lt;br /&gt;
&lt;br /&gt;
== Мотивация ==&lt;br /&gt;
&lt;br /&gt;
Карта глубины изображения содержит в себе информацию о расстоянии между различными объектами или частями объектов, представленных на данном изображении. Эта информация может быть полезна во многих областях. &lt;br /&gt;
 &lt;br /&gt;
* Для создания 3D-сенсеров. Они способны строить трёхмерную картину своего окружения, используются для [[Оценка положения|ориентации]] автономного робота в пространстве.&lt;br /&gt;
&lt;br /&gt;
* Для систем, использующих технологии дополненной и виртуальной реальности. Например, камеры, которые фиксируют действия пользователя в видеоиграх с технологией виртуальной реальности.&lt;br /&gt;
&lt;br /&gt;
* В беспилотных автомобилях, которые также используют карты глубин для ориентации на дороге.&lt;br /&gt;
&lt;br /&gt;
* Для обработки фотографий. Например, карты глубин используют для размытия фона на фотографии, чтобы добиться более чёткого выделения человека&amp;lt;ref name=&amp;quot;expls&amp;quot;&amp;gt;Примеры из &amp;quot;Research Guide for Depth Estimation with Deep Learning&amp;quot;[https://www.kdnuggets.com/2019/11/research-guide-depth-estimation-deep-learning.html]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Методы построения карты глубины ==&lt;br /&gt;
&lt;br /&gt;
Карта глубины может быть получена с помощью '''специальной камеры глубины''', по '''стереопаре изображений''', а также с помощью [[Нейронные сети, перцептрон|'''нейронных сетей''']].&lt;br /&gt;
&lt;br /&gt;
== Построение с помощью специальных камер глубин == &lt;br /&gt;
&lt;br /&gt;
[[Файл:ToF.jpg|thumb|250px| Рисунок 1. Пример работы ToF-камеры.]]&lt;br /&gt;
&lt;br /&gt;
* '''ToF-камеры''' (англ. Time of Flight). Принцип работы данной камеры основан на измерении задержки света, с которой свет возвращается в каждую точку. Имея несколько сенсоров с разным временем накопления заряда и, зная сдвиг по времени относительно источника для каждого сенсора и снятой яркости вспышки, мы можем рассчитать сдвиг и, соответственно, расстояние до объекта. Причем чем больше сенсоров задействовано, тем выше точность метода.&lt;br /&gt;
&lt;br /&gt;
* '''Структурированные световые камеры''' (aнгл. Structured light camera). Принцип работы данной камеры один из самых старых. Ставим проектор, который создает, например, горизонтальные (а потом и вертикальные) полоски и рядом камеру, которая снимает картину с полосками. В некоторых вариантах используется псевдослучайный набор точек (например MS Kinect {{---}} бесконтактный сенсорный игровой контроллер, для консолей Xbox 360, Xbox One и персональных компьютеров под управлением ОС Windows&amp;lt;ref name=&amp;quot;kinect&amp;quot;&amp;gt; О MicriSoft Kinect [https://en.wikipedia.org/wiki/Kinect]&amp;lt;/ref&amp;gt;). Проекторы обычно работают в инфракрасном спектре, чтобы не мешать пользователям. Поскольку камера и проектор смещены друг относительно друга, то и полоски также будут смещаться пропорционально расстоянию до объекта. Измеряя это смещение, мы можем рассчитывать расстояние до объекта. Вполне понятны сложности, с которыми можно столкнуться при использовании этого метода: это необходимость настройки и калибровки проектора, и проблема того, что нам нужно относительно благоприятное освещение. К примеру, солнце может засветить полосы, и что-то распознать будет тяжело.&lt;br /&gt;
&lt;br /&gt;
== Построения карты глубины по стереопаре ==&lt;br /&gt;
&lt;br /&gt;
Идея, лежащая в основе построения карты глубины по '''стереопаре''', проста. Для каждой точки на одном изображении выполняется поиск [[Ключевые точки изображения|парной ей точки]]&amp;lt;sup&amp;gt;[на 21.01.21 не создан]&amp;lt;/sup&amp;gt; на другом изображении. А по паре соответствующих точек можно выполнить [[Триангуляция полигонов (ушная + монотонная)|триангуляцию]] и определить координаты их [[Отображения|прообраза]] в трехмерном пространстве. Зная трехмерные координаты прообраза, глубина вычисляется как расстояние до плоскости камеры.&lt;br /&gt;
&lt;br /&gt;
Парную точку нужно искать на эпиполярной&amp;lt;ref name=&amp;quot;Epipolar&amp;quot;&amp;gt;Информация о эпиполярной геометрии[https://ru.qaz.wiki/wiki/Epipolar_geometry]&amp;lt;/ref&amp;gt; линии. Соответственно, для упрощения поиска изображения выравнивают так, чтобы все эпиполярные линии были параллельны сторонам изображения (обычно горизонтальны). Более того, изображения выравнивают так, чтобы для точки с координатами &amp;lt;math&amp;gt;(x_0, y_0)&amp;lt;/math&amp;gt; соответствующая ей эпиполярная линия задавалась уравнением &amp;lt;math&amp;gt;x = x_0&amp;lt;/math&amp;gt;. Тогда для каждой точки, соответствующую ей парную точку, нужно искать в той-же строчке на изображении со второй камеры. Такой процесс выравнивания изображений называют '''ректификацией''' (rectification).&lt;br /&gt;
&lt;br /&gt;
[[Файл:Stereo.png|thumb|300px| Рисунок 2. Результат построения карты смещений по двум картинкам.&amp;lt;ref name=&amp;quot;img2&amp;quot;&amp;gt; &amp;quot;Основы стереозрения&amp;quot; Рис. 3 [https://habr.com/ru/post/130300/]&amp;lt;/ref&amp;gt;]]&lt;br /&gt;
&lt;br /&gt;
После того, как изображения '''ректифицированы''', выполняют поиск соответствующих пар точек. Для каждого пикселя одной картинки с координатами &amp;lt;math&amp;gt;(x_0, y_0)&amp;lt;/math&amp;gt; выполняется поиск пикселя на другой картинке. При этом предполагается, что пиксель на второй картинке должен иметь координаты &amp;lt;math&amp;gt;(x_0 - d, y_0)&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;d&amp;lt;/math&amp;gt; — величина называемая смещением. Поиск соответствующего пикселя выполняется путем вычисления максимума функции отклика, в качестве которой может выступать, например, [[Корреляция случайных величин|корреляция]] окрестностей пикселей. В результате получается карта смещений, пример которой приведен на рис. 2. &lt;br /&gt;
&lt;br /&gt;
Собственно значения глубины обратно пропорциональны величине смещения пикселей.&lt;br /&gt;
&lt;br /&gt;
== Использование нейронных сетей ==&lt;br /&gt;
&lt;br /&gt;
Существует множество методов, использующих нейронные сети. Приведём пару примеров таких решений.&lt;br /&gt;
&lt;br /&gt;
=== Построение с помощью свёрточных нейронных сетей ===&lt;br /&gt;
&lt;br /&gt;
Используем [[Сверточные нейронные сети|сверточные нейронные сети]] для построения карты глубины следующим образом&lt;br /&gt;
&amp;lt;ref name=&amp;quot;cnn_rew&amp;quot;&amp;gt; Xiaobai Ma, Zhenglin Geng, Zhi Bie &amp;quot;Depth Estimation from Single Image Using CNN-Residual Network&amp;quot; [http://cs231n.stanford.edu/reports/2017/pdfs/203.pdf]&amp;lt;/ref&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
*  '''Создаем карту смещений''': используя два изображения с камер, близко расположенных друг к другу, создаем карту различий, точно так же как в методе построения по стереопаре.&lt;br /&gt;
&lt;br /&gt;
* '''Ищем реальную карту глубины для обучения''': с помощью карты смещений, можем построить карту глубины &amp;lt;math&amp;gt;y&amp;lt;/math&amp;gt; вышеописанным способом. Также допустимы другие способы построения карты глубины для обучения нейронной сети.&lt;br /&gt;
&lt;br /&gt;
*  '''Функция потерь''': определим [[Функция потерь и эмпирический риск|функцию потерь]], для предсказанной карты &amp;lt;math&amp;gt;\hat y&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;d_i = log( y_i) - log (\hat y_i)&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;\lambda \in [0, 1]&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;n &amp;lt;/math&amp;gt; — количество пикселей. &amp;lt;math&amp;gt;L(y, \hat y) =  \frac{1}{n} \sum\limits_{i} d^2_i - \frac{\lambda}{n^2}(\sum\limits_{i} d_i)^2&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;y_i&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;\hat y_i&amp;lt;/math&amp;gt; это i пискель для для реальной карты глубин и для предсказанной карты, соответственно. Гиперпараметр &amp;lt;math&amp;gt;\lambda&amp;lt;/math&amp;gt;, нужен для того, чтобы функция потерь меньше росла при большом количестве пикселей, предсказание для которых достаточно близко к реальному. Например, если &amp;lt;math&amp;gt;\lambda = 0&amp;lt;/math&amp;gt;, то мы просто придём к оптимизации в L2 для &amp;lt;math&amp;gt;d_i&amp;lt;/math&amp;gt;, т.е. &amp;lt;math&amp;gt;L(y, \hat y) =  \frac{1}{n} \sum\limits_{i} d^2_i &amp;lt;/math&amp;gt;.&amp;lt;ref name=&amp;quot;loss&amp;quot;&amp;gt;David Eigen, Christian Puhrsch, Rob Fergus &amp;quot;Depth Map Prediction from a Single Imageusing a Multi-Scale Deep Network&amp;quot; стр. 5&amp;lt;/ref&amp;gt; &lt;br /&gt;
&lt;br /&gt;
* '''Обучение свёрточной нейронной сети''': далее идёт обычное обучение нейронной сети по карте различий путем обратного распространения ошибки, оптимизируя заданную выше функцию потерь.&lt;br /&gt;
&lt;br /&gt;
В итоге, по обученной нейронной сети мы можем создавать карту глубины, не проводя расчётов для поиска карт смещения и имея только изображение объекта или пространства. &amp;lt;ref name=&amp;quot;cnn&amp;quot;&amp;gt;Реализация, основанная на свёрточных нейронных сетях [https://www.kaggle.com/kmader/cnn-for-generating-depth-maps-from-rgb-images]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Также возможно использование усложнённых архитектур свёрточных нейронных сетей типа '''DenseNet'''.&lt;br /&gt;
&lt;br /&gt;
'''DenseNet'''&amp;lt;ref name=&amp;quot;DenseNet&amp;quot;&amp;gt;Оригинальная статья описывающая DenseNet [https://arxiv.org/abs/1611.09326]&amp;lt;/ref&amp;gt; {{---}} это свёрточная нейронные сеть, в которой выход каждого из слоев подаётся на вход всем слоям, лежащих ниже.&lt;br /&gt;
&lt;br /&gt;
=== Построение с помощью капсульных нейронных сетей ===&lt;br /&gt;
&lt;br /&gt;
Свёрточные нейронные сети способны регистрировать только наличие какого-либо объекта на картинке, не кодируя его ориентацию и положение. Но '''капсульные нейронные сети''' (англ. Capsule Neural Network)&amp;lt;ref name=&amp;quot;CapsNet&amp;quot;&amp;gt;Sara Sabour, Nicholas Frosst, Geoffrey E. Hinton &amp;quot;Dynamic Routing Between Capsules&amp;quot; [https://arxiv.org/pdf/1710.09829.pdf]&amp;lt;/ref&amp;gt; лишены этого недостатка.&lt;br /&gt;
&lt;br /&gt;
[[Файл:capsnet.jpg|thumb|400px| Рисунок 3. Структура капсульной нейронной сети &amp;lt;ref name=&amp;quot;img&amp;quot;&amp;gt; &amp;quot;Design and Investigation of Capsule Networks for Sentence Classification&amp;quot; Figure 2. [https://www.mdpi.com/2076-3417/9/11/2200/htm]&amp;lt;/ref&amp;gt;.]]&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Капсульная нейронная сеть&amp;quot; состоит из капсул или групп нейронов, чтобы идентифицировать закономерности в изображении. Эта информация поступает в виде векторов, содержащих ориентацию и положение узоров на изображении, которое затем принимается капсулами более высокого уровня. Капсулы более высокого уровня обрабатывают эту информацию из нескольких капсул более низкого уровня и впоследствии выдают прогноз. Капсулы одного уровня не имеют связей друг с другом и вычисляют информацию независимо друг от друга. Капсулы образуются путем разделения выходных данных из свёрточного слоя. Мы делим наш трехмерный вектор на капсулы методом &amp;quot;нарезания&amp;quot; таким образом, чтобы в каждой капсуле была информация о каждом пикселе, т.е. по трехмерной координате.&lt;br /&gt;
 &lt;br /&gt;
Состояние нейронов капсульной нейронной сети внутри изображения фиксирует свойство области или объекта внутри изображения: его положение и ориентацию.&lt;br /&gt;
&lt;br /&gt;
Использование капсульной нейронной сети аналогично использованию обычных свёрточных сетей, описанному выше. &lt;br /&gt;
В целом, данная сеть показывает более точные результаты предсказания глубины.&lt;br /&gt;
&lt;br /&gt;
=== Построение с помощью PlanetNet ===&lt;br /&gt;
&lt;br /&gt;
Так же есть архитектуры, решающие данную задачу и без обучения на карте смещений, построенной с помощью двух изображений. Одной из таких является '''PlaneNet'''. &lt;br /&gt;
&lt;br /&gt;
'''PlaneNet'''&amp;lt;ref name=&amp;quot;planetNet&amp;quot;&amp;gt; Chen Liu, Jimei Yang, Duygu Ceylan, Ersin Yumer, Yasutaka Furukawa &amp;quot;PlaneNet: Piece-wise Planar Reconstruction from a Single RGB Image&amp;quot; [https://arxiv.org/abs/1804.06278v1]&amp;lt;/ref&amp;gt; {{---}} глубокая нейронная сеть, построенная на расширенных остаточных сетях (aнгл. Dilated Residual Networks или DRN)&amp;lt;ref name=&amp;quot;drn&amp;quot;&amp;gt; Fisher Yu, Vladlen Koltun, Thomas Funkhouser &amp;quot;Dilated Residual Networks&amp;quot; [https://arxiv.org/abs/1705.09914]&amp;lt;/ref&amp;gt;. Она получает карту глубин путем композиции выходов трех подзадач:&lt;br /&gt;
&lt;br /&gt;
[[Файл:plane_net.png|thumb|500px| Рисунок 4. Прогнозируемые PlaneNet параметры по одной rgb картинке: cегметация плоскости, параметры плоскостей, неплоская карта глубины&amp;lt;ref name=&amp;quot;img4&amp;quot;&amp;gt; Chen Liu, Jimei Yang, Duygu Ceylan, Ersin Yumer, Yasutaka Furukawa &amp;quot;PlaneNet: Piece-wise Planar Reconstruction from a Single RGB Image&amp;quot; Figure 2.&amp;lt;/ref&amp;gt;.]]&lt;br /&gt;
&lt;br /&gt;
* '''Параметры плоскостей''': пытаемся предсказать количество плоскостей K, а после ищем на изображение K плоских поверхностей, каждая поверхность задаётся тремя параметрами: нормальная, прямая и сдвиг.&lt;br /&gt;
&lt;br /&gt;
* [[Сегментация изображений|'''Сегментация плоскости''']]: ищем группы пикселей, каждая из которых характеризует один смысловой объект.&lt;br /&gt;
&lt;br /&gt;
* '''Неплоская карта глубины''': ищем одно-канальную (или неплоскую) карту глубины, то есть карту глубины, где каждый пиксель, либо на глубине 0, либо на глубине 1.&lt;br /&gt;
&lt;br /&gt;
=== Неконтролируемая оценка глубины монокуляра с консистенцией слева направо (CVPR 2017) ===&lt;br /&gt;
&lt;br /&gt;
В данной работе предлагается сверточная нейронная сеть, обученная выполнять оценку глубины одного изображения без истинных данных. Авторы предлагают сетевую архитектуру, которая выполняет сквозную неконтролируемую оценку глубины монокуляра с потерей обучения, что обеспечивает согласованность глубины слева направо внутри сети.&lt;br /&gt;
Сеть оценивает глубину, выводя диспропорции, которые искажают левое изображение, чтобы соответствовать правому. Левое входное изображение используется для вывода диспропорций слева направо и справа налево. Сеть генерирует предсказанное изображение с обратным отображением с помощью билинейного сэмплера. Это приводит к полностью дифференциальной модели формирования изображения.&lt;br /&gt;
Сверточная архитектура вдохновлена Диснеем. Она состоит из двух частей—кодера и декодера. Декодер использует пропуск соединений из блоков активации кодера, чтобы распознавать детали с высоким разрешением. Сеть предсказывает две карты диспропорций — слева направо и справа налево.&lt;br /&gt;
В процессе обучения сеть генерирует изображение путем выборки пикселей из противоположного стереоизображения. Модель формирования изображения использует сэмплер изображений из пространственной трансформаторной сети (STN) для выборки входного изображения с помощью карты диспаритетов. Используемая билинейная выборка локально дифференцируема.&lt;br /&gt;
Здесь представлены результаты, полученные на Китти 2015 стерео 200 обучающего набора изображений неравенства.&lt;br /&gt;
&lt;br /&gt;
=== Обучение без учителя поиска карты глубины из видео (CVPR 2017) ===&lt;br /&gt;
&lt;br /&gt;
Авторы данной статьи &amp;lt;ref name=&amp;quot;cvrp_dnn&amp;quot;&amp;gt;Tinghui Zhou, Matthew Brown, Noah Snavely, David G. Lowe &amp;quot;Unsupervised Learning of Depth and Ego-Motion from Video&amp;quot; [https://arxiv.org/abs/1704.07813v2]&amp;lt;/ref&amp;gt; предлагают методику оценки глубины одной картинки без учителя и движения камеры из беспорядочной видео нарезки. &lt;br /&gt;
&lt;br /&gt;
[[Файл:dnn.png|thumb|400px| Рисунок 5. Aрхитектура сети на базе DispNet  &amp;lt;ref name=&amp;quot;cvrp&amp;quot;&amp;gt;Tinghui Zhou, Matthew Brown, Noah Snavely, David G. Lowe &amp;quot;Unsupervised Learning of Depth and Ego-Motion from Video&amp;quot; Figure 4&amp;lt;/ref&amp;gt;]]&lt;br /&gt;
&lt;br /&gt;
Будем использовать сверточные нейронные сети c глубиной одного вида и многовидовой камерой из неупорядоченного видеоряда. Метод базируется на синтезе видов. Сеть загружает фото объекта в качестве данных ввода и выводит карту глубины на каждый пиксель. Вид объекта может быть синтезирован исходя из глубины на каждый пиксель снимка позиционирования и четкости ближнего вида. Синтез может быть  дифференцирован с CNN по геометрии и модулям позиционирования.&lt;br /&gt;
Авторы взяли на вооружение архитектуру DispNet&amp;lt;ref name=&amp;quot;dispNet&amp;quot;&amp;gt; Nikolaus Mayer, Eddy Ilg, Philip Hausser, Philipp Fischer &amp;quot;A Large Dataset to Train Convolutional Networks&lt;br /&gt;
for Disparity, Optical Flow, and Scene Flow Estimation&amp;quot; [https://arxiv.org/pdf/1512.02134.pdf]&amp;lt;/ref&amp;gt;, которая сконструирована в виде енкодера - декодера с пропущенными соединениями и многомасштабными блоками предсказания. Функция активации ReLU отслеживает все сверточные слои кроме предсказанных.&lt;br /&gt;
Вид объекта со всех источников формирует входные данные в сеть позиционной оценки. На выходе получается относительная позиция между видом объекта и видом каждого источника. Сеть состоит из двух 7 шаговых сверток за которым следует свертка 1 х 1. За исключением последнего слоя свертки, где применяется нелинейная активация, все другие отслеживаются функцией активации ReLU. Сеть объяснимых предсказаний дает доступ к первым пяти закодированным слоям сети позиционирования. За ней следуют 5 слоев обратной свертки с многомасштабными блоками предсказаний. Кроме слоев предсказаний все уровни свертки и обратной свертки отслеживаются ReLU.&lt;br /&gt;
&lt;br /&gt;
=== Прогнозирование глубины без датчиков: использование структуры для обучения без учителя по монокулярным видео (AAAI 2019) ===&lt;br /&gt;
&lt;br /&gt;
[[Файл:ego-motion.png|thumb|500px| Рисунок 5. Aрхитектура сети на базе DispNet  &amp;lt;ref name=&amp;quot;cvrp&amp;quot;&amp;gt;Tinghui Zhou, Matthew Brown, Noah Snavely, David G. Lowe &amp;quot;Unsupervised Learning of Depth and Ego-Motion from Video&amp;quot; Figure 4&amp;lt;/ref&amp;gt;]]&lt;br /&gt;
&lt;br /&gt;
Данная статья &amp;lt;ref name=&amp;quot;aaai&amp;quot;&amp;gt; Vincent Casser, Soeren Pirk, Reza Mahjourian, Anelia Angelova &amp;quot;Depth Prediction Without the Sensors: Leveraging Structure for Unsupervised Learning from Monocular Videos&amp;quot; [https://arxiv.org/abs/1811.06152v1]&amp;lt;/ref&amp;gt; посвящена задаче обучения без учителя глубины сцены и эго-движения робота, где наблюдение обеспечивается видеозаписями с одной камеры. Это делается путем введения геометрической структуры в процесс обучения. Он включает в себя моделирование сцены и отдельных объектов, эго-движения камеры и движения объектов, изучаемых с помощью монокулярных видеовходов. Авторы вводят модель движения объекта, которая имеет ту же архитектуру, что и сеть эго-движения. Она принимает последовательность изображений RGB в качестве входных данных и дополняется предварительно вычисленными масками сегментации экземпляров. Работа модели движения заключается в том, чтобы научиться предсказывать векторы трансформации каждого объекта в трехмерном пространстве. Это создает видимость наблюдаемого объекта в соответствующем целевом кадре.&lt;br /&gt;
&lt;br /&gt;
== См. также ==&lt;br /&gt;
&lt;br /&gt;
* [[Компьютерное зрение]]&lt;br /&gt;
&lt;br /&gt;
* [[Оценка положения]]&lt;br /&gt;
&lt;br /&gt;
* [[Задача нахождения объектов на изображении]]&lt;br /&gt;
&lt;br /&gt;
== Примечания ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Источники информации ==&lt;br /&gt;
&lt;br /&gt;
* Чугунов Р. А., Кульневич А. Д., Аксенов С. В. Методика построения карт глубины стереоизображения с помощью капсульной нейронной сети //Доклады Томского государственного университета систем управления и радиоэлектроники. – 2019. – Т. 22. – №. 1.[https://cyberleninka.ru/article/n/metodika-postroeniya-kart-glubiny-stereoizobrazheniya-s-pomoschyu-kapsulnoy-neyronnoy-seti/viewer]&lt;br /&gt;
&lt;br /&gt;
* 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]&lt;br /&gt;
&lt;br /&gt;
*  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]&lt;br /&gt;
&lt;br /&gt;
* 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]&lt;br /&gt;
&lt;br /&gt;
* 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]&lt;br /&gt;
&lt;br /&gt;
[[Категория:Машинное обучение]]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Компьютерное зрение]]&lt;/div&gt;</summary>
		<author><name>Frak</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9A%D0%B0%D1%80%D1%82%D0%B0_%D0%B3%D0%BB%D1%83%D0%B1%D0%B8%D0%BD%D1%8B&amp;diff=79883</id>
		<title>Карта глубины</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9A%D0%B0%D1%80%D1%82%D0%B0_%D0%B3%D0%BB%D1%83%D0%B1%D0%B8%D0%BD%D1%8B&amp;diff=79883"/>
				<updated>2021-01-22T13:42:35Z</updated>
		
		<summary type="html">&lt;p&gt;Frak: /* Прогнозирование глубины без датчиков: использование структуры для обучения без учителя по монокулярным видео (AAAI 2019) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Карта глубины''' (англ. depth map) — это изображение, где для каждого пикселя вместо цвета хранится его расстояние до камеры.&amp;lt;ref name=&amp;quot;def&amp;quot;&amp;gt;Alexey Kurakin &amp;quot;Основы стереозрения&amp;quot;[https://habr.com/ru/post/130300/]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В компьютерной 3D-графике и [[Компьютерное зрение|компьютерном зрении]] карта глубины представляет собой изображение или канал изображения, содержащий информацию о расстоянии поверхностей объектов сцены от точки обзора. &lt;br /&gt;
&lt;br /&gt;
== Мотивация ==&lt;br /&gt;
&lt;br /&gt;
Карта глубины изображения содержит в себе информацию о расстоянии между различными объектами или частями объектов, представленных на данном изображении. Эта информация может быть полезна во многих областях. &lt;br /&gt;
 &lt;br /&gt;
* Для создания 3D-сенсеров. Они способны строить трёхмерную картину своего окружения, используются для [[Оценка положения|ориентации]] автономного робота в пространстве.&lt;br /&gt;
&lt;br /&gt;
* Для систем, использующих технологии дополненной и виртуальной реальности. Например, камеры, которые фиксируют действия пользователя в видеоиграх с технологией виртуальной реальности.&lt;br /&gt;
&lt;br /&gt;
* В беспилотных автомобилях, которые также используют карты глубин для ориентации на дороге.&lt;br /&gt;
&lt;br /&gt;
* Для обработки фотографий. Например, карты глубин используют для размытия фона на фотографии, чтобы добиться более чёткого выделения человека&amp;lt;ref name=&amp;quot;expls&amp;quot;&amp;gt;Примеры из &amp;quot;Research Guide for Depth Estimation with Deep Learning&amp;quot;[https://www.kdnuggets.com/2019/11/research-guide-depth-estimation-deep-learning.html]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Методы построения карты глубины ==&lt;br /&gt;
&lt;br /&gt;
Карта глубины может быть получена с помощью '''специальной камеры глубины''', по '''стереопаре изображений''', а также с помощью [[Нейронные сети, перцептрон|'''нейронных сетей''']].&lt;br /&gt;
&lt;br /&gt;
== Построение с помощью специальных камер глубин == &lt;br /&gt;
&lt;br /&gt;
[[Файл:ToF.jpg|thumb|250px| Рисунок 1. Пример работы ToF-камеры.]]&lt;br /&gt;
&lt;br /&gt;
* '''ToF-камеры''' (англ. Time of Flight). Принцип работы данной камеры основан на измерении задержки света, с которой свет возвращается в каждую точку. Имея несколько сенсоров с разным временем накопления заряда и, зная сдвиг по времени относительно источника для каждого сенсора и снятой яркости вспышки, мы можем рассчитать сдвиг и, соответственно, расстояние до объекта. Причем чем больше сенсоров задействовано, тем выше точность метода.&lt;br /&gt;
&lt;br /&gt;
* '''Структурированные световые камеры''' (aнгл. Structured light camera). Принцип работы данной камеры один из самых старых. Ставим проектор, который создает, например, горизонтальные (а потом и вертикальные) полоски и рядом камеру, которая снимает картину с полосками. В некоторых вариантах используется псевдослучайный набор точек (например MS Kinect {{---}} бесконтактный сенсорный игровой контроллер, для консолей Xbox 360, Xbox One и персональных компьютеров под управлением ОС Windows&amp;lt;ref name=&amp;quot;kinect&amp;quot;&amp;gt; О MicriSoft Kinect [https://en.wikipedia.org/wiki/Kinect]&amp;lt;/ref&amp;gt;). Проекторы обычно работают в инфракрасном спектре, чтобы не мешать пользователям. Поскольку камера и проектор смещены друг относительно друга, то и полоски также будут смещаться пропорционально расстоянию до объекта. Измеряя это смещение, мы можем рассчитывать расстояние до объекта. Вполне понятны сложности, с которыми можно столкнуться при использовании этого метода: это необходимость настройки и калибровки проектора, и проблема того, что нам нужно относительно благоприятное освещение. К примеру, солнце может засветить полосы, и что-то распознать будет тяжело.&lt;br /&gt;
&lt;br /&gt;
== Построения карты глубины по стереопаре ==&lt;br /&gt;
&lt;br /&gt;
Идея, лежащая в основе построения карты глубины по '''стереопаре''', проста. Для каждой точки на одном изображении выполняется поиск [[Ключевые точки изображения|парной ей точки]]&amp;lt;sup&amp;gt;[на 21.01.21 не создан]&amp;lt;/sup&amp;gt; на другом изображении. А по паре соответствующих точек можно выполнить [[Триангуляция полигонов (ушная + монотонная)|триангуляцию]] и определить координаты их [[Отображения|прообраза]] в трехмерном пространстве. Зная трехмерные координаты прообраза, глубина вычисляется как расстояние до плоскости камеры.&lt;br /&gt;
&lt;br /&gt;
Парную точку нужно искать на эпиполярной&amp;lt;ref name=&amp;quot;Epipolar&amp;quot;&amp;gt;Информация о эпиполярной геометрии[https://ru.qaz.wiki/wiki/Epipolar_geometry]&amp;lt;/ref&amp;gt; линии. Соответственно, для упрощения поиска изображения выравнивают так, чтобы все эпиполярные линии были параллельны сторонам изображения (обычно горизонтальны). Более того, изображения выравнивают так, чтобы для точки с координатами &amp;lt;math&amp;gt;(x_0, y_0)&amp;lt;/math&amp;gt; соответствующая ей эпиполярная линия задавалась уравнением &amp;lt;math&amp;gt;x = x_0&amp;lt;/math&amp;gt;. Тогда для каждой точки, соответствующую ей парную точку, нужно искать в той-же строчке на изображении со второй камеры. Такой процесс выравнивания изображений называют '''ректификацией''' (rectification).&lt;br /&gt;
&lt;br /&gt;
[[Файл:Stereo.png|thumb|300px| Рисунок 2. Результат построения карты смещений по двум картинкам.&amp;lt;ref name=&amp;quot;img2&amp;quot;&amp;gt; &amp;quot;Основы стереозрения&amp;quot; Рис. 3 [https://habr.com/ru/post/130300/]&amp;lt;/ref&amp;gt;]]&lt;br /&gt;
&lt;br /&gt;
После того, как изображения '''ректифицированы''', выполняют поиск соответствующих пар точек. Для каждого пикселя одной картинки с координатами &amp;lt;math&amp;gt;(x_0, y_0)&amp;lt;/math&amp;gt; выполняется поиск пикселя на другой картинке. При этом предполагается, что пиксель на второй картинке должен иметь координаты &amp;lt;math&amp;gt;(x_0 - d, y_0)&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;d&amp;lt;/math&amp;gt; — величина называемая смещением. Поиск соответствующего пикселя выполняется путем вычисления максимума функции отклика, в качестве которой может выступать, например, [[Корреляция случайных величин|корреляция]] окрестностей пикселей. В результате получается карта смещений, пример которой приведен на рис. 2. &lt;br /&gt;
&lt;br /&gt;
Собственно значения глубины обратно пропорциональны величине смещения пикселей.&lt;br /&gt;
&lt;br /&gt;
== Использование нейронных сетей ==&lt;br /&gt;
&lt;br /&gt;
Существует множество методов, использующих нейронные сети. Приведём пару примеров таких решений.&lt;br /&gt;
&lt;br /&gt;
=== Построение с помощью свёрточных нейронных сетей ===&lt;br /&gt;
&lt;br /&gt;
Используем [[Сверточные нейронные сети|сверточные нейронные сети]] для построения карты глубины следующим образом&lt;br /&gt;
&amp;lt;ref name=&amp;quot;cnn_rew&amp;quot;&amp;gt; Xiaobai Ma, Zhenglin Geng, Zhi Bie &amp;quot;Depth Estimation from Single Image Using CNN-Residual Network&amp;quot; [http://cs231n.stanford.edu/reports/2017/pdfs/203.pdf]&amp;lt;/ref&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
*  '''Создаем карту смещений''': используя два изображения с камер, близко расположенных друг к другу, создаем карту различий, точно так же как в методе построения по стереопаре.&lt;br /&gt;
&lt;br /&gt;
* '''Ищем реальную карту глубины для обучения''': с помощью карты смещений, можем построить карту глубины &amp;lt;math&amp;gt;y&amp;lt;/math&amp;gt; вышеописанным способом. Также допустимы другие способы построения карты глубины для обучения нейронной сети.&lt;br /&gt;
&lt;br /&gt;
*  '''Функция потерь''': определим [[Функция потерь и эмпирический риск|функцию потерь]], для предсказанной карты &amp;lt;math&amp;gt;\hat y&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;d_i = log( y_i) - log (\hat y_i)&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;\lambda \in [0, 1]&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;n &amp;lt;/math&amp;gt; — количество пикселей. &amp;lt;math&amp;gt;L(y, \hat y) =  \frac{1}{n} \sum\limits_{i} d^2_i - \frac{\lambda}{n^2}(\sum\limits_{i} d_i)^2&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;y_i&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;\hat y_i&amp;lt;/math&amp;gt; это i пискель для для реальной карты глубин и для предсказанной карты, соответственно. Гиперпараметр &amp;lt;math&amp;gt;\lambda&amp;lt;/math&amp;gt;, нужен для того, чтобы функция потерь меньше росла при большом количестве пикселей, предсказание для которых достаточно близко к реальному. Например, если &amp;lt;math&amp;gt;\lambda = 0&amp;lt;/math&amp;gt;, то мы просто придём к оптимизации в L2 для &amp;lt;math&amp;gt;d_i&amp;lt;/math&amp;gt;, т.е. &amp;lt;math&amp;gt;L(y, \hat y) =  \frac{1}{n} \sum\limits_{i} d^2_i &amp;lt;/math&amp;gt;.&amp;lt;ref name=&amp;quot;loss&amp;quot;&amp;gt;David Eigen, Christian Puhrsch, Rob Fergus &amp;quot;Depth Map Prediction from a Single Imageusing a Multi-Scale Deep Network&amp;quot; стр. 5&amp;lt;/ref&amp;gt; &lt;br /&gt;
&lt;br /&gt;
* '''Обучение свёрточной нейронной сети''': далее идёт обычное обучение нейронной сети по карте различий путем обратного распространения ошибки, оптимизируя заданную выше функцию потерь.&lt;br /&gt;
&lt;br /&gt;
В итоге, по обученной нейронной сети мы можем создавать карту глубины, не проводя расчётов для поиска карт смещения и имея только изображение объекта или пространства. &amp;lt;ref name=&amp;quot;cnn&amp;quot;&amp;gt;Реализация, основанная на свёрточных нейронных сетях [https://www.kaggle.com/kmader/cnn-for-generating-depth-maps-from-rgb-images]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Также возможно использование усложнённых архитектур свёрточных нейронных сетей типа '''DenseNet'''.&lt;br /&gt;
&lt;br /&gt;
'''DenseNet'''&amp;lt;ref name=&amp;quot;DenseNet&amp;quot;&amp;gt;Оригинальная статья описывающая DenseNet [https://arxiv.org/abs/1611.09326]&amp;lt;/ref&amp;gt; {{---}} это свёрточная нейронные сеть, в которой выход каждого из слоев подаётся на вход всем слоям, лежащих ниже.&lt;br /&gt;
&lt;br /&gt;
=== Построение с помощью капсульных нейронных сетей ===&lt;br /&gt;
&lt;br /&gt;
Свёрточные нейронные сети способны регистрировать только наличие какого-либо объекта на картинке, не кодируя его ориентацию и положение. Но '''капсульные нейронные сети''' (англ. Capsule Neural Network)&amp;lt;ref name=&amp;quot;CapsNet&amp;quot;&amp;gt;Sara Sabour, Nicholas Frosst, Geoffrey E. Hinton &amp;quot;Dynamic Routing Between Capsules&amp;quot; [https://arxiv.org/pdf/1710.09829.pdf]&amp;lt;/ref&amp;gt; лишены этого недостатка.&lt;br /&gt;
&lt;br /&gt;
[[Файл:capsnet.jpg|thumb|400px| Рисунок 3. Структура капсульной нейронной сети &amp;lt;ref name=&amp;quot;img&amp;quot;&amp;gt; &amp;quot;Design and Investigation of Capsule Networks for Sentence Classification&amp;quot; Figure 2. [https://www.mdpi.com/2076-3417/9/11/2200/htm]&amp;lt;/ref&amp;gt;.]]&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Капсульная нейронная сеть&amp;quot; состоит из капсул или групп нейронов, чтобы идентифицировать закономерности в изображении. Эта информация поступает в виде векторов, содержащих ориентацию и положение узоров на изображении, которое затем принимается капсулами более высокого уровня. Капсулы более высокого уровня обрабатывают эту информацию из нескольких капсул более низкого уровня и впоследствии выдают прогноз. Капсулы одного уровня не имеют связей друг с другом и вычисляют информацию независимо друг от друга. Капсулы образуются путем разделения выходных данных из свёрточного слоя. Мы делим наш трехмерный вектор на капсулы методом &amp;quot;нарезания&amp;quot; таким образом, чтобы в каждой капсуле была информация о каждом пикселе, т.е. по трехмерной координате.&lt;br /&gt;
 &lt;br /&gt;
Состояние нейронов капсульной нейронной сети внутри изображения фиксирует свойство области или объекта внутри изображения: его положение и ориентацию.&lt;br /&gt;
&lt;br /&gt;
Использование капсульной нейронной сети аналогично использованию обычных свёрточных сетей, описанному выше. &lt;br /&gt;
В целом, данная сеть показывает более точные результаты предсказания глубины.&lt;br /&gt;
&lt;br /&gt;
=== Построение с помощью PlanetNet ===&lt;br /&gt;
&lt;br /&gt;
Так же есть архитектуры, решающие данную задачу и без обучения на карте смещений, построенной с помощью двух изображений. Одной из таких является '''PlaneNet'''. &lt;br /&gt;
&lt;br /&gt;
'''PlaneNet'''&amp;lt;ref name=&amp;quot;planetNet&amp;quot;&amp;gt; Chen Liu, Jimei Yang, Duygu Ceylan, Ersin Yumer, Yasutaka Furukawa &amp;quot;PlaneNet: Piece-wise Planar Reconstruction from a Single RGB Image&amp;quot; [https://arxiv.org/abs/1804.06278v1]&amp;lt;/ref&amp;gt; {{---}} глубокая нейронная сеть, построенная на расширенных остаточных сетях (aнгл. Dilated Residual Networks или DRN)&amp;lt;ref name=&amp;quot;drn&amp;quot;&amp;gt; Fisher Yu, Vladlen Koltun, Thomas Funkhouser &amp;quot;Dilated Residual Networks&amp;quot; [https://arxiv.org/abs/1705.09914]&amp;lt;/ref&amp;gt;. Она получает карту глубин путем композиции выходов трех подзадач:&lt;br /&gt;
&lt;br /&gt;
[[Файл:plane_net.png|thumb|500px| Рисунок 4. Прогнозируемые PlaneNet параметры по одной rgb картинке: cегметация плоскости, параметры плоскостей, неплоская карта глубины&amp;lt;ref name=&amp;quot;img4&amp;quot;&amp;gt; Chen Liu, Jimei Yang, Duygu Ceylan, Ersin Yumer, Yasutaka Furukawa &amp;quot;PlaneNet: Piece-wise Planar Reconstruction from a Single RGB Image&amp;quot; Figure 2.&amp;lt;/ref&amp;gt;.]]&lt;br /&gt;
&lt;br /&gt;
* '''Параметры плоскостей''': пытаемся предсказать количество плоскостей K, а после ищем на изображение K плоских поверхностей, каждая поверхность задаётся тремя параметрами: нормальная, прямая и сдвиг.&lt;br /&gt;
&lt;br /&gt;
* [[Сегментация изображений|'''Сегментация плоскости''']]: ищем группы пикселей, каждая из которых характеризует один смысловой объект.&lt;br /&gt;
&lt;br /&gt;
* '''Неплоская карта глубины''': ищем одно-канальную (или неплоскую) карту глубины, то есть карту глубины, где каждый пиксель, либо на глубине 0, либо на глубине 1.&lt;br /&gt;
&lt;br /&gt;
=== Неконтролируемая оценка глубины монокуляра с консистенцией слева направо (CVPR 2017) ===&lt;br /&gt;
&lt;br /&gt;
В данной работе предлагается сверточная нейронная сеть, обученная выполнять оценку глубины одного изображения без истинных данных. Авторы предлагают сетевую архитектуру, которая выполняет сквозную неконтролируемую оценку глубины монокуляра с потерей обучения, что обеспечивает согласованность глубины слева направо внутри сети.&lt;br /&gt;
Сеть оценивает глубину, выводя диспропорции, которые искажают левое изображение, чтобы соответствовать правому. Левое входное изображение используется для вывода диспропорций слева направо и справа налево. Сеть генерирует предсказанное изображение с обратным отображением с помощью билинейного сэмплера. Это приводит к полностью дифференциальной модели формирования изображения.&lt;br /&gt;
Сверточная архитектура вдохновлена Диснеем. Она состоит из двух частей—кодера и декодера. Декодер использует пропуск соединений из блоков активации кодера, чтобы распознавать детали с высоким разрешением. Сеть предсказывает две карты диспропорций — слева направо и справа налево.&lt;br /&gt;
В процессе обучения сеть генерирует изображение путем выборки пикселей из противоположного стереоизображения. Модель формирования изображения использует сэмплер изображений из пространственной трансформаторной сети (STN) для выборки входного изображения с помощью карты диспаритетов. Используемая билинейная выборка локально дифференцируема.&lt;br /&gt;
Здесь представлены результаты, полученные на Китти 2015 стерео 200 обучающего набора изображений неравенства.&lt;br /&gt;
&lt;br /&gt;
=== Обучение без учителя поиска карты глубины из видео (CVPR 2017) ===&lt;br /&gt;
&lt;br /&gt;
Авторы данной статьи &amp;lt;ref name=&amp;quot;cvrp_dnn&amp;quot;&amp;gt;Tinghui Zhou, Matthew Brown, Noah Snavely, David G. Lowe &amp;quot;Unsupervised Learning of Depth and Ego-Motion from Video&amp;quot; [https://arxiv.org/abs/1704.07813v2]&amp;lt;/ref&amp;gt; предлагают методику оценки глубины одной картинки без учителя и движения камеры из беспорядочной видео нарезки. &lt;br /&gt;
&lt;br /&gt;
[[Файл:dnn.png|thumb|400px| Рисунок 5. Aрхитектура сети на базе DispNet  &amp;lt;ref name=&amp;quot;cvrp&amp;quot;&amp;gt;Tinghui Zhou, Matthew Brown, Noah Snavely, David G. Lowe &amp;quot;Unsupervised Learning of Depth and Ego-Motion from Video&amp;quot; Figure 4&amp;lt;/ref&amp;gt;]]&lt;br /&gt;
&lt;br /&gt;
Будем использовать сверточные нейронные сети c глубиной одного вида и многовидовой камерой из неупорядоченного видеоряда. Метод базируется на синтезе видов. Сеть загружает фото объекта в качестве данных ввода и выводит карту глубины на каждый пиксель. Вид объекта может быть синтезирован исходя из глубины на каждый пиксель снимка позиционирования и четкости ближнего вида. Синтез может быть  дифференцирован с CNN по геометрии и модулям позиционирования.&lt;br /&gt;
Авторы взяли на вооружение архитектуру DispNet&amp;lt;ref name=&amp;quot;dispNet&amp;quot;&amp;gt; Nikolaus Mayer, Eddy Ilg, Philip Hausser, Philipp Fischer &amp;quot;A Large Dataset to Train Convolutional Networks&lt;br /&gt;
for Disparity, Optical Flow, and Scene Flow Estimation&amp;quot; [https://arxiv.org/pdf/1512.02134.pdf]&amp;lt;/ref&amp;gt;, которая сконструирована в виде енкодера - декодера с пропущенными соединениями и многомасштабными блоками предсказания. Функция активации ReLU отслеживает все сверточные слои кроме предсказанных.&lt;br /&gt;
Вид объекта со всех источников формирует входные данные в сеть позиционной оценки. На выходе получается относительная позиция между видом объекта и видом каждого источника. Сеть состоит из двух 7 шаговых сверток за которым следует свертка 1 х 1. За исключением последнего слоя свертки, где применяется нелинейная активация, все другие отслеживаются функцией активации ReLU. Сеть объяснимых предсказаний дает доступ к первым пяти закодированным слоям сети позиционирования. За ней следуют 5 слоев обратной свертки с многомасштабными блоками предсказаний. Кроме слоев предсказаний все уровни свертки и обратной свертки отслеживаются ReLU.&lt;br /&gt;
&lt;br /&gt;
=== Прогнозирование глубины без датчиков: использование структуры для обучения без учителя по монокулярным видео (AAAI 2019) ===&lt;br /&gt;
&lt;br /&gt;
[[Файл:ego-motion.png|thumb|360px| Рисунок 5. Aрхитектура сети на базе DispNet  &amp;lt;ref name=&amp;quot;cvrp&amp;quot;&amp;gt;Tinghui Zhou, Matthew Brown, Noah Snavely, David G. Lowe &amp;quot;Unsupervised Learning of Depth and Ego-Motion from Video&amp;quot; Figure 4&amp;lt;/ref&amp;gt;]]&lt;br /&gt;
&lt;br /&gt;
Данная статья &amp;lt;ref name=&amp;quot;aaai&amp;quot;&amp;gt; Vincent Casser, Soeren Pirk, Reza Mahjourian, Anelia Angelova &amp;quot;Depth Prediction Without the Sensors: Leveraging Structure for Unsupervised Learning from Monocular Videos&amp;quot; [https://arxiv.org/abs/1811.06152v1]&amp;lt;/ref&amp;gt; посвящена задаче обучения без учителя глубины сцены и эго-движения робота, где наблюдение обеспечивается видеозаписями с одной камеры. Это делается путем введения геометрической структуры в процесс обучения. Он включает в себя моделирование сцены и отдельных объектов, эго-движения камеры и движения объектов, изучаемых с помощью монокулярных видеовходов. Авторы вводят модель движения объекта, которая имеет ту же архитектуру, что и сеть эго-движения. Она принимает последовательность изображений RGB в качестве входных данных и дополняется предварительно вычисленными масками сегментации экземпляров. Работа модели движения заключается в том, чтобы научиться предсказывать векторы трансформации каждого объекта в трехмерном пространстве. Это создает видимость наблюдаемого объекта в соответствующем целевом кадре.&lt;br /&gt;
&lt;br /&gt;
== См. также ==&lt;br /&gt;
&lt;br /&gt;
* [[Компьютерное зрение]]&lt;br /&gt;
&lt;br /&gt;
* [[Оценка положения]]&lt;br /&gt;
&lt;br /&gt;
* [[Задача нахождения объектов на изображении]]&lt;br /&gt;
&lt;br /&gt;
== Примечания ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Источники информации ==&lt;br /&gt;
&lt;br /&gt;
* Чугунов Р. А., Кульневич А. Д., Аксенов С. В. Методика построения карт глубины стереоизображения с помощью капсульной нейронной сети //Доклады Томского государственного университета систем управления и радиоэлектроники. – 2019. – Т. 22. – №. 1.[https://cyberleninka.ru/article/n/metodika-postroeniya-kart-glubiny-stereoizobrazheniya-s-pomoschyu-kapsulnoy-neyronnoy-seti/viewer]&lt;br /&gt;
&lt;br /&gt;
* 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]&lt;br /&gt;
&lt;br /&gt;
*  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]&lt;br /&gt;
&lt;br /&gt;
* 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]&lt;br /&gt;
&lt;br /&gt;
* 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]&lt;br /&gt;
&lt;br /&gt;
[[Категория:Машинное обучение]]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Компьютерное зрение]]&lt;/div&gt;</summary>
		<author><name>Frak</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Ego-motion.png&amp;diff=79882</id>
		<title>Файл:Ego-motion.png</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Ego-motion.png&amp;diff=79882"/>
				<updated>2021-01-22T13:42:09Z</updated>
		
		<summary type="html">&lt;p&gt;Frak: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Frak</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9A%D0%B0%D1%80%D1%82%D0%B0_%D0%B3%D0%BB%D1%83%D0%B1%D0%B8%D0%BD%D1%8B&amp;diff=79881</id>
		<title>Карта глубины</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9A%D0%B0%D1%80%D1%82%D0%B0_%D0%B3%D0%BB%D1%83%D0%B1%D0%B8%D0%BD%D1%8B&amp;diff=79881"/>
				<updated>2021-01-22T13:26:54Z</updated>
		
		<summary type="html">&lt;p&gt;Frak: /* Неконтролируемое обучение поиска карты глубины из видео (CVPR 2017) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Карта глубины''' (англ. depth map) — это изображение, где для каждого пикселя вместо цвета хранится его расстояние до камеры.&amp;lt;ref name=&amp;quot;def&amp;quot;&amp;gt;Alexey Kurakin &amp;quot;Основы стереозрения&amp;quot;[https://habr.com/ru/post/130300/]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В компьютерной 3D-графике и [[Компьютерное зрение|компьютерном зрении]] карта глубины представляет собой изображение или канал изображения, содержащий информацию о расстоянии поверхностей объектов сцены от точки обзора. &lt;br /&gt;
&lt;br /&gt;
== Мотивация ==&lt;br /&gt;
&lt;br /&gt;
Карта глубины изображения содержит в себе информацию о расстоянии между различными объектами или частями объектов, представленных на данном изображении. Эта информация может быть полезна во многих областях. &lt;br /&gt;
 &lt;br /&gt;
* Для создания 3D-сенсеров. Они способны строить трёхмерную картину своего окружения, используются для [[Оценка положения|ориентации]] автономного робота в пространстве.&lt;br /&gt;
&lt;br /&gt;
* Для систем, использующих технологии дополненной и виртуальной реальности. Например, камеры, которые фиксируют действия пользователя в видеоиграх с технологией виртуальной реальности.&lt;br /&gt;
&lt;br /&gt;
* В беспилотных автомобилях, которые также используют карты глубин для ориентации на дороге.&lt;br /&gt;
&lt;br /&gt;
* Для обработки фотографий. Например, карты глубин используют для размытия фона на фотографии, чтобы добиться более чёткого выделения человека&amp;lt;ref name=&amp;quot;expls&amp;quot;&amp;gt;Примеры из &amp;quot;Research Guide for Depth Estimation with Deep Learning&amp;quot;[https://www.kdnuggets.com/2019/11/research-guide-depth-estimation-deep-learning.html]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Методы построения карты глубины ==&lt;br /&gt;
&lt;br /&gt;
Карта глубины может быть получена с помощью '''специальной камеры глубины''', по '''стереопаре изображений''', а также с помощью [[Нейронные сети, перцептрон|'''нейронных сетей''']].&lt;br /&gt;
&lt;br /&gt;
== Построение с помощью специальных камер глубин == &lt;br /&gt;
&lt;br /&gt;
[[Файл:ToF.jpg|thumb|250px| Рисунок 1. Пример работы ToF-камеры.]]&lt;br /&gt;
&lt;br /&gt;
* '''ToF-камеры''' (англ. Time of Flight). Принцип работы данной камеры основан на измерении задержки света, с которой свет возвращается в каждую точку. Имея несколько сенсоров с разным временем накопления заряда и, зная сдвиг по времени относительно источника для каждого сенсора и снятой яркости вспышки, мы можем рассчитать сдвиг и, соответственно, расстояние до объекта. Причем чем больше сенсоров задействовано, тем выше точность метода.&lt;br /&gt;
&lt;br /&gt;
* '''Структурированные световые камеры''' (aнгл. Structured light camera). Принцип работы данной камеры один из самых старых. Ставим проектор, который создает, например, горизонтальные (а потом и вертикальные) полоски и рядом камеру, которая снимает картину с полосками. В некоторых вариантах используется псевдослучайный набор точек (например MS Kinect {{---}} бесконтактный сенсорный игровой контроллер, для консолей Xbox 360, Xbox One и персональных компьютеров под управлением ОС Windows&amp;lt;ref name=&amp;quot;kinect&amp;quot;&amp;gt; О MicriSoft Kinect [https://en.wikipedia.org/wiki/Kinect]&amp;lt;/ref&amp;gt;). Проекторы обычно работают в инфракрасном спектре, чтобы не мешать пользователям. Поскольку камера и проектор смещены друг относительно друга, то и полоски также будут смещаться пропорционально расстоянию до объекта. Измеряя это смещение, мы можем рассчитывать расстояние до объекта. Вполне понятны сложности, с которыми можно столкнуться при использовании этого метода: это необходимость настройки и калибровки проектора, и проблема того, что нам нужно относительно благоприятное освещение. К примеру, солнце может засветить полосы, и что-то распознать будет тяжело.&lt;br /&gt;
&lt;br /&gt;
== Построения карты глубины по стереопаре ==&lt;br /&gt;
&lt;br /&gt;
Идея, лежащая в основе построения карты глубины по '''стереопаре''', проста. Для каждой точки на одном изображении выполняется поиск [[Ключевые точки изображения|парной ей точки]]&amp;lt;sup&amp;gt;[на 21.01.21 не создан]&amp;lt;/sup&amp;gt; на другом изображении. А по паре соответствующих точек можно выполнить [[Триангуляция полигонов (ушная + монотонная)|триангуляцию]] и определить координаты их [[Отображения|прообраза]] в трехмерном пространстве. Зная трехмерные координаты прообраза, глубина вычисляется как расстояние до плоскости камеры.&lt;br /&gt;
&lt;br /&gt;
Парную точку нужно искать на эпиполярной&amp;lt;ref name=&amp;quot;Epipolar&amp;quot;&amp;gt;Информация о эпиполярной геометрии[https://ru.qaz.wiki/wiki/Epipolar_geometry]&amp;lt;/ref&amp;gt; линии. Соответственно, для упрощения поиска изображения выравнивают так, чтобы все эпиполярные линии были параллельны сторонам изображения (обычно горизонтальны). Более того, изображения выравнивают так, чтобы для точки с координатами &amp;lt;math&amp;gt;(x_0, y_0)&amp;lt;/math&amp;gt; соответствующая ей эпиполярная линия задавалась уравнением &amp;lt;math&amp;gt;x = x_0&amp;lt;/math&amp;gt;. Тогда для каждой точки, соответствующую ей парную точку, нужно искать в той-же строчке на изображении со второй камеры. Такой процесс выравнивания изображений называют '''ректификацией''' (rectification).&lt;br /&gt;
&lt;br /&gt;
[[Файл:Stereo.png|thumb|300px| Рисунок 2. Результат построения карты смещений по двум картинкам.&amp;lt;ref name=&amp;quot;img2&amp;quot;&amp;gt; &amp;quot;Основы стереозрения&amp;quot; Рис. 3 [https://habr.com/ru/post/130300/]&amp;lt;/ref&amp;gt;]]&lt;br /&gt;
&lt;br /&gt;
После того, как изображения '''ректифицированы''', выполняют поиск соответствующих пар точек. Для каждого пикселя одной картинки с координатами &amp;lt;math&amp;gt;(x_0, y_0)&amp;lt;/math&amp;gt; выполняется поиск пикселя на другой картинке. При этом предполагается, что пиксель на второй картинке должен иметь координаты &amp;lt;math&amp;gt;(x_0 - d, y_0)&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;d&amp;lt;/math&amp;gt; — величина называемая смещением. Поиск соответствующего пикселя выполняется путем вычисления максимума функции отклика, в качестве которой может выступать, например, [[Корреляция случайных величин|корреляция]] окрестностей пикселей. В результате получается карта смещений, пример которой приведен на рис. 2. &lt;br /&gt;
&lt;br /&gt;
Собственно значения глубины обратно пропорциональны величине смещения пикселей.&lt;br /&gt;
&lt;br /&gt;
== Использование нейронных сетей ==&lt;br /&gt;
&lt;br /&gt;
Существует множество методов, использующих нейронные сети. Приведём пару примеров таких решений.&lt;br /&gt;
&lt;br /&gt;
=== Построение с помощью свёрточных нейронных сетей ===&lt;br /&gt;
&lt;br /&gt;
Используем [[Сверточные нейронные сети|сверточные нейронные сети]] для построения карты глубины следующим образом&lt;br /&gt;
&amp;lt;ref name=&amp;quot;cnn_rew&amp;quot;&amp;gt; Xiaobai Ma, Zhenglin Geng, Zhi Bie &amp;quot;Depth Estimation from Single Image Using CNN-Residual Network&amp;quot; [http://cs231n.stanford.edu/reports/2017/pdfs/203.pdf]&amp;lt;/ref&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
*  '''Создаем карту смещений''': используя два изображения с камер, близко расположенных друг к другу, создаем карту различий, точно так же как в методе построения по стереопаре.&lt;br /&gt;
&lt;br /&gt;
* '''Ищем реальную карту глубины для обучения''': с помощью карты смещений, можем построить карту глубины &amp;lt;math&amp;gt;y&amp;lt;/math&amp;gt; вышеописанным способом. Также допустимы другие способы построения карты глубины для обучения нейронной сети.&lt;br /&gt;
&lt;br /&gt;
*  '''Функция потерь''': определим [[Функция потерь и эмпирический риск|функцию потерь]], для предсказанной карты &amp;lt;math&amp;gt;\hat y&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;d_i = log( y_i) - log (\hat y_i)&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;\lambda \in [0, 1]&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;n &amp;lt;/math&amp;gt; — количество пикселей. &amp;lt;math&amp;gt;L(y, \hat y) =  \frac{1}{n} \sum\limits_{i} d^2_i - \frac{\lambda}{n^2}(\sum\limits_{i} d_i)^2&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;y_i&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;\hat y_i&amp;lt;/math&amp;gt; это i пискель для для реальной карты глубин и для предсказанной карты, соответственно. Гиперпараметр &amp;lt;math&amp;gt;\lambda&amp;lt;/math&amp;gt;, нужен для того, чтобы функция потерь меньше росла при большом количестве пикселей, предсказание для которых достаточно близко к реальному. Например, если &amp;lt;math&amp;gt;\lambda = 0&amp;lt;/math&amp;gt;, то мы просто придём к оптимизации в L2 для &amp;lt;math&amp;gt;d_i&amp;lt;/math&amp;gt;, т.е. &amp;lt;math&amp;gt;L(y, \hat y) =  \frac{1}{n} \sum\limits_{i} d^2_i &amp;lt;/math&amp;gt;.&amp;lt;ref name=&amp;quot;loss&amp;quot;&amp;gt;David Eigen, Christian Puhrsch, Rob Fergus &amp;quot;Depth Map Prediction from a Single Imageusing a Multi-Scale Deep Network&amp;quot; стр. 5&amp;lt;/ref&amp;gt; &lt;br /&gt;
&lt;br /&gt;
* '''Обучение свёрточной нейронной сети''': далее идёт обычное обучение нейронной сети по карте различий путем обратного распространения ошибки, оптимизируя заданную выше функцию потерь.&lt;br /&gt;
&lt;br /&gt;
В итоге, по обученной нейронной сети мы можем создавать карту глубины, не проводя расчётов для поиска карт смещения и имея только изображение объекта или пространства. &amp;lt;ref name=&amp;quot;cnn&amp;quot;&amp;gt;Реализация, основанная на свёрточных нейронных сетях [https://www.kaggle.com/kmader/cnn-for-generating-depth-maps-from-rgb-images]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Также возможно использование усложнённых архитектур свёрточных нейронных сетей типа '''DenseNet'''.&lt;br /&gt;
&lt;br /&gt;
'''DenseNet'''&amp;lt;ref name=&amp;quot;DenseNet&amp;quot;&amp;gt;Оригинальная статья описывающая DenseNet [https://arxiv.org/abs/1611.09326]&amp;lt;/ref&amp;gt; {{---}} это свёрточная нейронные сеть, в которой выход каждого из слоев подаётся на вход всем слоям, лежащих ниже.&lt;br /&gt;
&lt;br /&gt;
=== Построение с помощью капсульных нейронных сетей ===&lt;br /&gt;
&lt;br /&gt;
Свёрточные нейронные сети способны регистрировать только наличие какого-либо объекта на картинке, не кодируя его ориентацию и положение. Но '''капсульные нейронные сети''' (англ. Capsule Neural Network)&amp;lt;ref name=&amp;quot;CapsNet&amp;quot;&amp;gt;Sara Sabour, Nicholas Frosst, Geoffrey E. Hinton &amp;quot;Dynamic Routing Between Capsules&amp;quot; [https://arxiv.org/pdf/1710.09829.pdf]&amp;lt;/ref&amp;gt; лишены этого недостатка.&lt;br /&gt;
&lt;br /&gt;
[[Файл:capsnet.jpg|thumb|400px| Рисунок 3. Структура капсульной нейронной сети &amp;lt;ref name=&amp;quot;img&amp;quot;&amp;gt; &amp;quot;Design and Investigation of Capsule Networks for Sentence Classification&amp;quot; Figure 2. [https://www.mdpi.com/2076-3417/9/11/2200/htm]&amp;lt;/ref&amp;gt;.]]&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Капсульная нейронная сеть&amp;quot; состоит из капсул или групп нейронов, чтобы идентифицировать закономерности в изображении. Эта информация поступает в виде векторов, содержащих ориентацию и положение узоров на изображении, которое затем принимается капсулами более высокого уровня. Капсулы более высокого уровня обрабатывают эту информацию из нескольких капсул более низкого уровня и впоследствии выдают прогноз. Капсулы одного уровня не имеют связей друг с другом и вычисляют информацию независимо друг от друга. Капсулы образуются путем разделения выходных данных из свёрточного слоя. Мы делим наш трехмерный вектор на капсулы методом &amp;quot;нарезания&amp;quot; таким образом, чтобы в каждой капсуле была информация о каждом пикселе, т.е. по трехмерной координате.&lt;br /&gt;
 &lt;br /&gt;
Состояние нейронов капсульной нейронной сети внутри изображения фиксирует свойство области или объекта внутри изображения: его положение и ориентацию.&lt;br /&gt;
&lt;br /&gt;
Использование капсульной нейронной сети аналогично использованию обычных свёрточных сетей, описанному выше. &lt;br /&gt;
В целом, данная сеть показывает более точные результаты предсказания глубины.&lt;br /&gt;
&lt;br /&gt;
=== Построение с помощью PlanetNet ===&lt;br /&gt;
&lt;br /&gt;
Так же есть архитектуры, решающие данную задачу и без обучения на карте смещений, построенной с помощью двух изображений. Одной из таких является '''PlaneNet'''. &lt;br /&gt;
&lt;br /&gt;
'''PlaneNet'''&amp;lt;ref name=&amp;quot;planetNet&amp;quot;&amp;gt; Chen Liu, Jimei Yang, Duygu Ceylan, Ersin Yumer, Yasutaka Furukawa &amp;quot;PlaneNet: Piece-wise Planar Reconstruction from a Single RGB Image&amp;quot; [https://arxiv.org/abs/1804.06278v1]&amp;lt;/ref&amp;gt; {{---}} глубокая нейронная сеть, построенная на расширенных остаточных сетях (aнгл. Dilated Residual Networks или DRN)&amp;lt;ref name=&amp;quot;drn&amp;quot;&amp;gt; Fisher Yu, Vladlen Koltun, Thomas Funkhouser &amp;quot;Dilated Residual Networks&amp;quot; [https://arxiv.org/abs/1705.09914]&amp;lt;/ref&amp;gt;. Она получает карту глубин путем композиции выходов трех подзадач:&lt;br /&gt;
&lt;br /&gt;
[[Файл:plane_net.png|thumb|500px| Рисунок 4. Прогнозируемые PlaneNet параметры по одной rgb картинке: cегметация плоскости, параметры плоскостей, неплоская карта глубины&amp;lt;ref name=&amp;quot;img4&amp;quot;&amp;gt; Chen Liu, Jimei Yang, Duygu Ceylan, Ersin Yumer, Yasutaka Furukawa &amp;quot;PlaneNet: Piece-wise Planar Reconstruction from a Single RGB Image&amp;quot; Figure 2.&amp;lt;/ref&amp;gt;.]]&lt;br /&gt;
&lt;br /&gt;
* '''Параметры плоскостей''': пытаемся предсказать количество плоскостей K, а после ищем на изображение K плоских поверхностей, каждая поверхность задаётся тремя параметрами: нормальная, прямая и сдвиг.&lt;br /&gt;
&lt;br /&gt;
* [[Сегментация изображений|'''Сегментация плоскости''']]: ищем группы пикселей, каждая из которых характеризует один смысловой объект.&lt;br /&gt;
&lt;br /&gt;
* '''Неплоская карта глубины''': ищем одно-канальную (или неплоскую) карту глубины, то есть карту глубины, где каждый пиксель, либо на глубине 0, либо на глубине 1.&lt;br /&gt;
&lt;br /&gt;
=== Неконтролируемая оценка глубины монокуляра с консистенцией слева направо (CVPR 2017) ===&lt;br /&gt;
&lt;br /&gt;
В данной работе предлагается сверточная нейронная сеть, обученная выполнять оценку глубины одного изображения без истинных данных. Авторы предлагают сетевую архитектуру, которая выполняет сквозную неконтролируемую оценку глубины монокуляра с потерей обучения, что обеспечивает согласованность глубины слева направо внутри сети.&lt;br /&gt;
Сеть оценивает глубину, выводя диспропорции, которые искажают левое изображение, чтобы соответствовать правому. Левое входное изображение используется для вывода диспропорций слева направо и справа налево. Сеть генерирует предсказанное изображение с обратным отображением с помощью билинейного сэмплера. Это приводит к полностью дифференциальной модели формирования изображения.&lt;br /&gt;
Сверточная архитектура вдохновлена Диснеем. Она состоит из двух частей—кодера и декодера. Декодер использует пропуск соединений из блоков активации кодера, чтобы распознавать детали с высоким разрешением. Сеть предсказывает две карты диспропорций — слева направо и справа налево.&lt;br /&gt;
В процессе обучения сеть генерирует изображение путем выборки пикселей из противоположного стереоизображения. Модель формирования изображения использует сэмплер изображений из пространственной трансформаторной сети (STN) для выборки входного изображения с помощью карты диспаритетов. Используемая билинейная выборка локально дифференцируема.&lt;br /&gt;
Здесь представлены результаты, полученные на Китти 2015 стерео 200 обучающего набора изображений неравенства.&lt;br /&gt;
&lt;br /&gt;
=== Обучение без учителя поиска карты глубины из видео (CVPR 2017) ===&lt;br /&gt;
&lt;br /&gt;
Авторы данной статьи &amp;lt;ref name=&amp;quot;cvrp_dnn&amp;quot;&amp;gt;Tinghui Zhou, Matthew Brown, Noah Snavely, David G. Lowe &amp;quot;Unsupervised Learning of Depth and Ego-Motion from Video&amp;quot; [https://arxiv.org/abs/1704.07813v2]&amp;lt;/ref&amp;gt; предлагают методику оценки глубины одной картинки без учителя и движения камеры из беспорядочной видео нарезки. &lt;br /&gt;
&lt;br /&gt;
[[Файл:dnn.png|thumb|400px| Рисунок 5. Aрхитектура сети на базе DispNet  &amp;lt;ref name=&amp;quot;cvrp&amp;quot;&amp;gt;Tinghui Zhou, Matthew Brown, Noah Snavely, David G. Lowe &amp;quot;Unsupervised Learning of Depth and Ego-Motion from Video&amp;quot; Figure 4&amp;lt;/ref&amp;gt;]]&lt;br /&gt;
&lt;br /&gt;
Будем использовать сверточные нейронные сети c глубиной одного вида и многовидовой камерой из неупорядоченного видеоряда. Метод базируется на синтезе видов. Сеть загружает фото объекта в качестве данных ввода и выводит карту глубины на каждый пиксель. Вид объекта может быть синтезирован исходя из глубины на каждый пиксель снимка позиционирования и четкости ближнего вида. Синтез может быть  дифференцирован с CNN по геометрии и модулям позиционирования.&lt;br /&gt;
Авторы взяли на вооружение архитектуру DispNet&amp;lt;ref name=&amp;quot;dispNet&amp;quot;&amp;gt; Nikolaus Mayer, Eddy Ilg, Philip Hausser, Philipp Fischer &amp;quot;A Large Dataset to Train Convolutional Networks&lt;br /&gt;
for Disparity, Optical Flow, and Scene Flow Estimation&amp;quot; [https://arxiv.org/pdf/1512.02134.pdf]&amp;lt;/ref&amp;gt;, которая сконструирована в виде енкодера - декодера с пропущенными соединениями и многомасштабными блоками предсказания. Функция активации ReLU отслеживает все сверточные слои кроме предсказанных.&lt;br /&gt;
Вид объекта со всех источников формирует входные данные в сеть позиционной оценки. На выходе получается относительная позиция между видом объекта и видом каждого источника. Сеть состоит из двух 7 шаговых сверток за которым следует свертка 1 х 1. За исключением последнего слоя свертки, где применяется нелинейная активация, все другие отслеживаются функцией активации ReLU. Сеть объяснимых предсказаний дает доступ к первым пяти закодированным слоям сети позиционирования. За ней следуют 5 слоев обратной свертки с многомасштабными блоками предсказаний. Кроме слоев предсказаний все уровни свертки и обратной свертки отслеживаются ReLU.&lt;br /&gt;
&lt;br /&gt;
=== Прогнозирование глубины без датчиков: использование структуры для обучения без учителя по монокулярным видео (AAAI 2019) ===&lt;br /&gt;
&lt;br /&gt;
Данная статья &amp;lt;ref name=&amp;quot;aaai&amp;quot;&amp;gt; Vincent Casser, Soeren Pirk, Reza Mahjourian, Anelia Angelova &amp;quot;Depth Prediction Without the Sensors: Leveraging Structure for Unsupervised Learning from Monocular Videos&amp;quot; [https://arxiv.org/abs/1811.06152v1]&amp;lt;/ref&amp;gt; посвящена задаче обучения без учителя глубины сцены и эго-движения робота, где наблюдение обеспечивается видеозаписями с одной камеры. Это делается путем введения геометрической структуры в процесс обучения. Он включает в себя моделирование сцены и отдельных объектов, эго-движения камеры и движения объектов, изучаемых с помощью монокулярных видеовходов. Авторы вводят модель движения объекта, которая имеет ту же архитектуру, что и сеть эго-движения. Она принимает последовательность изображений RGB в качестве входных данных и дополняется предварительно вычисленными масками сегментации экземпляров. Работа модели движения заключается в том, чтобы научиться предсказывать векторы трансформации каждого объекта в трехмерном пространстве. Это создает видимость наблюдаемого объекта в соответствующем целевом кадре.&lt;br /&gt;
&lt;br /&gt;
== См. также ==&lt;br /&gt;
&lt;br /&gt;
* [[Компьютерное зрение]]&lt;br /&gt;
&lt;br /&gt;
* [[Оценка положения]]&lt;br /&gt;
&lt;br /&gt;
* [[Задача нахождения объектов на изображении]]&lt;br /&gt;
&lt;br /&gt;
== Примечания ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Источники информации ==&lt;br /&gt;
&lt;br /&gt;
* Чугунов Р. А., Кульневич А. Д., Аксенов С. В. Методика построения карт глубины стереоизображения с помощью капсульной нейронной сети //Доклады Томского государственного университета систем управления и радиоэлектроники. – 2019. – Т. 22. – №. 1.[https://cyberleninka.ru/article/n/metodika-postroeniya-kart-glubiny-stereoizobrazheniya-s-pomoschyu-kapsulnoy-neyronnoy-seti/viewer]&lt;br /&gt;
&lt;br /&gt;
* 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]&lt;br /&gt;
&lt;br /&gt;
*  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]&lt;br /&gt;
&lt;br /&gt;
* 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]&lt;br /&gt;
&lt;br /&gt;
* 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]&lt;br /&gt;
&lt;br /&gt;
[[Категория:Машинное обучение]]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Компьютерное зрение]]&lt;/div&gt;</summary>
		<author><name>Frak</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9A%D0%B0%D1%80%D1%82%D0%B0_%D0%B3%D0%BB%D1%83%D0%B1%D0%B8%D0%BD%D1%8B&amp;diff=79880</id>
		<title>Карта глубины</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9A%D0%B0%D1%80%D1%82%D0%B0_%D0%B3%D0%BB%D1%83%D0%B1%D0%B8%D0%BD%D1%8B&amp;diff=79880"/>
				<updated>2021-01-22T13:22:22Z</updated>
		
		<summary type="html">&lt;p&gt;Frak: /* Источники информации */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Карта глубины''' (англ. depth map) — это изображение, где для каждого пикселя вместо цвета хранится его расстояние до камеры.&amp;lt;ref name=&amp;quot;def&amp;quot;&amp;gt;Alexey Kurakin &amp;quot;Основы стереозрения&amp;quot;[https://habr.com/ru/post/130300/]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В компьютерной 3D-графике и [[Компьютерное зрение|компьютерном зрении]] карта глубины представляет собой изображение или канал изображения, содержащий информацию о расстоянии поверхностей объектов сцены от точки обзора. &lt;br /&gt;
&lt;br /&gt;
== Мотивация ==&lt;br /&gt;
&lt;br /&gt;
Карта глубины изображения содержит в себе информацию о расстоянии между различными объектами или частями объектов, представленных на данном изображении. Эта информация может быть полезна во многих областях. &lt;br /&gt;
 &lt;br /&gt;
* Для создания 3D-сенсеров. Они способны строить трёхмерную картину своего окружения, используются для [[Оценка положения|ориентации]] автономного робота в пространстве.&lt;br /&gt;
&lt;br /&gt;
* Для систем, использующих технологии дополненной и виртуальной реальности. Например, камеры, которые фиксируют действия пользователя в видеоиграх с технологией виртуальной реальности.&lt;br /&gt;
&lt;br /&gt;
* В беспилотных автомобилях, которые также используют карты глубин для ориентации на дороге.&lt;br /&gt;
&lt;br /&gt;
* Для обработки фотографий. Например, карты глубин используют для размытия фона на фотографии, чтобы добиться более чёткого выделения человека&amp;lt;ref name=&amp;quot;expls&amp;quot;&amp;gt;Примеры из &amp;quot;Research Guide for Depth Estimation with Deep Learning&amp;quot;[https://www.kdnuggets.com/2019/11/research-guide-depth-estimation-deep-learning.html]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Методы построения карты глубины ==&lt;br /&gt;
&lt;br /&gt;
Карта глубины может быть получена с помощью '''специальной камеры глубины''', по '''стереопаре изображений''', а также с помощью [[Нейронные сети, перцептрон|'''нейронных сетей''']].&lt;br /&gt;
&lt;br /&gt;
== Построение с помощью специальных камер глубин == &lt;br /&gt;
&lt;br /&gt;
[[Файл:ToF.jpg|thumb|250px| Рисунок 1. Пример работы ToF-камеры.]]&lt;br /&gt;
&lt;br /&gt;
* '''ToF-камеры''' (англ. Time of Flight). Принцип работы данной камеры основан на измерении задержки света, с которой свет возвращается в каждую точку. Имея несколько сенсоров с разным временем накопления заряда и, зная сдвиг по времени относительно источника для каждого сенсора и снятой яркости вспышки, мы можем рассчитать сдвиг и, соответственно, расстояние до объекта. Причем чем больше сенсоров задействовано, тем выше точность метода.&lt;br /&gt;
&lt;br /&gt;
* '''Структурированные световые камеры''' (aнгл. Structured light camera). Принцип работы данной камеры один из самых старых. Ставим проектор, который создает, например, горизонтальные (а потом и вертикальные) полоски и рядом камеру, которая снимает картину с полосками. В некоторых вариантах используется псевдослучайный набор точек (например MS Kinect {{---}} бесконтактный сенсорный игровой контроллер, для консолей Xbox 360, Xbox One и персональных компьютеров под управлением ОС Windows&amp;lt;ref name=&amp;quot;kinect&amp;quot;&amp;gt; О MicriSoft Kinect [https://en.wikipedia.org/wiki/Kinect]&amp;lt;/ref&amp;gt;). Проекторы обычно работают в инфракрасном спектре, чтобы не мешать пользователям. Поскольку камера и проектор смещены друг относительно друга, то и полоски также будут смещаться пропорционально расстоянию до объекта. Измеряя это смещение, мы можем рассчитывать расстояние до объекта. Вполне понятны сложности, с которыми можно столкнуться при использовании этого метода: это необходимость настройки и калибровки проектора, и проблема того, что нам нужно относительно благоприятное освещение. К примеру, солнце может засветить полосы, и что-то распознать будет тяжело.&lt;br /&gt;
&lt;br /&gt;
== Построения карты глубины по стереопаре ==&lt;br /&gt;
&lt;br /&gt;
Идея, лежащая в основе построения карты глубины по '''стереопаре''', проста. Для каждой точки на одном изображении выполняется поиск [[Ключевые точки изображения|парной ей точки]]&amp;lt;sup&amp;gt;[на 21.01.21 не создан]&amp;lt;/sup&amp;gt; на другом изображении. А по паре соответствующих точек можно выполнить [[Триангуляция полигонов (ушная + монотонная)|триангуляцию]] и определить координаты их [[Отображения|прообраза]] в трехмерном пространстве. Зная трехмерные координаты прообраза, глубина вычисляется как расстояние до плоскости камеры.&lt;br /&gt;
&lt;br /&gt;
Парную точку нужно искать на эпиполярной&amp;lt;ref name=&amp;quot;Epipolar&amp;quot;&amp;gt;Информация о эпиполярной геометрии[https://ru.qaz.wiki/wiki/Epipolar_geometry]&amp;lt;/ref&amp;gt; линии. Соответственно, для упрощения поиска изображения выравнивают так, чтобы все эпиполярные линии были параллельны сторонам изображения (обычно горизонтальны). Более того, изображения выравнивают так, чтобы для точки с координатами &amp;lt;math&amp;gt;(x_0, y_0)&amp;lt;/math&amp;gt; соответствующая ей эпиполярная линия задавалась уравнением &amp;lt;math&amp;gt;x = x_0&amp;lt;/math&amp;gt;. Тогда для каждой точки, соответствующую ей парную точку, нужно искать в той-же строчке на изображении со второй камеры. Такой процесс выравнивания изображений называют '''ректификацией''' (rectification).&lt;br /&gt;
&lt;br /&gt;
[[Файл:Stereo.png|thumb|300px| Рисунок 2. Результат построения карты смещений по двум картинкам.&amp;lt;ref name=&amp;quot;img2&amp;quot;&amp;gt; &amp;quot;Основы стереозрения&amp;quot; Рис. 3 [https://habr.com/ru/post/130300/]&amp;lt;/ref&amp;gt;]]&lt;br /&gt;
&lt;br /&gt;
После того, как изображения '''ректифицированы''', выполняют поиск соответствующих пар точек. Для каждого пикселя одной картинки с координатами &amp;lt;math&amp;gt;(x_0, y_0)&amp;lt;/math&amp;gt; выполняется поиск пикселя на другой картинке. При этом предполагается, что пиксель на второй картинке должен иметь координаты &amp;lt;math&amp;gt;(x_0 - d, y_0)&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;d&amp;lt;/math&amp;gt; — величина называемая смещением. Поиск соответствующего пикселя выполняется путем вычисления максимума функции отклика, в качестве которой может выступать, например, [[Корреляция случайных величин|корреляция]] окрестностей пикселей. В результате получается карта смещений, пример которой приведен на рис. 2. &lt;br /&gt;
&lt;br /&gt;
Собственно значения глубины обратно пропорциональны величине смещения пикселей.&lt;br /&gt;
&lt;br /&gt;
== Использование нейронных сетей ==&lt;br /&gt;
&lt;br /&gt;
Существует множество методов, использующих нейронные сети. Приведём пару примеров таких решений.&lt;br /&gt;
&lt;br /&gt;
=== Построение с помощью свёрточных нейронных сетей ===&lt;br /&gt;
&lt;br /&gt;
Используем [[Сверточные нейронные сети|сверточные нейронные сети]] для построения карты глубины следующим образом&lt;br /&gt;
&amp;lt;ref name=&amp;quot;cnn_rew&amp;quot;&amp;gt; Xiaobai Ma, Zhenglin Geng, Zhi Bie &amp;quot;Depth Estimation from Single Image Using CNN-Residual Network&amp;quot; [http://cs231n.stanford.edu/reports/2017/pdfs/203.pdf]&amp;lt;/ref&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
*  '''Создаем карту смещений''': используя два изображения с камер, близко расположенных друг к другу, создаем карту различий, точно так же как в методе построения по стереопаре.&lt;br /&gt;
&lt;br /&gt;
* '''Ищем реальную карту глубины для обучения''': с помощью карты смещений, можем построить карту глубины &amp;lt;math&amp;gt;y&amp;lt;/math&amp;gt; вышеописанным способом. Также допустимы другие способы построения карты глубины для обучения нейронной сети.&lt;br /&gt;
&lt;br /&gt;
*  '''Функция потерь''': определим [[Функция потерь и эмпирический риск|функцию потерь]], для предсказанной карты &amp;lt;math&amp;gt;\hat y&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;d_i = log( y_i) - log (\hat y_i)&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;\lambda \in [0, 1]&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;n &amp;lt;/math&amp;gt; — количество пикселей. &amp;lt;math&amp;gt;L(y, \hat y) =  \frac{1}{n} \sum\limits_{i} d^2_i - \frac{\lambda}{n^2}(\sum\limits_{i} d_i)^2&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;y_i&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;\hat y_i&amp;lt;/math&amp;gt; это i пискель для для реальной карты глубин и для предсказанной карты, соответственно. Гиперпараметр &amp;lt;math&amp;gt;\lambda&amp;lt;/math&amp;gt;, нужен для того, чтобы функция потерь меньше росла при большом количестве пикселей, предсказание для которых достаточно близко к реальному. Например, если &amp;lt;math&amp;gt;\lambda = 0&amp;lt;/math&amp;gt;, то мы просто придём к оптимизации в L2 для &amp;lt;math&amp;gt;d_i&amp;lt;/math&amp;gt;, т.е. &amp;lt;math&amp;gt;L(y, \hat y) =  \frac{1}{n} \sum\limits_{i} d^2_i &amp;lt;/math&amp;gt;.&amp;lt;ref name=&amp;quot;loss&amp;quot;&amp;gt;David Eigen, Christian Puhrsch, Rob Fergus &amp;quot;Depth Map Prediction from a Single Imageusing a Multi-Scale Deep Network&amp;quot; стр. 5&amp;lt;/ref&amp;gt; &lt;br /&gt;
&lt;br /&gt;
* '''Обучение свёрточной нейронной сети''': далее идёт обычное обучение нейронной сети по карте различий путем обратного распространения ошибки, оптимизируя заданную выше функцию потерь.&lt;br /&gt;
&lt;br /&gt;
В итоге, по обученной нейронной сети мы можем создавать карту глубины, не проводя расчётов для поиска карт смещения и имея только изображение объекта или пространства. &amp;lt;ref name=&amp;quot;cnn&amp;quot;&amp;gt;Реализация, основанная на свёрточных нейронных сетях [https://www.kaggle.com/kmader/cnn-for-generating-depth-maps-from-rgb-images]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Также возможно использование усложнённых архитектур свёрточных нейронных сетей типа '''DenseNet'''.&lt;br /&gt;
&lt;br /&gt;
'''DenseNet'''&amp;lt;ref name=&amp;quot;DenseNet&amp;quot;&amp;gt;Оригинальная статья описывающая DenseNet [https://arxiv.org/abs/1611.09326]&amp;lt;/ref&amp;gt; {{---}} это свёрточная нейронные сеть, в которой выход каждого из слоев подаётся на вход всем слоям, лежащих ниже.&lt;br /&gt;
&lt;br /&gt;
=== Построение с помощью капсульных нейронных сетей ===&lt;br /&gt;
&lt;br /&gt;
Свёрточные нейронные сети способны регистрировать только наличие какого-либо объекта на картинке, не кодируя его ориентацию и положение. Но '''капсульные нейронные сети''' (англ. Capsule Neural Network)&amp;lt;ref name=&amp;quot;CapsNet&amp;quot;&amp;gt;Sara Sabour, Nicholas Frosst, Geoffrey E. Hinton &amp;quot;Dynamic Routing Between Capsules&amp;quot; [https://arxiv.org/pdf/1710.09829.pdf]&amp;lt;/ref&amp;gt; лишены этого недостатка.&lt;br /&gt;
&lt;br /&gt;
[[Файл:capsnet.jpg|thumb|400px| Рисунок 3. Структура капсульной нейронной сети &amp;lt;ref name=&amp;quot;img&amp;quot;&amp;gt; &amp;quot;Design and Investigation of Capsule Networks for Sentence Classification&amp;quot; Figure 2. [https://www.mdpi.com/2076-3417/9/11/2200/htm]&amp;lt;/ref&amp;gt;.]]&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Капсульная нейронная сеть&amp;quot; состоит из капсул или групп нейронов, чтобы идентифицировать закономерности в изображении. Эта информация поступает в виде векторов, содержащих ориентацию и положение узоров на изображении, которое затем принимается капсулами более высокого уровня. Капсулы более высокого уровня обрабатывают эту информацию из нескольких капсул более низкого уровня и впоследствии выдают прогноз. Капсулы одного уровня не имеют связей друг с другом и вычисляют информацию независимо друг от друга. Капсулы образуются путем разделения выходных данных из свёрточного слоя. Мы делим наш трехмерный вектор на капсулы методом &amp;quot;нарезания&amp;quot; таким образом, чтобы в каждой капсуле была информация о каждом пикселе, т.е. по трехмерной координате.&lt;br /&gt;
 &lt;br /&gt;
Состояние нейронов капсульной нейронной сети внутри изображения фиксирует свойство области или объекта внутри изображения: его положение и ориентацию.&lt;br /&gt;
&lt;br /&gt;
Использование капсульной нейронной сети аналогично использованию обычных свёрточных сетей, описанному выше. &lt;br /&gt;
В целом, данная сеть показывает более точные результаты предсказания глубины.&lt;br /&gt;
&lt;br /&gt;
=== Построение с помощью PlanetNet ===&lt;br /&gt;
&lt;br /&gt;
Так же есть архитектуры, решающие данную задачу и без обучения на карте смещений, построенной с помощью двух изображений. Одной из таких является '''PlaneNet'''. &lt;br /&gt;
&lt;br /&gt;
'''PlaneNet'''&amp;lt;ref name=&amp;quot;planetNet&amp;quot;&amp;gt; Chen Liu, Jimei Yang, Duygu Ceylan, Ersin Yumer, Yasutaka Furukawa &amp;quot;PlaneNet: Piece-wise Planar Reconstruction from a Single RGB Image&amp;quot; [https://arxiv.org/abs/1804.06278v1]&amp;lt;/ref&amp;gt; {{---}} глубокая нейронная сеть, построенная на расширенных остаточных сетях (aнгл. Dilated Residual Networks или DRN)&amp;lt;ref name=&amp;quot;drn&amp;quot;&amp;gt; Fisher Yu, Vladlen Koltun, Thomas Funkhouser &amp;quot;Dilated Residual Networks&amp;quot; [https://arxiv.org/abs/1705.09914]&amp;lt;/ref&amp;gt;. Она получает карту глубин путем композиции выходов трех подзадач:&lt;br /&gt;
&lt;br /&gt;
[[Файл:plane_net.png|thumb|500px| Рисунок 4. Прогнозируемые PlaneNet параметры по одной rgb картинке: cегметация плоскости, параметры плоскостей, неплоская карта глубины&amp;lt;ref name=&amp;quot;img4&amp;quot;&amp;gt; Chen Liu, Jimei Yang, Duygu Ceylan, Ersin Yumer, Yasutaka Furukawa &amp;quot;PlaneNet: Piece-wise Planar Reconstruction from a Single RGB Image&amp;quot; Figure 2.&amp;lt;/ref&amp;gt;.]]&lt;br /&gt;
&lt;br /&gt;
* '''Параметры плоскостей''': пытаемся предсказать количество плоскостей K, а после ищем на изображение K плоских поверхностей, каждая поверхность задаётся тремя параметрами: нормальная, прямая и сдвиг.&lt;br /&gt;
&lt;br /&gt;
* [[Сегментация изображений|'''Сегментация плоскости''']]: ищем группы пикселей, каждая из которых характеризует один смысловой объект.&lt;br /&gt;
&lt;br /&gt;
* '''Неплоская карта глубины''': ищем одно-канальную (или неплоскую) карту глубины, то есть карту глубины, где каждый пиксель, либо на глубине 0, либо на глубине 1.&lt;br /&gt;
&lt;br /&gt;
=== Неконтролируемая оценка глубины монокуляра с консистенцией слева направо (CVPR 2017) ===&lt;br /&gt;
&lt;br /&gt;
В данной работе предлагается сверточная нейронная сеть, обученная выполнять оценку глубины одного изображения без истинных данных. Авторы предлагают сетевую архитектуру, которая выполняет сквозную неконтролируемую оценку глубины монокуляра с потерей обучения, что обеспечивает согласованность глубины слева направо внутри сети.&lt;br /&gt;
Сеть оценивает глубину, выводя диспропорции, которые искажают левое изображение, чтобы соответствовать правому. Левое входное изображение используется для вывода диспропорций слева направо и справа налево. Сеть генерирует предсказанное изображение с обратным отображением с помощью билинейного сэмплера. Это приводит к полностью дифференциальной модели формирования изображения.&lt;br /&gt;
Сверточная архитектура вдохновлена Диснеем. Она состоит из двух частей—кодера и декодера. Декодер использует пропуск соединений из блоков активации кодера, чтобы распознавать детали с высоким разрешением. Сеть предсказывает две карты диспропорций — слева направо и справа налево.&lt;br /&gt;
В процессе обучения сеть генерирует изображение путем выборки пикселей из противоположного стереоизображения. Модель формирования изображения использует сэмплер изображений из пространственной трансформаторной сети (STN) для выборки входного изображения с помощью карты диспаритетов. Используемая билинейная выборка локально дифференцируема.&lt;br /&gt;
Здесь представлены результаты, полученные на Китти 2015 стерео 200 обучающего набора изображений неравенства.&lt;br /&gt;
&lt;br /&gt;
=== Неконтролируемое обучение поиска карты глубины из видео (CVPR 2017) ===&lt;br /&gt;
&lt;br /&gt;
Авторы данной статьи &amp;lt;ref name=&amp;quot;cvrp_dnn&amp;quot;&amp;gt;Tinghui Zhou, Matthew Brown, Noah Snavely, David G. Lowe &amp;quot;Unsupervised Learning of Depth and Ego-Motion from Video&amp;quot; [https://arxiv.org/abs/1704.07813v2]&amp;lt;/ref&amp;gt; предлагают методику неконтролируемой оценки глубины одной картинки и движения камеры из беспорядочной видео нарезки. &lt;br /&gt;
&lt;br /&gt;
[[Файл:dnn.png|thumb|400px| Рисунок 5. Aрхитектура сети на базе DispNet  &amp;lt;ref name=&amp;quot;cvrp&amp;quot;&amp;gt;Tinghui Zhou, Matthew Brown, Noah Snavely, David G. Lowe &amp;quot;Unsupervised Learning of Depth and Ego-Motion from Video&amp;quot; Figure 4&amp;lt;/ref&amp;gt;]]&lt;br /&gt;
&lt;br /&gt;
Будем использовать сверточные нейронные сети c глубиной одного вида и многовидовой камерой из неупорядоченного видеоряда. Метод базируется на синтезе видов. Сеть загружает фото объекта в качестве данных ввода и выводит карту глубины на каждый пиксель. Вид объекта может быть синтезирован исходя из глубины на каждый пиксель снимка позиционирования и четкости ближнего вида. Синтез может быть  дифференцирован с CNN по геометрии и модулям позиционирования.&lt;br /&gt;
Авторы взяли на вооружение архитектуру DispNet&amp;lt;ref name=&amp;quot;dispNet&amp;quot;&amp;gt; Nikolaus Mayer, Eddy Ilg, Philip Hausser, Philipp Fischer &amp;quot;A Large Dataset to Train Convolutional Networks&lt;br /&gt;
for Disparity, Optical Flow, and Scene Flow Estimation&amp;quot; [https://arxiv.org/pdf/1512.02134.pdf]&amp;lt;/ref&amp;gt;, которая сконструирована в виде енкодера - декодера с пропущенными соединениями и многомасштабными блоками предсказания. Функция активации ReLU отслеживает все сверточные слои кроме предсказанных.&lt;br /&gt;
Вид объекта со всех источников формирует входные данные в сеть позиционной оценки. На выходе получается относительная позиция между видом объекта и видом каждого источника. Сеть состоит из двух 7 шаговых сверток за которым следует свертка 1 х 1. За исключением последнего слоя свертки, где применяется нелинейная активация, все другие отслеживаются функцией активации ReLU. Сеть объяснимых предсказаний дает доступ к первым пяти закодированным слоям сети позиционирования. За ней следуют 5 слоев обратной свертки с многомасштабными блоками предсказаний. Кроме слоев предсказаний все уровни свертки и обратной свертки отслеживаются ReLU.&lt;br /&gt;
&lt;br /&gt;
=== Прогнозирование глубины без датчиков: использование структуры для обучения без учителя по монокулярным видео (AAAI 2019) ===&lt;br /&gt;
&lt;br /&gt;
Данная статья &amp;lt;ref name=&amp;quot;aaai&amp;quot;&amp;gt; Vincent Casser, Soeren Pirk, Reza Mahjourian, Anelia Angelova &amp;quot;Depth Prediction Without the Sensors: Leveraging Structure for Unsupervised Learning from Monocular Videos&amp;quot; [https://arxiv.org/abs/1811.06152v1]&amp;lt;/ref&amp;gt; посвящена задаче обучения без учителя глубины сцены и эго-движения робота, где наблюдение обеспечивается видеозаписями с одной камеры. Это делается путем введения геометрической структуры в процесс обучения. Он включает в себя моделирование сцены и отдельных объектов, эго-движения камеры и движения объектов, изучаемых с помощью монокулярных видеовходов. Авторы вводят модель движения объекта, которая имеет ту же архитектуру, что и сеть эго-движения. Она принимает последовательность изображений RGB в качестве входных данных и дополняется предварительно вычисленными масками сегментации экземпляров. Работа модели движения заключается в том, чтобы научиться предсказывать векторы трансформации каждого объекта в трехмерном пространстве. Это создает видимость наблюдаемого объекта в соответствующем целевом кадре.&lt;br /&gt;
&lt;br /&gt;
== См. также ==&lt;br /&gt;
&lt;br /&gt;
* [[Компьютерное зрение]]&lt;br /&gt;
&lt;br /&gt;
* [[Оценка положения]]&lt;br /&gt;
&lt;br /&gt;
* [[Задача нахождения объектов на изображении]]&lt;br /&gt;
&lt;br /&gt;
== Примечания ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Источники информации ==&lt;br /&gt;
&lt;br /&gt;
* Чугунов Р. А., Кульневич А. Д., Аксенов С. В. Методика построения карт глубины стереоизображения с помощью капсульной нейронной сети //Доклады Томского государственного университета систем управления и радиоэлектроники. – 2019. – Т. 22. – №. 1.[https://cyberleninka.ru/article/n/metodika-postroeniya-kart-glubiny-stereoizobrazheniya-s-pomoschyu-kapsulnoy-neyronnoy-seti/viewer]&lt;br /&gt;
&lt;br /&gt;
* 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]&lt;br /&gt;
&lt;br /&gt;
*  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]&lt;br /&gt;
&lt;br /&gt;
* 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]&lt;br /&gt;
&lt;br /&gt;
* 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]&lt;br /&gt;
&lt;br /&gt;
[[Категория:Машинное обучение]]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Компьютерное зрение]]&lt;/div&gt;</summary>
		<author><name>Frak</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9A%D0%B0%D1%80%D1%82%D0%B0_%D0%B3%D0%BB%D1%83%D0%B1%D0%B8%D0%BD%D1%8B&amp;diff=79845</id>
		<title>Карта глубины</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9A%D0%B0%D1%80%D1%82%D0%B0_%D0%B3%D0%BB%D1%83%D0%B1%D0%B8%D0%BD%D1%8B&amp;diff=79845"/>
				<updated>2021-01-22T06:56:19Z</updated>
		
		<summary type="html">&lt;p&gt;Frak: /* Прогнозирование глубины без датчиков: использование структуры для неконтролируемого обучения по монокулярным видео (AAAI 2019) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Карта глубины''' (англ. depth map) — это изображение, где для каждого пикселя вместо цвета хранится его расстояние до камеры.&amp;lt;ref name=&amp;quot;def&amp;quot;&amp;gt;Alexey Kurakin &amp;quot;Основы стереозрения&amp;quot;[https://habr.com/ru/post/130300/]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В компьютерной 3D-графике и [[Компьютерное зрение|компьютерном зрении]] карта глубины представляет собой изображение или канал изображения, содержащий информацию о расстоянии поверхностей объектов сцены от точки обзора. &lt;br /&gt;
&lt;br /&gt;
== Мотивация ==&lt;br /&gt;
&lt;br /&gt;
Карта глубины изображения содержит в себе информацию о расстоянии между различными объектами или частями объектов, представленных на данном изображении. Эта информация может быть полезна во многих областях. &lt;br /&gt;
 &lt;br /&gt;
* Для создания 3D-сенсеров. Они способны строить трёхмерную картину своего окружения, используются для [[Оценка положения|ориентации]] автономного робота в пространстве.&lt;br /&gt;
&lt;br /&gt;
* Для систем, использующих технологии дополненной и виртуальной реальности. Например, камеры, которые фиксируют действия пользователя в видеоиграх с технологией виртуальной реальности.&lt;br /&gt;
&lt;br /&gt;
* В беспилотных автомобилях, которые также используют карты глубин для ориентации на дороге.&lt;br /&gt;
&lt;br /&gt;
* Для обработки фотографий. Например, карты глубин используют для размытия фона на фотографии, чтобы добиться более чёткого выделения человека&amp;lt;ref name=&amp;quot;expls&amp;quot;&amp;gt;Примеры из &amp;quot;Research Guide for Depth Estimation with Deep Learning&amp;quot;[https://www.kdnuggets.com/2019/11/research-guide-depth-estimation-deep-learning.html]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Методы построения карты глубины ==&lt;br /&gt;
&lt;br /&gt;
Карта глубины может быть получена с помощью '''специальной камеры глубины''', по '''стереопаре изображений''', а также с помощью [[Нейронные сети, перцептрон|'''нейронных сетей''']].&lt;br /&gt;
&lt;br /&gt;
== Построение с помощью специальных камер глубин == &lt;br /&gt;
&lt;br /&gt;
[[Файл:ToF.jpg|thumb|250px| Рисунок 1. Пример работы ToF-камеры.]]&lt;br /&gt;
&lt;br /&gt;
* '''ToF-камеры''' (англ. Time of Flight). Принцип работы данной камеры основан на измерении задержки света, с которой свет возвращается в каждую точку. Имея несколько сенсоров с разным временем накопления заряда и, зная сдвиг по времени относительно источника для каждого сенсора и снятой яркости вспышки, мы можем рассчитать сдвиг и, соответственно, расстояние до объекта. Причем чем больше сенсоров задействовано, тем выше точность метода.&lt;br /&gt;
&lt;br /&gt;
* '''Структурированные световые камеры''' (aнгл. Structured light camera). Принцип работы данной камеры один из самых старых. Ставим проектор, который создает, например, горизонтальные (а потом и вертикальные) полоски и рядом камеру, которая снимает картину с полосками. В некоторых вариантах используется псевдослучайный набор точек (например MS Kinect {{---}} бесконтактный сенсорный игровой контроллер, для консолей Xbox 360, Xbox One и персональных компьютеров под управлением ОС Windows&amp;lt;ref name=&amp;quot;kinect&amp;quot;&amp;gt; О MicriSoft Kinect [https://en.wikipedia.org/wiki/Kinect]&amp;lt;/ref&amp;gt;). Проекторы обычно работают в инфракрасном спектре, чтобы не мешать пользователям. Поскольку камера и проектор смещены друг относительно друга, то и полоски также будут смещаться пропорционально расстоянию до объекта. Измеряя это смещение, мы можем рассчитывать расстояние до объекта. Вполне понятны сложности, с которыми можно столкнуться при использовании этого метода: это необходимость настройки и калибровки проектора, и проблема того, что нам нужно относительно благоприятное освещение. К примеру, солнце может засветить полосы, и что-то распознать будет тяжело.&lt;br /&gt;
&lt;br /&gt;
== Построения карты глубины по стереопаре ==&lt;br /&gt;
&lt;br /&gt;
Идея, лежащая в основе построения карты глубины по '''стереопаре''', проста. Для каждой точки на одном изображении выполняется поиск [[Ключевые точки изображения|парной ей точки]]&amp;lt;sup&amp;gt;[на 21.01.21 не создан]&amp;lt;/sup&amp;gt; на другом изображении. А по паре соответствующих точек можно выполнить [[Триангуляция полигонов (ушная + монотонная)|триангуляцию]] и определить координаты их [[Отображения|прообраза]] в трехмерном пространстве. Зная трехмерные координаты прообраза, глубина вычисляется как расстояние до плоскости камеры.&lt;br /&gt;
&lt;br /&gt;
Парную точку нужно искать на эпиполярной&amp;lt;ref name=&amp;quot;Epipolar&amp;quot;&amp;gt;Информация о эпиполярной геометрии[https://ru.qaz.wiki/wiki/Epipolar_geometry]&amp;lt;/ref&amp;gt; линии. Соответственно, для упрощения поиска изображения выравнивают так, чтобы все эпиполярные линии были параллельны сторонам изображения (обычно горизонтальны). Более того, изображения выравнивают так, чтобы для точки с координатами &amp;lt;math&amp;gt;(x_0, y_0)&amp;lt;/math&amp;gt; соответствующая ей эпиполярная линия задавалась уравнением &amp;lt;math&amp;gt;x = x_0&amp;lt;/math&amp;gt;. Тогда для каждой точки, соответствующую ей парную точку, нужно искать в той-же строчке на изображении со второй камеры. Такой процесс выравнивания изображений называют '''ректификацией''' (rectification).&lt;br /&gt;
&lt;br /&gt;
[[Файл:Stereo.png|thumb|300px| Рисунок 2. Результат построения карты смещений по двум картинкам.&amp;lt;ref name=&amp;quot;img2&amp;quot;&amp;gt; &amp;quot;Основы стереозрения&amp;quot; Рис. 3 [https://habr.com/ru/post/130300/]&amp;lt;/ref&amp;gt;]]&lt;br /&gt;
&lt;br /&gt;
После того, как изображения '''ректифицированы''', выполняют поиск соответствующих пар точек. Для каждого пикселя одной картинки с координатами &amp;lt;math&amp;gt;(x_0, y_0)&amp;lt;/math&amp;gt; выполняется поиск пикселя на другой картинке. При этом предполагается, что пиксель на второй картинке должен иметь координаты &amp;lt;math&amp;gt;(x_0 - d, y_0)&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;d&amp;lt;/math&amp;gt; — величина называемая смещением. Поиск соответствующего пикселя выполняется путем вычисления максимума функции отклика, в качестве которой может выступать, например, [[Корреляция случайных величин|корреляция]] окрестностей пикселей. В результате получается карта смещений, пример которой приведен на рис. 2. &lt;br /&gt;
&lt;br /&gt;
Собственно значения глубины обратно пропорциональны величине смещения пикселей.&lt;br /&gt;
&lt;br /&gt;
== Использование нейронных сетей ==&lt;br /&gt;
&lt;br /&gt;
Существует множество методов, использующих нейронные сети. Приведём пару примеров таких решений.&lt;br /&gt;
&lt;br /&gt;
=== Построение с помощью свёрточных нейронных сетей ===&lt;br /&gt;
&lt;br /&gt;
Используем [[Сверточные нейронные сети|сверточные нейронные сети]] для построения карты глубины следующим образом&lt;br /&gt;
&amp;lt;ref name=&amp;quot;cnn_rew&amp;quot;&amp;gt; Xiaobai Ma, Zhenglin Geng, Zhi Bie &amp;quot;Depth Estimation from Single Image Using CNN-Residual Network&amp;quot; [http://cs231n.stanford.edu/reports/2017/pdfs/203.pdf]&amp;lt;/ref&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
*  '''Создаем карту смещений''': используя два изображения с камер, близко расположенных друг к другу, создаем карту различий, точно так же как в методе построения по стереопаре.&lt;br /&gt;
&lt;br /&gt;
* '''Ищем реальную карту глубины для обучения''': с помощью карты смещений, можем построить карту глубины &amp;lt;math&amp;gt;y&amp;lt;/math&amp;gt; вышеописанным способом. Также допустимы другие способы построения карты глубины для обучения нейронной сети.&lt;br /&gt;
&lt;br /&gt;
*  '''Функция потерь''': определим [[Функция потерь и эмпирический риск|функцию потерь]], для предсказанной карты &amp;lt;math&amp;gt;\hat y&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;d_i = log( y_i) - log (\hat y_i)&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;\lambda \in [0, 1]&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;n &amp;lt;/math&amp;gt; — количество пикселей. &amp;lt;math&amp;gt;L(y, \hat y) =  \frac{1}{n} \sum\limits_{i} d^2_i - \frac{\lambda}{n^2}(\sum\limits_{i} d_i)^2&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;y_i&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;\hat y_i&amp;lt;/math&amp;gt; это i пискель для для реальной карты глубин и для предсказанной карты, соответственно. Гиперпараметр &amp;lt;math&amp;gt;\lambda&amp;lt;/math&amp;gt;, нужен для того, чтобы функция потерь меньше росла при большом количестве пикселей, предсказание для которых достаточно близко к реальному. Например, если &amp;lt;math&amp;gt;\lambda = 0&amp;lt;/math&amp;gt;, то мы просто придём к оптимизации в L2 для &amp;lt;math&amp;gt;d_i&amp;lt;/math&amp;gt;, т.е. &amp;lt;math&amp;gt;L(y, \hat y) =  \frac{1}{n} \sum\limits_{i} d^2_i &amp;lt;/math&amp;gt;.&amp;lt;ref name=&amp;quot;loss&amp;quot;&amp;gt;David Eigen, Christian Puhrsch, Rob Fergus &amp;quot;Depth Map Prediction from a Single Imageusing a Multi-Scale Deep Network&amp;quot; стр. 5&amp;lt;/ref&amp;gt; &lt;br /&gt;
&lt;br /&gt;
* '''Обучение свёрточной нейронной сети''': далее идёт обычное обучение нейронной сети по карте различий путем обратного распространения ошибки, оптимизируя заданную выше функцию потерь.&lt;br /&gt;
&lt;br /&gt;
В итоге, по обученной нейронной сети мы можем создавать карту глубины, не проводя расчётов для поиска карт смещения и имея только изображение объекта или пространства. &amp;lt;ref name=&amp;quot;cnn&amp;quot;&amp;gt;Реализация, основанная на свёрточных нейронных сетях [https://www.kaggle.com/kmader/cnn-for-generating-depth-maps-from-rgb-images]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Также возможно использование усложнённых архитектур свёрточных нейронных сетей типа '''DenseNet'''.&lt;br /&gt;
&lt;br /&gt;
'''DenseNet'''&amp;lt;ref name=&amp;quot;DenseNet&amp;quot;&amp;gt;Оригинальная статья описывающая DenseNet [https://arxiv.org/abs/1611.09326]&amp;lt;/ref&amp;gt; {{---}} это свёрточная нейронные сеть, в которой выход каждого из слоев подаётся на вход всем слоям, лежащих ниже.&lt;br /&gt;
&lt;br /&gt;
=== Построение с помощью капсульных нейронных сетей ===&lt;br /&gt;
&lt;br /&gt;
Свёрточные нейронные сети способны регистрировать только наличие какого-либо объекта на картинке, не кодируя его ориентацию и положение. Но '''капсульные нейронные сети''' (англ. Capsule Neural Network)&amp;lt;ref name=&amp;quot;CapsNet&amp;quot;&amp;gt;Sara Sabour, Nicholas Frosst, Geoffrey E. Hinton &amp;quot;Dynamic Routing Between Capsules&amp;quot; [https://arxiv.org/pdf/1710.09829.pdf]&amp;lt;/ref&amp;gt; лишены этого недостатка.&lt;br /&gt;
&lt;br /&gt;
[[Файл:capsnet.jpg|thumb|400px| Рисунок 3. Структура капсульной нейронной сети &amp;lt;ref name=&amp;quot;img&amp;quot;&amp;gt; &amp;quot;Design and Investigation of Capsule Networks for Sentence Classification&amp;quot; Figure 2. [https://www.mdpi.com/2076-3417/9/11/2200/htm]&amp;lt;/ref&amp;gt;.]]&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Капсульная нейронная сеть&amp;quot; состоит из капсул или групп нейронов, чтобы идентифицировать закономерности в изображении. Эта информация поступает в виде векторов, содержащих ориентацию и положение узоров на изображении, которое затем принимается капсулами более высокого уровня. Капсулы более высокого уровня обрабатывают эту информацию из нескольких капсул более низкого уровня и впоследствии выдают прогноз. Капсулы одного уровня не имеют связей друг с другом и вычисляют информацию независимо друг от друга. Капсулы образуются путем разделения выходных данных из свёрточного слоя. Мы делим наш трехмерный вектор на капсулы методом &amp;quot;нарезания&amp;quot; таким образом, чтобы в каждой капсуле была информация о каждом пикселе, т.е. по трехмерной координате.&lt;br /&gt;
 &lt;br /&gt;
Состояние нейронов капсульной нейронной сети внутри изображения фиксирует свойство области или объекта внутри изображения: его положение и ориентацию.&lt;br /&gt;
&lt;br /&gt;
Использование капсульной нейронной сети аналогично использованию обычных свёрточных сетей, описанному выше. &lt;br /&gt;
В целом, данная сеть показывает более точные результаты предсказания глубины.&lt;br /&gt;
&lt;br /&gt;
=== Построение с помощью PlanetNet ===&lt;br /&gt;
&lt;br /&gt;
Так же есть архитектуры, решающие данную задачу и без обучения на карте смещений, построенной с помощью двух изображений. Одной из таких является '''PlaneNet'''. &lt;br /&gt;
&lt;br /&gt;
'''PlaneNet'''&amp;lt;ref name=&amp;quot;planetNet&amp;quot;&amp;gt; Chen Liu, Jimei Yang, Duygu Ceylan, Ersin Yumer, Yasutaka Furukawa &amp;quot;PlaneNet: Piece-wise Planar Reconstruction from a Single RGB Image&amp;quot; [https://arxiv.org/abs/1804.06278v1]&amp;lt;/ref&amp;gt; {{---}} глубокая нейронная сеть, построенная на расширенных остаточных сетях (aнгл. Dilated Residual Networks или DRN)&amp;lt;ref name=&amp;quot;drn&amp;quot;&amp;gt; Fisher Yu, Vladlen Koltun, Thomas Funkhouser &amp;quot;Dilated Residual Networks&amp;quot; [https://arxiv.org/abs/1705.09914]&amp;lt;/ref&amp;gt;. Она получает карту глубин путем композиции выходов трех подзадач:&lt;br /&gt;
&lt;br /&gt;
[[Файл:plane_net.png|thumb|500px| Рисунок 4. Прогнозируемые PlaneNet параметры по одной rgb картинке: cегметация плоскости, параметры плоскостей, неплоская карта глубины&amp;lt;ref name=&amp;quot;img4&amp;quot;&amp;gt; Chen Liu, Jimei Yang, Duygu Ceylan, Ersin Yumer, Yasutaka Furukawa &amp;quot;PlaneNet: Piece-wise Planar Reconstruction from a Single RGB Image&amp;quot; Figure 2.&amp;lt;/ref&amp;gt;.]]&lt;br /&gt;
&lt;br /&gt;
* '''Параметры плоскостей''': пытаемся предсказать количество плоскостей K, а после ищем на изображение K плоских поверхностей, каждая поверхность задаётся тремя параметрами: нормальная, прямая и сдвиг.&lt;br /&gt;
&lt;br /&gt;
* [[Сегментация изображений|'''Сегментация плоскости''']]: ищем группы пикселей, каждая из которых характеризует один смысловой объект.&lt;br /&gt;
&lt;br /&gt;
* '''Неплоская карта глубины''': ищем одно-канальную (или неплоскую) карту глубины, то есть карту глубины, где каждый пиксель, либо на глубине 0, либо на глубине 1.&lt;br /&gt;
&lt;br /&gt;
=== Неконтролируемая оценка глубины монокуляра с консистенцией слева направо (CVPR 2017) ===&lt;br /&gt;
&lt;br /&gt;
В данной работе предлагается сверточная нейронная сеть, обученная выполнять оценку глубины одного изображения без данных о глубине наземной истины. Авторы предлагают сетевую архитектуру, которая выполняет сквозную неконтролируемую оценку глубины монокуляра с потерей обучения, что обеспечивает согласованность глубины слева направо внутри сети.&lt;br /&gt;
Сеть оценивает глубину, выводя диспропорции, которые искажают левое изображение, чтобы соответствовать правому. Левое входное изображение используется для вывода диспропорций слева направо и справа налево. Сеть генерирует предсказанное изображение с обратным отображением с помощью билинейного сэмплера. Это приводит к полностью дифференциальной модели формирования изображения.&lt;br /&gt;
Сверточная архитектура вдохновлена Диснеем. Он состоит из двух частей—кодера и декодера. Декодер использует пропуск соединений из блоков активации кодера для разрешения деталей с более высоким разрешением. Сеть предсказывает две карты диспропорций — слева направо и справа налево.&lt;br /&gt;
В процессе обучения сеть генерирует изображение путем выборки пикселей из противоположного стереоизображения. Модель формирования изображения использует сэмплер изображений из пространственной трансформаторной сети (STN) для выборки входного изображения с помощью карты диспаритетов. Используемая билинейная выборка локально дифференцируема.&lt;br /&gt;
Здесь представлены результаты, полученные на Китти 2015 стерео 200 обучающего набора изображений неравенства.&lt;br /&gt;
&lt;br /&gt;
=== Обучение без учителя для поиска карты глубины из видео (CVPR 2017) ===&lt;br /&gt;
&lt;br /&gt;
Авторы данной статьи &amp;lt;ref name=&amp;quot;cvrp_dnn&amp;quot;&amp;gt;Tinghui Zhou, Matthew Brown, Noah Snavely, David G. Lowe &amp;quot;Unsupervised Learning of Depth and Ego-Motion from Video&amp;quot; [https://arxiv.org/abs/1704.07813v2]&amp;lt;/ref&amp;gt; предлагают методику обучения без учителя для оценки глубины одной картинки и движения камеры из беспорядочной видео нарезки. &lt;br /&gt;
&lt;br /&gt;
[[Файл:dnn.png|thumb|400px| рис. 5. Aрхитектура сети на базе DispNet  &amp;lt;ref name=&amp;quot;cvrp&amp;quot;&amp;gt;Tinghui Zhou, Matthew Brown, Noah Snavely, David G. Lowe &amp;quot;Unsupervised Learning of Depth and Ego-Motion from Video&amp;quot; Figure 4&amp;lt;/ref&amp;gt;]]&lt;br /&gt;
&lt;br /&gt;
Будем использовать сверточные нейронные сети c глубиной одного вида и многовидовой камерой из неупорядоченного видеоряда. Метод базируется на синтезе видов. Сеть загружает фото объекта в качестве данных ввода и выводит карту глубины на каждый пиксель. Вид объекта может быть синтезирован исходя из глубины на каждый пиксель снимка, позиционирования и четкости ближнего вида. Синтез может быть  дифференцирован с CNN по геометрии и модулям позиционирования.&lt;br /&gt;
Авторы взяли на вооружение архитектуру DispNet&amp;lt;ref name=&amp;quot;dispNet&amp;quot;&amp;gt; Nikolaus Mayer, Eddy Ilg, Philip Hausser, Philipp Fischer &amp;quot;A Large Dataset to Train Convolutional Networks&lt;br /&gt;
for Disparity, Optical Flow, and Scene Flow Estimation&amp;quot; [https://arxiv.org/pdf/1512.02134.pdf]&amp;lt;/ref&amp;gt;, которая сконструирована в виде енкодера - декодера с пропущенными соединениями и многомасштабными блоками предсказания. Функция активации ReLU отслеживает все сверточные слои кроме предсказанных.&lt;br /&gt;
Вид объекта со всех источников формирует входные данные в сеть позиционной оценки. На выходе получается относительная позиция между видом объекта и видом каждого источника. Сеть состоит из двух 7 шаговых сверток за которым следует свертка 1 х 1. Кроме последнего слоя свертки, где нелинейная активация применяется, все другие отслеживаются функцией активации ReLU. Сеть объяснимых предсказаний дает доступ к первым пяти закодированным слоям сети позиционирования. За ней следует 5 слоев обратной свертки с многомасштабными блоками предсказаний. Кроме слоев предсказаний все уровни свертки и обратной свертки отслеживаются ReLU.&lt;br /&gt;
&lt;br /&gt;
=== Прогнозирование глубины без датчиков: использование структуры для обучения без учителя по монокулярным видео (AAAI 2019) ===&lt;br /&gt;
&lt;br /&gt;
Данная статья &amp;lt;ref name=&amp;quot;aaai&amp;quot;&amp;gt; Vincent Casser, Soeren Pirk, Reza Mahjourian, Anelia Angelova &amp;quot;Depth Prediction Without the Sensors: Leveraging Structure for Unsupervised Learning from Monocular Videos&amp;quot; [https://arxiv.org/abs/1811.06152v1]&amp;lt;/ref&amp;gt; посвящена задаче обучения без учителя глубины сцены и эго-движения робота, где наблюдение обеспечивается видеозаписями с одной камеры. Это делается путем введения геометрической структуры в процесс обучения. Он включает в себя моделирование сцены и отдельных объектов, эго-движения камеры и движения объектов, изучаемых с помощью монокулярных видеовходов. Авторы вводят модель движения объекта, которая имеет ту же архитектуру, что и сеть эго-движения. Она принимает последовательность изображений RGB в качестве входных данных и дополняется предварительно вычисленными масками сегментации экземпляров. Работа модели движения заключается в том, чтобы научиться предсказывать векторы трансформации каждого объекта в трехмерном пространстве. Это создает видимость наблюдаемого объекта в соответствующем целевом кадре.&lt;br /&gt;
&lt;br /&gt;
== См. также ==&lt;br /&gt;
&lt;br /&gt;
* [[Компьютерное зрение]]&lt;br /&gt;
&lt;br /&gt;
* [[Оценка положения]]&lt;br /&gt;
&lt;br /&gt;
* [[Задача нахождения объектов на изображении]]&lt;br /&gt;
&lt;br /&gt;
== Примечания ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Источники информации ==&lt;br /&gt;
&lt;br /&gt;
* Р.А. Чугунов, А.Д. Кульневич, С.В. Аксенов &amp;quot;Методика построения карт глубины стереоизображения с помощью капсульной нейронной сети&amp;quot; [https://cyberleninka.ru/article/n/metodika-postroeniya-kart-glubiny-stereoizobrazheniya-s-pomoschyu-kapsulnoy-neyronnoy-seti/viewer]&lt;br /&gt;
&lt;br /&gt;
* Alexey Kurakin &amp;quot;Основы стереозрения&amp;quot; [https://habr.com/ru/post/130300/]&lt;br /&gt;
&lt;br /&gt;
* Dmitriy Vatolin &amp;quot;Камеры глубины — тихая революция&amp;quot; [https://habr.com/ru/post/457524/]&lt;br /&gt;
&lt;br /&gt;
* Ibraheem Alhashim, Peter Wonka &amp;quot;High Quality Monocular Depth Estimation via Transfer Learning&amp;quot; [https://arxiv.org/pdf/1812.11941.pdf]&lt;br /&gt;
&lt;br /&gt;
*  David Eigen, Christian Puhrsch, Rob Fergus &amp;quot;Depth Map Prediction from a Single Imageusing a Multi-Scale Deep Network [https://arxiv.org/pdf/1406.2283.pdf]&lt;br /&gt;
&lt;br /&gt;
* Sunil Prakash, Gaelan Gu &amp;quot;Simultaneous Localization And Mapping with depth Prediction using Capsule Networks for UAVs&amp;quot; [https://arxiv.org/pdf/1808.05336.pdf]&lt;br /&gt;
&lt;br /&gt;
[[Категория:Машинное обучение]]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Компьютерное зрение]]&lt;/div&gt;</summary>
		<author><name>Frak</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9A%D0%B0%D1%80%D1%82%D0%B0_%D0%B3%D0%BB%D1%83%D0%B1%D0%B8%D0%BD%D1%8B&amp;diff=79844</id>
		<title>Карта глубины</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9A%D0%B0%D1%80%D1%82%D0%B0_%D0%B3%D0%BB%D1%83%D0%B1%D0%B8%D0%BD%D1%8B&amp;diff=79844"/>
				<updated>2021-01-22T06:52:11Z</updated>
		
		<summary type="html">&lt;p&gt;Frak: /* Обучение без учителя для поиска карты глубины из видео (CVPR 2017) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Карта глубины''' (англ. depth map) — это изображение, где для каждого пикселя вместо цвета хранится его расстояние до камеры.&amp;lt;ref name=&amp;quot;def&amp;quot;&amp;gt;Alexey Kurakin &amp;quot;Основы стереозрения&amp;quot;[https://habr.com/ru/post/130300/]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В компьютерной 3D-графике и [[Компьютерное зрение|компьютерном зрении]] карта глубины представляет собой изображение или канал изображения, содержащий информацию о расстоянии поверхностей объектов сцены от точки обзора. &lt;br /&gt;
&lt;br /&gt;
== Мотивация ==&lt;br /&gt;
&lt;br /&gt;
Карта глубины изображения содержит в себе информацию о расстоянии между различными объектами или частями объектов, представленных на данном изображении. Эта информация может быть полезна во многих областях. &lt;br /&gt;
 &lt;br /&gt;
* Для создания 3D-сенсеров. Они способны строить трёхмерную картину своего окружения, используются для [[Оценка положения|ориентации]] автономного робота в пространстве.&lt;br /&gt;
&lt;br /&gt;
* Для систем, использующих технологии дополненной и виртуальной реальности. Например, камеры, которые фиксируют действия пользователя в видеоиграх с технологией виртуальной реальности.&lt;br /&gt;
&lt;br /&gt;
* В беспилотных автомобилях, которые также используют карты глубин для ориентации на дороге.&lt;br /&gt;
&lt;br /&gt;
* Для обработки фотографий. Например, карты глубин используют для размытия фона на фотографии, чтобы добиться более чёткого выделения человека&amp;lt;ref name=&amp;quot;expls&amp;quot;&amp;gt;Примеры из &amp;quot;Research Guide for Depth Estimation with Deep Learning&amp;quot;[https://www.kdnuggets.com/2019/11/research-guide-depth-estimation-deep-learning.html]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Методы построения карты глубины ==&lt;br /&gt;
&lt;br /&gt;
Карта глубины может быть получена с помощью '''специальной камеры глубины''', по '''стереопаре изображений''', а также с помощью [[Нейронные сети, перцептрон|'''нейронных сетей''']].&lt;br /&gt;
&lt;br /&gt;
== Построение с помощью специальных камер глубин == &lt;br /&gt;
&lt;br /&gt;
[[Файл:ToF.jpg|thumb|250px| Рисунок 1. Пример работы ToF-камеры.]]&lt;br /&gt;
&lt;br /&gt;
* '''ToF-камеры''' (англ. Time of Flight). Принцип работы данной камеры основан на измерении задержки света, с которой свет возвращается в каждую точку. Имея несколько сенсоров с разным временем накопления заряда и, зная сдвиг по времени относительно источника для каждого сенсора и снятой яркости вспышки, мы можем рассчитать сдвиг и, соответственно, расстояние до объекта. Причем чем больше сенсоров задействовано, тем выше точность метода.&lt;br /&gt;
&lt;br /&gt;
* '''Структурированные световые камеры''' (aнгл. Structured light camera). Принцип работы данной камеры один из самых старых. Ставим проектор, который создает, например, горизонтальные (а потом и вертикальные) полоски и рядом камеру, которая снимает картину с полосками. В некоторых вариантах используется псевдослучайный набор точек (например MS Kinect {{---}} бесконтактный сенсорный игровой контроллер, для консолей Xbox 360, Xbox One и персональных компьютеров под управлением ОС Windows&amp;lt;ref name=&amp;quot;kinect&amp;quot;&amp;gt; О MicriSoft Kinect [https://en.wikipedia.org/wiki/Kinect]&amp;lt;/ref&amp;gt;). Проекторы обычно работают в инфракрасном спектре, чтобы не мешать пользователям. Поскольку камера и проектор смещены друг относительно друга, то и полоски также будут смещаться пропорционально расстоянию до объекта. Измеряя это смещение, мы можем рассчитывать расстояние до объекта. Вполне понятны сложности, с которыми можно столкнуться при использовании этого метода: это необходимость настройки и калибровки проектора, и проблема того, что нам нужно относительно благоприятное освещение. К примеру, солнце может засветить полосы, и что-то распознать будет тяжело.&lt;br /&gt;
&lt;br /&gt;
== Построения карты глубины по стереопаре ==&lt;br /&gt;
&lt;br /&gt;
Идея, лежащая в основе построения карты глубины по '''стереопаре''', проста. Для каждой точки на одном изображении выполняется поиск [[Ключевые точки изображения|парной ей точки]]&amp;lt;sup&amp;gt;[на 21.01.21 не создан]&amp;lt;/sup&amp;gt; на другом изображении. А по паре соответствующих точек можно выполнить [[Триангуляция полигонов (ушная + монотонная)|триангуляцию]] и определить координаты их [[Отображения|прообраза]] в трехмерном пространстве. Зная трехмерные координаты прообраза, глубина вычисляется как расстояние до плоскости камеры.&lt;br /&gt;
&lt;br /&gt;
Парную точку нужно искать на эпиполярной&amp;lt;ref name=&amp;quot;Epipolar&amp;quot;&amp;gt;Информация о эпиполярной геометрии[https://ru.qaz.wiki/wiki/Epipolar_geometry]&amp;lt;/ref&amp;gt; линии. Соответственно, для упрощения поиска изображения выравнивают так, чтобы все эпиполярные линии были параллельны сторонам изображения (обычно горизонтальны). Более того, изображения выравнивают так, чтобы для точки с координатами &amp;lt;math&amp;gt;(x_0, y_0)&amp;lt;/math&amp;gt; соответствующая ей эпиполярная линия задавалась уравнением &amp;lt;math&amp;gt;x = x_0&amp;lt;/math&amp;gt;. Тогда для каждой точки, соответствующую ей парную точку, нужно искать в той-же строчке на изображении со второй камеры. Такой процесс выравнивания изображений называют '''ректификацией''' (rectification).&lt;br /&gt;
&lt;br /&gt;
[[Файл:Stereo.png|thumb|300px| Рисунок 2. Результат построения карты смещений по двум картинкам.&amp;lt;ref name=&amp;quot;img2&amp;quot;&amp;gt; &amp;quot;Основы стереозрения&amp;quot; Рис. 3 [https://habr.com/ru/post/130300/]&amp;lt;/ref&amp;gt;]]&lt;br /&gt;
&lt;br /&gt;
После того, как изображения '''ректифицированы''', выполняют поиск соответствующих пар точек. Для каждого пикселя одной картинки с координатами &amp;lt;math&amp;gt;(x_0, y_0)&amp;lt;/math&amp;gt; выполняется поиск пикселя на другой картинке. При этом предполагается, что пиксель на второй картинке должен иметь координаты &amp;lt;math&amp;gt;(x_0 - d, y_0)&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;d&amp;lt;/math&amp;gt; — величина называемая смещением. Поиск соответствующего пикселя выполняется путем вычисления максимума функции отклика, в качестве которой может выступать, например, [[Корреляция случайных величин|корреляция]] окрестностей пикселей. В результате получается карта смещений, пример которой приведен на рис. 2. &lt;br /&gt;
&lt;br /&gt;
Собственно значения глубины обратно пропорциональны величине смещения пикселей.&lt;br /&gt;
&lt;br /&gt;
== Использование нейронных сетей ==&lt;br /&gt;
&lt;br /&gt;
Существует множество методов, использующих нейронные сети. Приведём пару примеров таких решений.&lt;br /&gt;
&lt;br /&gt;
=== Построение с помощью свёрточных нейронных сетей ===&lt;br /&gt;
&lt;br /&gt;
Используем [[Сверточные нейронные сети|сверточные нейронные сети]] для построения карты глубины следующим образом&lt;br /&gt;
&amp;lt;ref name=&amp;quot;cnn_rew&amp;quot;&amp;gt; Xiaobai Ma, Zhenglin Geng, Zhi Bie &amp;quot;Depth Estimation from Single Image Using CNN-Residual Network&amp;quot; [http://cs231n.stanford.edu/reports/2017/pdfs/203.pdf]&amp;lt;/ref&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
*  '''Создаем карту смещений''': используя два изображения с камер, близко расположенных друг к другу, создаем карту различий, точно так же как в методе построения по стереопаре.&lt;br /&gt;
&lt;br /&gt;
* '''Ищем реальную карту глубины для обучения''': с помощью карты смещений, можем построить карту глубины &amp;lt;math&amp;gt;y&amp;lt;/math&amp;gt; вышеописанным способом. Также допустимы другие способы построения карты глубины для обучения нейронной сети.&lt;br /&gt;
&lt;br /&gt;
*  '''Функция потерь''': определим [[Функция потерь и эмпирический риск|функцию потерь]], для предсказанной карты &amp;lt;math&amp;gt;\hat y&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;d_i = log( y_i) - log (\hat y_i)&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;\lambda \in [0, 1]&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;n &amp;lt;/math&amp;gt; — количество пикселей. &amp;lt;math&amp;gt;L(y, \hat y) =  \frac{1}{n} \sum\limits_{i} d^2_i - \frac{\lambda}{n^2}(\sum\limits_{i} d_i)^2&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;y_i&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;\hat y_i&amp;lt;/math&amp;gt; это i пискель для для реальной карты глубин и для предсказанной карты, соответственно. Гиперпараметр &amp;lt;math&amp;gt;\lambda&amp;lt;/math&amp;gt;, нужен для того, чтобы функция потерь меньше росла при большом количестве пикселей, предсказание для которых достаточно близко к реальному. Например, если &amp;lt;math&amp;gt;\lambda = 0&amp;lt;/math&amp;gt;, то мы просто придём к оптимизации в L2 для &amp;lt;math&amp;gt;d_i&amp;lt;/math&amp;gt;, т.е. &amp;lt;math&amp;gt;L(y, \hat y) =  \frac{1}{n} \sum\limits_{i} d^2_i &amp;lt;/math&amp;gt;.&amp;lt;ref name=&amp;quot;loss&amp;quot;&amp;gt;David Eigen, Christian Puhrsch, Rob Fergus &amp;quot;Depth Map Prediction from a Single Imageusing a Multi-Scale Deep Network&amp;quot; стр. 5&amp;lt;/ref&amp;gt; &lt;br /&gt;
&lt;br /&gt;
* '''Обучение свёрточной нейронной сети''': далее идёт обычное обучение нейронной сети по карте различий путем обратного распространения ошибки, оптимизируя заданную выше функцию потерь.&lt;br /&gt;
&lt;br /&gt;
В итоге, по обученной нейронной сети мы можем создавать карту глубины, не проводя расчётов для поиска карт смещения и имея только изображение объекта или пространства. &amp;lt;ref name=&amp;quot;cnn&amp;quot;&amp;gt;Реализация, основанная на свёрточных нейронных сетях [https://www.kaggle.com/kmader/cnn-for-generating-depth-maps-from-rgb-images]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Также возможно использование усложнённых архитектур свёрточных нейронных сетей типа '''DenseNet'''.&lt;br /&gt;
&lt;br /&gt;
'''DenseNet'''&amp;lt;ref name=&amp;quot;DenseNet&amp;quot;&amp;gt;Оригинальная статья описывающая DenseNet [https://arxiv.org/abs/1611.09326]&amp;lt;/ref&amp;gt; {{---}} это свёрточная нейронные сеть, в которой выход каждого из слоев подаётся на вход всем слоям, лежащих ниже.&lt;br /&gt;
&lt;br /&gt;
=== Построение с помощью капсульных нейронных сетей ===&lt;br /&gt;
&lt;br /&gt;
Свёрточные нейронные сети способны регистрировать только наличие какого-либо объекта на картинке, не кодируя его ориентацию и положение. Но '''капсульные нейронные сети''' (англ. Capsule Neural Network)&amp;lt;ref name=&amp;quot;CapsNet&amp;quot;&amp;gt;Sara Sabour, Nicholas Frosst, Geoffrey E. Hinton &amp;quot;Dynamic Routing Between Capsules&amp;quot; [https://arxiv.org/pdf/1710.09829.pdf]&amp;lt;/ref&amp;gt; лишены этого недостатка.&lt;br /&gt;
&lt;br /&gt;
[[Файл:capsnet.jpg|thumb|400px| Рисунок 3. Структура капсульной нейронной сети &amp;lt;ref name=&amp;quot;img&amp;quot;&amp;gt; &amp;quot;Design and Investigation of Capsule Networks for Sentence Classification&amp;quot; Figure 2. [https://www.mdpi.com/2076-3417/9/11/2200/htm]&amp;lt;/ref&amp;gt;.]]&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Капсульная нейронная сеть&amp;quot; состоит из капсул или групп нейронов, чтобы идентифицировать закономерности в изображении. Эта информация поступает в виде векторов, содержащих ориентацию и положение узоров на изображении, которое затем принимается капсулами более высокого уровня. Капсулы более высокого уровня обрабатывают эту информацию из нескольких капсул более низкого уровня и впоследствии выдают прогноз. Капсулы одного уровня не имеют связей друг с другом и вычисляют информацию независимо друг от друга. Капсулы образуются путем разделения выходных данных из свёрточного слоя. Мы делим наш трехмерный вектор на капсулы методом &amp;quot;нарезания&amp;quot; таким образом, чтобы в каждой капсуле была информация о каждом пикселе, т.е. по трехмерной координате.&lt;br /&gt;
 &lt;br /&gt;
Состояние нейронов капсульной нейронной сети внутри изображения фиксирует свойство области или объекта внутри изображения: его положение и ориентацию.&lt;br /&gt;
&lt;br /&gt;
Использование капсульной нейронной сети аналогично использованию обычных свёрточных сетей, описанному выше. &lt;br /&gt;
В целом, данная сеть показывает более точные результаты предсказания глубины.&lt;br /&gt;
&lt;br /&gt;
=== Построение с помощью PlanetNet ===&lt;br /&gt;
&lt;br /&gt;
Так же есть архитектуры, решающие данную задачу и без обучения на карте смещений, построенной с помощью двух изображений. Одной из таких является '''PlaneNet'''. &lt;br /&gt;
&lt;br /&gt;
'''PlaneNet'''&amp;lt;ref name=&amp;quot;planetNet&amp;quot;&amp;gt; Chen Liu, Jimei Yang, Duygu Ceylan, Ersin Yumer, Yasutaka Furukawa &amp;quot;PlaneNet: Piece-wise Planar Reconstruction from a Single RGB Image&amp;quot; [https://arxiv.org/abs/1804.06278v1]&amp;lt;/ref&amp;gt; {{---}} глубокая нейронная сеть, построенная на расширенных остаточных сетях (aнгл. Dilated Residual Networks или DRN)&amp;lt;ref name=&amp;quot;drn&amp;quot;&amp;gt; Fisher Yu, Vladlen Koltun, Thomas Funkhouser &amp;quot;Dilated Residual Networks&amp;quot; [https://arxiv.org/abs/1705.09914]&amp;lt;/ref&amp;gt;. Она получает карту глубин путем композиции выходов трех подзадач:&lt;br /&gt;
&lt;br /&gt;
[[Файл:plane_net.png|thumb|500px| Рисунок 4. Прогнозируемые PlaneNet параметры по одной rgb картинке: cегметация плоскости, параметры плоскостей, неплоская карта глубины&amp;lt;ref name=&amp;quot;img4&amp;quot;&amp;gt; Chen Liu, Jimei Yang, Duygu Ceylan, Ersin Yumer, Yasutaka Furukawa &amp;quot;PlaneNet: Piece-wise Planar Reconstruction from a Single RGB Image&amp;quot; Figure 2.&amp;lt;/ref&amp;gt;.]]&lt;br /&gt;
&lt;br /&gt;
* '''Параметры плоскостей''': пытаемся предсказать количество плоскостей K, а после ищем на изображение K плоских поверхностей, каждая поверхность задаётся тремя параметрами: нормальная, прямая и сдвиг.&lt;br /&gt;
&lt;br /&gt;
* [[Сегментация изображений|'''Сегментация плоскости''']]: ищем группы пикселей, каждая из которых характеризует один смысловой объект.&lt;br /&gt;
&lt;br /&gt;
* '''Неплоская карта глубины''': ищем одно-канальную (или неплоскую) карту глубины, то есть карту глубины, где каждый пиксель, либо на глубине 0, либо на глубине 1.&lt;br /&gt;
&lt;br /&gt;
=== Неконтролируемая оценка глубины монокуляра с консистенцией слева направо (CVPR 2017) ===&lt;br /&gt;
&lt;br /&gt;
В данной работе предлагается сверточная нейронная сеть, обученная выполнять оценку глубины одного изображения без данных о глубине наземной истины. Авторы предлагают сетевую архитектуру, которая выполняет сквозную неконтролируемую оценку глубины монокуляра с потерей обучения, что обеспечивает согласованность глубины слева направо внутри сети.&lt;br /&gt;
Сеть оценивает глубину, выводя диспропорции, которые искажают левое изображение, чтобы соответствовать правому. Левое входное изображение используется для вывода диспропорций слева направо и справа налево. Сеть генерирует предсказанное изображение с обратным отображением с помощью билинейного сэмплера. Это приводит к полностью дифференциальной модели формирования изображения.&lt;br /&gt;
Сверточная архитектура вдохновлена Диснеем. Он состоит из двух частей—кодера и декодера. Декодер использует пропуск соединений из блоков активации кодера для разрешения деталей с более высоким разрешением. Сеть предсказывает две карты диспропорций — слева направо и справа налево.&lt;br /&gt;
В процессе обучения сеть генерирует изображение путем выборки пикселей из противоположного стереоизображения. Модель формирования изображения использует сэмплер изображений из пространственной трансформаторной сети (STN) для выборки входного изображения с помощью карты диспаритетов. Используемая билинейная выборка локально дифференцируема.&lt;br /&gt;
Здесь представлены результаты, полученные на Китти 2015 стерео 200 обучающего набора изображений неравенства.&lt;br /&gt;
&lt;br /&gt;
=== Обучение без учителя для поиска карты глубины из видео (CVPR 2017) ===&lt;br /&gt;
&lt;br /&gt;
Авторы данной статьи &amp;lt;ref name=&amp;quot;cvrp_dnn&amp;quot;&amp;gt;Tinghui Zhou, Matthew Brown, Noah Snavely, David G. Lowe &amp;quot;Unsupervised Learning of Depth and Ego-Motion from Video&amp;quot; [https://arxiv.org/abs/1704.07813v2]&amp;lt;/ref&amp;gt; предлагают методику обучения без учителя для оценки глубины одной картинки и движения камеры из беспорядочной видео нарезки. &lt;br /&gt;
&lt;br /&gt;
[[Файл:dnn.png|thumb|400px| рис. 5. Aрхитектура сети на базе DispNet  &amp;lt;ref name=&amp;quot;cvrp&amp;quot;&amp;gt;Tinghui Zhou, Matthew Brown, Noah Snavely, David G. Lowe &amp;quot;Unsupervised Learning of Depth and Ego-Motion from Video&amp;quot; Figure 4&amp;lt;/ref&amp;gt;]]&lt;br /&gt;
&lt;br /&gt;
Будем использовать сверточные нейронные сети c глубиной одного вида и многовидовой камерой из неупорядоченного видеоряда. Метод базируется на синтезе видов. Сеть загружает фото объекта в качестве данных ввода и выводит карту глубины на каждый пиксель. Вид объекта может быть синтезирован исходя из глубины на каждый пиксель снимка, позиционирования и четкости ближнего вида. Синтез может быть  дифференцирован с CNN по геометрии и модулям позиционирования.&lt;br /&gt;
Авторы взяли на вооружение архитектуру DispNet&amp;lt;ref name=&amp;quot;dispNet&amp;quot;&amp;gt; Nikolaus Mayer, Eddy Ilg, Philip Hausser, Philipp Fischer &amp;quot;A Large Dataset to Train Convolutional Networks&lt;br /&gt;
for Disparity, Optical Flow, and Scene Flow Estimation&amp;quot; [https://arxiv.org/pdf/1512.02134.pdf]&amp;lt;/ref&amp;gt;, которая сконструирована в виде енкодера - декодера с пропущенными соединениями и многомасштабными блоками предсказания. Функция активации ReLU отслеживает все сверточные слои кроме предсказанных.&lt;br /&gt;
Вид объекта со всех источников формирует входные данные в сеть позиционной оценки. На выходе получается относительная позиция между видом объекта и видом каждого источника. Сеть состоит из двух 7 шаговых сверток за которым следует свертка 1 х 1. Кроме последнего слоя свертки, где нелинейная активация применяется, все другие отслеживаются функцией активации ReLU. Сеть объяснимых предсказаний дает доступ к первым пяти закодированным слоям сети позиционирования. За ней следует 5 слоев обратной свертки с многомасштабными блоками предсказаний. Кроме слоев предсказаний все уровни свертки и обратной свертки отслеживаются ReLU.&lt;br /&gt;
&lt;br /&gt;
=== Прогнозирование глубины без датчиков: использование структуры для неконтролируемого обучения по монокулярным видео (AAAI 2019) ===&lt;br /&gt;
&lt;br /&gt;
Эта статья посвящена задаче бесконтрольного изучения глубины сцены и эго-движения робота, где наблюдение обеспечивается монокулярными видеозаписями. Это делается путем введения геометрической структуры в процесс обучения. Он включает в себя моделирование сцены и отдельных объектов, эго-движения камеры и движения объектов, изучаемых с помощью монокулярных видеовходов. Авторы также вводят метод онлайн-уточнения.&lt;br /&gt;
Авторы вводят модель движения объекта, которая имеет ту же архитектуру, что и сеть эго-движения. Однако он специализируется на предсказании движения отдельных объектов в 3D. Он принимает последовательность изображений RGB в качестве входных данных. Он дополняется предварительно вычисленными масками сегментации экземпляров. Работа модели движения заключается в том, чтобы научиться предсказывать векторы трансформации каждого объекта в трехмерном пространстве. Это создает видимость наблюдаемого объекта в соответствующем целевом кадре.&lt;br /&gt;
На рисунке ниже показаны результаты, полученные с использованием этой модели.&lt;br /&gt;
&lt;br /&gt;
== См. также ==&lt;br /&gt;
&lt;br /&gt;
* [[Компьютерное зрение]]&lt;br /&gt;
&lt;br /&gt;
* [[Оценка положения]]&lt;br /&gt;
&lt;br /&gt;
* [[Задача нахождения объектов на изображении]]&lt;br /&gt;
&lt;br /&gt;
== Примечания ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Источники информации ==&lt;br /&gt;
&lt;br /&gt;
* Р.А. Чугунов, А.Д. Кульневич, С.В. Аксенов &amp;quot;Методика построения карт глубины стереоизображения с помощью капсульной нейронной сети&amp;quot; [https://cyberleninka.ru/article/n/metodika-postroeniya-kart-glubiny-stereoizobrazheniya-s-pomoschyu-kapsulnoy-neyronnoy-seti/viewer]&lt;br /&gt;
&lt;br /&gt;
* Alexey Kurakin &amp;quot;Основы стереозрения&amp;quot; [https://habr.com/ru/post/130300/]&lt;br /&gt;
&lt;br /&gt;
* Dmitriy Vatolin &amp;quot;Камеры глубины — тихая революция&amp;quot; [https://habr.com/ru/post/457524/]&lt;br /&gt;
&lt;br /&gt;
* Ibraheem Alhashim, Peter Wonka &amp;quot;High Quality Monocular Depth Estimation via Transfer Learning&amp;quot; [https://arxiv.org/pdf/1812.11941.pdf]&lt;br /&gt;
&lt;br /&gt;
*  David Eigen, Christian Puhrsch, Rob Fergus &amp;quot;Depth Map Prediction from a Single Imageusing a Multi-Scale Deep Network [https://arxiv.org/pdf/1406.2283.pdf]&lt;br /&gt;
&lt;br /&gt;
* Sunil Prakash, Gaelan Gu &amp;quot;Simultaneous Localization And Mapping with depth Prediction using Capsule Networks for UAVs&amp;quot; [https://arxiv.org/pdf/1808.05336.pdf]&lt;br /&gt;
&lt;br /&gt;
[[Категория:Машинное обучение]]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Компьютерное зрение]]&lt;/div&gt;</summary>
		<author><name>Frak</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9A%D0%B0%D1%80%D1%82%D0%B0_%D0%B3%D0%BB%D1%83%D0%B1%D0%B8%D0%BD%D1%8B&amp;diff=79843</id>
		<title>Карта глубины</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9A%D0%B0%D1%80%D1%82%D0%B0_%D0%B3%D0%BB%D1%83%D0%B1%D0%B8%D0%BD%D1%8B&amp;diff=79843"/>
				<updated>2021-01-22T06:51:37Z</updated>
		
		<summary type="html">&lt;p&gt;Frak: /* Неконтролируемое обучение Глубины и визуальной Одометрии из Видео (CVPR 2017) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Карта глубины''' (англ. depth map) — это изображение, где для каждого пикселя вместо цвета хранится его расстояние до камеры.&amp;lt;ref name=&amp;quot;def&amp;quot;&amp;gt;Alexey Kurakin &amp;quot;Основы стереозрения&amp;quot;[https://habr.com/ru/post/130300/]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В компьютерной 3D-графике и [[Компьютерное зрение|компьютерном зрении]] карта глубины представляет собой изображение или канал изображения, содержащий информацию о расстоянии поверхностей объектов сцены от точки обзора. &lt;br /&gt;
&lt;br /&gt;
== Мотивация ==&lt;br /&gt;
&lt;br /&gt;
Карта глубины изображения содержит в себе информацию о расстоянии между различными объектами или частями объектов, представленных на данном изображении. Эта информация может быть полезна во многих областях. &lt;br /&gt;
 &lt;br /&gt;
* Для создания 3D-сенсеров. Они способны строить трёхмерную картину своего окружения, используются для [[Оценка положения|ориентации]] автономного робота в пространстве.&lt;br /&gt;
&lt;br /&gt;
* Для систем, использующих технологии дополненной и виртуальной реальности. Например, камеры, которые фиксируют действия пользователя в видеоиграх с технологией виртуальной реальности.&lt;br /&gt;
&lt;br /&gt;
* В беспилотных автомобилях, которые также используют карты глубин для ориентации на дороге.&lt;br /&gt;
&lt;br /&gt;
* Для обработки фотографий. Например, карты глубин используют для размытия фона на фотографии, чтобы добиться более чёткого выделения человека&amp;lt;ref name=&amp;quot;expls&amp;quot;&amp;gt;Примеры из &amp;quot;Research Guide for Depth Estimation with Deep Learning&amp;quot;[https://www.kdnuggets.com/2019/11/research-guide-depth-estimation-deep-learning.html]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Методы построения карты глубины ==&lt;br /&gt;
&lt;br /&gt;
Карта глубины может быть получена с помощью '''специальной камеры глубины''', по '''стереопаре изображений''', а также с помощью [[Нейронные сети, перцептрон|'''нейронных сетей''']].&lt;br /&gt;
&lt;br /&gt;
== Построение с помощью специальных камер глубин == &lt;br /&gt;
&lt;br /&gt;
[[Файл:ToF.jpg|thumb|250px| Рисунок 1. Пример работы ToF-камеры.]]&lt;br /&gt;
&lt;br /&gt;
* '''ToF-камеры''' (англ. Time of Flight). Принцип работы данной камеры основан на измерении задержки света, с которой свет возвращается в каждую точку. Имея несколько сенсоров с разным временем накопления заряда и, зная сдвиг по времени относительно источника для каждого сенсора и снятой яркости вспышки, мы можем рассчитать сдвиг и, соответственно, расстояние до объекта. Причем чем больше сенсоров задействовано, тем выше точность метода.&lt;br /&gt;
&lt;br /&gt;
* '''Структурированные световые камеры''' (aнгл. Structured light camera). Принцип работы данной камеры один из самых старых. Ставим проектор, который создает, например, горизонтальные (а потом и вертикальные) полоски и рядом камеру, которая снимает картину с полосками. В некоторых вариантах используется псевдослучайный набор точек (например MS Kinect {{---}} бесконтактный сенсорный игровой контроллер, для консолей Xbox 360, Xbox One и персональных компьютеров под управлением ОС Windows&amp;lt;ref name=&amp;quot;kinect&amp;quot;&amp;gt; О MicriSoft Kinect [https://en.wikipedia.org/wiki/Kinect]&amp;lt;/ref&amp;gt;). Проекторы обычно работают в инфракрасном спектре, чтобы не мешать пользователям. Поскольку камера и проектор смещены друг относительно друга, то и полоски также будут смещаться пропорционально расстоянию до объекта. Измеряя это смещение, мы можем рассчитывать расстояние до объекта. Вполне понятны сложности, с которыми можно столкнуться при использовании этого метода: это необходимость настройки и калибровки проектора, и проблема того, что нам нужно относительно благоприятное освещение. К примеру, солнце может засветить полосы, и что-то распознать будет тяжело.&lt;br /&gt;
&lt;br /&gt;
== Построения карты глубины по стереопаре ==&lt;br /&gt;
&lt;br /&gt;
Идея, лежащая в основе построения карты глубины по '''стереопаре''', проста. Для каждой точки на одном изображении выполняется поиск [[Ключевые точки изображения|парной ей точки]]&amp;lt;sup&amp;gt;[на 21.01.21 не создан]&amp;lt;/sup&amp;gt; на другом изображении. А по паре соответствующих точек можно выполнить [[Триангуляция полигонов (ушная + монотонная)|триангуляцию]] и определить координаты их [[Отображения|прообраза]] в трехмерном пространстве. Зная трехмерные координаты прообраза, глубина вычисляется как расстояние до плоскости камеры.&lt;br /&gt;
&lt;br /&gt;
Парную точку нужно искать на эпиполярной&amp;lt;ref name=&amp;quot;Epipolar&amp;quot;&amp;gt;Информация о эпиполярной геометрии[https://ru.qaz.wiki/wiki/Epipolar_geometry]&amp;lt;/ref&amp;gt; линии. Соответственно, для упрощения поиска изображения выравнивают так, чтобы все эпиполярные линии были параллельны сторонам изображения (обычно горизонтальны). Более того, изображения выравнивают так, чтобы для точки с координатами &amp;lt;math&amp;gt;(x_0, y_0)&amp;lt;/math&amp;gt; соответствующая ей эпиполярная линия задавалась уравнением &amp;lt;math&amp;gt;x = x_0&amp;lt;/math&amp;gt;. Тогда для каждой точки, соответствующую ей парную точку, нужно искать в той-же строчке на изображении со второй камеры. Такой процесс выравнивания изображений называют '''ректификацией''' (rectification).&lt;br /&gt;
&lt;br /&gt;
[[Файл:Stereo.png|thumb|300px| Рисунок 2. Результат построения карты смещений по двум картинкам.&amp;lt;ref name=&amp;quot;img2&amp;quot;&amp;gt; &amp;quot;Основы стереозрения&amp;quot; Рис. 3 [https://habr.com/ru/post/130300/]&amp;lt;/ref&amp;gt;]]&lt;br /&gt;
&lt;br /&gt;
После того, как изображения '''ректифицированы''', выполняют поиск соответствующих пар точек. Для каждого пикселя одной картинки с координатами &amp;lt;math&amp;gt;(x_0, y_0)&amp;lt;/math&amp;gt; выполняется поиск пикселя на другой картинке. При этом предполагается, что пиксель на второй картинке должен иметь координаты &amp;lt;math&amp;gt;(x_0 - d, y_0)&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;d&amp;lt;/math&amp;gt; — величина называемая смещением. Поиск соответствующего пикселя выполняется путем вычисления максимума функции отклика, в качестве которой может выступать, например, [[Корреляция случайных величин|корреляция]] окрестностей пикселей. В результате получается карта смещений, пример которой приведен на рис. 2. &lt;br /&gt;
&lt;br /&gt;
Собственно значения глубины обратно пропорциональны величине смещения пикселей.&lt;br /&gt;
&lt;br /&gt;
== Использование нейронных сетей ==&lt;br /&gt;
&lt;br /&gt;
Существует множество методов, использующих нейронные сети. Приведём пару примеров таких решений.&lt;br /&gt;
&lt;br /&gt;
=== Построение с помощью свёрточных нейронных сетей ===&lt;br /&gt;
&lt;br /&gt;
Используем [[Сверточные нейронные сети|сверточные нейронные сети]] для построения карты глубины следующим образом&lt;br /&gt;
&amp;lt;ref name=&amp;quot;cnn_rew&amp;quot;&amp;gt; Xiaobai Ma, Zhenglin Geng, Zhi Bie &amp;quot;Depth Estimation from Single Image Using CNN-Residual Network&amp;quot; [http://cs231n.stanford.edu/reports/2017/pdfs/203.pdf]&amp;lt;/ref&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
*  '''Создаем карту смещений''': используя два изображения с камер, близко расположенных друг к другу, создаем карту различий, точно так же как в методе построения по стереопаре.&lt;br /&gt;
&lt;br /&gt;
* '''Ищем реальную карту глубины для обучения''': с помощью карты смещений, можем построить карту глубины &amp;lt;math&amp;gt;y&amp;lt;/math&amp;gt; вышеописанным способом. Также допустимы другие способы построения карты глубины для обучения нейронной сети.&lt;br /&gt;
&lt;br /&gt;
*  '''Функция потерь''': определим [[Функция потерь и эмпирический риск|функцию потерь]], для предсказанной карты &amp;lt;math&amp;gt;\hat y&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;d_i = log( y_i) - log (\hat y_i)&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;\lambda \in [0, 1]&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;n &amp;lt;/math&amp;gt; — количество пикселей. &amp;lt;math&amp;gt;L(y, \hat y) =  \frac{1}{n} \sum\limits_{i} d^2_i - \frac{\lambda}{n^2}(\sum\limits_{i} d_i)^2&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;y_i&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;\hat y_i&amp;lt;/math&amp;gt; это i пискель для для реальной карты глубин и для предсказанной карты, соответственно. Гиперпараметр &amp;lt;math&amp;gt;\lambda&amp;lt;/math&amp;gt;, нужен для того, чтобы функция потерь меньше росла при большом количестве пикселей, предсказание для которых достаточно близко к реальному. Например, если &amp;lt;math&amp;gt;\lambda = 0&amp;lt;/math&amp;gt;, то мы просто придём к оптимизации в L2 для &amp;lt;math&amp;gt;d_i&amp;lt;/math&amp;gt;, т.е. &amp;lt;math&amp;gt;L(y, \hat y) =  \frac{1}{n} \sum\limits_{i} d^2_i &amp;lt;/math&amp;gt;.&amp;lt;ref name=&amp;quot;loss&amp;quot;&amp;gt;David Eigen, Christian Puhrsch, Rob Fergus &amp;quot;Depth Map Prediction from a Single Imageusing a Multi-Scale Deep Network&amp;quot; стр. 5&amp;lt;/ref&amp;gt; &lt;br /&gt;
&lt;br /&gt;
* '''Обучение свёрточной нейронной сети''': далее идёт обычное обучение нейронной сети по карте различий путем обратного распространения ошибки, оптимизируя заданную выше функцию потерь.&lt;br /&gt;
&lt;br /&gt;
В итоге, по обученной нейронной сети мы можем создавать карту глубины, не проводя расчётов для поиска карт смещения и имея только изображение объекта или пространства. &amp;lt;ref name=&amp;quot;cnn&amp;quot;&amp;gt;Реализация, основанная на свёрточных нейронных сетях [https://www.kaggle.com/kmader/cnn-for-generating-depth-maps-from-rgb-images]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Также возможно использование усложнённых архитектур свёрточных нейронных сетей типа '''DenseNet'''.&lt;br /&gt;
&lt;br /&gt;
'''DenseNet'''&amp;lt;ref name=&amp;quot;DenseNet&amp;quot;&amp;gt;Оригинальная статья описывающая DenseNet [https://arxiv.org/abs/1611.09326]&amp;lt;/ref&amp;gt; {{---}} это свёрточная нейронные сеть, в которой выход каждого из слоев подаётся на вход всем слоям, лежащих ниже.&lt;br /&gt;
&lt;br /&gt;
=== Построение с помощью капсульных нейронных сетей ===&lt;br /&gt;
&lt;br /&gt;
Свёрточные нейронные сети способны регистрировать только наличие какого-либо объекта на картинке, не кодируя его ориентацию и положение. Но '''капсульные нейронные сети''' (англ. Capsule Neural Network)&amp;lt;ref name=&amp;quot;CapsNet&amp;quot;&amp;gt;Sara Sabour, Nicholas Frosst, Geoffrey E. Hinton &amp;quot;Dynamic Routing Between Capsules&amp;quot; [https://arxiv.org/pdf/1710.09829.pdf]&amp;lt;/ref&amp;gt; лишены этого недостатка.&lt;br /&gt;
&lt;br /&gt;
[[Файл:capsnet.jpg|thumb|400px| Рисунок 3. Структура капсульной нейронной сети &amp;lt;ref name=&amp;quot;img&amp;quot;&amp;gt; &amp;quot;Design and Investigation of Capsule Networks for Sentence Classification&amp;quot; Figure 2. [https://www.mdpi.com/2076-3417/9/11/2200/htm]&amp;lt;/ref&amp;gt;.]]&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Капсульная нейронная сеть&amp;quot; состоит из капсул или групп нейронов, чтобы идентифицировать закономерности в изображении. Эта информация поступает в виде векторов, содержащих ориентацию и положение узоров на изображении, которое затем принимается капсулами более высокого уровня. Капсулы более высокого уровня обрабатывают эту информацию из нескольких капсул более низкого уровня и впоследствии выдают прогноз. Капсулы одного уровня не имеют связей друг с другом и вычисляют информацию независимо друг от друга. Капсулы образуются путем разделения выходных данных из свёрточного слоя. Мы делим наш трехмерный вектор на капсулы методом &amp;quot;нарезания&amp;quot; таким образом, чтобы в каждой капсуле была информация о каждом пикселе, т.е. по трехмерной координате.&lt;br /&gt;
 &lt;br /&gt;
Состояние нейронов капсульной нейронной сети внутри изображения фиксирует свойство области или объекта внутри изображения: его положение и ориентацию.&lt;br /&gt;
&lt;br /&gt;
Использование капсульной нейронной сети аналогично использованию обычных свёрточных сетей, описанному выше. &lt;br /&gt;
В целом, данная сеть показывает более точные результаты предсказания глубины.&lt;br /&gt;
&lt;br /&gt;
=== Построение с помощью PlanetNet ===&lt;br /&gt;
&lt;br /&gt;
Так же есть архитектуры, решающие данную задачу и без обучения на карте смещений, построенной с помощью двух изображений. Одной из таких является '''PlaneNet'''. &lt;br /&gt;
&lt;br /&gt;
'''PlaneNet'''&amp;lt;ref name=&amp;quot;planetNet&amp;quot;&amp;gt; Chen Liu, Jimei Yang, Duygu Ceylan, Ersin Yumer, Yasutaka Furukawa &amp;quot;PlaneNet: Piece-wise Planar Reconstruction from a Single RGB Image&amp;quot; [https://arxiv.org/abs/1804.06278v1]&amp;lt;/ref&amp;gt; {{---}} глубокая нейронная сеть, построенная на расширенных остаточных сетях (aнгл. Dilated Residual Networks или DRN)&amp;lt;ref name=&amp;quot;drn&amp;quot;&amp;gt; Fisher Yu, Vladlen Koltun, Thomas Funkhouser &amp;quot;Dilated Residual Networks&amp;quot; [https://arxiv.org/abs/1705.09914]&amp;lt;/ref&amp;gt;. Она получает карту глубин путем композиции выходов трех подзадач:&lt;br /&gt;
&lt;br /&gt;
[[Файл:plane_net.png|thumb|500px| Рисунок 4. Прогнозируемые PlaneNet параметры по одной rgb картинке: cегметация плоскости, параметры плоскостей, неплоская карта глубины&amp;lt;ref name=&amp;quot;img4&amp;quot;&amp;gt; Chen Liu, Jimei Yang, Duygu Ceylan, Ersin Yumer, Yasutaka Furukawa &amp;quot;PlaneNet: Piece-wise Planar Reconstruction from a Single RGB Image&amp;quot; Figure 2.&amp;lt;/ref&amp;gt;.]]&lt;br /&gt;
&lt;br /&gt;
* '''Параметры плоскостей''': пытаемся предсказать количество плоскостей K, а после ищем на изображение K плоских поверхностей, каждая поверхность задаётся тремя параметрами: нормальная, прямая и сдвиг.&lt;br /&gt;
&lt;br /&gt;
* [[Сегментация изображений|'''Сегментация плоскости''']]: ищем группы пикселей, каждая из которых характеризует один смысловой объект.&lt;br /&gt;
&lt;br /&gt;
* '''Неплоская карта глубины''': ищем одно-канальную (или неплоскую) карту глубины, то есть карту глубины, где каждый пиксель, либо на глубине 0, либо на глубине 1.&lt;br /&gt;
&lt;br /&gt;
=== Неконтролируемая оценка глубины монокуляра с консистенцией слева направо (CVPR 2017) ===&lt;br /&gt;
&lt;br /&gt;
В данной работе предлагается сверточная нейронная сеть, обученная выполнять оценку глубины одного изображения без данных о глубине наземной истины. Авторы предлагают сетевую архитектуру, которая выполняет сквозную неконтролируемую оценку глубины монокуляра с потерей обучения, что обеспечивает согласованность глубины слева направо внутри сети.&lt;br /&gt;
Сеть оценивает глубину, выводя диспропорции, которые искажают левое изображение, чтобы соответствовать правому. Левое входное изображение используется для вывода диспропорций слева направо и справа налево. Сеть генерирует предсказанное изображение с обратным отображением с помощью билинейного сэмплера. Это приводит к полностью дифференциальной модели формирования изображения.&lt;br /&gt;
Сверточная архитектура вдохновлена Диснеем. Он состоит из двух частей—кодера и декодера. Декодер использует пропуск соединений из блоков активации кодера для разрешения деталей с более высоким разрешением. Сеть предсказывает две карты диспропорций — слева направо и справа налево.&lt;br /&gt;
В процессе обучения сеть генерирует изображение путем выборки пикселей из противоположного стереоизображения. Модель формирования изображения использует сэмплер изображений из пространственной трансформаторной сети (STN) для выборки входного изображения с помощью карты диспаритетов. Используемая билинейная выборка локально дифференцируема.&lt;br /&gt;
Здесь представлены результаты, полученные на Китти 2015 стерео 200 обучающего набора изображений неравенства.&lt;br /&gt;
&lt;br /&gt;
=== Обучение без учителя для поиска карты глубины из видео (CVPR 2017) ===&lt;br /&gt;
&lt;br /&gt;
Авторы данной статьи &amp;lt;ref name=&amp;quot;cvrp&amp;quot;&amp;gt;Tinghui Zhou, Matthew Brown, Noah Snavely, David G. Lowe &amp;quot;Unsupervised Learning of Depth and Ego-Motion from Video&amp;quot; [https://arxiv.org/abs/1704.07813v2]&amp;lt;/ref&amp;gt; предлагают методику обучения без учителя для оценки глубины одной картинки и движения камеры из беспорядочной видео нарезки. &lt;br /&gt;
&lt;br /&gt;
[[Файл:dnn.png|thumb|400px| рис. 5. Aрхитектура сети на базе DispNet  &amp;lt;ref name=&amp;quot;cvrp&amp;quot;&amp;gt;Tinghui Zhou, Matthew Brown, Noah Snavely, David G. Lowe &amp;quot;Unsupervised Learning of Depth and Ego-Motion from Video&amp;quot; Figure 4&amp;lt;/ref&amp;gt;]]&lt;br /&gt;
&lt;br /&gt;
Будем использовать сверточные нейронные сети c глубиной одного вида и многовидовой камерой из неупорядоченного видеоряда. Метод базируется на синтезе видов. Сеть загружает фото объекта в качестве данных ввода и выводит карту глубины на каждый пиксель. Вид объекта может быть синтезирован исходя из глубины на каждый пиксель снимка, позиционирования и четкости ближнего вида. Синтез может быть  дифференцирован с CNN по геометрии и модулям позиционирования.&lt;br /&gt;
Авторы взяли на вооружение архитектуру DispNet&amp;lt;ref name=&amp;quot;dispNet&amp;quot;&amp;gt; Nikolaus Mayer, Eddy Ilg, Philip Hausser, Philipp Fischer &amp;quot;A Large Dataset to Train Convolutional Networks&lt;br /&gt;
for Disparity, Optical Flow, and Scene Flow Estimation&amp;quot; [https://arxiv.org/pdf/1512.02134.pdf]&amp;lt;/ref&amp;gt;, которая сконструирована в виде енкодера - декодера с пропущенными соединениями и многомасштабными блоками предсказания. Функция активации ReLU отслеживает все сверточные слои кроме предсказанных.&lt;br /&gt;
Вид объекта со всех источников формирует входные данные в сеть позиционной оценки. На выходе получается относительная позиция между видом объекта и видом каждого источника. Сеть состоит из двух 7 шаговых сверток за которым следует свертка 1 х 1. Кроме последнего слоя свертки, где нелинейная активация применяется, все другие отслеживаются функцией активации ReLU. Сеть объяснимых предсказаний дает доступ к первым пяти закодированным слоям сети позиционирования. За ней следует 5 слоев обратной свертки с многомасштабными блоками предсказаний. Кроме слоев предсказаний все уровни свертки и обратной свертки отслеживаются ReLU.&lt;br /&gt;
&lt;br /&gt;
=== Прогнозирование глубины без датчиков: использование структуры для неконтролируемого обучения по монокулярным видео (AAAI 2019) ===&lt;br /&gt;
&lt;br /&gt;
Эта статья посвящена задаче бесконтрольного изучения глубины сцены и эго-движения робота, где наблюдение обеспечивается монокулярными видеозаписями. Это делается путем введения геометрической структуры в процесс обучения. Он включает в себя моделирование сцены и отдельных объектов, эго-движения камеры и движения объектов, изучаемых с помощью монокулярных видеовходов. Авторы также вводят метод онлайн-уточнения.&lt;br /&gt;
Авторы вводят модель движения объекта, которая имеет ту же архитектуру, что и сеть эго-движения. Однако он специализируется на предсказании движения отдельных объектов в 3D. Он принимает последовательность изображений RGB в качестве входных данных. Он дополняется предварительно вычисленными масками сегментации экземпляров. Работа модели движения заключается в том, чтобы научиться предсказывать векторы трансформации каждого объекта в трехмерном пространстве. Это создает видимость наблюдаемого объекта в соответствующем целевом кадре.&lt;br /&gt;
На рисунке ниже показаны результаты, полученные с использованием этой модели.&lt;br /&gt;
&lt;br /&gt;
== См. также ==&lt;br /&gt;
&lt;br /&gt;
* [[Компьютерное зрение]]&lt;br /&gt;
&lt;br /&gt;
* [[Оценка положения]]&lt;br /&gt;
&lt;br /&gt;
* [[Задача нахождения объектов на изображении]]&lt;br /&gt;
&lt;br /&gt;
== Примечания ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Источники информации ==&lt;br /&gt;
&lt;br /&gt;
* Р.А. Чугунов, А.Д. Кульневич, С.В. Аксенов &amp;quot;Методика построения карт глубины стереоизображения с помощью капсульной нейронной сети&amp;quot; [https://cyberleninka.ru/article/n/metodika-postroeniya-kart-glubiny-stereoizobrazheniya-s-pomoschyu-kapsulnoy-neyronnoy-seti/viewer]&lt;br /&gt;
&lt;br /&gt;
* Alexey Kurakin &amp;quot;Основы стереозрения&amp;quot; [https://habr.com/ru/post/130300/]&lt;br /&gt;
&lt;br /&gt;
* Dmitriy Vatolin &amp;quot;Камеры глубины — тихая революция&amp;quot; [https://habr.com/ru/post/457524/]&lt;br /&gt;
&lt;br /&gt;
* Ibraheem Alhashim, Peter Wonka &amp;quot;High Quality Monocular Depth Estimation via Transfer Learning&amp;quot; [https://arxiv.org/pdf/1812.11941.pdf]&lt;br /&gt;
&lt;br /&gt;
*  David Eigen, Christian Puhrsch, Rob Fergus &amp;quot;Depth Map Prediction from a Single Imageusing a Multi-Scale Deep Network [https://arxiv.org/pdf/1406.2283.pdf]&lt;br /&gt;
&lt;br /&gt;
* Sunil Prakash, Gaelan Gu &amp;quot;Simultaneous Localization And Mapping with depth Prediction using Capsule Networks for UAVs&amp;quot; [https://arxiv.org/pdf/1808.05336.pdf]&lt;br /&gt;
&lt;br /&gt;
[[Категория:Машинное обучение]]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Компьютерное зрение]]&lt;/div&gt;</summary>
		<author><name>Frak</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Dnn.png&amp;diff=79842</id>
		<title>Файл:Dnn.png</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Dnn.png&amp;diff=79842"/>
				<updated>2021-01-22T06:48:05Z</updated>
		
		<summary type="html">&lt;p&gt;Frak: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Frak</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9A%D0%B0%D1%80%D1%82%D0%B0_%D0%B3%D0%BB%D1%83%D0%B1%D0%B8%D0%BD%D1%8B&amp;diff=79658</id>
		<title>Карта глубины</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9A%D0%B0%D1%80%D1%82%D0%B0_%D0%B3%D0%BB%D1%83%D0%B1%D0%B8%D0%BD%D1%8B&amp;diff=79658"/>
				<updated>2021-01-21T15:39:32Z</updated>
		
		<summary type="html">&lt;p&gt;Frak: /* Построения карты глубины по стереопаре */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Карта глубины''' (англ. depth map) — это изображение, где для каждого пикселя вместо цвета хранится его расстояние до камеры.&amp;lt;ref name=&amp;quot;def&amp;quot;&amp;gt;Alexey Kurakin &amp;quot;Основы стереозрения&amp;quot;[https://habr.com/ru/post/130300/]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В компьютерной 3D-графике и [[Компьютерное зрение|компьютерном зрении]] карта глубины представляет собой изображение или канал изображения, содержащий информацию о расстоянии поверхностей объектов сцены от точки обзора. &lt;br /&gt;
&lt;br /&gt;
== Мотивация ==&lt;br /&gt;
&lt;br /&gt;
Карта глубины изображения содержит в себе информацию о расстоянии между различными объектами или частями объектов, представленных на данном изображении. Эта информация может быть полезна во многих областях. &lt;br /&gt;
 &lt;br /&gt;
* Для создания 3D-сенсеров. Они способны строить трёхмерную картину своего окружения, используются для [[Оценка положения|ориентации]] автономного робота в пространстве.&lt;br /&gt;
&lt;br /&gt;
* Для систем, использующих технологии дополненной и виртуальной реальности. Например, камеры, которые фиксируют действия пользователя в видеоиграх с технологией виртуальной реальности.&lt;br /&gt;
&lt;br /&gt;
* В беспилотных автомобилях, которые также используют карты глубин для ориентации на дороге.&lt;br /&gt;
&lt;br /&gt;
* Для обработки фотографий. Например, карты глубин используют для размытия фона на фотографии, чтобы добиться более чёткого выделения человека&amp;lt;ref name=&amp;quot;expls&amp;quot;&amp;gt;Примеры из &amp;quot;Research Guide for Depth Estimation with Deep Learning&amp;quot;[https://www.kdnuggets.com/2019/11/research-guide-depth-estimation-deep-learning.html]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Методы построения карты глубины ==&lt;br /&gt;
&lt;br /&gt;
Карта глубины может быть получена с помощью '''специальной камеры глубины''', по '''стереопаре изображений''', а также с помощью [[Нейронные сети, перцептрон|'''нейронных сетей''']].&lt;br /&gt;
&lt;br /&gt;
== Построение с помощью специальных камер глубин == &lt;br /&gt;
&lt;br /&gt;
[[Файл:ToF.jpg|thumb|250px| Рисунок 1. Пример работы ToF-камеры.]]&lt;br /&gt;
&lt;br /&gt;
* '''ToF-камеры''' (англ. Time of Flight). Данный метод основан на измерении задержки света. Фактически нам нужно измерить задержку, с которой свет возвращается в каждую точку. Имея несколько сенсоров с разным временем накопления заряда и зная сдвиг по времени относительно источника для каждого сенсора и снятой яркости вспышки, мы можем рассчитать сдвиг и, соответственно, расстояние до объекта. Причем, чем больше сенсоров задействовано, тем выше точность метода.&lt;br /&gt;
&lt;br /&gt;
* '''Структурированные световые камеры''' (aнгл. Structured light camera). Это один из самых старых и дешёвых способов построить карту глубин. Ставим проектор, который создает, например, горизонтальные (а потом и вертикальные) полоски и рядом камеру, которая снимает картину с полосками. В некоторых вариантах используется псевдослучайный набор точек (например MS Kinect {{---}} бесконтактный сенсорный игровой контроллер, для консолей Xbox 360, Xbox One и персональных компьютеров под управлением ОС Windows&amp;lt;ref name=&amp;quot;kinect&amp;quot;&amp;gt; О MicriSoft Kinect [https://en.wikipedia.org/wiki/Kinect]&amp;lt;/ref&amp;gt;). Проекторы обычно работают в инфракрасном спектре, чтобы не мешать пользователям. Поскольку камера и проектор смещены друг относительно друга, то и полоски также будут смещаться пропорционально расстоянию до объекта. Измеряя это смещение, мы можем рассчитывать расстояние до объекта. Вполне понятны сложности, с которыми можно столкнуться при использовании этого метода: это необходимость настройки и калибровки проектора, и проблема того, что нам нужно относительно благоприятное освещение. К примеру, солнце может засветить полосы, и что-то распознать будет тяжело.&lt;br /&gt;
&lt;br /&gt;
== Построения карты глубины по стереопаре ==&lt;br /&gt;
&lt;br /&gt;
Идея, лежащая в основе построения карты глубины по '''стереопаре''', проста. Для каждой точки на одном изображении выполняется поиск [[Ключевые точки изображения|парной ей точки]]&amp;lt;sup&amp;gt;[на 21.01.21 не создан]&amp;lt;/sup&amp;gt; на другом изображении. А по паре соответствующих точек можно выполнить [[Триангуляция полигонов (ушная + монотонная)|триангуляцию]] и определить координаты их [[Отображения|прообраза]] в трехмерном пространстве. Зная трехмерные координаты прообраза, глубина вычисляется как расстояние до плоскости камеры.&lt;br /&gt;
&lt;br /&gt;
Парную точку нужно искать на эпиполярной&amp;lt;ref name=&amp;quot;Epipolar&amp;quot;&amp;gt;Информация о эпиполярной геометрии[https://ru.qaz.wiki/wiki/Epipolar_geometry]&amp;lt;/ref&amp;gt; линии. Соответственно, для упрощения поиска изображения выравнивают так, чтобы все эпиполярные линии были параллельны сторонам изображения (обычно горизонтальны). Более того, изображения выравнивают так, чтобы для точки с координатами &amp;lt;math&amp;gt;(x_0, y_0)&amp;lt;/math&amp;gt; соответствующая ей эпиполярная линия задавалась уравнением &amp;lt;math&amp;gt;x = x_0&amp;lt;/math&amp;gt;. Тогда для каждой точки, соответствующую ей парную точку, нужно искать в той-же строчке на изображении со второй камеры. Такой процесс выравнивания изображений называют '''ректификацией''' (rectification).&lt;br /&gt;
&lt;br /&gt;
[[Файл:Stereo.png|thumb|300px| Рисунок 2. Результат построения карты смещений по двум картинкам.&amp;lt;ref name=&amp;quot;img2&amp;quot;&amp;gt; &amp;quot;Основы стереозрения&amp;quot; Рис. 3 [https://habr.com/ru/post/130300/]&amp;lt;/ref&amp;gt;]]&lt;br /&gt;
&lt;br /&gt;
После того, как изображения '''ректифицированы''', выполняют поиск соответствующих пар точек. Для каждого пикселя одной картинки с координатами &amp;lt;math&amp;gt;(x_0, y_0)&amp;lt;/math&amp;gt; выполняется поиск пикселя на другой картинке. При этом предполагается, что пиксель на второй картинке должен иметь координаты &amp;lt;math&amp;gt;(x_0 - d, y_0)&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;d&amp;lt;/math&amp;gt; — величина называемая смещением. Поиск соответствующего пикселя выполняется путем вычисления максимума функции отклика, в качестве которой может выступать, например, [[Корреляция случайных величин|корреляция]] окрестностей пикселей. В результате получается карта смещений, пример которой приведен на рис. 2. &lt;br /&gt;
&lt;br /&gt;
Собственно значения глубины обратно пропорциональны величине смещения пикселей.&lt;br /&gt;
&lt;br /&gt;
== Использование нейронных сетей ==&lt;br /&gt;
&lt;br /&gt;
Существует множество методов, использующих нейронные сети. Приведём пару примеров таких решений.&lt;br /&gt;
&lt;br /&gt;
=== Построение с помощью свёрточных нейронных сетей ===&lt;br /&gt;
&lt;br /&gt;
Используем [[Сверточные нейронные сети|сверточные нейронные сети]] для построения карты глубины следующим образом&lt;br /&gt;
&amp;lt;ref name=&amp;quot;cnn_rew&amp;quot;&amp;gt; Xiaobai Ma, Zhenglin Geng, Zhi Bie &amp;quot;Depth Estimation from Single Image Using CNN-Residual Network&amp;quot; [http://cs231n.stanford.edu/reports/2017/pdfs/203.pdf]&amp;lt;/ref&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
*  '''Создаем карту смещений''': используя два изображения с камер, близко расположенных друг к другу, создаем карту различий, точно так же как в методе построения по стереопаре.&lt;br /&gt;
&lt;br /&gt;
* '''Ищем реальную карту глубины для обучения''': с помощью карты смещений, можем построить карту глубины &amp;lt;math&amp;gt;y&amp;lt;/math&amp;gt; вышеописанным способом. Также допустимы другие способы построения карты глубины для обучения нейронной сети.&lt;br /&gt;
&lt;br /&gt;
*  '''Функция потерь''': определим [[Функция потерь и эмпирический риск|функцию потерь]], для предсказанной карты &amp;lt;math&amp;gt;\hat y&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;d_i = log( y_i) - log (\hat y_i)&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;\lambda \in [0, 1]&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;n &amp;lt;/math&amp;gt; — количество пикселей. &amp;lt;math&amp;gt;L(y, \hat y) =  \frac{1}{n} \sum\limits_{i} d^2_i - \frac{\lambda}{n^2}(\sum\limits_{i} d_i)^2&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;y_i&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;\hat y_i&amp;lt;/math&amp;gt; это i пискель для для реальной карты глубин и для предсказанной карты, соответственно. Гиперпараметр &amp;lt;math&amp;gt;\lambda&amp;lt;/math&amp;gt;, нужен для того, чтобы функция потерь меньше росла при большом количестве пикселей, предсказание для которых достаточно близко к реальному. Например, если &amp;lt;math&amp;gt;\lambda = 0&amp;lt;/math&amp;gt;, то мы просто придём к оптимизации в L2 для &amp;lt;math&amp;gt;d_i&amp;lt;/math&amp;gt;, т.е. &amp;lt;math&amp;gt;L(y, \hat y) =  \frac{1}{n} \sum\limits_{i} d^2_i &amp;lt;/math&amp;gt;.&amp;lt;ref name=&amp;quot;loss&amp;quot;&amp;gt;David Eigen, Christian Puhrsch, Rob Fergus &amp;quot;Depth Map Prediction from a Single Imageusing a Multi-Scale Deep Network&amp;quot; стр. 5&amp;lt;/ref&amp;gt; &lt;br /&gt;
&lt;br /&gt;
* '''Обучение свёрточной нейронной сети''': далее идёт обычное обучение нейронной сети по карте различий путем обратного распространения ошибки, оптимизируя заданную выше функцию потерь.&lt;br /&gt;
&lt;br /&gt;
В итоге, по обученной нейронной сети мы можем создавать карту глубины, не проводя расчётов для поиска карт смещения и имея только изображение объекта или пространства. &amp;lt;ref name=&amp;quot;cnn&amp;quot;&amp;gt;Реализация, основанная на свёрточных нейронных сетях [https://www.kaggle.com/kmader/cnn-for-generating-depth-maps-from-rgb-images]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Также возможно использование усложнённых архитектур свёрточных нейронных сетей типа '''DenseNet'''.&lt;br /&gt;
&lt;br /&gt;
'''DenseNet'''&amp;lt;ref name=&amp;quot;DenseNet&amp;quot;&amp;gt;Оригинальная статья описывающая DenseNet [https://arxiv.org/abs/1611.09326]&amp;lt;/ref&amp;gt; {{---}} это свёрточная нейронные сеть, в которой выход каждого из слоев подаётся на вход всем слоям, лежащих ниже.&lt;br /&gt;
&lt;br /&gt;
=== Построение с помощью капсульных нейронных сетей ===&lt;br /&gt;
&lt;br /&gt;
Свёрточные нейронные сети способны регистрировать только наличие какого-либо объекта на картинке, не кодируя его ориентацию и положение. Но '''капсульные нейронные сети''' (англ. Capsule Neural Network)&amp;lt;ref name=&amp;quot;CapsNet&amp;quot;&amp;gt;Sara Sabour, Nicholas Frosst, Geoffrey E. Hinton &amp;quot;Dynamic Routing Between Capsules&amp;quot; [https://arxiv.org/pdf/1710.09829.pdf]&amp;lt;/ref&amp;gt; лишены этого недостатка.&lt;br /&gt;
&lt;br /&gt;
[[Файл:capsnet.jpg|thumb|400px| Рисунок 3. Структура капсульной нейронной сети &amp;lt;ref name=&amp;quot;img&amp;quot;&amp;gt; &amp;quot;Design and Investigation of Capsule Networks for Sentence Classification&amp;quot; Figure 2. [https://www.mdpi.com/2076-3417/9/11/2200/htm]&amp;lt;/ref&amp;gt;.]]&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Капсульная нейронная сеть&amp;quot; состоит из капсул или групп нейронов, чтобы идентифицировать закономерности в изображении. Эта информация поступает в виде векторов, содержащих ориентацию и положение узоров на изображении, которое затем принимается капсулами более высокого уровня. Капсулы более высокого уровня обрабатывают эту информацию из нескольких капсул более низкого уровня и впоследствии выдают прогноз. Капсулы одного уровня не имеют связей друг с другом и вычисляют информацию независимо друг от друга. Капсулы образуются путем разделения выходных данных из свёрточного слоя. Мы делим наш трехмерный вектор на капсулы методом &amp;quot;нарезания&amp;quot; таким образом, чтобы в каждой капсуле была информация о каждом пикселе, т.е. по трехмерной координате.&lt;br /&gt;
 &lt;br /&gt;
Состояние нейронов капсульной нейронной сети внутри изображения фиксирует свойство области или объекта внутри изображения: его положение и ориентацию.&lt;br /&gt;
&lt;br /&gt;
Использование капсульной нейронной сети аналогично использованию обычных свёрточных сетей, описанному выше. &lt;br /&gt;
В целом, данная сеть показывает более точные результаты предсказания глубины.&lt;br /&gt;
&lt;br /&gt;
=== Построение с помощью PlanetNet ===&lt;br /&gt;
&lt;br /&gt;
Так же есть архитектуры, решающие данную задачу и без обучения на карте смещений, построенной с помощью двух изображений. Одной из таких является '''PlaneNet'''. &lt;br /&gt;
&lt;br /&gt;
'''PlaneNet'''&amp;lt;ref name=&amp;quot;planetNet&amp;quot;&amp;gt; Chen Liu, Jimei Yang, Duygu Ceylan, Ersin Yumer, Yasutaka Furukawa &amp;quot;PlaneNet: Piece-wise Planar Reconstruction from a Single RGB Image&amp;quot; [https://arxiv.org/abs/1804.06278v1]&amp;lt;/ref&amp;gt; {{---}} глубокая нейронная сеть, построенная на расширенных остаточных сетях (aнгл. Dilated Residual Networks или DRN)&amp;lt;ref name=&amp;quot;drn&amp;quot;&amp;gt; Fisher Yu, Vladlen Koltun, Thomas Funkhouser &amp;quot;Dilated Residual Networks&amp;quot; [https://arxiv.org/abs/1705.09914]&amp;lt;/ref&amp;gt;. Она получает карту глубин путем композиции выходов трех подзадач:&lt;br /&gt;
&lt;br /&gt;
[[Файл:plane_net.png|thumb|500px| Рисунок 4. Прогнозируемые PlaneNet параметры по одной rgb картинке: cегметация плоскости, параметры плоскостей, неплоская карта глубины&amp;lt;ref name=&amp;quot;img4&amp;quot;&amp;gt; Chen Liu, Jimei Yang, Duygu Ceylan, Ersin Yumer, Yasutaka Furukawa &amp;quot;PlaneNet: Piece-wise Planar Reconstruction from a Single RGB Image&amp;quot; Figure 2.&amp;lt;/ref&amp;gt;.]]&lt;br /&gt;
&lt;br /&gt;
* '''Параметры плоскостей''': пытаемся предсказать количество плоскостей K, а после ищем на изображение K плоских поверхностей, каждая поверхность задаётся тремя параметрами: нормальная, прямая и сдвиг.&lt;br /&gt;
&lt;br /&gt;
* [[Сегментация изображений|'''Сегментация плоскости''']]: ищем группы пикселей, каждая из которых характеризует один смысловой объект.&lt;br /&gt;
&lt;br /&gt;
* '''Неплоская карта глубины''': ищем одно-канальную (или неплоскую) карту глубины, то есть карту глубины, где каждый пиксель, либо на глубине 0, либо на глубине 1.&lt;br /&gt;
&lt;br /&gt;
== См. также ==&lt;br /&gt;
&lt;br /&gt;
* [[Компьютерное зрение]]&lt;br /&gt;
&lt;br /&gt;
* [[Оценка положения]]&lt;br /&gt;
&lt;br /&gt;
* [[Задача нахождения объектов на изображении]]&lt;br /&gt;
&lt;br /&gt;
== Примечания ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Источники информации ==&lt;br /&gt;
&lt;br /&gt;
* Р.А. Чугунов, А.Д. Кульневич, С.В. Аксенов &amp;quot;Методика построения карт глубины стереоизображения с помощью капсульной нейронной сети&amp;quot; [https://cyberleninka.ru/article/n/metodika-postroeniya-kart-glubiny-stereoizobrazheniya-s-pomoschyu-kapsulnoy-neyronnoy-seti/viewer]&lt;br /&gt;
&lt;br /&gt;
* Alexey Kurakin &amp;quot;Основы стереозрения&amp;quot; [https://habr.com/ru/post/130300/]&lt;br /&gt;
&lt;br /&gt;
* Dmitriy Vatolin &amp;quot;Камеры глубины — тихая революция&amp;quot; [https://habr.com/ru/post/457524/]&lt;br /&gt;
&lt;br /&gt;
* Ibraheem Alhashim, Peter Wonka &amp;quot;High Quality Monocular Depth Estimation via Transfer Learning&amp;quot; [https://arxiv.org/pdf/1812.11941.pdf]&lt;br /&gt;
&lt;br /&gt;
*  David Eigen, Christian Puhrsch, Rob Fergus &amp;quot;Depth Map Prediction from a Single Imageusing a Multi-Scale Deep Network [https://arxiv.org/pdf/1406.2283.pdf]&lt;br /&gt;
&lt;br /&gt;
* Sunil Prakash, Gaelan Gu &amp;quot;Simultaneous Localization And Mapping with depth Prediction using Capsule Networks for UAVs&amp;quot; [https://arxiv.org/pdf/1808.05336.pdf]&lt;br /&gt;
&lt;br /&gt;
[[Категория:Машинное обучение]]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Компьютерное зрение]]&lt;/div&gt;</summary>
		<author><name>Frak</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9A%D0%B0%D1%80%D1%82%D0%B0_%D0%B3%D0%BB%D1%83%D0%B1%D0%B8%D0%BD%D1%8B&amp;diff=79642</id>
		<title>Карта глубины</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9A%D0%B0%D1%80%D1%82%D0%B0_%D0%B3%D0%BB%D1%83%D0%B1%D0%B8%D0%BD%D1%8B&amp;diff=79642"/>
				<updated>2021-01-21T15:10:11Z</updated>
		
		<summary type="html">&lt;p&gt;Frak: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Карта глубины''' (англ. depth map) — это изображение, где для каждого пикселя вместо цвета хранится его расстояние до камеры.&amp;lt;ref name=&amp;quot;def&amp;quot;&amp;gt;Alexey Kurakin &amp;quot;Основы стереозрения&amp;quot;[https://habr.com/ru/post/130300/]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В компьютерной 3D-графике и [[Компьютерное зрение|компьютерном зрении]] карта глубины представляет собой изображение или канал изображения, содержащий информацию о расстоянии поверхностей объектов сцены от точки обзора. &lt;br /&gt;
&lt;br /&gt;
== Мотивация ==&lt;br /&gt;
&lt;br /&gt;
Карта глубины изображения содержит в себе информацию о расстоянии между различными объектами или частями объектов, представленных на данном изображении. Эта информация может быть полезна во многих областях. &lt;br /&gt;
 &lt;br /&gt;
* Для создания 3D-сенсеров. Они способны строить трёхмерную картину своего окружения, используются для [[Оценка положения|ориентации]] автономного робота в пространстве.&lt;br /&gt;
&lt;br /&gt;
* Для систем, использующих технологии дополненной и виртуальной реальности. Например, камеры, которые фиксируют действия пользователя в видеоиграх с технологией виртуальной реальности.&lt;br /&gt;
&lt;br /&gt;
* В беспилотных автомобилях, которые также используют карты глубин для ориентации на дороге.&lt;br /&gt;
&lt;br /&gt;
* Для обработки фотографий. Например, карты глубин используют для размытия фона на фотографии, чтобы добиться более чёткого выделения человека&amp;lt;ref name=&amp;quot;expls&amp;quot;&amp;gt;Примеры из &amp;quot;Research Guide for Depth Estimation with Deep Learning&amp;quot;[https://www.kdnuggets.com/2019/11/research-guide-depth-estimation-deep-learning.html]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Методы построения карты глубины ==&lt;br /&gt;
&lt;br /&gt;
Карта глубины может быть получена с помощью '''специальной камеры глубины''', по '''стереопаре изображений''', а также с помощью [[Нейронные сети, перцептрон|'''нейронных сетей''']].&lt;br /&gt;
&lt;br /&gt;
== Построение с помощью специальных камер глубин == &lt;br /&gt;
&lt;br /&gt;
[[Файл:ToF.jpg|thumb|250px| Рисунок 1. Пример работы ToF-камеры.]]&lt;br /&gt;
&lt;br /&gt;
* '''ToF-камеры''' (англ. Time of Flight). Данный метод основан на измерении задержки света. Фактически нам нужно измерить задержку, с которой свет возвращается в каждую точку. Имея несколько сенсоров с разным временем накопления заряда и зная сдвиг по времени относительно источника для каждого сенсора и снятой яркости вспышки, мы можем рассчитать сдвиг и, соответственно, расстояние до объекта. Причем, чем больше сенсоров задействовано, тем выше точность метода.&lt;br /&gt;
&lt;br /&gt;
* '''Структурированные световые камеры''' (aнгл. Structured light camera). Это один из самых старых и дешёвых способов построить карту глубин. Ставим проектор, который создает, например, горизонтальные (а потом и вертикальные) полоски и рядом камеру, которая снимает картину с полосками. В некоторых вариантах используется псевдослучайный набор точек (MS Kinect {{---}} бесконтактный сенсорный игровой контроллер, для консолей Xbox 360, Xbox One и персональных компьютеров под управлением ОС Windows&amp;lt;ref name=&amp;quot;kinect&amp;quot;&amp;gt; О MicriSoft Kinect [https://en.wikipedia.org/wiki/Kinect]&amp;lt;/ref&amp;gt;). Проекторы обычно работают в инфракрасном спектре, чтобы не мешать пользователям. Поскольку камера и проектор смещены друг относительно друга, то и полоски также будут смещаться пропорционально расстоянию до объекта. Измеряя это смещение, мы можем рассчитывать расстояние до объекта. Вполне понятны сложности, с которыми можно столкнуться при использовании этого метода: это необходимость настройки и калибровки проектора, и проблема того, что нам нужно относительно благоприятное освещение. К примеру, солнце может засветить полосы, и что-то распознать будет тяжело.&lt;br /&gt;
&lt;br /&gt;
== Построения карты глубины по стереопаре ==&lt;br /&gt;
&lt;br /&gt;
Идея, лежащая в основе построения карты глубины по '''стереопаре''', проста. Для каждой точки на одном изображении выполняется поиск [[Ключевые точки|парной ей точки]] на другом изображении. А по паре соответствующих точек можно выполнить [[Триангуляция полигонов (ушная + монотонная)|триангуляцию]] и определить координаты их [[Отображения|прообраза]] в трехмерном пространстве. Зная трехмерные координаты прообраза, глубина вычисляется как расстояние до плоскости камеры.&lt;br /&gt;
&lt;br /&gt;
Парную точку нужно искать на эпиполярной&amp;lt;ref name=&amp;quot;Epipolar&amp;quot;&amp;gt;Информация о эпиполярной геометрии[https://ru.qaz.wiki/wiki/Epipolar_geometry]&amp;lt;/ref&amp;gt; линии. Соответственно, для упрощения поиска изображения выравнивают так, чтобы все эпиполярные линии были параллельны сторонам изображения (обычно горизонтальны). Более того, изображения выравнивают так, чтобы для точки с координатами &amp;lt;math&amp;gt;(x_0, y_0)&amp;lt;/math&amp;gt; соответствующая ей эпиполярная линия задавалась уравнением &amp;lt;math&amp;gt;x = x_0&amp;lt;/math&amp;gt;. Тогда для каждой точки, соответствующую ей парную точку, нужно искать в той-же строчке на изображении со второй камеры. Такой процесс выравнивания изображений называют '''ректификацией''' (rectification).&lt;br /&gt;
&lt;br /&gt;
[[Файл:Stereo.png|thumb|300px| Рисунок 2. Результат построения карты смещений по двум картинкам.&amp;lt;ref name=&amp;quot;img2&amp;quot;&amp;gt; &amp;quot;Основы стереозрения&amp;quot; Рис. 3 [https://habr.com/ru/post/130300/]&amp;lt;/ref&amp;gt;]]&lt;br /&gt;
&lt;br /&gt;
После того, как изображения '''ректифицированы''', выполняют поиск соответствующих пар точек. Для каждого пикселя одной картинки с координатами &amp;lt;math&amp;gt;(x_0, y_0)&amp;lt;/math&amp;gt; выполняется поиск пикселя на другой картинке. При этом предполагается, что пиксель на второй картинке должен иметь координаты &amp;lt;math&amp;gt;(x_0 - d, y_0)&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;d&amp;lt;/math&amp;gt; — величина называемая смещением. Поиск соответствующего пикселя выполняется путем вычисления максимума функции отклика, в качестве которой может выступать, например, [[Корреляция случайных величин|корреляция]] окрестностей пикселей. В результате получается карта смещений, пример которой приведен на рис. 2. &lt;br /&gt;
&lt;br /&gt;
Собственно значения глубины обратно пропорциональны величине смещения пикселей.&lt;br /&gt;
&lt;br /&gt;
== Использование нейронных сетей ==&lt;br /&gt;
&lt;br /&gt;
Существует множество методов, использующих нейронные сети. Приведём пару примеров таких решений.&lt;br /&gt;
&lt;br /&gt;
=== Построение с помощью свёрточных нейронных сетей ===&lt;br /&gt;
&lt;br /&gt;
Используем [[Сверточные нейронные сети|сверточные нейронные сети]] для построения карты глубины следующим образом&lt;br /&gt;
&amp;lt;ref name=&amp;quot;cnn_rew&amp;quot;&amp;gt; Xiaobai Ma, Zhenglin Geng, Zhi Bie &amp;quot;Depth Estimation from Single Image Using CNN-Residual Network&amp;quot; [http://cs231n.stanford.edu/reports/2017/pdfs/203.pdf]&amp;lt;/ref&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
*  '''Создаем карту смещений''': используя два изображения с камер, близко расположенных друг к другу, создаем карту различий, точно так же как в методе построения по стереопаре.&lt;br /&gt;
&lt;br /&gt;
* '''Ищем реальную карту глубины для обучения''': с помощью карты смещений, можем построить карту глубины &amp;lt;math&amp;gt;y&amp;lt;/math&amp;gt; вышеописанным способом. Также допустимы другие способы построения карты глубины для обучения нейронной сети.&lt;br /&gt;
&lt;br /&gt;
*  '''Функция потерь''': определим [[Функция потерь и эмпирический риск|функцию потерь]], для предсказанной карты &amp;lt;math&amp;gt;\hat y&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;d_i = log( y_i) - log (\hat y_i)&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;\lambda \in [0, 1]&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;n &amp;lt;/math&amp;gt; - количество пикселей.&amp;lt;math&amp;gt;L(y, \hat y) =  \frac{1}{n} \sum\limits_{i} d^2_i - \frac{\lambda}{n^2}(\sum\limits_{i} d_i)^2&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;y_i&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;\hat y_i&amp;lt;/math&amp;gt; это i пискель для для реальной карты глубин и для предсказанной карты, соответственно. Гиперпараметр &amp;lt;math&amp;gt;\lambda&amp;lt;/math&amp;gt;, нужен для того, чтобы функция потерь меньше росла при большом количестве пикселей, предсказание для которых достаточно близко к реальному. Например, если &amp;lt;math&amp;gt;\lambda = 0&amp;lt;/math&amp;gt;, то мы просто придём к оптимизации в L2 для &amp;lt;math&amp;gt;d_i&amp;lt;/math&amp;gt;, т.е. &amp;lt;math&amp;gt;L(y, \hat y) =  \frac{1}{n} \sum\limits_{i} d^2_i &amp;lt;/math&amp;gt;.&amp;lt;ref name=&amp;quot;loss&amp;quot;&amp;gt;David Eigen, Christian Puhrsch, Rob Fergus &amp;quot;Depth Map Prediction from a Single Imageusing a Multi-Scale Deep Network&amp;quot; стр. 5&amp;lt;/ref&amp;gt; &lt;br /&gt;
&lt;br /&gt;
* '''Обучение свёрточной нейронной сети''': далее идёт обычное обучение нейронной сети по карте различий путем обратного распространения ошибки, оптимизируя заданную выше функцию потерь.&lt;br /&gt;
&lt;br /&gt;
В итоге, по обученной нейронной сети мы можем создавать карту глубины, не проводя расчётов для поиска карт смещения и имея только изображение объекта или пространства. &amp;lt;ref name=&amp;quot;cnn&amp;quot;&amp;gt;Реализация, основанная на свёрточных нейронных сетях [https://www.kaggle.com/kmader/cnn-for-generating-depth-maps-from-rgb-images]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Также возможно использование усложнённых архитектур свёрточных нейронных сетей типа '''DenseNet'''.&lt;br /&gt;
&lt;br /&gt;
'''DenseNet'''&amp;lt;ref name=&amp;quot;DenseNet&amp;quot;&amp;gt;Оригинальная статья описывающая DenseNet [https://arxiv.org/abs/1611.09326]&amp;lt;/ref&amp;gt; {{---}} это свёрточная нейронные сеть, в которой выход каждого из слоев подаётся на вход всем слоям, лежащих ниже.&lt;br /&gt;
&lt;br /&gt;
=== Построение с помощью капсульных нейронных сетей ===&lt;br /&gt;
&lt;br /&gt;
Свёрточные нейронные сети способны регистрировать только наличие какого-либо объекта на картинке, не кодируя его ориентацию и положение. Но '''капсульные нейронные сети''' (англ. Capsule Neural Network)&amp;lt;ref name=&amp;quot;CapsNet&amp;quot;&amp;gt;Sara Sabour, Nicholas Frosst, Geoffrey E. Hinton &amp;quot;Dynamic Routing Between Capsules&amp;quot; [https://arxiv.org/pdf/1710.09829.pdf]&amp;lt;/ref&amp;gt; лишены этого недостатка.&lt;br /&gt;
&lt;br /&gt;
[[Файл:capsnet.jpg|thumb|400px| Рисунок 3. Структура капсульной нейронной сети &amp;lt;ref name=&amp;quot;img&amp;quot;&amp;gt; &amp;quot;Design and Investigation of Capsule Networks for Sentence Classification&amp;quot; Figure 2. [https://www.mdpi.com/2076-3417/9/11/2200/htm]&amp;lt;/ref&amp;gt;.]]&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Капсульная нейронная сеть&amp;quot; состоит из капсул или групп нейронов, чтобы идентифицировать закономерности в изображении. Эта информация поступает в виде векторов, содержащих ориентацию и положение узоров на изображении, которое затем принимается капсулами более высокого уровня. Капсулы более высокого уровня обрабатывают эту информацию из нескольких капсул более низкого уровня и впоследствии выдают прогноз. Капсулы одного уровня не имеют связей друг с другом и вычисляют информацию независимо друг от друга. Капсулы образуются путем разделения выходных данных из свёрточного слоя. Мы делим наш трехмерный вектор на капсулы методом &amp;quot;нарезания&amp;quot; таким образом, чтобы в каждой капсуле была информация о каждом пикселе, т.е. по трехмерной координате.&lt;br /&gt;
 &lt;br /&gt;
Состояние нейронов капсульной нейронной сети внутри изображения фиксирует свойство области или объекта внутри изображения: его положение и ориентацию.&lt;br /&gt;
&lt;br /&gt;
Использование капсульной нейронной сети аналогично использованию обычных свёрточных сетей, описанному выше. &lt;br /&gt;
В целом, данная сеть показывает более точные результаты предсказания глубины.&lt;br /&gt;
&lt;br /&gt;
=== Построение с помощью PlanetNet ===&lt;br /&gt;
&lt;br /&gt;
Так же есть архитектуры, решающие данную задачу и без обучения на карте смещений, построенной с помощью двух изображений. Одной из таких является '''PlaneNet'''. &lt;br /&gt;
&lt;br /&gt;
'''PlaneNet'''&amp;lt;ref name=&amp;quot;planetNet&amp;quot;&amp;gt; Chen Liu, Jimei Yang, Duygu Ceylan, Ersin Yumer, Yasutaka Furukawa &amp;quot;PlaneNet: Piece-wise Planar Reconstruction from a Single RGB Image&amp;quot; [https://arxiv.org/abs/1804.06278v1]&amp;lt;/ref&amp;gt; {{---}} глубокая нейронная сеть, построенная на расширенных остаточных сетях (aнгл. Dilated Residual Networks или DRN)&amp;lt;ref name=&amp;quot;drn&amp;quot;&amp;gt; Fisher Yu, Vladlen Koltun, Thomas Funkhouser &amp;quot;Dilated Residual Networks&amp;quot; [https://arxiv.org/abs/1705.09914]&amp;lt;/ref&amp;gt;. Она получает карту глубин путем композиции выходов трех подзадач:&lt;br /&gt;
&lt;br /&gt;
[[Файл:plane_net.png|thumb|500px| Рисунок 4. Прогнозируемые PlaneNet параметры по одной rgb картинке: cегметация плоскости, параметры плоскостей, неплоская карта глубины&amp;lt;ref name=&amp;quot;img4&amp;quot;&amp;gt; Chen Liu, Jimei Yang, Duygu Ceylan, Ersin Yumer, Yasutaka Furukawa &amp;quot;PlaneNet: Piece-wise Planar Reconstruction from a Single RGB Image&amp;quot; Figure 2.&amp;lt;/ref&amp;gt;.]]&lt;br /&gt;
&lt;br /&gt;
* '''Параметры плоскостей''': пытаемся предсказать количество плоскостей K, а после ищем на изображение K плоских поверхностей, каждая поверхность задаётся тремя параметрами: нормальная, прямая и сдвиг.&lt;br /&gt;
&lt;br /&gt;
* [[Сегментация изображений|'''Сегментация плоскости''']]: ищем группы пикселей, каждая из которых характеризует один смысловой объект.&lt;br /&gt;
&lt;br /&gt;
* '''Неплоская карта глубины''': ищем одно-канальную (или неплоскую) карту глубины, то есть карту глубины, где каждый пиксель, либо на глубине 0, либо на глубине 1.&lt;br /&gt;
&lt;br /&gt;
== См. также ==&lt;br /&gt;
&lt;br /&gt;
* [[Компьютерное зрение]]&lt;br /&gt;
&lt;br /&gt;
* [[Оценка положения]]&lt;br /&gt;
&lt;br /&gt;
* [[Задача нахождения объектов на изображении]]&lt;br /&gt;
&lt;br /&gt;
== Примечания ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Источники информации ==&lt;br /&gt;
&lt;br /&gt;
* Р.А. Чугунов, А.Д. Кульневич, С.В. Аксенов &amp;quot;Методика построения карт глубины стереоизображения с помощью капсульной нейронной сети&amp;quot; [https://cyberleninka.ru/article/n/metodika-postroeniya-kart-glubiny-stereoizobrazheniya-s-pomoschyu-kapsulnoy-neyronnoy-seti/viewer]&lt;br /&gt;
&lt;br /&gt;
* Alexey Kurakin &amp;quot;Основы стереозрения&amp;quot; [https://habr.com/ru/post/130300/]&lt;br /&gt;
&lt;br /&gt;
* Dmitriy Vatolin &amp;quot;Камеры глубины — тихая революция&amp;quot; [https://habr.com/ru/post/457524/]&lt;br /&gt;
&lt;br /&gt;
* Ibraheem Alhashim, Peter Wonka &amp;quot;High Quality Monocular Depth Estimation via Transfer Learning&amp;quot; [https://arxiv.org/pdf/1812.11941.pdf]&lt;br /&gt;
&lt;br /&gt;
*  David Eigen, Christian Puhrsch, Rob Fergus &amp;quot;Depth Map Prediction from a Single Imageusing a Multi-Scale Deep Network [https://arxiv.org/pdf/1406.2283.pdf]&lt;br /&gt;
&lt;br /&gt;
* Sunil Prakash, Gaelan Gu &amp;quot;Simultaneous Localization And Mapping with depth Prediction using Capsule Networks for UAVs&amp;quot; [https://arxiv.org/pdf/1808.05336.pdf]&lt;br /&gt;
&lt;br /&gt;
[[Категория:Машинное обучение]]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Компьютерное зрение]]&lt;/div&gt;</summary>
		<author><name>Frak</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9A%D0%B0%D1%80%D1%82%D0%B0_%D0%B3%D0%BB%D1%83%D0%B1%D0%B8%D0%BD%D1%8B&amp;diff=79638</id>
		<title>Карта глубины</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9A%D0%B0%D1%80%D1%82%D0%B0_%D0%B3%D0%BB%D1%83%D0%B1%D0%B8%D0%BD%D1%8B&amp;diff=79638"/>
				<updated>2021-01-21T15:05:16Z</updated>
		
		<summary type="html">&lt;p&gt;Frak: /* Построение с помощью капсульных нейронных сетей */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Карта глубины''' (англ. depth map) — это изображение, где для каждого пикселя вместо цвета хранится его расстояние до камеры.&amp;lt;ref name=&amp;quot;def&amp;quot;&amp;gt;Alexey Kurakin &amp;quot;Основы стереозрения&amp;quot;[https://habr.com/ru/post/130300/]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В компьютерной 3D-графике и [[Компьютерное зрение|компьютерном зрении]] карта глубины представляет собой изображение или канал изображения, содержащий информацию о расстоянии поверхностей объектов сцены от точки обзора. &lt;br /&gt;
&lt;br /&gt;
== Мотивация ==&lt;br /&gt;
&lt;br /&gt;
Карта глубины изображения содержит в себе информацию о расстоянии между различными объектами или частями объектов, представленных на данном изображении. Эта информация может быть полезна во многих областях. &lt;br /&gt;
 &lt;br /&gt;
* Для создания 3D-сенсеров. Они способны строить трёхмерную картину своего окружения, используются для [[Оценка положения|ориентации]] автономного робота в пространстве.&lt;br /&gt;
&lt;br /&gt;
* Для систем, использующих технологии дополненной и виртуальной реальности. Например, камеры, которые фиксируют действия пользователя в видеоиграх с технологией виртуальной реальности.&lt;br /&gt;
&lt;br /&gt;
* В беспилотных автомобилях, которые также используют карты глубин для ориентации на дороге.&lt;br /&gt;
&lt;br /&gt;
* Для обработки фотографий. Например, карты глубин используют для размытия фона на фотографии, чтобы добиться более чёткого выделения человека&amp;lt;ref name=&amp;quot;expls&amp;quot;&amp;gt;Примеры из &amp;quot;Research Guide for Depth Estimation with Deep Learning&amp;quot;[https://www.kdnuggets.com/2019/11/research-guide-depth-estimation-deep-learning.html]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Методы построения карты глубины ==&lt;br /&gt;
&lt;br /&gt;
Карта глубины может быть получена с помощью '''специальной камеры глубины''', по '''стереопаре изображений''', а также с помощью [[Нейронные сети, перцептрон|'''нейронных сетей''']].&lt;br /&gt;
&lt;br /&gt;
== Построение с помощью специальных камер глубин == &lt;br /&gt;
&lt;br /&gt;
[[Файл:ToF.jpg|thumb|250px| Рисунок 1. Пример работы ToF-камеры.]]&lt;br /&gt;
&lt;br /&gt;
* '''ToF-камеры''' (англ. Time of Flight). Данный метод основан на измерении задержки света. Фактически нам нужно измерить задержку, с которой свет возвращается в каждую точку. Имея несколько сенсоров с разным временем накопления заряда и зная сдвиг по времени относительно источника для каждого сенсора и снятой яркости вспышки, мы можем рассчитать сдвиг и, соответственно, расстояние до объекта. Причем, чем больше сенсоров задействовано, тем выше точность метода.&lt;br /&gt;
&lt;br /&gt;
* '''Структурированные световые камеры''' (aнгл. Structured light camera). Это один из самых старых и дешёвых способов построить карту глубин. Ставим проектор, который создает, например, горизонтальные (а потом и вертикальные) полоски и рядом камеру, которая снимает картину с полосками. В некоторых вариантах используется псевдослучайный набор точек (MS Kinect {{---}} бесконтактный сенсорный игровой контроллер, для консолей Xbox 360, Xbox One и персональных компьютеров под управлением ОС Windows&amp;lt;ref name=&amp;quot;kinect&amp;quot;&amp;gt; О MicriSoft Kinect [https://en.wikipedia.org/wiki/Kinect]&amp;lt;/ref&amp;gt;). Проекторы обычно работают в инфракрасном спектре, чтобы не мешать пользователям. Поскольку камера и проектор смещены друг относительно друга, то и полоски также будут смещаться пропорционально расстоянию до объекта. Измеряя это смещение, мы можем рассчитывать расстояние до объекта. Вполне понятны сложности, с которыми можно столкнуться при использовании этого метода: это необходимость настройки и калибровки проектора, и проблема того, что нам нужно относительно благоприятное освещение. К примеру, солнце может засветить полосы, и что-то распознать будет тяжело.&lt;br /&gt;
&lt;br /&gt;
== Построения карты глубины по стереопаре ==&lt;br /&gt;
&lt;br /&gt;
Идея, лежащая в основе построения карты глубины по '''стереопаре''', проста. Для каждой точки на одном изображении выполняется поиск [[Ключевые точки|парной ей точки]] на другом изображении. А по паре соответствующих точек можно выполнить [[Триангуляция полигонов (ушная + монотонная)|триангуляцию]] и определить координаты их [[Отображения|прообраза]] в трехмерном пространстве. Зная трехмерные координаты прообраза, глубина вычисляется как расстояние до плоскости камеры.&lt;br /&gt;
&lt;br /&gt;
Парную точку нужно искать на эпиполярной&amp;lt;ref name=&amp;quot;Epipolar&amp;quot;&amp;gt;Информация о эпиполярной геометрии[https://ru.qaz.wiki/wiki/Epipolar_geometry]&amp;lt;/ref&amp;gt; линии. Соответственно, для упрощения поиска изображения выравнивают так, чтобы все эпиполярные линии были параллельны сторонам изображения (обычно горизонтальны). Более того, изображения выравнивают так, чтобы для точки с координатами &amp;lt;math&amp;gt;(x_0, y_0)&amp;lt;/math&amp;gt; соответствующая ей эпиполярная линия задавалась уравнением &amp;lt;math&amp;gt;x = x_0&amp;lt;/math&amp;gt;. Тогда для каждой точки, соответствующую ей парную точку, нужно искать в той-же строчке на изображении со второй камеры. Такой процесс выравнивания изображений называют '''ректификацией''' (rectification).&lt;br /&gt;
&lt;br /&gt;
[[Файл:Stereo.png|thumb|300px| Рисунок 2. Результат построения карты смещений по двум картинкам.&amp;lt;ref name=&amp;quot;img2&amp;quot;&amp;gt; &amp;quot;Основы стереозрения&amp;quot; Рис. 3 [https://habr.com/ru/post/130300/]&amp;lt;/ref&amp;gt;]]&lt;br /&gt;
&lt;br /&gt;
После того, как изображения '''ректифицированы''', выполняют поиск соответствующих пар точек. Для каждого пикселя одной картинки с координатами &amp;lt;math&amp;gt;(x_0, y_0)&amp;lt;/math&amp;gt; выполняется поиск пикселя на другой картинке. При этом предполагается, что пиксель на второй картинке должен иметь координаты &amp;lt;math&amp;gt;(x_0 - d, y_0)&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;d&amp;lt;/math&amp;gt; — величина называемая смещением. Поиск соответствующего пикселя выполняется путем вычисления максимума функции отклика, в качестве которой может выступать, например, [[Корреляция случайных величин|корреляция]] окрестностей пикселей. В результате получается карта смещений, пример которой приведен на рис. 2. &lt;br /&gt;
&lt;br /&gt;
Собственно значения глубины обратно пропорциональны величине смещения пикселей.&lt;br /&gt;
&lt;br /&gt;
== Использование нейронных сетей ==&lt;br /&gt;
&lt;br /&gt;
Существует множество методов, использующих нейронные сети. Приведём пару примеров таких решений.&lt;br /&gt;
&lt;br /&gt;
=== Построение с помощью свёрточных нейронных сетей ===&lt;br /&gt;
&lt;br /&gt;
Используем [[Сверточные нейронные сети|сверточные нейронные сети]] для построения карты глубины следующим образом&lt;br /&gt;
&amp;lt;ref name=&amp;quot;cnn_rew&amp;quot;&amp;gt; Xiaobai Ma, Zhenglin Geng, Zhi Bie &amp;quot;Depth Estimation from Single Image Using CNN-Residual Network&amp;quot; [http://cs231n.stanford.edu/reports/2017/pdfs/203.pdf]&amp;lt;/ref&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
*  '''Создаем карту смещений''': используя два изображения с камер, близко расположенных друг к другу, создаем карту различий, точно так же как в методе построения по стереопаре.&lt;br /&gt;
&lt;br /&gt;
* '''Ищем реальную карту глубины для обучения''': с помощью карты смещений, можем построить карту глубины &amp;lt;math&amp;gt;y&amp;lt;/math&amp;gt; вышеописанным способом. Также допустимы другие способы построения карты глубины для обучения нейронной сети.&lt;br /&gt;
&lt;br /&gt;
*  '''Функция потерь''': определим [[Функция потерь и эмпирический риск|функцию потерь]], для предсказанной карты &amp;lt;math&amp;gt;\hat y&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;d_i = log( y_i) - log (\hat y_i)&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;\lambda \in [0, 1]&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;n &amp;lt;/math&amp;gt; - количество пикселей.&amp;lt;math&amp;gt;L(y, \hat y) =  \frac{1}{n} \sum\limits_{i} d^2_i - \frac{\lambda}{n^2}(\sum\limits_{i} d_i)^2&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;y_i&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;\hat y_i&amp;lt;/math&amp;gt; это i пискель для для реальной карты глубин и для предсказанной карты, соответственно. Гиперпараметр &amp;lt;math&amp;gt;\lambda&amp;lt;/math&amp;gt;, нужен для того, чтобы функция потерь меньше росла при большом количестве пикселей, предсказание для которых достаточно близко к реальному. Например, если &amp;lt;math&amp;gt;\lambda = 0&amp;lt;/math&amp;gt;, то мы просто придём к оптимизации в L2 для &amp;lt;math&amp;gt;d_i&amp;lt;/math&amp;gt;, т.е. &amp;lt;math&amp;gt;L(y, \hat y) =  \frac{1}{n} \sum\limits_{i} d^2_i &amp;lt;/math&amp;gt;.&amp;lt;ref name=&amp;quot;loss&amp;quot;&amp;gt;David Eigen, Christian Puhrsch, Rob Fergus &amp;quot;Depth Map Prediction from a Single Imageusing a Multi-Scale Deep Network&amp;quot; стр. 5&amp;lt;/ref&amp;gt; &lt;br /&gt;
&lt;br /&gt;
* '''Обучение свёрточной нейронной сети''': далее идёт обычное обучение нейронной сети по карте различий путем обратного распространения ошибки, оптимизируя заданную выше функцию потерь.&lt;br /&gt;
&lt;br /&gt;
В итоге, по обученной нейронной сети мы можем создавать карту глубины, не проводя расчётов для поиска карт смещения и имея только изображение объекта или пространства. &amp;lt;ref name=&amp;quot;cnn&amp;quot;&amp;gt;Реализация, основанная на свёрточных нейронных сетях [https://www.kaggle.com/kmader/cnn-for-generating-depth-maps-from-rgb-images]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Также возможно использование усложнённых архитектур свёрточных нейронных сетей типа '''DenseNet'''.&lt;br /&gt;
&lt;br /&gt;
'''DenseNet'''&amp;lt;ref name=&amp;quot;DenseNet&amp;quot;&amp;gt;Оригинальная статья описывающая DenseNet [https://arxiv.org/abs/1611.09326]&amp;lt;/ref&amp;gt; {{---}} это свёрточная нейронные сеть, в которой выход каждого из слоев подаётся на вход всем слоям, лежащих ниже.&lt;br /&gt;
&lt;br /&gt;
=== Построение с помощью капсульных нейронных сетей ===&lt;br /&gt;
&lt;br /&gt;
Свёрточные нейронные сети способны регистрировать только наличие какого-либо объекта на картинке, не кодируя его ориентацию и положение. Но '''капсульные нейронные сети''' (англ. Capsule Neural Network)&amp;lt;ref name=&amp;quot;CapsNet&amp;quot;&amp;gt;Sara Sabour, Nicholas Frosst, Geoffrey E. Hinton &amp;quot;Dynamic Routing Between Capsules&amp;quot; [https://arxiv.org/pdf/1710.09829.pdf]&amp;lt;/ref&amp;gt; лишены этого недостатка.&lt;br /&gt;
&lt;br /&gt;
[[Файл:capsnet.jpg|thumb|400px| Рисунок 3. Структура капсульной нейронной сети &amp;lt;ref name=&amp;quot;img&amp;quot;&amp;gt; &amp;quot;Design and Investigation of Capsule Networks for Sentence Classification&amp;quot; Figure 2. [https://www.mdpi.com/2076-3417/9/11/2200/htm]&amp;lt;/ref&amp;gt;.]]&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Капсульная нейронная сеть&amp;quot; состоит из капсул или групп нейронов, чтобы идентифицировать закономерности в изображении. Эта информация поступает в виде векторов, содержащих ориентацию и положение узоров на изображении, которое затем принимается капсулами более высокого уровня. Капсулы более высокого уровня обрабатывают эту информацию из нескольких капсул более низкого уровня и впоследствии выдают прогноз. Капсулы одного уровня не имеют связей друг с другом и вычисляют информацию независимо друг от друга. Капсулы образуются путем разделения выходных данных из свёрточного слоя. Мы делим наш трехмерный вектор на капсулы методом &amp;quot;нарезания&amp;quot; таким образом, чтобы в каждой капсуле была информация о каждом пикселе, т.е. по трехмерной координате.&lt;br /&gt;
 &lt;br /&gt;
Состояние нейронов капсульной нейронной сети внутри изображения фиксирует свойство области или объекта внутри изображения: его положение и ориентацию.&lt;br /&gt;
&lt;br /&gt;
Использование капсульной нейронной сети аналогично использованию обычных свёрточных сетей, описанному выше. &lt;br /&gt;
В целом, данная сеть показывает более точные результаты предсказания глубины.&lt;br /&gt;
&lt;br /&gt;
=== Построение с помощью PlanetNet ===&lt;br /&gt;
&lt;br /&gt;
Так же есть архитектуры, решающие данную задачу и без обучения на карте смещений, построенной с помощью двух изображений. Одной из таких является '''PlaneNet'''. &lt;br /&gt;
&lt;br /&gt;
'''PlaneNet'''&amp;lt;ref name=&amp;quot;planetNet&amp;quot;&amp;gt; Chen Liu, Jimei Yang, Duygu Ceylan, Ersin Yumer, Yasutaka Furukawa &amp;quot;PlaneNet: Piece-wise Planar Reconstruction from a Single RGB Image&amp;quot; [https://arxiv.org/abs/1804.06278v1]&amp;lt;/ref&amp;gt; {{---}} глубокая нейронная сеть, построенная на расширенных остаточных сетях (aнгл. Dilated Residual Networks или DRN)&amp;lt;ref name=&amp;quot;drn&amp;quot;&amp;gt; Fisher Yu, Vladlen Koltun, Thomas Funkhouser &amp;quot;Dilated Residual Networks&amp;quot; [https://arxiv.org/abs/1705.09914]&amp;lt;/ref&amp;gt;. Она получает карту глубин путем композиции выходов трех подзадач:&lt;br /&gt;
&lt;br /&gt;
[[Файл:plane_net.png|thumb|500px| Рисунок 4. Прогнозируемые PlaneNet параметры по одной rgb картинке: cегметация плоскости, параметры плоскостей, неплоская карта глубины&amp;lt;ref name=&amp;quot;img4&amp;quot;&amp;gt; Chen Liu, Jimei Yang, Duygu Ceylan, Ersin Yumer, Yasutaka Furukawa &amp;quot;PlaneNet: Piece-wise Planar Reconstruction from a Single RGB Image&amp;quot; Figure 2.&amp;lt;/ref&amp;gt;.]]&lt;br /&gt;
&lt;br /&gt;
* '''Параметры плоскостей''': пытаемся предсказать количество плоскостей K, а после ищем на изображение K плоских поверхностей, каждая поверхность задаётся тремя параметрами: нормальная, прямая и сдвиг.&lt;br /&gt;
&lt;br /&gt;
* [[Сегментация изображений|'''Сегментация плоскости''']]: ищем группы пикселей, каждая из которых характеризует один смысловой объект.&lt;br /&gt;
&lt;br /&gt;
* '''Неплоская карта глубины''': ищем одно-канальную (или неплоскую) карту глубины, то есть карту глубины, где каждый пиксель, либо на глубине 0, либо на глубине 1.&lt;br /&gt;
&lt;br /&gt;
== См. также ==&lt;br /&gt;
&lt;br /&gt;
* [[Компьютерное зрение]]&lt;br /&gt;
&lt;br /&gt;
* [[Оценка положения]]&lt;br /&gt;
&lt;br /&gt;
* [[Задача нахождения объектов на изображении]]&lt;br /&gt;
&lt;br /&gt;
== Примечания ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Источники информации ==&lt;br /&gt;
&lt;br /&gt;
* Р.А. Чугунов, А.Д. Кульневич, С.В. Аксенов &amp;quot;Методика построения карт глубины стереоизображения с помощью капсульной нейронной сети&amp;quot; [https://cyberleninka.ru/article/n/metodika-postroeniya-kart-glubiny-stereoizobrazheniya-s-pomoschyu-kapsulnoy-neyronnoy-seti/viewer]&lt;br /&gt;
&lt;br /&gt;
* Alexey Kurakin &amp;quot;Основы стереозрения&amp;quot; [https://habr.com/ru/post/130300/]&lt;br /&gt;
&lt;br /&gt;
* Dmitriy Vatolin &amp;quot;Камеры глубины — тихая революция&amp;quot; [https://habr.com/ru/post/457524/]&lt;br /&gt;
&lt;br /&gt;
* Ibraheem Alhashim, Peter Wonka &amp;quot;High Quality Monocular Depth Estimation via Transfer Learning&amp;quot; [https://arxiv.org/pdf/1812.11941.pdf]&lt;br /&gt;
&lt;br /&gt;
*  David Eigen, Christian Puhrsch, Rob Fergus &amp;quot;Depth Map Prediction from a Single Imageusing a Multi-Scale Deep Network [https://arxiv.org/pdf/1406.2283.pdf]&lt;br /&gt;
&lt;br /&gt;
* Sunil Prakash, Gaelan Gu &amp;quot;Simultaneous Localization And Mapping with depth Prediction using Capsule Networks for UAVs&amp;quot; [https://arxiv.org/pdf/1808.05336.pdf]&lt;/div&gt;</summary>
		<author><name>Frak</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9A%D0%B0%D1%80%D1%82%D0%B0_%D0%B3%D0%BB%D1%83%D0%B1%D0%B8%D0%BD%D1%8B&amp;diff=79635</id>
		<title>Карта глубины</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9A%D0%B0%D1%80%D1%82%D0%B0_%D0%B3%D0%BB%D1%83%D0%B1%D0%B8%D0%BD%D1%8B&amp;diff=79635"/>
				<updated>2021-01-21T15:01:39Z</updated>
		
		<summary type="html">&lt;p&gt;Frak: /* Построение с помощью свёрточных нейронных сетей */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Карта глубины''' (англ. depth map) — это изображение, где для каждого пикселя вместо цвета хранится его расстояние до камеры.&amp;lt;ref name=&amp;quot;def&amp;quot;&amp;gt;Alexey Kurakin &amp;quot;Основы стереозрения&amp;quot;[https://habr.com/ru/post/130300/]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В компьютерной 3D-графике и [[Компьютерное зрение|компьютерном зрении]] карта глубины представляет собой изображение или канал изображения, содержащий информацию о расстоянии поверхностей объектов сцены от точки обзора. &lt;br /&gt;
&lt;br /&gt;
== Мотивация ==&lt;br /&gt;
&lt;br /&gt;
Карта глубины изображения содержит в себе информацию о расстоянии между различными объектами или частями объектов, представленных на данном изображении. Эта информация может быть полезна во многих областях. &lt;br /&gt;
 &lt;br /&gt;
* Для создания 3D-сенсеров. Они способны строить трёхмерную картину своего окружения, используются для [[Оценка положения|ориентации]] автономного робота в пространстве.&lt;br /&gt;
&lt;br /&gt;
* Для систем, использующих технологии дополненной и виртуальной реальности. Например, камеры, которые фиксируют действия пользователя в видеоиграх с технологией виртуальной реальности.&lt;br /&gt;
&lt;br /&gt;
* В беспилотных автомобилях, которые также используют карты глубин для ориентации на дороге.&lt;br /&gt;
&lt;br /&gt;
* Для обработки фотографий. Например, карты глубин используют для размытия фона на фотографии, чтобы добиться более чёткого выделения человека&amp;lt;ref name=&amp;quot;expls&amp;quot;&amp;gt;Примеры из &amp;quot;Research Guide for Depth Estimation with Deep Learning&amp;quot;[https://www.kdnuggets.com/2019/11/research-guide-depth-estimation-deep-learning.html]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Методы построения карты глубины ==&lt;br /&gt;
&lt;br /&gt;
Карта глубины может быть получена с помощью '''специальной камеры глубины''', по '''стереопаре изображений''', а также с помощью [[Нейронные сети, перцептрон|'''нейронных сетей''']].&lt;br /&gt;
&lt;br /&gt;
== Построение с помощью специальных камер глубин == &lt;br /&gt;
&lt;br /&gt;
[[Файл:ToF.jpg|thumb|250px| Рисунок 1. Пример работы ToF-камеры.]]&lt;br /&gt;
&lt;br /&gt;
* '''ToF-камеры''' (англ. Time of Flight). Данный метод основан на измерении задержки света. Фактически нам нужно измерить задержку, с которой свет возвращается в каждую точку. Имея несколько сенсоров с разным временем накопления заряда и зная сдвиг по времени относительно источника для каждого сенсора и снятой яркости вспышки, мы можем рассчитать сдвиг и, соответственно, расстояние до объекта. Причем, чем больше сенсоров задействовано, тем выше точность метода.&lt;br /&gt;
&lt;br /&gt;
* '''Структурированные световые камеры''' (aнгл. Structured light camera). Это один из самых старых и дешёвых способов построить карту глубин. Ставим проектор, который создает, например, горизонтальные (а потом и вертикальные) полоски и рядом камеру, которая снимает картину с полосками. В некоторых вариантах используется псевдослучайный набор точек (MS Kinect {{---}} бесконтактный сенсорный игровой контроллер, для консолей Xbox 360, Xbox One и персональных компьютеров под управлением ОС Windows&amp;lt;ref name=&amp;quot;kinect&amp;quot;&amp;gt; О MicriSoft Kinect [https://en.wikipedia.org/wiki/Kinect]&amp;lt;/ref&amp;gt;). Проекторы обычно работают в инфракрасном спектре, чтобы не мешать пользователям. Поскольку камера и проектор смещены друг относительно друга, то и полоски также будут смещаться пропорционально расстоянию до объекта. Измеряя это смещение, мы можем рассчитывать расстояние до объекта. Вполне понятны сложности, с которыми можно столкнуться при использовании этого метода: это необходимость настройки и калибровки проектора, и проблема того, что нам нужно относительно благоприятное освещение. К примеру, солнце может засветить полосы, и что-то распознать будет тяжело.&lt;br /&gt;
&lt;br /&gt;
== Построения карты глубины по стереопаре ==&lt;br /&gt;
&lt;br /&gt;
Идея, лежащая в основе построения карты глубины по '''стереопаре''', проста. Для каждой точки на одном изображении выполняется поиск [[Ключевые точки|парной ей точки]] на другом изображении. А по паре соответствующих точек можно выполнить [[Триангуляция полигонов (ушная + монотонная)|триангуляцию]] и определить координаты их [[Отображения|прообраза]] в трехмерном пространстве. Зная трехмерные координаты прообраза, глубина вычисляется как расстояние до плоскости камеры.&lt;br /&gt;
&lt;br /&gt;
Парную точку нужно искать на эпиполярной&amp;lt;ref name=&amp;quot;Epipolar&amp;quot;&amp;gt;Информация о эпиполярной геометрии[https://ru.qaz.wiki/wiki/Epipolar_geometry]&amp;lt;/ref&amp;gt; линии. Соответственно, для упрощения поиска изображения выравнивают так, чтобы все эпиполярные линии были параллельны сторонам изображения (обычно горизонтальны). Более того, изображения выравнивают так, чтобы для точки с координатами &amp;lt;math&amp;gt;(x_0, y_0)&amp;lt;/math&amp;gt; соответствующая ей эпиполярная линия задавалась уравнением &amp;lt;math&amp;gt;x = x_0&amp;lt;/math&amp;gt;. Тогда для каждой точки, соответствующую ей парную точку, нужно искать в той-же строчке на изображении со второй камеры. Такой процесс выравнивания изображений называют '''ректификацией''' (rectification).&lt;br /&gt;
&lt;br /&gt;
[[Файл:Stereo.png|thumb|300px| Рисунок 2. Результат построения карты смещений по двум картинкам.&amp;lt;ref name=&amp;quot;img2&amp;quot;&amp;gt; &amp;quot;Основы стереозрения&amp;quot; Рис. 3 [https://habr.com/ru/post/130300/]&amp;lt;/ref&amp;gt;]]&lt;br /&gt;
&lt;br /&gt;
После того, как изображения '''ректифицированы''', выполняют поиск соответствующих пар точек. Для каждого пикселя одной картинки с координатами &amp;lt;math&amp;gt;(x_0, y_0)&amp;lt;/math&amp;gt; выполняется поиск пикселя на другой картинке. При этом предполагается, что пиксель на второй картинке должен иметь координаты &amp;lt;math&amp;gt;(x_0 - d, y_0)&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;d&amp;lt;/math&amp;gt; — величина называемая смещением. Поиск соответствующего пикселя выполняется путем вычисления максимума функции отклика, в качестве которой может выступать, например, [[Корреляция случайных величин|корреляция]] окрестностей пикселей. В результате получается карта смещений, пример которой приведен на рис. 2. &lt;br /&gt;
&lt;br /&gt;
Собственно значения глубины обратно пропорциональны величине смещения пикселей.&lt;br /&gt;
&lt;br /&gt;
== Использование нейронных сетей ==&lt;br /&gt;
&lt;br /&gt;
Существует множество методов, использующих нейронные сети. Приведём пару примеров таких решений.&lt;br /&gt;
&lt;br /&gt;
=== Построение с помощью свёрточных нейронных сетей ===&lt;br /&gt;
&lt;br /&gt;
Используем [[Сверточные нейронные сети|сверточные нейронные сети]] для построения карты глубины следующим образом&lt;br /&gt;
&amp;lt;ref name=&amp;quot;cnn_rew&amp;quot;&amp;gt; Xiaobai Ma, Zhenglin Geng, Zhi Bie &amp;quot;Depth Estimation from Single Image Using CNN-Residual Network&amp;quot; [http://cs231n.stanford.edu/reports/2017/pdfs/203.pdf]&amp;lt;/ref&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
*  '''Создаем карту смещений''': используя два изображения с камер, близко расположенных друг к другу, создаем карту различий, точно так же как в методе построения по стереопаре.&lt;br /&gt;
&lt;br /&gt;
* '''Ищем реальную карту глубины для обучения''': с помощью карты смещений, можем построить карту глубины &amp;lt;math&amp;gt;y&amp;lt;/math&amp;gt; вышеописанным способом. Также допустимы другие способы построения карты глубины для обучения нейронной сети.&lt;br /&gt;
&lt;br /&gt;
*  '''Функция потерь''': определим [[Функция потерь и эмпирический риск|функцию потерь]], для предсказанной карты &amp;lt;math&amp;gt;\hat y&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;d_i = log( y_i) - log (\hat y_i)&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;\lambda \in [0, 1]&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;n &amp;lt;/math&amp;gt; - количество пикселей.&amp;lt;math&amp;gt;L(y, \hat y) =  \frac{1}{n} \sum\limits_{i} d^2_i - \frac{\lambda}{n^2}(\sum\limits_{i} d_i)^2&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;y_i&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;\hat y_i&amp;lt;/math&amp;gt; это i пискель для для реальной карты глубин и для предсказанной карты, соответственно. Гиперпараметр &amp;lt;math&amp;gt;\lambda&amp;lt;/math&amp;gt;, нужен для того, чтобы функция потерь меньше росла при большом количестве пикселей, предсказание для которых достаточно близко к реальному. Например, если &amp;lt;math&amp;gt;\lambda = 0&amp;lt;/math&amp;gt;, то мы просто придём к оптимизации в L2 для &amp;lt;math&amp;gt;d_i&amp;lt;/math&amp;gt;, т.е. &amp;lt;math&amp;gt;L(y, \hat y) =  \frac{1}{n} \sum\limits_{i} d^2_i &amp;lt;/math&amp;gt;.&amp;lt;ref name=&amp;quot;loss&amp;quot;&amp;gt;David Eigen, Christian Puhrsch, Rob Fergus &amp;quot;Depth Map Prediction from a Single Imageusing a Multi-Scale Deep Network&amp;quot; стр. 5&amp;lt;/ref&amp;gt; &lt;br /&gt;
&lt;br /&gt;
* '''Обучение свёрточной нейронной сети''': далее идёт обычное обучение нейронной сети по карте различий путем обратного распространения ошибки, оптимизируя заданную выше функцию потерь.&lt;br /&gt;
&lt;br /&gt;
В итоге, по обученной нейронной сети мы можем создавать карту глубины, не проводя расчётов для поиска карт смещения и имея только изображение объекта или пространства. &amp;lt;ref name=&amp;quot;cnn&amp;quot;&amp;gt;Реализация, основанная на свёрточных нейронных сетях [https://www.kaggle.com/kmader/cnn-for-generating-depth-maps-from-rgb-images]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Также возможно использование усложнённых архитектур свёрточных нейронных сетей типа '''DenseNet'''.&lt;br /&gt;
&lt;br /&gt;
'''DenseNet'''&amp;lt;ref name=&amp;quot;DenseNet&amp;quot;&amp;gt;Оригинальная статья описывающая DenseNet [https://arxiv.org/abs/1611.09326]&amp;lt;/ref&amp;gt; {{---}} это свёрточная нейронные сеть, в которой выход каждого из слоев подаётся на вход всем слоям, лежащих ниже.&lt;br /&gt;
&lt;br /&gt;
=== Построение с помощью капсульных нейронных сетей ===&lt;br /&gt;
&lt;br /&gt;
Свёрточные нейронные сети способны регистрировать только наличие какого-либо объекта на картинке, не кодируя его ориентацию и положение. Но '''капсульные нейронные сети''' (англ. Capsule Neural Network) лишены этого недостатка.&lt;br /&gt;
&lt;br /&gt;
[[Файл:capsnet.jpg|thumb|400px| Рисунок 3. Структура капсульной нейронной сети &amp;lt;ref name=&amp;quot;img&amp;quot;&amp;gt; &amp;quot;Design and Investigation of Capsule Networks for Sentence Classification&amp;quot; Figure 2. [https://www.mdpi.com/2076-3417/9/11/2200/htm]&amp;lt;/ref&amp;gt;.]]&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Капсульная нейронная сеть&amp;quot; состоит из капсул или групп нейронов, чтобы идентифицировать закономерности в изображении. Эта информация поступает в виде векторов, содержащих ориентацию и положение узоров на изображении, которое затем принимается капсулами более высокого уровня. Капсулы более высокого уровня обрабатывают эту информацию из нескольких капсул более низкого уровня и впоследствии выдают прогноз. Капсулы одного уровня не имеют связей друг с другом и вычисляют информацию независимо друг от друга. Капсулы образуются путем разделения выходных данных из свёрточного слоя. Мы делим наш трехмерный вектор на капсулы методом &amp;quot;нарезания&amp;quot; таким образом, чтобы в каждой капсуле была информация о каждом пикселе, т.е. по трехмерной координате.&lt;br /&gt;
 &lt;br /&gt;
Состояние нейронов капсульной нейронной сети внутри изображения фиксирует свойство области или объекта внутри изображения: его положение и ориентацию.&lt;br /&gt;
&lt;br /&gt;
Использование капсульной нейронной сети аналогично использованию обычных свёрточных сетей, описанному выше. &lt;br /&gt;
В целом, данная сеть показывает более точные результаты предсказания глубины.&lt;br /&gt;
&lt;br /&gt;
=== Построение с помощью PlanetNet ===&lt;br /&gt;
&lt;br /&gt;
Так же есть архитектуры, решающие данную задачу и без обучения на карте смещений, построенной с помощью двух изображений. Одной из таких является '''PlaneNet'''. &lt;br /&gt;
&lt;br /&gt;
'''PlaneNet'''&amp;lt;ref name=&amp;quot;planetNet&amp;quot;&amp;gt; Chen Liu, Jimei Yang, Duygu Ceylan, Ersin Yumer, Yasutaka Furukawa &amp;quot;PlaneNet: Piece-wise Planar Reconstruction from a Single RGB Image&amp;quot; [https://arxiv.org/abs/1804.06278v1]&amp;lt;/ref&amp;gt; {{---}} глубокая нейронная сеть, построенная на расширенных остаточных сетях (aнгл. Dilated Residual Networks или DRN)&amp;lt;ref name=&amp;quot;drn&amp;quot;&amp;gt; Fisher Yu, Vladlen Koltun, Thomas Funkhouser &amp;quot;Dilated Residual Networks&amp;quot; [https://arxiv.org/abs/1705.09914]&amp;lt;/ref&amp;gt;. Она получает карту глубин путем композиции выходов трех подзадач:&lt;br /&gt;
&lt;br /&gt;
[[Файл:plane_net.png|thumb|500px| Рисунок 4. Прогнозируемые PlaneNet параметры по одной rgb картинке: cегметация плоскости, параметры плоскостей, неплоская карта глубины&amp;lt;ref name=&amp;quot;img4&amp;quot;&amp;gt; Chen Liu, Jimei Yang, Duygu Ceylan, Ersin Yumer, Yasutaka Furukawa &amp;quot;PlaneNet: Piece-wise Planar Reconstruction from a Single RGB Image&amp;quot; Figure 2.&amp;lt;/ref&amp;gt;.]]&lt;br /&gt;
&lt;br /&gt;
* '''Параметры плоскостей''': пытаемся предсказать количество плоскостей K, а после ищем на изображение K плоских поверхностей, каждая поверхность задаётся тремя параметрами: нормальная, прямая и сдвиг.&lt;br /&gt;
&lt;br /&gt;
* [[Сегментация изображений|'''Сегментация плоскости''']]: ищем группы пикселей, каждая из которых характеризует один смысловой объект.&lt;br /&gt;
&lt;br /&gt;
* '''Неплоская карта глубины''': ищем одно-канальную (или неплоскую) карту глубины, то есть карту глубины, где каждый пиксель, либо на глубине 0, либо на глубине 1.&lt;br /&gt;
&lt;br /&gt;
== См. также ==&lt;br /&gt;
&lt;br /&gt;
* [[Компьютерное зрение]]&lt;br /&gt;
&lt;br /&gt;
* [[Оценка положения]]&lt;br /&gt;
&lt;br /&gt;
* [[Задача нахождения объектов на изображении]]&lt;br /&gt;
&lt;br /&gt;
== Примечания ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Источники информации ==&lt;br /&gt;
&lt;br /&gt;
* Р.А. Чугунов, А.Д. Кульневич, С.В. Аксенов &amp;quot;Методика построения карт глубины стереоизображения с помощью капсульной нейронной сети&amp;quot; [https://cyberleninka.ru/article/n/metodika-postroeniya-kart-glubiny-stereoizobrazheniya-s-pomoschyu-kapsulnoy-neyronnoy-seti/viewer]&lt;br /&gt;
&lt;br /&gt;
* Alexey Kurakin &amp;quot;Основы стереозрения&amp;quot; [https://habr.com/ru/post/130300/]&lt;br /&gt;
&lt;br /&gt;
* Dmitriy Vatolin &amp;quot;Камеры глубины — тихая революция&amp;quot; [https://habr.com/ru/post/457524/]&lt;br /&gt;
&lt;br /&gt;
* Ibraheem Alhashim, Peter Wonka &amp;quot;High Quality Monocular Depth Estimation via Transfer Learning&amp;quot; [https://arxiv.org/pdf/1812.11941.pdf]&lt;br /&gt;
&lt;br /&gt;
*  David Eigen, Christian Puhrsch, Rob Fergus &amp;quot;Depth Map Prediction from a Single Imageusing a Multi-Scale Deep Network [https://arxiv.org/pdf/1406.2283.pdf]&lt;br /&gt;
&lt;br /&gt;
* Sunil Prakash, Gaelan Gu &amp;quot;Simultaneous Localization And Mapping with depth Prediction using Capsule Networks for UAVs&amp;quot; [https://arxiv.org/pdf/1808.05336.pdf]&lt;/div&gt;</summary>
		<author><name>Frak</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9A%D0%B0%D1%80%D1%82%D0%B0_%D0%B3%D0%BB%D1%83%D0%B1%D0%B8%D0%BD%D1%8B&amp;diff=79634</id>
		<title>Карта глубины</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9A%D0%B0%D1%80%D1%82%D0%B0_%D0%B3%D0%BB%D1%83%D0%B1%D0%B8%D0%BD%D1%8B&amp;diff=79634"/>
				<updated>2021-01-21T15:00:55Z</updated>
		
		<summary type="html">&lt;p&gt;Frak: /* Построение с помощью свёрточных нейронных сетей */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Карта глубины''' (англ. depth map) — это изображение, где для каждого пикселя вместо цвета хранится его расстояние до камеры.&amp;lt;ref name=&amp;quot;def&amp;quot;&amp;gt;Alexey Kurakin &amp;quot;Основы стереозрения&amp;quot;[https://habr.com/ru/post/130300/]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В компьютерной 3D-графике и [[Компьютерное зрение|компьютерном зрении]] карта глубины представляет собой изображение или канал изображения, содержащий информацию о расстоянии поверхностей объектов сцены от точки обзора. &lt;br /&gt;
&lt;br /&gt;
== Мотивация ==&lt;br /&gt;
&lt;br /&gt;
Карта глубины изображения содержит в себе информацию о расстоянии между различными объектами или частями объектов, представленных на данном изображении. Эта информация может быть полезна во многих областях. &lt;br /&gt;
 &lt;br /&gt;
* Для создания 3D-сенсеров. Они способны строить трёхмерную картину своего окружения, используются для [[Оценка положения|ориентации]] автономного робота в пространстве.&lt;br /&gt;
&lt;br /&gt;
* Для систем, использующих технологии дополненной и виртуальной реальности. Например, камеры, которые фиксируют действия пользователя в видеоиграх с технологией виртуальной реальности.&lt;br /&gt;
&lt;br /&gt;
* В беспилотных автомобилях, которые также используют карты глубин для ориентации на дороге.&lt;br /&gt;
&lt;br /&gt;
* Для обработки фотографий. Например, карты глубин используют для размытия фона на фотографии, чтобы добиться более чёткого выделения человека&amp;lt;ref name=&amp;quot;expls&amp;quot;&amp;gt;Примеры из &amp;quot;Research Guide for Depth Estimation with Deep Learning&amp;quot;[https://www.kdnuggets.com/2019/11/research-guide-depth-estimation-deep-learning.html]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Методы построения карты глубины ==&lt;br /&gt;
&lt;br /&gt;
Карта глубины может быть получена с помощью '''специальной камеры глубины''', по '''стереопаре изображений''', а также с помощью [[Нейронные сети, перцептрон|'''нейронных сетей''']].&lt;br /&gt;
&lt;br /&gt;
== Построение с помощью специальных камер глубин == &lt;br /&gt;
&lt;br /&gt;
[[Файл:ToF.jpg|thumb|250px| Рисунок 1. Пример работы ToF-камеры.]]&lt;br /&gt;
&lt;br /&gt;
* '''ToF-камеры''' (англ. Time of Flight). Данный метод основан на измерении задержки света. Фактически нам нужно измерить задержку, с которой свет возвращается в каждую точку. Имея несколько сенсоров с разным временем накопления заряда и зная сдвиг по времени относительно источника для каждого сенсора и снятой яркости вспышки, мы можем рассчитать сдвиг и, соответственно, расстояние до объекта. Причем, чем больше сенсоров задействовано, тем выше точность метода.&lt;br /&gt;
&lt;br /&gt;
* '''Структурированные световые камеры''' (aнгл. Structured light camera). Это один из самых старых и дешёвых способов построить карту глубин. Ставим проектор, который создает, например, горизонтальные (а потом и вертикальные) полоски и рядом камеру, которая снимает картину с полосками. В некоторых вариантах используется псевдослучайный набор точек (MS Kinect {{---}} бесконтактный сенсорный игровой контроллер, для консолей Xbox 360, Xbox One и персональных компьютеров под управлением ОС Windows&amp;lt;ref name=&amp;quot;kinect&amp;quot;&amp;gt; О MicriSoft Kinect [https://en.wikipedia.org/wiki/Kinect]&amp;lt;/ref&amp;gt;). Проекторы обычно работают в инфракрасном спектре, чтобы не мешать пользователям. Поскольку камера и проектор смещены друг относительно друга, то и полоски также будут смещаться пропорционально расстоянию до объекта. Измеряя это смещение, мы можем рассчитывать расстояние до объекта. Вполне понятны сложности, с которыми можно столкнуться при использовании этого метода: это необходимость настройки и калибровки проектора, и проблема того, что нам нужно относительно благоприятное освещение. К примеру, солнце может засветить полосы, и что-то распознать будет тяжело.&lt;br /&gt;
&lt;br /&gt;
== Построения карты глубины по стереопаре ==&lt;br /&gt;
&lt;br /&gt;
Идея, лежащая в основе построения карты глубины по '''стереопаре''', проста. Для каждой точки на одном изображении выполняется поиск [[Ключевые точки|парной ей точки]] на другом изображении. А по паре соответствующих точек можно выполнить [[Триангуляция полигонов (ушная + монотонная)|триангуляцию]] и определить координаты их [[Отображения|прообраза]] в трехмерном пространстве. Зная трехмерные координаты прообраза, глубина вычисляется как расстояние до плоскости камеры.&lt;br /&gt;
&lt;br /&gt;
Парную точку нужно искать на эпиполярной&amp;lt;ref name=&amp;quot;Epipolar&amp;quot;&amp;gt;Информация о эпиполярной геометрии[https://ru.qaz.wiki/wiki/Epipolar_geometry]&amp;lt;/ref&amp;gt; линии. Соответственно, для упрощения поиска изображения выравнивают так, чтобы все эпиполярные линии были параллельны сторонам изображения (обычно горизонтальны). Более того, изображения выравнивают так, чтобы для точки с координатами &amp;lt;math&amp;gt;(x_0, y_0)&amp;lt;/math&amp;gt; соответствующая ей эпиполярная линия задавалась уравнением &amp;lt;math&amp;gt;x = x_0&amp;lt;/math&amp;gt;. Тогда для каждой точки, соответствующую ей парную точку, нужно искать в той-же строчке на изображении со второй камеры. Такой процесс выравнивания изображений называют '''ректификацией''' (rectification).&lt;br /&gt;
&lt;br /&gt;
[[Файл:Stereo.png|thumb|300px| Рисунок 2. Результат построения карты смещений по двум картинкам.&amp;lt;ref name=&amp;quot;img2&amp;quot;&amp;gt; &amp;quot;Основы стереозрения&amp;quot; Рис. 3 [https://habr.com/ru/post/130300/]&amp;lt;/ref&amp;gt;]]&lt;br /&gt;
&lt;br /&gt;
После того, как изображения '''ректифицированы''', выполняют поиск соответствующих пар точек. Для каждого пикселя одной картинки с координатами &amp;lt;math&amp;gt;(x_0, y_0)&amp;lt;/math&amp;gt; выполняется поиск пикселя на другой картинке. При этом предполагается, что пиксель на второй картинке должен иметь координаты &amp;lt;math&amp;gt;(x_0 - d, y_0)&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;d&amp;lt;/math&amp;gt; — величина называемая смещением. Поиск соответствующего пикселя выполняется путем вычисления максимума функции отклика, в качестве которой может выступать, например, [[Корреляция случайных величин|корреляция]] окрестностей пикселей. В результате получается карта смещений, пример которой приведен на рис. 2. &lt;br /&gt;
&lt;br /&gt;
Собственно значения глубины обратно пропорциональны величине смещения пикселей.&lt;br /&gt;
&lt;br /&gt;
== Использование нейронных сетей ==&lt;br /&gt;
&lt;br /&gt;
Существует множество методов, использующих нейронные сети. Приведём пару примеров таких решений.&lt;br /&gt;
&lt;br /&gt;
=== Построение с помощью свёрточных нейронных сетей ===&lt;br /&gt;
&lt;br /&gt;
Используем [[Сверточные нейронные сети|сверточные нейронные сети]] для построения карты глубины следующим образом&lt;br /&gt;
&amp;lt;ref name=&amp;quot;cnn&amp;quot;&amp;gt; Xiaobai Ma, Zhenglin Geng, Zhi Bie &amp;quot;Depth Estimation from Single Image Using CNN-Residual Network&amp;quot; [http://cs231n.stanford.edu/reports/2017/pdfs/203.pdf]&amp;lt;/ref&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
*  '''Создаем карту смещений''': используя два изображения с камер, близко расположенных друг к другу, создаем карту различий, точно так же как в методе построения по стереопаре.&lt;br /&gt;
&lt;br /&gt;
* '''Ищем реальную карту глубины для обучения''': с помощью карты смещений, можем построить карту глубины &amp;lt;math&amp;gt;y&amp;lt;/math&amp;gt; вышеописанным способом. Также допустимы другие способы построения карты глубины для обучения нейронной сети.&lt;br /&gt;
&lt;br /&gt;
*  '''Функция потерь''': определим [[Функция потерь и эмпирический риск|функцию потерь]], для предсказанной карты &amp;lt;math&amp;gt;\hat y&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;d_i = log( y_i) - log (\hat y_i)&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;\lambda \in [0, 1]&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;n &amp;lt;/math&amp;gt; - количество пикселей.&amp;lt;math&amp;gt;L(y, \hat y) =  \frac{1}{n} \sum\limits_{i} d^2_i - \frac{\lambda}{n^2}(\sum\limits_{i} d_i)^2&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;y_i&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;\hat y_i&amp;lt;/math&amp;gt; это i пискель для для реальной карты глубин и для предсказанной карты, соответственно. Гиперпараметр &amp;lt;math&amp;gt;\lambda&amp;lt;/math&amp;gt;, нужен для того, чтобы функция потерь меньше росла при большом количестве пикселей, предсказание для которых достаточно близко к реальному. Например, если &amp;lt;math&amp;gt;\lambda = 0&amp;lt;/math&amp;gt;, то мы просто придём к оптимизации в L2 для &amp;lt;math&amp;gt;d_i&amp;lt;/math&amp;gt;, т.е. &amp;lt;math&amp;gt;L(y, \hat y) =  \frac{1}{n} \sum\limits_{i} d^2_i &amp;lt;/math&amp;gt;.&amp;lt;ref name=&amp;quot;loss&amp;quot;&amp;gt;David Eigen, Christian Puhrsch, Rob Fergus &amp;quot;Depth Map Prediction from a Single Imageusing a Multi-Scale Deep Network&amp;quot; стр. 5&amp;lt;/ref&amp;gt; &lt;br /&gt;
&lt;br /&gt;
* '''Обучение свёрточной нейронной сети''': далее идёт обычное обучение нейронной сети по карте различий путем обратного распространения ошибки, оптимизируя заданную выше функцию потерь.&lt;br /&gt;
&lt;br /&gt;
В итоге, по обученной нейронной сети мы можем создавать карту глубины, не проводя расчётов для поиска карт смещения и имея только изображение объекта или пространства. &amp;lt;ref name=&amp;quot;cnn&amp;quot;&amp;gt;Реализация, основанная на свёрточных нейронных сетях [https://www.kaggle.com/kmader/cnn-for-generating-depth-maps-from-rgb-images]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Также возможно использование усложнённых архитектур свёрточных нейронных сетей типа '''DenseNet'''.&lt;br /&gt;
&lt;br /&gt;
'''DenseNet'''&amp;lt;ref name=&amp;quot;DenseNet&amp;quot;&amp;gt;Оригинальная статья описывающая DenseNet [https://arxiv.org/abs/1611.09326]&amp;lt;/ref&amp;gt; {{---}} это свёрточная нейронные сеть, в которой выход каждого из слоев подаётся на вход всем слоям, лежащих ниже.&lt;br /&gt;
&lt;br /&gt;
=== Построение с помощью капсульных нейронных сетей ===&lt;br /&gt;
&lt;br /&gt;
Свёрточные нейронные сети способны регистрировать только наличие какого-либо объекта на картинке, не кодируя его ориентацию и положение. Но '''капсульные нейронные сети''' (англ. Capsule Neural Network) лишены этого недостатка.&lt;br /&gt;
&lt;br /&gt;
[[Файл:capsnet.jpg|thumb|400px| Рисунок 3. Структура капсульной нейронной сети &amp;lt;ref name=&amp;quot;img&amp;quot;&amp;gt; &amp;quot;Design and Investigation of Capsule Networks for Sentence Classification&amp;quot; Figure 2. [https://www.mdpi.com/2076-3417/9/11/2200/htm]&amp;lt;/ref&amp;gt;.]]&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Капсульная нейронная сеть&amp;quot; состоит из капсул или групп нейронов, чтобы идентифицировать закономерности в изображении. Эта информация поступает в виде векторов, содержащих ориентацию и положение узоров на изображении, которое затем принимается капсулами более высокого уровня. Капсулы более высокого уровня обрабатывают эту информацию из нескольких капсул более низкого уровня и впоследствии выдают прогноз. Капсулы одного уровня не имеют связей друг с другом и вычисляют информацию независимо друг от друга. Капсулы образуются путем разделения выходных данных из свёрточного слоя. Мы делим наш трехмерный вектор на капсулы методом &amp;quot;нарезания&amp;quot; таким образом, чтобы в каждой капсуле была информация о каждом пикселе, т.е. по трехмерной координате.&lt;br /&gt;
 &lt;br /&gt;
Состояние нейронов капсульной нейронной сети внутри изображения фиксирует свойство области или объекта внутри изображения: его положение и ориентацию.&lt;br /&gt;
&lt;br /&gt;
Использование капсульной нейронной сети аналогично использованию обычных свёрточных сетей, описанному выше. &lt;br /&gt;
В целом, данная сеть показывает более точные результаты предсказания глубины.&lt;br /&gt;
&lt;br /&gt;
=== Построение с помощью PlanetNet ===&lt;br /&gt;
&lt;br /&gt;
Так же есть архитектуры, решающие данную задачу и без обучения на карте смещений, построенной с помощью двух изображений. Одной из таких является '''PlaneNet'''. &lt;br /&gt;
&lt;br /&gt;
'''PlaneNet'''&amp;lt;ref name=&amp;quot;planetNet&amp;quot;&amp;gt; Chen Liu, Jimei Yang, Duygu Ceylan, Ersin Yumer, Yasutaka Furukawa &amp;quot;PlaneNet: Piece-wise Planar Reconstruction from a Single RGB Image&amp;quot; [https://arxiv.org/abs/1804.06278v1]&amp;lt;/ref&amp;gt; {{---}} глубокая нейронная сеть, построенная на расширенных остаточных сетях (aнгл. Dilated Residual Networks или DRN)&amp;lt;ref name=&amp;quot;drn&amp;quot;&amp;gt; Fisher Yu, Vladlen Koltun, Thomas Funkhouser &amp;quot;Dilated Residual Networks&amp;quot; [https://arxiv.org/abs/1705.09914]&amp;lt;/ref&amp;gt;. Она получает карту глубин путем композиции выходов трех подзадач:&lt;br /&gt;
&lt;br /&gt;
[[Файл:plane_net.png|thumb|500px| Рисунок 4. Прогнозируемые PlaneNet параметры по одной rgb картинке: cегметация плоскости, параметры плоскостей, неплоская карта глубины&amp;lt;ref name=&amp;quot;img4&amp;quot;&amp;gt; Chen Liu, Jimei Yang, Duygu Ceylan, Ersin Yumer, Yasutaka Furukawa &amp;quot;PlaneNet: Piece-wise Planar Reconstruction from a Single RGB Image&amp;quot; Figure 2.&amp;lt;/ref&amp;gt;.]]&lt;br /&gt;
&lt;br /&gt;
* '''Параметры плоскостей''': пытаемся предсказать количество плоскостей K, а после ищем на изображение K плоских поверхностей, каждая поверхность задаётся тремя параметрами: нормальная, прямая и сдвиг.&lt;br /&gt;
&lt;br /&gt;
* [[Сегментация изображений|'''Сегментация плоскости''']]: ищем группы пикселей, каждая из которых характеризует один смысловой объект.&lt;br /&gt;
&lt;br /&gt;
* '''Неплоская карта глубины''': ищем одно-канальную (или неплоскую) карту глубины, то есть карту глубины, где каждый пиксель, либо на глубине 0, либо на глубине 1.&lt;br /&gt;
&lt;br /&gt;
== См. также ==&lt;br /&gt;
&lt;br /&gt;
* [[Компьютерное зрение]]&lt;br /&gt;
&lt;br /&gt;
* [[Оценка положения]]&lt;br /&gt;
&lt;br /&gt;
* [[Задача нахождения объектов на изображении]]&lt;br /&gt;
&lt;br /&gt;
== Примечания ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Источники информации ==&lt;br /&gt;
&lt;br /&gt;
* Р.А. Чугунов, А.Д. Кульневич, С.В. Аксенов &amp;quot;Методика построения карт глубины стереоизображения с помощью капсульной нейронной сети&amp;quot; [https://cyberleninka.ru/article/n/metodika-postroeniya-kart-glubiny-stereoizobrazheniya-s-pomoschyu-kapsulnoy-neyronnoy-seti/viewer]&lt;br /&gt;
&lt;br /&gt;
* Alexey Kurakin &amp;quot;Основы стереозрения&amp;quot; [https://habr.com/ru/post/130300/]&lt;br /&gt;
&lt;br /&gt;
* Dmitriy Vatolin &amp;quot;Камеры глубины — тихая революция&amp;quot; [https://habr.com/ru/post/457524/]&lt;br /&gt;
&lt;br /&gt;
* Ibraheem Alhashim, Peter Wonka &amp;quot;High Quality Monocular Depth Estimation via Transfer Learning&amp;quot; [https://arxiv.org/pdf/1812.11941.pdf]&lt;br /&gt;
&lt;br /&gt;
*  David Eigen, Christian Puhrsch, Rob Fergus &amp;quot;Depth Map Prediction from a Single Imageusing a Multi-Scale Deep Network [https://arxiv.org/pdf/1406.2283.pdf]&lt;br /&gt;
&lt;br /&gt;
* Sunil Prakash, Gaelan Gu &amp;quot;Simultaneous Localization And Mapping with depth Prediction using Capsule Networks for UAVs&amp;quot; [https://arxiv.org/pdf/1808.05336.pdf]&lt;/div&gt;</summary>
		<author><name>Frak</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Plane_net.png&amp;diff=79376</id>
		<title>Файл:Plane net.png</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Plane_net.png&amp;diff=79376"/>
				<updated>2021-01-20T19:51:27Z</updated>
		
		<summary type="html">&lt;p&gt;Frak: Frak загрузил новую версию Файл:Plane net.png&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Frak</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9A%D0%B0%D1%80%D1%82%D0%B0_%D0%B3%D0%BB%D1%83%D0%B1%D0%B8%D0%BD%D1%8B&amp;diff=79373</id>
		<title>Карта глубины</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9A%D0%B0%D1%80%D1%82%D0%B0_%D0%B3%D0%BB%D1%83%D0%B1%D0%B8%D0%BD%D1%8B&amp;diff=79373"/>
				<updated>2021-01-20T19:48:46Z</updated>
		
		<summary type="html">&lt;p&gt;Frak: /* Построение с помощью PlanetNet */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Карта глубины''' (англ. depth map) — это изображение, на котором для каждого пикселя вместо цвета хранится его расстояние до камеры.&amp;lt;ref name=&amp;quot;def&amp;quot;&amp;gt;Alexey Kurakin &amp;quot;Основы стереозрения&amp;quot;[https://habr.com/ru/post/130300/]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В компьютерной 3D-графике и [[Компьютерное зрение|компьютерном зрении]] карта глубины представляет собой изображение или канал изображения, содержащий информацию о расстоянии поверхностей объектов сцены от точки обзора. &lt;br /&gt;
&lt;br /&gt;
== Мотивация ==&lt;br /&gt;
&lt;br /&gt;
Карта глубины изображения содержит в себе информацию о расстоянии между различными объектами или частями объектов, представленных на данном изображении. Эта информация может быть полезна во многих областях. &lt;br /&gt;
 &lt;br /&gt;
* Для создания 3D-сенсеров. Они способны строить трёхмерную картину своего окружения, используются для [[Оценка положения|ориентации]] автономного робота в пространстве.&lt;br /&gt;
&lt;br /&gt;
* Для систем, использующих технологии дополненной и виртуальной реальности. Например, камеры, которые фиксируют действия пользователя при игре в видеоигру, использующую технологию виртуальной реальности.&lt;br /&gt;
&lt;br /&gt;
* Нельзя не отметить, беспилотные автомобили, которые так же используют карты глубин для ориентации на дороге.&lt;br /&gt;
&lt;br /&gt;
* Для обработки фотографий. Например, карты глубин используют для размытия фона на фотографии, чтобы добиться более чёткого выделения на ней человека&amp;lt;ref name=&amp;quot;expls&amp;quot;&amp;gt;Примеры из &amp;quot;Research Guide for Depth Estimation with Deep Learning&amp;quot;[https://www.kdnuggets.com/2019/11/research-guide-depth-estimation-deep-learning.html]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Методы построения карты глубины ==&lt;br /&gt;
&lt;br /&gt;
Карта глубины может быть получена с помощью '''специальной камеры глубины''', по '''стереопаре изображений''', а также с помощью [[Нейронные сети, перцептрон|'''нейронных сетей''']].&lt;br /&gt;
&lt;br /&gt;
== Построение с помощью специальных камер глубин == &lt;br /&gt;
&lt;br /&gt;
[[Файл:ToF.jpg|thumb|250px| Рисунок 1. Пример работы ToF-камеры.]]&lt;br /&gt;
&lt;br /&gt;
* '''ToF-камеры''' (англ. Time of Flight). Данный метод основан на измерении задержки света. Фактически нам нужно измерить задержку, с которой свет возвращается в каждую точку. Либо, если у нас несколько сенсоров с разным временем накопления заряда, то, зная сдвиг по времени относительно источника для каждого сенсора и снятой яркости вспышки, мы можем рассчитать сдвиг и, соответственно, расстояние до объекта, причем увеличивая количество сенсоров — увеличиваем точность.&lt;br /&gt;
&lt;br /&gt;
* '''Структурированные световые камеры''' (aнгл. Structured light camera). Это один из самых старых и дешёвых способов построить карту глубин. Основная идея крайне проста. Ставим рядом проектор, который создает, например, горизонтальные (а потом вертикальные) полоски и рядом камеру, которая снимает картину с полосками. В некоторых вариантах используются псевдослучайный набор точек (MS Kinect {{---}} бесконтактный сенсорный игровой контроллер, для консолей Xbox 360, Xbox One и персональных компьютеров под управлением ОС Windows&amp;lt;ref name=&amp;quot;kinect&amp;quot;&amp;gt; О MicriSoft Kinect [https://en.wikipedia.org/wiki/Kinect]&amp;lt;/ref&amp;gt;.). Проекторы обычно работают в инфракрасном спектре, очевидно, чтобы не мешать пользователям. Поскольку камера и проектор смещены друг относительно друга, то и полоски также будут смещаться пропорционально расстоянию до объекта. Измеряя это смещение, мы можем рассчитывать расстояние до объекта. Вполне понятны проблемы, с которыми можно столкнуться при использовании этого метода: это необходимость настройки и калибровки проектора, и проблема того, что нам нужно относительно благоприятное освещение. К примеру, солнце может засветить полосы, и что-то распознать будет тяжело.&lt;br /&gt;
&lt;br /&gt;
== Построения карты глубины по стереопаре ==&lt;br /&gt;
&lt;br /&gt;
Идея, лежащая в основе построения карты глубины по '''стереопаре''', очень проста. Для каждой точки на одном изображении выполняется поиск [[Ключевые точки|парной ей точки]] на другом изображении. А по паре соответствующих точек можно выполнить [[Триангуляция полигонов (ушная + монотонная)|триангуляцию]] и определить координаты их [[Отображения|прообраза]] в трехмерном пространстве. Зная трехмерные координаты прообраза, глубина вычисляется как расстояние до плоскости камеры.&lt;br /&gt;
&lt;br /&gt;
Парную точку нужно искать на эпиполярной&amp;lt;ref name=&amp;quot;Epipolar&amp;quot;&amp;gt;Информация о эпиполярной геометрии[https://ru.qaz.wiki/wiki/Epipolar_geometry]&amp;lt;/ref&amp;gt; линии. Соответственно, для упрощения поиска изображения выравнивают так, чтобы все эпиполярные линии были параллельны сторонам изображения (обычно горизонтальны). Более того, изображения выравнивают так, чтобы для точки с координатами &amp;lt;math&amp;gt;(x_0, y_0)&amp;lt;/math&amp;gt; соответствующая ей эпиполярная линия задавалась уравнением &amp;lt;math&amp;gt;x = x_0&amp;lt;/math&amp;gt;. Тогда для каждой точки, соответствующую ей парную точку, нужно искать в той-же строчке на изображении со второй камеры. Такой процесс выравнивания изображений называют '''ректификацией''' (rectification).&lt;br /&gt;
&lt;br /&gt;
[[Файл:Stereo.png|thumb|300px| Рисунок 2. Результат построения карты смещений по 2 картинкам.&amp;lt;ref name=&amp;quot;img2&amp;quot;&amp;gt; &amp;quot;Основы стереозрения&amp;quot; Рис. 3 [https://habr.com/ru/post/130300/]&amp;lt;/ref&amp;gt;]]&lt;br /&gt;
&lt;br /&gt;
После того, как изображения '''ректифицированы''', выполняют поиск соответствующих пар точек. Для каждого пикселя одной картинки с координатами &amp;lt;math&amp;gt;(x_0, y_0)&amp;lt;/math&amp;gt; выполняется поиск пикселя на другой картинке. При этом предполагается, что пиксель на второй картинке должен иметь координаты &amp;lt;math&amp;gt;(x_0 - d, y_0)&amp;lt;/math&amp;gt;, где d — величина называемая смещением. Поиск соответствующего пикселя выполняется путем вычисления максимума функции отклика, в качестве которой может выступать, например, [[Корреляция случайных величин|корреляция]] окрестностей пикселей. В результате получается карта смещений, пример которой приведен на рис. 2. &lt;br /&gt;
&lt;br /&gt;
Собственно значения глубины обратно пропорциональны величине смещения пикселей.&lt;br /&gt;
&lt;br /&gt;
== Использование нейронных сетей ==&lt;br /&gt;
&lt;br /&gt;
Существует множество методов, использующих нейронные сети. Приведём пару примеров таких решений.&lt;br /&gt;
&lt;br /&gt;
=== Построение с помощью свёрточных нейронных сетей ===&lt;br /&gt;
&lt;br /&gt;
Используем [[Сверточные нейронные сети|сверточные нейронные сети]] для построения карты глубины следующим образом:&lt;br /&gt;
&lt;br /&gt;
*  '''Создаем карту смещений''': используя 2 изображения с камер, близко расположенных друг к другу, создаем карту различий, точно так же как в методе построения по стереопаре.&lt;br /&gt;
&lt;br /&gt;
* &amp;quot;Ищем реальную карту глубины для обучения&amp;quot;: с помощью карты смещений, можем построить карту глубины &amp;lt;math&amp;gt;y&amp;lt;/math&amp;gt; вышеописанным способом. Также допустимы другие способы построения карты глубины для обучения нейронной сети.&lt;br /&gt;
&lt;br /&gt;
*  '''Функция потерь''': определим [[Функция потерь и эмпирический риск|функцию потерь]], для предсказанной карты &amp;lt;math&amp;gt;\hat y&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;d_i = log( y_i) - log (\hat y_i)&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;\lambda \in [0, 1]&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;n &amp;lt;/math&amp;gt; - количество пикселей.&amp;lt;math&amp;gt;L(y, \hat y) =  \frac{1}{n} \sum\limits_{i} d^2_i - \frac{\lambda}{n^2}(\sum\limits_{i} d_i)^2&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;y_i&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;\hat y_i&amp;lt;/math&amp;gt; это i пискель для для реальной карты глубин и для предсказанной карты, соответственно. Гиперпараметр &amp;lt;math&amp;gt;\lambda&amp;lt;/math&amp;gt;, нужен для того, чтобы функция потерь меньше росла при большом количестве пикселей, предсказание для которых достаточно близко к реальному. Например, если &amp;lt;math&amp;gt;\lambda = 0&amp;lt;/math&amp;gt;, то мы просто придём к оптимизации в L2 для &amp;lt;math&amp;gt;d_i&amp;lt;/math&amp;gt;, т.е. &amp;lt;math&amp;gt;L(y, \hat y) =  \frac{1}{n} \sum\limits_{i} d^2_i &amp;lt;/math&amp;gt;.&amp;lt;ref name=&amp;quot;loss&amp;quot;&amp;gt;David Eigen, Christian Puhrsch, Rob Fergus &amp;quot;Depth Map Prediction from a Single Imageusing a Multi-Scale Deep Network&amp;quot; стр. 5&amp;lt;/ref&amp;gt; &lt;br /&gt;
&lt;br /&gt;
* '''Обучение свёрточной нейронной сети''': далее идёт обычное обучение нейронной сети по карте различий путем обратного распространения ошибки, оптимизируя заданную выше функцию потерь.&lt;br /&gt;
&lt;br /&gt;
В итоге, по обученной нейронной сети мы можем создавать карту глубины, не проводя расчётов для поиска карт смещения и имея только изображение объекта или пространства. &amp;lt;ref name=&amp;quot;cnn&amp;quot;&amp;gt;Реализация, основанная на свёрточных нейронных сетях [https://www.kaggle.com/kmader/cnn-for-generating-depth-maps-from-rgb-images]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Также возможно использование усложнённых архитектур свёрточных нейронных сетей типа '''DenseNet'''.&lt;br /&gt;
&lt;br /&gt;
'''DenseNet'''&amp;lt;ref name=&amp;quot;DenseNet&amp;quot;&amp;gt;Оригинальная статья описывающая DenseNet [https://arxiv.org/abs/1611.09326]&amp;lt;/ref&amp;gt; {{---}} это свёрточная нейронные сеть, в которой выход каждого из слоев подаётся на вход всем слоям, лежащих ниже.&lt;br /&gt;
&lt;br /&gt;
=== Построение с помощью капсульных нейронных сетей ===&lt;br /&gt;
&lt;br /&gt;
Свёрточные нейронные сети способны регистрировать только наличие какого-либо объекта на картинке, не кодируя его ориентацию и положение. Но '''капсульные нейронные сети''' (англ. Capsule Neural Network) лишены этого недостатка.&lt;br /&gt;
&lt;br /&gt;
[[Файл:capsnet.jpg|thumb|400px| Рисунок 3. Структура капсульной нейронной сети &amp;lt;ref name=&amp;quot;img&amp;quot;&amp;gt; &amp;quot;Design and Investigation of Capsule Networks for Sentence Classification&amp;quot; Figure 2. [https://www.mdpi.com/2076-3417/9/11/2200/htm]&amp;lt;/ref&amp;gt;.]]&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Капсульная нейронная сеть&amp;quot; состоит из капсул или групп нейронов, чтобы идентифицировать закономерности в изображении. Эта информация поступает в виде векторов, содержащих ориентацию и положение узоров на изображении, которое затем принимается капсулами более высокого уровня. Капсулы более высокого уровня обрабатывают эту информацию из нескольких капсул более низкого уровня и впоследствии выдают прогноз. Капсулы одного уровня не имеют связей друг с другом и вычисляют информацию независимо друг от друга. Капсулы образуются путем разделения выходных данных из свёрточного слоя. Мы делим наш трехмерный вектор на капсулы методом &amp;quot;нарезания&amp;quot; таким образом, чтобы в каждой капсуле была информация о каждом пикселе, т.е. по трехмерной координате.&lt;br /&gt;
 &lt;br /&gt;
Состояние нейронов капсульной нейронной сети внутри изображения фиксирует свойство области или объекта внутри изображения: его положение и ориентацию.&lt;br /&gt;
&lt;br /&gt;
Использование капсульной нейронной сети аналогично с использованию обычных свёрточных сетей, описанному выше. &lt;br /&gt;
В целом, данная сеть показывает более точные результаты предсказания глубины.&lt;br /&gt;
&lt;br /&gt;
=== Построение с помощью PlanetNet ===&lt;br /&gt;
&lt;br /&gt;
Так же есть архитектуры решающие данную задачу и без обучения на карте смещений, построенной с помощью 2 изображений. Одной из таких является '''PlaneNet'''. &lt;br /&gt;
&lt;br /&gt;
'''PlaneNet'''&amp;lt;ref name=&amp;quot;planetNet&amp;quot;&amp;gt; Chen Liu, Jimei Yang, Duygu Ceylan, Ersin Yumer, Yasutaka Furukawa &amp;quot;PlaneNet: Piece-wise Planar Reconstruction from a Single RGB Image&amp;quot; [https://arxiv.org/abs/1804.06278v1]&amp;lt;/ref&amp;gt; {{---}} глубокая нейронная сеть построеная на расширенных остаточных сетях (aнгл. Dilated Residual Networks или DRN)&amp;lt;ref name=&amp;quot;drn&amp;quot;&amp;gt; Fisher Yu, Vladlen Koltun, Thomas Funkhouser &amp;quot;Dilated Residual Networks&amp;quot; [https://arxiv.org/abs/1705.09914]&amp;lt;/ref&amp;gt;, она получает карту глубин путем композиции выходов 3 подзадач:&lt;br /&gt;
&lt;br /&gt;
[[Файл:plane_net.png|thumb|500px| Рисунок 4. Прогнозируемые PlaneNet параметры по одной rgb картинке: cегметация плоскости, параметры плоскостей, неплоская карта глубины&amp;lt;ref name=&amp;quot;img4&amp;quot;&amp;gt; Chen Liu, Jimei Yang, Duygu Ceylan, Ersin Yumer, Yasutaka Furukawa &amp;quot;PlaneNet: Piece-wise Planar Reconstruction from a Single RGB Image&amp;quot; Figure 2.&amp;lt;/ref&amp;gt;.]]&lt;br /&gt;
&lt;br /&gt;
* '''Параметры плоскостей''': пытается предсказать количество плоскостей K, а после ищем на изображение K плоских поверхностей, каждая поверхность задаётся тремя параметрами: нормальная прямая и сдвиг.&lt;br /&gt;
&lt;br /&gt;
* [[Сегментация изображений|'''Сегметация плоскости''']]: ищем группы пикселей, каждая из которых характеризует один смысловой объект.&lt;br /&gt;
&lt;br /&gt;
* '''Неплоская карта глубины''': ищем одно-канальную (или неплоскую) карту глубины, т.е есть карту глубины, где каждый пиксель, либо на глубине 0, либо на глубине 1.&lt;br /&gt;
&lt;br /&gt;
== См. также ==&lt;br /&gt;
&lt;br /&gt;
* [[Компьютерное зрение]]&lt;br /&gt;
&lt;br /&gt;
* [[Оценка положения]]&lt;br /&gt;
&lt;br /&gt;
* [[Задача нахождения объектов на изображении]]&lt;br /&gt;
&lt;br /&gt;
== Примечания ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Источники информации ==&lt;br /&gt;
&lt;br /&gt;
* Р.А. Чугунов, А.Д. Кульневич, С.В. Аксенов &amp;quot;Методика построения карт глубины стереоизображения с помощью капсульной нейронной сети&amp;quot; [https://cyberleninka.ru/article/n/metodika-postroeniya-kart-glubiny-stereoizobrazheniya-s-pomoschyu-kapsulnoy-neyronnoy-seti/viewer]&lt;br /&gt;
&lt;br /&gt;
* Alexey Kurakin &amp;quot;Основы стереозрения&amp;quot; [https://habr.com/ru/post/130300/]&lt;br /&gt;
&lt;br /&gt;
* Dmitriy Vatolin &amp;quot;Камеры глубины — тихая революция&amp;quot; [https://habr.com/ru/post/457524/]&lt;br /&gt;
&lt;br /&gt;
* Ibraheem Alhashim, Peter Wonka &amp;quot;High Quality Monocular Depth Estimation via Transfer Learning&amp;quot; [https://arxiv.org/pdf/1812.11941.pdf]&lt;br /&gt;
&lt;br /&gt;
*  David Eigen, Christian Puhrsch, Rob Fergus &amp;quot;Depth Map Prediction from a Single Imageusing a Multi-Scale Deep Network [https://arxiv.org/pdf/1406.2283.pdf]&lt;br /&gt;
&lt;br /&gt;
* Sunil Prakash, Gaelan Gu &amp;quot;Simultaneous Localization And Mapping with depth Prediction using Capsule Networks for UAVs&amp;quot; [https://arxiv.org/pdf/1808.05336.pdf]&lt;/div&gt;</summary>
		<author><name>Frak</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Plane_net.png&amp;diff=79372</id>
		<title>Файл:Plane net.png</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Plane_net.png&amp;diff=79372"/>
				<updated>2021-01-20T19:48:01Z</updated>
		
		<summary type="html">&lt;p&gt;Frak: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Frak</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:PlaneNet.jpg&amp;diff=79369</id>
		<title>Файл:PlaneNet.jpg</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:PlaneNet.jpg&amp;diff=79369"/>
				<updated>2021-01-20T19:44:52Z</updated>
		
		<summary type="html">&lt;p&gt;Frak: Frak загрузил новую версию Файл:PlaneNet.jpg&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Frak</name></author>	</entry>

	</feed>