论文笔记:Конец-в-конец обучаемое геометрическое зрение с обратным распространением оптимизации PnP

本文针对传统 PnP 方法与深度学习的结合做了一些工作,整体思路比较简单,主要就是怎么把传统方法 PnP 的残差反向传播给神经网路,从而能够实现 End2End 的训练,以及无需给定数据关联下的计算(Blind PnP)。

1 Обратное распространение решения PnP (BPnP)

Сначала опишем задачу PnP на языке математики.

Определим g как PnP solver, его выход y — это решение для 6DoF позы:

boldsymbol{y}=g(boldsymbol{x}, boldsymbol{z}, mathbf{K})tag{1}

Где x представляет собой 2D координаты наблюдаемых ключевых точек на изображении, z представляет собой 3D координаты точек в пространстве,  представляет собой отображение между ними, а K — это внутренние параметры камеры:

begin{array}{l}boldsymbol{x}=left[begin{array}{llll}boldsymbol{x}_{1}^{T} & boldsymbol{x}_{2}^{T} & ldots & boldsymbol{x}_{n}^{T}end{array}right]^{T} in mathbb{R}^{2 n times 1} \boldsymbol{z}=left[begin{array}{llll}boldsymbol{z}_{1}^{T} & boldsymbol{z}_{2}^{T} & ldots & boldsymbol{z}_{n}^{T}end{array}right]^{T} in mathbb{R}^{3 n times 1}end{array}tag{2}
На самом деле, решение PnP — это задача оптимизации:

boldsymbol{y}=underset{boldsymbol{y} in S E(3)}{arg min } sum_{i=1}^{n}left|boldsymbol{r}_{i}right|_{2}^{2}tag{3}
Где boldsymbol{pi}_{i}=pileft(boldsymbol{z}_{i} mid boldsymbol{y}, mathbf{K}right) — это функция проекции, а boldsymbol{r}_{i}=boldsymbol{x}_{i}-boldsymbol{pi}_{i} — это ошибка репроекции.

Это можно записать в сокращенной форме:

boldsymbol{y}=underset{boldsymbol{y} in S E(3)}{arg min } quad|boldsymbol{x}-boldsymbol{pi}|_{2}^{2}tag{4}
Где:

boldsymbol{pi}:=left[boldsymbol{pi}_{1}^{T}, ldots, boldsymbol{pi}_{n}^{T}right]^{T}tag{5}

1.1 Производная неявной функции

1.2 Построение функции ограничения f

Определим целевую функцию PnP как:

o(boldsymbol{x}, boldsymbol{y}, boldsymbol{z}, mathbf{K})=sum_{i=1}^{n}left|boldsymbol{r}_{i}right|_{2}^{2}tag{6}
Минимизируя целевую функцию, получаем:

left.frac{partial o(boldsymbol{x}, boldsymbol{y}, boldsymbol{z}, mathbf{K})}{partial boldsymbol{y}}right|_{boldsymbol{y}=g(boldsymbol{x}, boldsymbol{z}, mathbf{K})}=mathbf{0}tag{7}
Мы определяем:

f(boldsymbol{x}, boldsymbol{y}, boldsymbol{z}, mathbf{K})=left[f_{1}, ldots, f_{m}right]^{T}tag{8}
Где:

begin{aligned}f_{j} &=frac{partial o(boldsymbol{x}, boldsymbol{y}, boldsymbol{z}, mathbf{K})}{partial y_{j}} \&=2 sum_{i=1}^{n}leftlangleboldsymbol{r}_{i}, frac{partial boldsymbol{r}_{i}}{partial y_{j}}rightrangle \&=sum_{i=1}^{n}leftlangleboldsymbol{r}_{i}, boldsymbol{c}_{i j}rightrangle \boldsymbol{c}_{i j} &=-2 frac{partial boldsymbol{pi}_{i}}{partial y_{j}}end{aligned}tag{9}

1.3 Прямой и обратный проход

Сначала перепишем функцию PnP, введя начальную позу y^{(0)} :

boldsymbol{y}=gleft(boldsymbol{x}, boldsymbol{z}, mathbf{K}, boldsymbol{y}^{(0)}right)tag{10}
Согласно правилу дифференцирования неявной функции:

begin{aligned}frac{partial g}{partial boldsymbol{x}} &=-left[frac{partial f}{partial boldsymbol{y}}right]^{-1}left[frac{partial f}{partial boldsymbol{x}}right] \frac{partial g}{partial boldsymbol{z}} &=-left[frac{partial f}{partial boldsymbol{y}}right]^{-1}left[frac{partial f}{partial boldsymbol{z}}right] \frac{partial g}{partial mathbf{K}} &=-left[frac{partial f}{partial boldsymbol{y}}right]^{-1}left[frac{partial f}{partial mathbf{K}}right]end{aligned}tag{11}
Для нейронной сети мы можем получить градиент выхода nabla boldsymbol{y}, тогда градиенты для каждого входа будут:

begin{aligned}nabla boldsymbol{x} &=left[frac{partial g}{partial boldsymbol{x}}right]^{T} nabla boldsymbol{y} \nabla boldsymbol{z} &=left[frac{partial g}{partial boldsymbol{z}}right]^{T} nabla boldsymbol{y} \nabla mathbf{K} & =left[frac{partial g}{partial mathbf{K}}right]^{T} nabla boldsymbol{y}end{aligned}tag{12}

1.4 Заметки по реализации

2 Обучение end-to-end с BPnP

2.1 Оценка позы

Эта часть описывает процесс оценки позы y на основе известных карты z и внутренних параметров камеры K, а также наблюдаемых координат ключевых точек x. Процесс выглядит следующим образом:

Функция потерь описывается следующим образом:

l(boldsymbol{x}, boldsymbol{y})=left|pi(boldsymbol{z} mid boldsymbol{y}, mathbf{K})-pileft(boldsymbol{z} mid boldsymbol{y}^{*}, mathbf{K}right)right|_{2}^{2}+lambda R(boldsymbol{x}, boldsymbol{y})tag{13}

В этом процессе важное обновление градиента вычисляется следующим образом:

frac{partial ell}{partial boldsymbol{theta}}=frac{partial l}{partial boldsymbol{y}} frac{partial g}{partial boldsymbol{x}} frac{partial h}{partial boldsymbol{theta}}+frac{partial l}{partial boldsymbol{x}} frac{partial h}{partial boldsymbol{theta}}tag{14}

На рисунке ниже показан процесс сходимости в двух случаях, где в первой строке lambda = 1, а во второй строке lambda = 0.

Рисунок 1 представляет h(I; theta) = theta

Рисунок 2 представляет модифицированную сеть VGG11

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

2.2 SfM с откалиброванными камерами

Эта часть описывает:

Функция потерь определяется следующим образом:

lleft(left{boldsymbol{y}^{(j)}right}_{j=1}^{N}, boldsymbol{z}right)=sum_{j=1}^{N}left|boldsymbol{x}^{(j)}-pileft(boldsymbol{z}^{(j)} mid boldsymbol{y}^{(j)}, mathbf{K}right)right|_{2}^{2}tag{15}
Градиент в процессе вычисляется следующим образом:

frac{partial ell}{partial boldsymbol{theta}}=sum_{j=1}^{N}left(frac{partial l}{partial boldsymbol{z}^{(j)}} frac{partial boldsymbol{z}^{(j)}}{partial boldsymbol{theta}}+frac{partial l}{partial boldsymbol{y}^{(j)}} frac{partial boldsymbol{y}^{(j)}}{partial boldsymbol{z}^{(j)}} frac{partial boldsymbol{z}^{(j)}}{partial boldsymbol{theta}}right)tag{16}
На рисунке ниже показан процесс сходимости для SfM:

2.3 Калибровка камеры

Процесс калибровки камеры выглядит следующим образом:

Функция потерь определяется следующим образом:

l(mathbf{K}, boldsymbol{y})=|boldsymbol{x}-pi(boldsymbol{z} mid boldsymbol{y}, mathbf{K})|_{2}^{2}tag{17}
Градиент вычисляется следующим образом:

frac{partial ell}{partial boldsymbol{theta}}=frac{partial l}{partial mathbf{K}} frac{partial mathbf{K}}{partial boldsymbol{theta}}+frac{partial l}{partial boldsymbol{y}} frac{partial g}{partial mathbf{K}} frac{partial mathbf{K}}{partial boldsymbol{theta}}tag{18}

3 Оценка позы объекта с BPnP

В конце авторы разработали процесс оценки позы объекта на основе BPnP:

Статья и исходный код

Статья: https://arxiv.org/abs/1909.06043
Исходный код: https://github.com/BoChenYS/BPnP
Видео: https://www.youtube.com/watch?v=eYmoAAsiBEE

Add a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *