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

Материал из Викиконспекты
Перейти к: навигация, поиск
(Источники информации)
(Метки: правка с мобильного устройства, правка из мобильной версии)
Строка 1: Строка 1:
'''Карта глубины''' (англ. depth map) — это изображение, на котором для каждого пикселя, вместо цвета, храниться его расстояние до камеры.<ref name="def">Alexey Kurakin "Основы стереозрения"[https://habr.com/ru/post/130300/]</ref>
+
'''Карта глубины''' (англ. depth map) — это изображение, на котором для каждого пикселя, вместо цвета, хранится его расстояние до камеры.<ref name="def">Alexey Kurakin "Основы стереозрения"[https://habr.com/ru/post/130300/]</ref>
  
 
В компьютерной 3D-графике и [[Компьютерное зрение|компьютерном зрении]] карта глубины представляет собой изображение или канал изображения, содержащий информацию о расстоянии поверхностей объектов сцены от точки обзора.  
 
В компьютерной 3D-графике и [[Компьютерное зрение|компьютерном зрении]] карта глубины представляет собой изображение или канал изображения, содержащий информацию о расстоянии поверхностей объектов сцены от точки обзора.  
Строка 10: Строка 10:
  
 
Карта глубины может быть получена с помощью '''специальной камеры глубины''', а так же может быть построена по '''стереопаре изображений''', а так же с помощью [[Нейронные сети, перцептрон|'''нейронных сетей''']].
 
Карта глубины может быть получена с помощью '''специальной камеры глубины''', а так же может быть построена по '''стереопаре изображений''', а так же с помощью [[Нейронные сети, перцептрон|'''нейронных сетей''']].
 
== Использование нейронных сетей ==
 
 
Существует множество решений данной проблемы, использующих нейроные сети, приведём пару примеров таких решений.
 
 
=== Построение с помощью капсульных нейронных сетей ===
 
  
 
== Построение с помощью специальных камер глубин ==  
 
== Построение с помощью специальных камер глубин ==  
Строка 37: Строка 31:
 
Собственно значения глубины обратно пропорциональны величине смещения пикселей.  
 
Собственно значения глубины обратно пропорциональны величине смещения пикселей.  
  
 +
== Использование нейронных сетей ==
 +
 +
Существует множество решений данной проблемы, использующих нейроные сети, приведём пару примеров таких решений.
 +
 +
=== Построение с помощью свёрточных нейронных сетей ===
  
 +
Используем [[Сверточные нейронные сети|сверточные нейронные сети]] для построения карты глубины следующим образом:
 +
 +
*  '''Создаем карту смещений''': Используя 2 изображения с камер, близко расположенных друг у другу, создаем карту различий <math>y</math>, точно так же как в методе построения по стереопаре.
 +
 +
*  '''Функция потерь''': определим [[Функция потерь и эмпирический риск|функцию потерь]], для предсказанной карты <math>\hat y</math>, math>d_i = log y_i - log \hat y_i</math>, <math>\lambda \in [0, 1]</math> и <math>n </math> - количество пикселей. Гиперпараметр <math>\lambda</math>, нужен для того, чтобы функция потерь меньше росла, при большом количестве пикселей, предсказание для которых достаточно близко к реальному. Например, если <math>\lambda = 0</math>, то мы просто придём к  оптимизации в [[Регуляризация|L2]].
 +
 +
<math>L(y, \hat y) =  \frac{1}{n} \sum\limits_{i} d^2_i - \frac{\lambda}{n^2}(\sum\limits_{i} d_i)^2</math>
 +
 +
* '''Обучение сверточной нейронной сети''': далее идёт обычное обучение нейронной сети по карте различий, путем обратного распространения ошибки оптимизируя, заданную выше функцию потерь.
 +
 +
 +
По итогу, по обученной нейронной сети, мы можем создавать карту глубины, не проводя расчётов для поиска, карт смещения, и имя только 1 изображения объекта или пространства.
 +
 +
=== Построение с помощью капсульных нейронных сетей ===
 +
 +
=== Построение с помощью DenseNet ===
 +
 +
'''DenseNet'''<ref name="DenseNet">Оригинальная статья описывающая DenseNet [https://arxiv.org/abs/1611.09326]</ref> - это свёрточная нейронные сеть, в которой выход каждого из слоев, подаётся на вход всем слоям, которые лежат ниже.
 +
 +
Принцип обучения будет тот же, что и в обычной свёрточной сети, но теперь мы попытаемся найти новую функцию потерь, которая минимизирует разницу значений глубины, а также компенсирует искажения высокочастотных деталей изображения.
  
 
== См. также ==
 
== См. также ==
Строка 58: Строка 77:
  
 
* Dmitriy Vatolin "Камеры глубины — тихая революция" [https://habr.com/ru/post/457524/]
 
* Dmitriy Vatolin "Камеры глубины — тихая революция" [https://habr.com/ru/post/457524/]
 +
 +
* Ibraheem Alhashim, Peter Wonka "High Quality Monocular Depth Estimation via Transfer Learning" [https://arxiv.org/pdf/1812.11941.pdf]
 +
 +
*  David Eigen, Christian Puhrsch, Rob Fergus "Depth Map Prediction from a Single Imageusing a Multi-Scale Deep Network [https://arxiv.org/pdf/1406.2283.pdf]

Версия 23:18, 18 января 2021

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

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

Мотивация

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

Построение с помощью DenseNet

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

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

См. также

Примечания

  1. Alexey Kurakin "Основы стереозрения"[1]
  2. Информация о эпиполярной геометрии[2]
  3. Оригинальная статья описывающая DenseNet [3]

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

  • Р.А. Чугунов, А.Д. Кульневич, С.В. Аксенов "Методика построения карт глубины стереоизображения с помощью капсульной нейронной сети" [4]
  • Alexey Kurakin "Основы стереозрения" [5]
  • Dmitriy Vatolin "Камеры глубины — тихая революция" [6]
  • Ibraheem Alhashim, Peter Wonka "High Quality Monocular Depth Estimation via Transfer Learning" [7]
  • David Eigen, Christian Puhrsch, Rob Fergus "Depth Map Prediction from a Single Imageusing a Multi-Scale Deep Network [8]