【论文笔记】视觉重定位 PixLoc || Back to the Feature: Learning Robust Camera Localization from Pixels to Pose

本文提出了基于metric learning 的视觉重定位方法,PixLoc。只需要给定一张查询图像和场景的三维模型,以及具有先验位姿的参考图像,即可进行重定位。这种将模型参数与场景几何分离开来的度量学习方法,使得PixLoc能够轻易的泛化到任意场景中。

视觉定位可以被分为三步:

  1. 估计场景中的大致位姿
  2. 提取鲁棒不变的特征
  3. 回归精确的位姿估计值或者场景坐标估计值

其中步骤1,2不受限于某一特定场景,通过图像检索可以解决1,现有的CNN可以提取鲁棒的特征,解决了2。目前步骤3,即位姿估计是通过经典几何方法完成的(特征匹配、图像对齐等),而这些方法均不可微。本文专注于如何提取鲁棒、通用的特征点, 使得位姿估计步骤能够做到和场景无关。通过可微的几何估计步骤将位姿估计模块纳入到网络训练过程中,PixLoc能够直接通过位姿误差损失对特征进行监督学习。

论文介绍:PixLoc

已知数据:查询图像,三维场景模型(点云),参考图像序列(多个)
输出:6-Dof 位姿
在这里插入图片描述

1. Localization as image alignment

Image Representation:

本文对查询图像和参考图像,构建特征金字塔,如 l l l层的特征图: F l ∈ R W l × H l × D l \mathbf{F}^{l} \in \mathbb{R}^{W_{l} \times H_{l} \times D_{l}} FlRWl×Hl×Dl, 最后对每个通道的特征进行L2正则化,提升不同数据集下的特征稳定性。

Direct alignment:

通过最小化查询图像和参考图像之间的差异进行对齐。将三维点投影到参考图像中,并根据预测的位姿变换到查询图像中,计算插值后对应像素位置的特征残差:
r k i = F q l [ p q i ] − F k l [ p k i ] ∈ R D p q i = Π ( R P i + t ) \mathbf{r}_{k}^{i}=\mathbf{F}_{q}^{l}\left[\mathbf{p}_{q}^{i}\right]-\mathbf{F}_{k}^{l}\left[\mathbf{p}_{k}^{i}\right] \in \mathbb{R}^{D} \\ \mathbf{p}_{q}^{i}=\Pi\left(\mathbf{R} \mathbf{P}_{i}+\mathbf{t}\right) rki=Fql[pqi]Fkl[pki]RDpqi=Π(RPi+t)
最后的总损失是:
E l ( R , t ) = ∑ i , k w k i ρ ( ∥ r k i ∥ 2 2 ) ρ 为 鲁 棒 损 失 函 数 , w k i 为 逐 残 差 权 重 系 数 E_{l}(\mathbf{R}, \mathbf{t})=\sum_{i, k} w_{k}^{i} \rho\left(\left\|\mathbf{r}_{k}^{i}\right\|_{2}^{2}\right)\\ \rho为鲁棒损失函数,w_k^i为逐残差权重系数 El(R,t)=i,kwkiρ(rki22)ρwki
然后使用LM算法,以位姿初值(R0,t0)为初始值,迭代优化该损失函数。

依次优化每一层特征,从L=1层开始(粗特征),优化下一层特征时使用上一层的结果作为初始值。
权重更新量的计算:
δ = − ( H + λ diag ⁡ ( H ) ) − 1 J ⊤ W r J i , k = ∂ r k i ∂ δ = ∂ F q ∂ p q i ∂ p q i ∂ δ  and  H = J ⊤ W J \boldsymbol{\delta}=-(\mathbf{H}+\lambda \operatorname{diag}(\mathbf{H}))^{-1} \mathbf{J}^{\top} \mathbf{W r} \\ \mathbf{J}_{i, k}=\frac{\partial \mathbf{r}_{k}^{i}}{\partial \boldsymbol{\delta}}=\frac{\partial \mathbf{F}_{q}}{\partial \mathbf{p}_{q}^{i}} \frac{\partial \mathbf{p}_{q}^{i}}{\partial \boldsymbol{\delta}} \quad \text { and } \quad \mathbf{H}=\mathbf{J}^{\top} \mathbf{W} \mathbf{J} δ=(H+λdiag(H))1JWrJi,k=δrki=pqiFqδpqi and H=JWJ
更新位姿:
[ R + t + ] = exp ⁡ ( δ ∧ ) ⊤ [ R t 0 1 ] \left[\begin{array}{ll} \mathbf{R}^{+} & \mathbf{t}^{+} \end{array}\right]=\exp \left(\boldsymbol{\delta}^{\wedge}\right)^{\top}\left[\begin{array}{cc} \mathbf{R} & \mathbf{t} \\ \mathbf{0} & 1 \end{array}\right] [R+t+]=exp(δ)[R0t1]
当更新量 δ \boldsymbol{\delta} δ足够小时停止迭代。

Infusing visual priors:

上述步骤等同于经典的光度对齐方法,该步骤则基于上述操作,加入CNN独有的视觉先验信息。
通过CNN为每一层的查询和参考特征图预测uncertainties map: U k l ∈ R > 0 W l × H l \mathbf{U}_{k}^{l} \in \mathbb{R}_{>0}^{W_{l} \times H_{l}} UklR>0Wl×Hl,然后计算残差权重系数:
w k i = u q i u k i = 1 1 + U q l [ p q i ] 1 1 + U k l [ p k i ] ∈ [ 0 , 1 ] w_{k}^{i}=u_{q}^{i} u_{k}^{i}=\frac{1}{1+\mathbf{U}_{q}^{l}\left[\mathbf{p}_{q}^{i}\right]} \frac{1}{1+\mathbf{U}_{k}^{l}\left[\mathbf{p}_{k}^{i}\right]} \in[0,1] wki=uqiuki=1+Uql[pqi]11+Ukl[pki]1[0,1]
即:当某一三维点同时投影在查询图像和参考图像的低不确定度位置时,权重接近1;当查询图像和参考图像的投影位置有任意一个的不确定度较高时, 权重接近为0;
该不确定度图U没有被显式地监督。
每个特征层级的不确定性定义不同,因为不同的线索可能在优化的不同阶段有用。如粗特征中重复纹理可能会干扰位姿估计,但是在细特征中对于优化位姿精度非常有用。
在这里插入图片描述
在这里插入图片描述

Fitting the optimizer to the data:

以往深度学习的优化方法,使用CNN通过视觉特征和特征残差预测LM算法中的损失函数 ρ \rho ρ或者阻尼系数 λ \lambda λ,甚至是权重更新量 δ \delta δ。然而这会使得视觉语义信息被编码到优化器参数中,损害其在其他数据集上的泛化性。 因此作者认为应该使用poses或者残差而不是视觉特征来拟合优化器。具体的,将 λ \lambda λ作为一个固定的模型参数,并通过梯度下降和CNN一起学习它。

对于每层的特征以及每一个6Dof-pose的分量,使用单独的 λ \lambda λ参数:
log ⁡ 10 λ l = λ min ⁡ + sigmoid ⁡ ( θ l ) ( λ max ⁡ − λ min ⁡ ) \log _{10} \boldsymbol{\lambda}_{l}=\lambda_{\min }+\operatorname{sigmoid}\left(\boldsymbol{\theta}_{l}\right)\left(\lambda_{\max }-\lambda_{\min }\right) log10λl=λmin+sigmoid(θl)(λmaxλmin)
当摄像机安装在一辆汽车或一个基本直立的机器人上时,可以预计平面内旋转的pose参数的阻尼会很大。相比之下,常见的启发式方法同等对待所有姿势参数,不允许每个参数设置单独的阻尼。

2. Learning from poses

Training:

不需要精确的三维场景模型,稀疏重建的点云、激光雷达数据、RGBD数据都可以。
PixLoc使用端到端的方式训练,梯度flow从pose开始,经过uncertainty map ,features以及CNN一直到像素点。

Loss function:

通过计算每一层特征估计出来的位姿与真实位姿之间的距离计算损失 ,具体的,优化三维点的重投影误差:
L = 1 L ∑ l ∑ i ∥ Π ( R l P i + t l ) − Π ( R ‾ P i + t ‾ ) ∥ γ \mathcal{L}=\frac{1}{L} \sum_{l} \sum_{i}\left\|\Pi\left(\mathbf{R}_{l} \mathbf{P}_{i}+\mathbf{t}_{l}\right)-\Pi\left(\overline{\mathbf{R}} \mathbf{P}_{i}+\overline{\mathbf{t}}\right)\right\|_{\gamma} L=L1liΠ(RlPi+tl)Π(RPi+t)γ
其中 γ \gamma γ是Huber cost(小误差二次损失,大误差线性损失)。上述损失函数对每个训练样本的旋转和平移进行了自适应加权,并对场景的规模大小具有不变性,从而使使用SfM生成的数据进行训练成为可能。

为了防止困难样本平滑掉精细特征,仅在前一层特征使pose充分接近真值时,才在该层特征上计算损失。否则,随后的损失项将被忽略。

3. Comparisons to existing approaches

PixLoc vs. sparse matching:

通过局部特征匹配的位姿估计通常都包含了多个不可导的步骤,如关键点选择、RANSAC等。
论文《einforced feature points: Optimizing feature detection and description for a high-level task.》CVPR 2020通过强化学习的方式进行位姿估计,但是需要较强的与预训练。相比之下,PixLoc非常简单,并且使用图像分类训练的通用权重就能够很好的收敛。

PixLoc vs. GN-Net:

PixLoc训练更简单,能够从噪声数据中学习额外的强先验知识。

定位Pipeline介绍:

使用图像检索的结果的得到初始位姿,构建图像金字塔来进一步扩大感受野,在较大的梯度basin中成功对齐图像。如下图:
在这里插入图片描述
三维场景模型:使用 HLOC + COLMAP 得到有pose真值的reference images, 然后三维重建得到SFM model.

对于查询图像,先检索得到top - 5参考图像,然后收集所有可观测的3D点,在其2D观测中提取特征金字塔,根据置信度进行平均。

Experiments

特征提取器: VGG19 encoder pretrained on ImageNet + UNet feature extractor
得到特征 L=3 feature maps with strides 1, 4, and 16, and dimensions Dl=32, 128, and 128
提特征100ms, 优化位姿200ms–1s,取决于三维点的数目。
使用dense-vlad作为图像检索模块。

与基于深度学习的方法相比:

在这里插入图片描述
三种方法:IR:image retieval; FM: feature matching ; 端到端

PixLoc优于或者略优于现有方法,但是PixLoc是没有泛化性问题的,基于学习的方法只能使用在训练过的场景中。
可见oracle的检索精度优于densevlad, 最终的PixLoc精度也要更高,说明图像检索对位姿估计的影响很大。

large-scale、long-term localization:

数据集 《 Benchmarking 6DOF outdoor visual localization in changing conditions. In CVPR, 2018》
在这里插入图片描述

可见图像检索+PixLoc的方法优于所有基于学习的方法,与特征匹配的方法还有距离。hloc + PixLoc后优化精度最高,主要在aachen数据集上的结果不好,原因在于aachen数据集中的参考图像过于稀疏,导致初始位姿先验更加粗糙。这对于基于direct alignment模式的PixLoc来说显然是致命的。不过PixLoc是唯一一个端到端、不需要重新训练就能泛化到其他数据集上的方法。

作为其他定位方法的后处理步骤

本文是基于直接对齐的定位方法,依赖于初始位姿的精度,很容易陷入局部极小值,类似于ICP。因此也可以作为其他定位方法的优化步骤,这里选择优化的是HLOC的定位结果。

上表中最后一行是后优化的结果,可以看到提升明显,但是在aachen上有轻微降低,论文认为是真值和相机内参不准导致的,并在附录中进行了验证

消失实验

在这里插入图片描述

局限性分析:
  • PixLoc依赖于CNN特征的梯度,只能对有限的上下文进行编码。因此,这是一种局部方法,由于视点变化过大,初始重投影误差过大,可能会陷入错误的极小值。
  • PixLoc也可能因明显的遮挡物而获得较大的异常值比率,并且对相机校准错误更为敏感。
  • 7
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 9
    评论
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值