UnDeepVO: Monocular Visual Odometry through Unsupervised Deep Learning 论文阅读

news/2024/4/28 14:48:41

论文链接

UnDeepVO: Monocular Visual Odometry through Unsupervised Deep Learning


0. Abstract

  • 提出了一种名为 UnDeepVO 的新型单目视觉里程计(VO)系统。 UnDeepVO 能够使用深度神经网络估计单目相机的 6-DoF 位姿及其视图深度
  • 两个显着特征:一是无监督深度学习方案,二是绝对规模恢复

Fig. 1 UnDeepVO 的系统概括。在使用未标记的立体图像进行训练后,UnDeepVO 可以同时使用单目图像进行视觉里程计和深度估计。估计的 6-DoF 位姿和深度图均已缩放,无需进行缩放后处理


1. Intro

视觉里程计有两类主要的方法:特征法和直接法

目前,在实践中获取真实数据集通常很困难且昂贵,并且用于监督训练的现有标记数据集的数量仍然有限。这些限制建议后续工作寻找各种无监督学习 VO 方案

本文主要贡献

  • 展示了一个具有恢复绝对尺度的单目 VO 系统,并且我们通过利用空间和时间几何约束以无监督的方式实现
  • 由于在训练期间使用立体图像对,不仅估计的姿态而且估计的密集深度图都是以绝对比例生成的
  • 使用 KITTI 数据集评估我们的 VO 系统,结果表明 UnDeepVO 在单目相机的姿态估计方面取得了良好的性能

2. System Overview

Fig. 2 UnDeepVO 的架构图

系统由姿态估计器和深度估计器组成,如图 2 所示。两个估计器都以连续的单目图像作为输入,并分别生成缩放的 6-DoF 姿态和深度作为输出

姿态估计器:基于 VGG 的 CNN 架构。它以两个连续的单目图像作为输入并预测它们之间的 6-DoF 变换。由于旋转(以欧拉角表示)具有高度非线性,因此与平移相比通常很难训练。为了更好地通过无监督学习训练旋转,在最后一个卷积层之后用两组独立的全连接层将平移和旋转解耦。这使我们能够引入对旋转和平移预测进行归一化的权重,以获得更好的性能

深度估计器:基于编码器-解码器架构来生成密集的深度图。UnDeepVO 的深度估计器被设计为直接预测深度图。这是因为训练轨迹表明,以这种方式训练时整个系统更容易收敛

UnDeepVO 的一个特点是恢复 6-DoF 姿态和深度的绝对尺度,这归功于我们的训练方案,如图 3 所示

Fig. 3 UnDeepVO的训练方案。位姿和深度估计器将立体图像作为输入来分别估计 6-DoF 位姿和深度图。然后可以根据原始 RGB 图像、估计的深度图和姿势计算总损失,包括空间损失和时间损失

利用立体图像序列的空间和时间几何一致性来制定损失函数.一张图像中的红点在另一张图像中都有对应的红点。空间几何一致性表示左右图像对中对应点之间的几何射影约束,而时间几何一致性表示两个连续单目图像中对应点之间的几何射影约束,通过使用这些约束来构建损失函数并将它们一起最小化,UnDeepVO 学会以端到端无监督方式估计缩放的 6-DoF 姿势和深度图


3. Objective Losses For Unsupervised Training

UnDeepVO 通过反向传播进行损失训练。由于损失是建立在几何约束而不是标记数据的基础上的,因此 UnDeepVO 以无监督的方式进行训练。

其总损失包括空间图像损失和时间图像损失,如图3所示。空间图像损失驱动网络通过使用立体图像对来恢复缩放的深度图,而时间图像损失旨在最小化相机上的误差使用两个连续的单眼图像进行运动

3.1 立体图像对的空间图像损失

空间损失是根据左右立体图像之间的几何约束构建的。它由左右光度一致性损失、视差一致性损失和姿态一致性损失组成

光度一致性损失:对于两幅立体图像之间的重叠区域,一幅图像中的每个像素都可以在另一幅图像中以水平距离 D p D_p Dp 找到其对应关系。假设 p l ( u l , v l ) p_l(u_l, v_l) pl(ul,vl) 是左图像中的一个像素, p r ( u r , v r ) p_r(u_r, v_r) pr(ur,vr) 是右图像中其对应的像素。就有空间约束 u l = u r u_l = u_r ul=ur v l = v r + D p v_l = v_r + D_p vl=vr+Dp,距离 Dp 可由下式计算
D p = B f / D d e p (1) D_p=Bf/D_{dep}\tag{1} Dp=Bf/Ddep(1)
其中 B B B 是立体相机的基线, f f f 是焦距, D d e p D_{dep} Ddep 是对应像素的深度值

有了这个空间约束和计算出的 D p D_p Dp 图,我们可以通过“空间变换器”合成一幅图像和另一幅图像。 L1范数和SSIM项的组合用于构造左右光度一致性损失
L p h o l = λ s L S S I M ( I l , I l ′ ) + ( 1 − λ s ) L l 1 ( I l , I l ′ ) (2) L^l_{pho} = λ_sL^{SSIM}(I_l, I_l^\prime) + (1 − λ_s)L^{l_1} (I_l, I_l^′)\tag{2} Lphol=λsLSSIM(Il,Il)+(1λs)Ll1(Il,Il)(2)

L p h o r = λ s L S S I M ( I r , I r ′ ) + ( 1 − λ s ) L l 1 ( I r , I r ′ ) (3) L^r_{pho} = λ_sL^{SSIM}(I_r, I_r^\prime) + (1 − λ_s)L^{l_1} (I_r, I_r^′)\tag{3} Lphor=λsLSSIM(Ir,Ir)+(1λs)Ll1(Ir,Ir)(3)

其中 I l , I r I_l,I_r IlIr 分别是原始左图像和右图像, I l ′ I_l^′ Il 是原始右图像 I r I_r Ir 合成的左图像, I r ′ I_r^′ Ir 是原始左图像 I l I_l Il 合成的右图像。

视差一致性损失:左右视差图(深度的倒数)也受到 D p D_p Dp 的约束。 UnDeepVO使用的视差图是
D d i s = D p × I W (4) D_{dis}=D_p\times I_{W}\tag{4} Ddis=Dp×IW(4)
其中 I W I_W IW 是原始图像尺寸的宽度。将左右视差图分别表示为 D d i s l D^l_{dis} Ddisl D d i s r D^r_{dis} Ddisr。我们可以用 D p D_p Dp D d i s r D^r_{dis} Ddisr D d i s l D^l_{dis} Ddisl 合成 D d i s l ′ D^{l^\prime}_{dis} Ddisl D d i s r ′ D^{r^\prime}_{dis} Ddisr。那么视差一致性损失为
L d i s l = L l 1 ( D d i s l , D d i s l ′ ) (5) L^l_{dis} = L^{l_1} (D^l_{dis}, D^{l^\prime}_{dis})\tag{5} Ldisl=Ll1(Ddisl,Ddisl)(5)

L d i s r = L l 1 ( D d i s r , D d i s r ′ ) (6) L^r_{dis} = L^{l_1} (D^r_{dis}, D^{r^\prime}_{dis})\tag{6} Ldisr=Ll1(Ddisr,Ddisr)(6)

姿势一致性损失:在训练过程中,我们使用左右图像序列分别预测相机的 6-DoF 变换。理想情况下,这两个预测的转换应该基本相同。通过以下方式来惩罚它们之间的差异
L p o s = λ p L l 1 ( x l ′ , x r ′ ) + λ o L l 1 ( φ l ′ , φ r ′ ) (7) L_{pos} = \mathbf{λ}_pL^{l_1} (\mathbf{x}^′_l , \mathbf{x}^′_r) + \mathbf{λ}_oL^{l_1}(\mathbf{φ}_l^′, \mathbf{φ}_r^′)\tag{7} Lpos=λpLl1(xl,xr)+λoLl1(φl,φr)(7)
其中 λ p \mathbf{λ}_p λp 是左右位置一致性权重, λ o \mathbf{λ}_o λo 是左右方向一致性权重, [ x l ′ , φ l ′ ] [\mathbf{x}^′_l, \mathbf{φ}_l^′] [xl,φl] [ x r ′ , φ r ′ ] [\mathbf{x}^′_r, \mathbf{φ}_r^′] [xr,φr] 分别是左右图像序列的预测姿势

3.2 连续单目图像的时间图像损失

时间损失是根据两个连续单目图像之间的几何约束来定义的。它是恢复相机六自由度运动的重要部分。它包括光度一致性损失和3D几何配准损失。

光度一致性损失:光度损失是根据两个连续的单眼图像计算的。为了估计 6-DoF 变换,采用投影光度误差作为损失来最小化。分别表示 I k I_k Ik I k + 1 I_{k+1} Ik+1 为第 k k k 和第 ( k + 1 ) (k+1) (k+1) 图像帧, p k ( u k , v k ) p_k(u_k,v_k) pk(uk,vk) I k I_k Ik 中的一个像素, p k + 1 ( u k + 1 , v k + 1 ) p_{k+1}(u_{k+1},v_{k+1}) pk+1(uk+1,vk+1) 为对应的 I k + 1 I_{k+1} Ik+1 中的像素。然后,我们可以通过 p k p_k pk 导出 p k + 1 p_{k+1} pk+1
p k + 1 = K T k , k + 1 D d e p K − 1 p k (8) p_{k+1} = KT_{k,k+1}D_{dep}K^{−1}p_k\tag{8} pk+1=KTk,k+1DdepK1pk(8)
其中 K K K 是相机本征矩阵, D d e p D_{dep} Ddep 是第 k k k 帧中像素的深度值, T k , k + 1 T_{k,k+1} Tk,k+1 是从第 k k k 帧到第 ( k + 1 ) (k+1) (k+1) 帧的相机坐标变换矩阵。以通过使用估计姿态和“空间变换器”从 I k + 1 I_{k+1} Ik+1 I k I_k Ik 合成 I k ′ I_k^′ Ik I k + 1 ′ I_{k+1}^\prime Ik+1。因此,单目图像序列之间的光度损失为
L p h o k = λ s L S S I M ( I k , I k ′ ) + ( 1 − λ s ) L l 1 ( I k , I k ′ ) (9) L^k_{pho} = λ_sL^{SSIM}(I_k, I_k^′ ) + (1 − λ_s)L^{l_1}(I_k, I_k^′)\tag{9} Lphok=λsLSSIM(Ik,Ik)+(1λs)Ll1(Ik,Ik)(9)

L p h o k + 1 = λ s L S S I M ( I k + 1 , I k + 1 ′ ) + ( 1 − λ s ) L l 1 ( I k + 1 , I k + 1 ′ ) (10) L^{k+1}_{pho} = λ_sL^{SSIM}(I_{k+1}, I_{k+1}^′ ) + (1 − λ_s)L^{l_1}(I_{k+1}, I_{k+1}^′)\tag{10} Lphok+1=λsLSSIM(Ik+1,Ik+1)+(1λs)Ll1(Ik+1,Ik+1)(10)

3D 几何配准损失:3D几何配准损失是通过对齐两个点云来估计变换,类似于迭代最近点(ICP)技术。假设 P k ( x , y , z ) P_k(x, y, z) Pk(x,y,z) 是第 k 个相机坐标中的一个点。然后可以使用 T k , k + 1 T_{k,k+1} Tk,k+1 将其转换为第 ( k + 1 ) (k + 1) (k+1) 个相机坐标为 P k ′ ( x , y , z ) P_k^′(x, y, z) Pk(x,y,z)。类似地,第 ( k + 1 ) (k+1) (k+1) 帧中的点可以变换到第 k k k 帧。然后,两个单目图像之间的 3D 几何配准损失为
L g e o k = L l 1 ( P k , P k ′ ) (11) L^k_{geo} = L^{l_1}(P_k, P_k^′)\tag{11} Lgeok=Ll1(Pk,Pk)(11)

L g e o k + 1 = L l 1 ( P k + 1 , P k + 1 ′ ) (12) L^{k+1}_{geo} = L^{l_1}(P_{k+1}, P_{k+1}^′)\tag{12} Lgeok+1=Ll1(Pk+1,Pk+1)(12)

系统的最终损失函数将之前的空间和时间损失结合在一起。UnDeepVO 是第一个通过受益于所有这些损失以及 3D 几何配准和姿势一致性损失来恢复缩放的相机姿势和深度图的。


4. Experimental Evaluation

Adam 优化器用于训练网络长达 20-30 个时期,参数 β 1 = 0.9 β_1 = 0.9 β1=0.9 β 2 = 0.99 β_2 = 0.99 β2=0.99。学习率从0.001开始,每迭代1/5就减少一半。

  • 馈送到位姿估计器的图像序列长度为 2。输入到网络的图像大小为 416 × 128。
  • 还将输出图像的大小调整为更高分辨率以计算损失并最终微调网络
  • 使用不同类型的数据增强方法来增强性能并减轻可能的过度拟合,像颜色增强、旋转数据增强和左右姿态估计增强
    • 机选择 20% 的图像进行颜色增强,其中随机亮度范围为 [0.9, 1.1],随机伽玛范围为 [0.9, 1.1],随机颜色偏移范围为 [0.9, 1.1]
    • 对于旋转数据增强,我们增加了旋转数据的比例,以在旋转估计中获得更好的性能
4.1 轨迹评估

采用流行的 KITTI Odometry Dataset 来评估所提出的 UnDeepVO 系统,并将结果与 SfMLearner 、单目 VISO2-M 和 ORB-SLAM-M(无回环)进行比较。所有方法都采用单目图像进行测试,并且我们对 SfMLearner 和 ORB-SLAM-M 的尺度进行后处理,因为它们无法恢复姿态和深度的尺度

Fig. 4 序列 02、05、07 和 08 的轨迹。SfMLearner 的结果通过 7-DoF 对齐到地面实况进行后处理,因为它无法恢复比例。 UnDeepVO 和 SfMLearner 使用尺寸为 416×128 的图像。 VISO2-M使用的图像为1242×376

UnDeepVO 的轨迹在所有方法中在质量上最接近真实情况。对于序列11-21,没有可用的真实数据

Fig. 5 使用 UnDeepVO 绘制 KITTI 数据集的轨迹。这些序列没有可用的姿势的基本事实。绘制了单目 VISO2-M 和立体 VISO2-S 的轨迹。我们的 UnDeepVO 在这些序列上效果很好,与 VISO2-S 相当。

Tab. 1 VO 结果与我们提出的 UnDeepVO 一致。表中列出的所有方法均未使用循环闭合。请注意,单目 VISO2-M 和 ORB-SLAM-M(无回环)不适用于图像尺寸 416 × 128,结果是在图像尺寸 1242 × 376 下获得的。 SfMLearner 和 ORB-SLAM-M 采用与地面实况的 7-DoF(6-DoF + 比例)对齐

  • t r e l t_{rel} trel:100m-800m 长度上的平均平移 RMSE 漂移 (%)
  • r r e l r_{rel} rrel:100m-800m 长度上的平均旋转RMSE 漂移(°/100m)

如表一所示,即使在低分辨率图像且没有尺度后处理的情况下,我们的方法也能在单目方法中实现良好的姿态估计性能

4.2 深度估计评估

Fig. 6 深度估计器生成的深度图像。左列是原始 RGB 图像,右列是估计的相应深度图像。

Tab. 2 使用 Eigen 等人的 split 在 KITTI 上的深度估计结果

本文的方法优于一些有监督/无监督方法的,但性能不如某些方法。这可能是由几个原因造成的。首先,我们仅使用部分 KITTI 数据集(KITTI odometry dataset)进行训练,而所有其他方法都使用完整的 KITTI 数据集来训练其网络;其次,其他网络使用的图像有更高的分辨率


5. Conclusions

  • 提出了 UnDeepVO,一种具有无监督深度学习的新型单目 VO 系统。该系统利用立体图像序列之间的空间损失和时间损失进行无监督训练
  • 系统在训练阶段恢复尺度,这与其他基于模型或基于学习的单目 VO 方法不同。一般来说,基于无监督学习的 VO 方法有可能随着训练数据集大小的增加而提高其性能
  • 下一步,将研究如何使用大量数据集训练 UnDeepVO 以提高其性能,例如对图像模糊、相机参数或光照变化的鲁棒性。未来,我们还计划将我们的系统扩展到视觉SLAM系统以减少漂移

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.cpky.cn/p/10553.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

SpringTask实现的任务调度与XXL-job实现的分布式任务调度【XXL-Job工作原理】

目录 任务调度 分布式任务调度 分布式任务调度存在的问题以及解决方案 使用SpringTask实现单体服务的任务调度 XXL-job分布式任务调度系统工作原理 XXL-job系统组成 XXL-job工作原理 使用XXL-job实现分布式任务调度 配置调度中心XXL-job 登录调度中心创建执行器和任务 …

Elasticsearch 通过索引阻塞实现数据保护深入解析

❤️作者主页:小虚竹 ❤️作者简介:大家好,我是小虚竹。2022年度博客之星评选TOP 10🏆,Java领域优质创作者🏆,CSDN博客专家🏆,华为云享专家🏆,掘金年度人气作…

haproxy-高性能负载均衡反向代理服务

目录 一、HAProxy(High Availability Proxy)概述 1、HAProxy的概念 2、HAProxy的主要特性 3、HAProxy的优缺点 4、Haproxy负载均衡策略 5、LVS、nginx、HAProxy的区别 二、安装HAProxy 1、yum安装 2、第三方rpm包安装 3、编译安装 3.1 解决 l…

java数据结构与算法刷题-----LeetCode47. 全排列 II

java数据结构与算法刷题目录(剑指Offer、LeetCode、ACM)-----主目录-----持续更新(进不去说明我没写完):https://blog.csdn.net/grd_java/article/details/123063846 文章目录 1. 暴力回溯2. 分区法回溯 此题为46题的衍生题,在46题…

Vue的渲染原理

列表渲染 列表渲染 v-for指令写在循环项上:v-for“(一个参数或者两个参数) in/of 要遍历的数组、对象、字符串、指定次数” 遍历数组时参数分别是数组中元素(可以是一个对象)和元素所在下标(从0开始)遍历对象时参数分别是属性值和属性名遍历字符串时参数分别是单…

排序算法(Python)

选择排序 def selection_sort(a):nlen(a)for i in range(n-1):minifor j in range(i1,n):if a[j]<a[min]:minja[i],a[min]a[min],a[i] a[125,142,23,654,454,1,456] selection_sort(a) print(a) 简而概之&#xff0c;逐个比较&#xff0c;交换顺序 结合字典序进行排序 im…