“今天要介绍的文章是“Back to the Feature: Learning Robust Camera Localization from Pixels to Pose”,发表于CVPR 2021,本文的一作正是SuperGlue的作者,本文实现一种端到端场景无关的相机定位网络,在公开数据集上表现优异。 ”
代码:github.com/cvg/pixloc
论文:arxiv.org/abs/2103.09213
pixloc-fig1
最近在相机位姿估计任务中涌现出不少基于学习的算法。其中很多是通过回归的方式得到某些几何量(如位姿或者3D坐标)来实现定位,但这些方法的泛化性在视角变化或者模型参数变换后会大打折扣。
本文提出了一种场景无关的视觉定位算法PixLoc,输入为一张图像以及3D模型,输出图像对应的相机位姿。本文方法基于直接对齐多尺度CNN特征,将相机定位问题转换成度量学习。PixLoc端到端地学习了从像素到位姿的数据先验,这种能力可以在新的场景以及模型下表现优异。本文算法不仅能够在给定粗略姿先验的情况下定位,而且能够对位姿以及特征点进行联合优化。
端到端地相机位姿回归(pose regression)或者场景的3D坐标回归( coordinate regression)通常是场景相关的,无法有效地拓展到新的场景,如场景出现了较大的光照变化,如训练集中仅有白天的图像而定位集出现晚上的图片,或者视角发生较大的变化时位姿的精度通常是较低的;另外一点就是精度相较于视觉定位(2D-3D)的方式精度低。
作者提到,端到端的视觉定位算法应该着重于表征学习,不是让网络学习基本的几何关系亦或编码的3D图,而是让网络能够较好地理解几何原则以及鲁棒地应对外观以及结构变化。
本文作者提出的PixLoc能够做到场景无关的端到端学习位姿,且能够较好地做到跨场景(室外到室内)的相机定位。
pixloc-fig3
总览:利用已知的3D模型将查询图与参考图直接对齐对位姿进行结算,其中对齐过程中用了一种面向深度特征的非线性优化。
输入:稀疏3D模型(如SfM稀疏模型),粗略的初始位姿
(可以通过图像召回获取)
输出:查询图像对应的相机位姿
公式化:目标是估计查询图像
的 6-DOF 相机位姿
,稀疏3D模型中3D点云表示为
,其中的参考图表示为
图像表征:对于输入的查询图像
以及参考图像
,利用CNN提取多尺度的特征,可以在第
尺度上得到
维的特征图
,其中
越小尺度越小,注:特征图在通道上做了
归一化以提高泛化性。
直接对齐:目标是找到6-DOF 相机位姿
以最小化查询图像与参考图像之间的外观差异。对于给定的特征尺度
以及被参考图像
观测到的3D点
,定义如下残差项:
其中
表示3D点在查询图像上点投影坐标,
表示亚像素差值操作。于是对于所有的
个观测的残差可以定义为如下形式:
其中
表示代价函数,
表示每个残差的权重(后续介绍),通过LM算法迭代优化得到待优化位姿。
为了增大收敛域(convergence basin),本文从
最coarse的一个尺度进行连续优化,下一尺度优化的初值是上一个尺度优化的结果。所以说,低分辨率的特征负责位姿预测的鲁棒性,而高分辨率的特征负责精化位姿精度。
引入视觉先验:上述过程其实可以等价于传统的光度对齐的思路,考虑到CNN拥有强大的学习复杂视觉先验的能力,本文试图将这种视觉先验引入位姿优化。为了达到这个目标,CNN对每个尺度
的特征图预测了一张对应的不确定图
(笔者:文中没有具体说是如何得到该量),于是查询图与参考图像逐点权重可以通过下述方式进行计算:
如果3D点重投影的不确定性小,那么这个权重会趋向于1,若该不确定性较大,这个权重趋近于0;
pixloc-fig4
将优化器与数据相匹配:LM是一种通用的优化算法,其中包括很多启发式的操作,例如代价函数
的选择,阻尼参数
的选择等。作者认为上述参数的选择会极大地削弱模型推广到新的数据的能力,因为它将优化器与训练数据进行了“绑定”(笔者:即优化器与数据相关,泛化能力就会变弱)。所以,若优化器能够具有泛化性,就要让优化器适应姿势或残差的分布,而不是场景的语义内容。本文的方法是将阻尼因子
作为一个网络学习的参数来对待,对于位姿的6参数而言,每个参数对应着不同的阻尼量,即将原来的标量
替换成了向量
,将其参数化为如下形式(笔者:
没有明确表示什么,下式有疑问,如有了解的同学可在评论区给出见解):
该方法在训练过程中调整各个姿态参数的曲率,直接从数据中学习运动先验知识。例如,当相机安装在汽车或一个基本直立的机器人上时,我们期望平面内旋转的阻尼很大。相反,普通的启发式算法对所有姿态参数一视同仁,不允许每个参数拥有不同阻尼量。
pixloc-fig8
由于CNN本身是不关注3D点的类型的,无论是通过视觉SfM来的,或者来自RGBD传感器/LiDAR扫描等,PixLoc可以用于以上各种3D点云的输入。
训练:由于上述不确定图以及代价函数的存在,PixLoc能够适应于噪声很大的稀疏SfM模型作为输入,在训练过程中一个不完美的3D结构是完全够用的(无需高精度稠密3D模型)。
损失函数:对于每一个尺度
,都可以计算出一个
,其真值为
,损失函数被构建为3D点的平均重投影误差:
其中
为 Huber核函数。
PixLoc vs. sparse matching: 传统的局部特征匹配的方式包括多种数据操作,这些操作并不可微,例如特征点提取/匹配/RANSAC。相比于需要大量训练的强化学习的方式而言,本文端到端的方式可微分并且操作简单。
PixLoc vs. GN-Net:Von Stumberg等人最近也提出了一些使用直接对齐的跨季节定位算法,他们的工作主要为了解决小基线场景且需要非常准确的逐像素真值对应关系以及大量的超参调整。作为对比,本文算法能够应对含有噪声的数据,且做到鲁棒定位。
配合图像检索(即首先要做一步图像召回),PixLoc可以是一个独立的定位模块,但也可以对之前方法估计的姿势进行优化。因为该算法只需要一个三维模型和一个粗略的初始姿势。
初始位姿的精度应该取决于对齐过程中收敛域的大小,经过深度CNN处理后一个特征点的感受野可以保证是非常大的,如下图所示,左图红色的点位于参考图像,右侧的高亮区域表示查询图像的多尺度收敛域,可见这个范围是比较大的。
pixloc-fig5
本文使用了用HLoc+COLMAP重建的稀疏SfM模型,对于召回的参考图像,如top5~10,将它们观测的3D点云收集起来并在其对应的2D点提取多尺度特征图(对于每个3D点至少有一个内点),详见Fig3。
网络结构:特征提取阶段使用了在ImageNet上预训练的VGG19编码器,,。算法使用Pytorch实现,特征提取耗时100ms,位姿优化200ms~1s。
Cambridge Landmarks以及7Scenes datasets定位效果
上图展示了不同算法在Cambridge Landmarks以及7Scenes datasets定位精度对比,数字表示在给定阈值(5cm/5deg)条件下的召回率以及平移和旋转误差中值。可以看到PixLoc能够与复杂的特征匹配(FM)的流程定位效果相当,与几何回归模型的定位效果相近;以上标红的算法表示模型针对每个场景进行了训练,而本文算法仅在室外场景中训练了一次,便可以很好地泛化到没有见过的室内外场景。
在 Aachen, RobotCar, CMU dataset大尺度场景定位对比
以上给出了在大场景中定位召回率统计( 阈值分别为(25cm, 2deg), (50cm, 5deg),(5m, 10deg)。在初始位姿是由图像召回给定给定时,本文算法既简单又能够在挑战场景如夜晚获得相比ESAC精度更高的结果。作者提到,PixLoc(使用的NetVLAD召回图像,无re-ranking)相较于FM的方式不够鲁棒,这是由于错误的图像召回会导致初始位姿不佳,使得算法无法收敛。此时若使用了召回效果较好的oracle,召回率会有比较明显的提升。
PixLoc还可以作为后处理位姿优化模块对定位位姿进行优化,上表中列出了使用PixLoc优化hloc的定位位姿的前后对比,平均增加了2.4%的召回率(笔者:后处理改进不大,在Aachen Day数据上下降了,作者说是真值有误)。
消融实验:作者也尝试了 Gauss-Newton loss,但是模型没有收敛;作者比较了添加每个改进后的AUC,可以看到每个小改进都有一定作用。
pixloc-tab3
局限性:PixLoc受限于CNN感受野的大小,如果初始位姿的重投影误差较大,模型预测会陷入局部最优;因此,PixLoc容易受到视角变化/遮挡物的影响,也对错误的相机标定敏感。
pixloc-fig7
可解释性:对权重图进行可视化可以帮助我们理解PixLoc到底关注场景的何种线索。A-D为室外驾驶场景,PixLoc可以忽略动态物体如车辆,同时也可以忽略掉短期的特征如雪(A),落叶(B),垃圾桶(C)以及影子等;PixLoc更加关注于柱子,树干,路标,电线以及建筑轮廓。重复的纹理如窗户在一开始会被忽略但到后期会被用来做优化。不同是,对于城市场景E,网络更加关注于固定的建筑物而不是大树。
pixloc-fig6
-END-
— 版权声明 —
本微信公众号所有内容,由计算机视觉SLAM微信自身创作、收集的文字、图片和音视频资料,版权属计算机视觉SLAM微信所有;从公开渠道收集、整理及授权转载的文字、图片和音视频资料,版权属原作者。本公众号内容原作者如不愿意在本号刊登内容,请及时通知本号,予以删除。