无监督学习的视觉里程计 UnDeepVO: Monocular Visual Odometry through Unsupervised DeepLearning 论文笔记

埃塞克斯大学,单目视觉里程计

VGG + 伪孪生FC网络是位姿预测网络的常用结构(undeepVO,deepPCO)

这是一篇单目视觉里程计的工作, 其贡献以及特点主要有:

  1. 使用无监督学习进行训练, 不受数据集真值的限制
  2. 相比以往的单目里程计,可以恢复出绝对尺度
  3. 同时完成了视觉里程计和深度估计两个任务
  4. 训练阶段使用双目图像作为输入,测试时使用单目输入。

方法概述:

以双目相机k时刻和k+1时刻的左右图像作为输入,因此有4个图。
网络由深度估计网络、相对位姿估计网络两个部分组成,分别生成深度图和相对位姿。
在这里插入图片描述

位姿估计网络:

基于VGG网络。
由于相对位姿中的平移量是线性的,而旋转角(欧拉角)是非线性的,两个在一起预测效果不好。因此作者使用两个独立的FC网络分别对旋转和平移进行预测。

深度估计网络:

基于编解码结构。直接预测深度而不是常见的预测视差(更容易收敛)。

无监督损失函数

所谓的“时空损失函数”,包括:
* 空间损失函数(k时刻的左右图像之间构造损失)
* 时间损失函数(k、k+1时刻的右图像之间构造损失)
在这里插入图片描述

空间损失函数

在K时刻的左右视图之间构造损失函数,包括三项:光度一致、视差一致、位姿一致

  1. 光度一致
    首先根据预测的深度图D_dep可以得到左右视图之间的水平距离图D_p:
    D p = B f / D d e p D_{p}=B f / D_{d e p} Dp=Bf/Ddep
    其中Bf分别是双目相机的baseline和焦距。
    根据得到的D_p和空间约束,通过“spatial transformer”将左右视图对齐,然后计算损失:
    L p h o l = λ s L S S I M ( I l , I l ′ ) + ( 1 − λ s ) L l 1 ( I l , I l ′ ) L p h o r = λ s L S S I M ( I r , I r ′ ) + ( 1 − λ s ) L l 1 ( I r , I r ′ ) \begin{aligned} L_{p h o}^{l} &=\lambda_{s} L^{S S I M}\left(I_{l}, I_{l}^{\prime}\right)+\left(1-\lambda_{s}\right) L^{l_{1}}\left(I_{l}, I_{l}^{\prime}\right) \\ L_{p h o}^{r} &=\lambda_{s} L^{S S I M}\left(I_{r}, I_{r}^{\prime}\right)+\left(1-\lambda_{s}\right) L^{l_{1}}\left(I_{r}, I_{r}^{\prime}\right) \end{aligned} LpholLphor=λsLSSIM(Il,Il)+(1λs)Ll1(Il,Il)=λsLSSIM(Ir,Ir)+(1λs)Ll1(Ir,Ir)
    这里使用了L1损失和SSIM损失(结构相似性指标)

  2. 视差一致
    这里还是使用水平距离图D_p, 转换成视差图:
    D d i s = D p × I W D_{d i s}=D_{p} \times I_{W} Ddis=Dp×IW
    I_w是图像的水平宽度。
    通过D_p将左右视图对齐然后计算L1损失:

L d i s l = L l 1 ( D d i s l , D d i s l ′ ) L d i s r = L l 1 ( D d i s r , D d i s r ′ ) \begin{aligned} L_{d i s}^{l} &=L^{l_{1}}\left(D_{d i s}^{l}, D_{d i s}^{l^{\prime}}\right) \\ L_{d i s}^{r} &=L^{l_{1}}\left(D_{d i s}^{r}, D_{d i s}^{r^{\prime}}\right) \end{aligned} LdislLdisr=Ll1(Ddisl,Ddisl)=Ll1(Ddisr,Ddisr)

  1. 位姿一致
    由于是在左右视图之间构造位姿损失,因此只能利用左右视图的预测位姿应该相同这一约束,对左右视图预测的位姿之间的差别进行惩罚:

L p o s = λ p L l 1 ( x l ′ , x r ′ ) + λ o L l 1 ( φ l ′ , φ r ′ ) L_{p o s}=\lambda_{p} L^{l_{1}}\left(\mathbf{x}_{l}^{\prime}, \mathbf{x}_{r}^{\prime}\right)+\lambda_{o} L^{l_{1}}\left(\varphi_{l}^{\prime}, \varphi_{r}^{\prime}\right) Lpos=λpLl1(xl,xr)+λoLl1(φl,φr)

时间损失函数

在右视图的前后帧之间构造损失:

  1. 光度一致
    根据预测的前后帧的相对位姿、相机内参、以及预测的深度图,将前后帧对齐:
    p k + 1 = K T k , k + 1 D d e p K − 1 p k p_{k+1}=K T_{k, k+1} D_{d e p} K^{-1} p_{k} pk+1=KTk,k+1DdepK1pk
    pk是第k帧中的一个像素,pk+1是对应的在k+1帧的像素。
  2. 三维几何配准一致
    类似于点云里面ICP的做法,将两个点云根据相对位姿进行配准后计算损失:
    L g e o k = L l 1 ( P k , P k ′ ) L g e o k + 1 = L l 1 ( P k + 1 , P k + 1 ′ ) \begin{array}{c} L_{g e o}^{k}=L^{l_{1}}\left(P_{k}, P_{k}^{\prime}\right) \\ L_{g e o}^{k+1}=L^{l_{1}}\left(P_{k+1}, P_{k+1}^{\prime}\right) \end{array} Lgeok=Ll1(Pk,Pk)Lgeok+1=Ll1(Pk+1,Pk+1)

实验内容

测试阶段:位姿估计网络< 400M, 速度40Hz(GTX980M)

轨迹追踪评估:

在这里插入图片描述

效果优于orb-slam(没有闭环检测和局部mapping)

在其他序列上的结果:(没有真值,所以使用VISO2-S作为参考)

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

优于VISO2-M(undeepVO 的方法 输入分辨率更低,精度更高)

深度图效果评估:

可以正确生成比例深度图:
在这里插入图片描述

精度仅次于MonoDepth:
在这里插入图片描述

作者给出的原因分析:

  1. unDeepVO使用了部分kitti序列进行训练,而MonoDepth使用了全部序列
  2. MonoDepth使用了 higher resolution (512×256) input
  3. MonoDepth使用了 ResNet-based architecture
  4. unDeepVO使用的序列输入可能会引入噪声(动态物体)
  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值