论文笔记:End-to-End Learnable Geometric Vision by Backpropagating PnP Optimization
本文针对传统 PnP 方法与深度学习的结合做了一些工作,整体思路比较简单,主要就是怎么把传统方法 PnP 的残差反向传播给神经网路,从而能够实现 End2End 的训练,以及无需给定数据关联下的计算(Blind PnP)。
1 Backpropagating a PnP solver (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}=\pi\left(\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 Constructing the constraint function 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 Forward and backward pass
我们首先重写 PnP 的函数,引入初始姿态 y^{(0)} :
\boldsymbol{y}=g\left(\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 Implementation notes
2 End-to-end learning with BPnP
2.1 Pose estimation
这一部分是描述一个已知地图 z 和相机内参 K ,根据观测的关键点坐标 x ,估计姿态 y 的过程,流程如下:
其 loss 用公式来描述:
l(\boldsymbol{x}, \boldsymbol{y})=\left\|\pi(\boldsymbol{z} \mid \boldsymbol{y}, \mathbf{K})-\pi\left(\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。
Figure 1 代表 h(I; \theta) = \theta
Figure 2 代表一个修改的 VGG11 网络
从这两个实验中,我们可以看到不论是否使用正则项,二者均可收敛,在 \lambda = 1 时二者均可以达到更好的收敛效果。
2.2 SfM with calibrated cameras
其中的 loss 定义如下:
l\left(\left\{\boldsymbol{y}^{(j)}\right\}_{j=1}^{N}, \boldsymbol{z}\right)=\sum_{j=1}^{N}\left\|\boldsymbol{x}^{(j)}-\pi\left(\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 Camera calibration
相机标定流程如下:
其中 loss 定义如下:
l(\mathbf{K}, \boldsymbol{y})=\|\boldsymbol{x}-\pi(\boldsymbol{z} \mid \boldsymbol{y}, \mathbf{K})\|_{2}^{2}\tag{17}
梯度推导如下:
3 Object pose estimation with BPnP
论文&源码
论文:https://arxiv.org/abs/1909.06043
源码:https://github.com/BoChenYS/BPnP
Video:https://www.youtube.com/watch?v=eYmoAAsiBEE