Learning Less is More – 6D Camera Localization via 3D Surface Regression && 2018 论文笔记
作者: Eric Brachmann and Carsten Rother
机构:海德堡大学 视觉学习实验室
本文基于DSAC模型,提出了DSAC++ , 证明了相比于 学习 相机定位 pipeline 的所有组件,只学习其中的一种会更加高效。
DSAC++就是这样一个 将可学习的组件结合到定位 pipeline 中,组成的端到端学习系统。
DSAC有三个问题:
- 对位姿假说进行评分的CNN模块很容易过拟合。因为它可以记住全局的共识模式,以区分优劣假说。 例如,CNN可能会专注于图像中出现误差的位置,而不是去学习评估误差的质量。然而出现误差的位置不能在不同场景之间是不同的,因而不能够被泛化。
- 初始化pipeline需要RGBD训练数据,或者是3D模型。这些数据较难获取。
- DSAC中姿态细化通过有限查分得到,不稳定的数值会导致非常大的梯度方差。
针对以上问题,DSAC++ 使用了soft inliner count 取代原来的评分CNN, 对位姿假设进行评分。防止了过拟合问题。为了解决评分数值不稳定导致的大梯度方差,DSAC++ 使用香农熵对概率分布进行监督使得模型参数能够适应概率分布。
此外,本文还探索了模型在不适用3D模型下的性能,实验证明,DSAC++在不依赖3D模型的情况下依然可以精确估计相机位姿。
本文基于DSAC,因此首先介绍下DSAC.
DSAC 的pipeline步骤:
-
场景坐标回归:
首先有一个CNN来预测每个像素i对应的3维场景坐标,其中w为模型的参数
-
位姿假设采样:
任选4个就可以生成一个位姿假设。多次采样,生成位姿假设集合
-
选择最优位姿假设:
评分函数根据每个位姿假设对应的概率分布对每个位姿假设进行评分,选择最可能的位姿假设。其中参数控制概率分布的宽度。
参数的作用就是减小假设评分之间的差别,使得梯度值相差不会太远。个人理解,比如两个假设的得分是10和100,相差90,那么乘以该参数(论文中使用0.1)后变成了1和10,相差9。这个基于概率分布选择最优位姿假设的机制使得DSAC可以进行端到端的训练。
-
细化最优位姿假设
细化操作R是一个迭代步骤,选择inliner的像素,然后根据inliner像素进行优化,输出最终的位姿
DSAC 的损失函数只使用角度误差和平移误差中的一项,通过优化所有inliners的损失来对网络进行监督。
DSAC详细的介绍见DSAC论文笔记,下面逐个介绍DSAC++的各个模块。
场景坐标回归:
论文使用VGG-like的全卷积网络进行三维坐标回归。
DSAC中使用图像裁切后的patches作为输入,对每个patch的中心点输出对应的坐标预测。尽管对图像patches进行了40*40 的采样,重复计算仍然很多,计算量大。
因此本文以整张图像640*480作为输入,然后生成80 * 60的场景坐标预测,一次性计算完成。
位姿假设评分:
首先分析了DSAC的假设评分机制的两个问题:
- 因为使用patches进行局部预测,场景位姿回归网络可以很好地泛化到其他场景。而评分网络使用的是学习的是全局误差,使得评分网络不能够被很好的泛化。
- 评分CNN有输出极大值的趋势,当有些位姿假设的得分为1时,loss取得极小值,而参数是固定的,这导致过拟合以及训练的不稳定。
正则化可能可以解决这些问题 ,但是论文采取了一种更加简单的可导的方法:
-
首先统计inlier点的数目,这里与DSAC不同,使用了sigmoid函数计算评分值:
-
计算概率分布的香农熵
香农熵:
用于衡量概率分布的分散程度(宽度),从而找到合适的超参数。在前几次的迭代中建立目标熵,然后通过梯度下降优化使得香农熵接近目标熵。
三步训练:
作者发现使用RGB和对应位姿真值进行训练很容易陷入局部极小值,因此提出了训练的三个步骤:
-
初始化模型参数w:
有3D模型时,使用渲染的场景真值进行初始化,否则近似的真值进行启发式的初始化
-
优化重投影误差
这一步相当于加入了几何约束
-
进行端到端训练
端到端训练要求模型的所有组件都是可导的,包括位姿细化。DSAC的位姿细化使用有限差分实现,速度慢计算量大,由于数值不稳定性,,梯度值往往很大。
论文将位姿细化分为两个步骤:根据重投影误差定义inlier像素集合,然后在inlier集上根据重投影误差进行细化。
细化函数R(h)应当使得重投影误差最小:
使用高斯牛顿迭代优化:
DSAC中,为了控制计算量设置了迭代次数上线和inliers数量的最大值。相比于DSAC,论文中的迭代数值和inliers数目是不受限的,直到优化收敛为止。
实验总的来看角度误差非常优秀,平移误差已经DSAC已经很小了
统计了在给定阈值后定位成功的整数比例:
速度:0.2fps,
训练时间:每个训练阶段是1-2天,总共就是3-6天(Tesla K80)