芬兰阿尔托大学,印度德里工业技术学院,相机重定位
第一个使用相对位姿信息进行相机视觉重定位的方法。感觉论文中的inlier count的方法与候选投票的思想有点神似,当然这应该也是图像检索领域经常用到的思想。本文核心的贡献在于:模型中使用的是相对位姿,学习到的参数在场景之间可通用的可传递的,最后通过pipeline计算得到绝对位姿。因此训练出的模型可以泛化到unseen的场景中,而不需要提前在该场景数据集中训练
总结:
文章提出了一种基于深度学习的相机重定位方案。模型使用CNN从数据库中查找与查询图像相似的图像,并预测两张图像之间的相对位姿。使用基于RANSAC的三角测量方法得到查询图像中相机的位置和朝向。CNN使用端到端训练,可以很好的泛化到未知场景中。
同时还发布了一个室内定位数据集,包含5个场景。
研究介绍:
相机重定位技术在自动驾驶、运动结构重建(SFM)、AR以及SLAM中扮演者着重要角色。
主要有两种研究方向:
-
point-based:
通过SIFT、ORB等特征描述子表达局部特征并进行对应点匹配。对于SFM问题使用3D点云进行2D-3D匹配来获得6DoF的相机位姿。使用底层特征的特性使得该方法容易受到光照、少纹理、遮挡的影响,鲁棒性不好
-
machine-learning based:
比如 scene coordinate regression forest (SCoRF) 方法已经被成功应用,然而该法要求训练时有对应的深度图数据,因此应用条件相对苛刻
-
deep-learning based:
将该任务看作回归问题,使用CNN进行相机重定位。由预训练的CNN直接预测相机位置。基于深度学习的方法克服了point-based的很多问题,但仍然有约束:当场景中方坐标系不同时,要想CNN直接预测相机的绝对位姿,需要将CNN分场景训练好然后应用到任务中。造成约束的原因在于CNN学习的是像素点与位姿之间的映射,而位姿是依赖于所选择的坐标系的。这样造成的问题有:
-
在多场景定位任务中,CNN将无法将场景之间学习到的几何关系进行相互传递。
-
根据论文《 PoseNet: A convolu-tional network for real-time 6-dof camera relocalization 》:一个有限的网络在物理区域上可以学习的内容有一个上限。
因此特定场景训练的CNN在大环境中的泛化能力是受限的。
-
本文想要解耦deep-learning based 方法与场景坐标系的依赖关系。相比于直接预测绝对位姿,本文使用孪生CNN预测输入的两幅图像之间的相对位姿。然后通过一系列的相对位姿来计算出绝对位姿。这种方法的优势有:
- CNN可以从任何场景的图像对中学习,从而能够改进到一般的相对姿态估计
- 一个CNN能够在多个不相交的场景数据上进行训练和使用。
- 一个CNN可以用于各种场景,并且在测试时不需要内存中有完整的特定场景的数据库图像作为紧凑的特征描述符和快速的大规模图像检索技术。
综上,本文贡献有:
- 提出了基于深度学习的相机重定位方法,并且相比其他基于DP的模型有着通用、可泛化的特性。
- 通过实验验证了,在训练期间该模型对unseen的数据的泛化能力
- 发布了新的数据集,该数据集有着精确的相机位姿ground truth
论文方法:
包括两个部分:一个孪生CNN用于预测相对位姿,以及进行定位的pipeline
输入:一张需要求解相机位姿的RGB图像,以及有着位姿数据的图像数据库
模型步骤:
- 生成一系列的图像对来训练孪生CNN,使其输出预测的相对位姿。注意此时的训练图像对可以独立于本地图像数据库中的场景,即:孪生CNN学习的是任意场景中的图像对之间的相对位姿 ,因此可以泛化到任意场景中
- 孪生CNN的每个分支都可以视为特征提取器,利用提取的特征向量在特征空间中查询与查询图像最接近的数据库图像
- 计算出找到的数据库图像与查询图像之间的相对位姿,并使用新的融合算法将数据库图像的绝对位置真值融合进去,得到6Dof的相机位姿
一、基于RGB图像对的位姿估计
孪生网络先在图像分类数据集上进行预训练,然后在相对位姿预测任务中fine-tune
孪生网络的两个分支共享权重(ResNet34),最后一层通过平均池化层连接。
网络分支的输出被输入到一个包含三层全连接层(FC_i,FC_r,FC_t,最后两层分别输出 orientation 和平移 translation )的回归器中。全连接层采用随机初始化。
这里回归参数采用四元数(4维)和平移量(3维)。采用四元数回归的好处是四元数空间是一个单位球,省去了求单位范数的操作,此外计算两个四元数之间的距离时采用L2范数即可,而其他旋转参数(如旋转矩阵)的距离需要使用欧几里得embedding的形式计算。
最后的损失函数:
虽然预测的平移向量中已经包含尺度信息,但是作者发现使用所提出的新的pipeline预测尺度更为准确。
二、定位pipleline
-
检索最近邻图像
使用之前的孪生网络对查询图像和数据库图像进行encode,得到1*512的特征向量。然后通过特征向量之间的点乘计算他们的相似性。最后根据相似性得分对数据库图像进行排序,选择前N个(d1,d2…,dN)作为最近邻图像。这里使用了简单的检索方法,更深的讨论留到以后的工作中。
-
计算相对位姿
使用孪生网络对N对图像对(查询图像与N个近邻)进行预测得到相对位姿∆R={∆R1,∆R2…∆RN},以及相对∆ˆt={∆ˆt1,∆ˆt2, …∆ˆtN}
-
位姿预测
该步介绍如何根据得到的N个预测计算绝对位姿(绝对平移和绝对旋转)
计算绝对平移量:
在N个最近邻中任选择一对,记为P_s = {d_k,d_m}
将图像对P_s相对查询图像q的预测的平移向量进行三角化,得到查询摄像机t_s的位置/平移预测参数。图像对P_s共有 种取法,因此可以得到 个查询相机平移向量的预测值T_q={t1,t2,t3… }
对每个查询相机平移预测向量t_s,可以得到剩余最近邻图像(P_r = d \ P_s)的中心与查询相机中心之间的方向向量,若有方向向量与网络预测的方向矢量之间的夹角在预定义方位内,则视为对t_s预测的一个inlier ,如图中的d2,dN:
最终具有inlier计数最多的预测t_s会被分配给查询相机。若有多个求平均即可。
计算绝对旋转量
查询相机的绝对旋转量:
其中Rj取自N个最近邻图像的旋转量,Rqj是查询图像与第j个近邻图像之间的相对旋转。这样可以得到查询相机的N个绝对旋转量的预测值
-
如何确定最终的查询相机的绝对旋转量呢?
论文采用了计算平移量时使用的inlier count的方法:
对于每个预测Rjq∈̃Rq,将其余位于到Rjq的预定角距离内的预测构成一个一致集。一致集中的元素数定义为Rjq的inlier count。当两个或两个以上的假设具有相同的计数时,采用旋转量的平均方法(《 L1 rotation averagingusing the weiszfeld algorithm. 》)获得最终的绝对旋转量
-
实验
对比模型:CNN-based的SOTA模型: PoseNet ,HourglassPose , LSTMPose , VidLoc , and PoseNet with reprojection loss , dubbed PoseNet2.
相机定位评估:
未知数据集上的泛化能力评估:
使用理想最近邻检索算法后的重定位性能
作者最后使用ground truth最为最近邻检索的结果,验证此时的重定位性能的鲁棒性。
结果表明相当鲁棒,说明只要能够检索出真实的最近邻图像,那么pipeline就可以在任意视角、场景、任意重合度图像的输入等情况下表现出稳定的重定位性能。