论文笔记:Конец-в-конец обучаемое геометрическое зрение с обратным распространением оптимизации 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}
Где:
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}
Где:
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}, тогда градиенты для каждого входа будут:
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}
Градиент вычисляется следующим образом:
3 Оценка позы объекта с BPnP
В конце авторы разработали процесс оценки позы объекта на основе BPnP:
Статья и исходный код
Статья: https://arxiv.org/abs/1909.06043
Исходный код: https://github.com/BoChenYS/BPnP
Видео: https://www.youtube.com/watch?v=eYmoAAsiBEE