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

介绍了一种基于VGG+伪孪生FC网络的单目视觉里程计方法,该方法使用无监督学习训练,并能恢复绝对尺度。通过双目图像训练但仅需单目图像测试,同时完成视觉里程计和深度估计任务。

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

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

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

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

方法概述:

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

位姿估计网络:

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

深度估计网络:

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

无监督损失函数

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

空间损失函数

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

  1. 光度一致
    首先根据预测的深度图D_dep可以得到左右视图之间的水平距离图D_p:
    Dp=Bf/DdepD_{p}=B f / D_{d e p}Dp=Bf/Ddep
    其中Bf分别是双目相机的baseline和焦距。
    根据得到的D_p和空间约束,通过“spatial transformer”将左右视图对齐,然后计算损失:
    Lphol=λsLSSIM(Il,Il′)+(1−λs)Ll1(Il,Il′)Lphor=λsLSSIM(Ir,Ir′)+(1−λs)Ll1(Ir,Ir′)\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

### DK-SLAM技术细节 #### 工作原理 DK-SLAM (Deep Keypoint Learning-based Simultaneous Localization and Mapping) 是一种基于深度学习的单目视觉SLAM系统,旨在利用卷积神经网络(CNNs)来改进特征点提取和匹配过程。传统的ORB-SLAM依赖于手工设计的特征描述符(如FAST角点检测器),而DK-SLAM则采用预训练好的CNN模型自动从图像中学习鲁棒的关键点表示[^1]。 #### 实现方法 在DK-SLAM的具体实现方面: - **初始化阶段**:类似于ORB-SLAM,在接收到足够的初始帧之后建立初步的地图结构。 - **跟踪模块**:不同于传统方法的是,这里使用了经过大量数据集训练过的深度学习模型来进行实时特征点检测与描述。这些特征被用于后续的姿态估计过程中。对于每一新到来的画面,都会调用`TrackMonocular()`函数完成当前时刻相机位置姿态更新的任务[^2]。 - **局部映射(Local Mapping)** 和 **闭环检测(Loop Closing)** :这两个部分基本沿用了经典SLAM架构的设计思路,即通过优化已知环境下的轨迹路径并识别曾经访问过的位置从而修正累积误差。不过值得注意的是,在寻找相似场景时可能会借助更先进的机器学习手段提高准确性[^4]。 ```cpp // C++代码片段展示如何加载深度学习模型进行关键点预测 #include "deep_keypoint_detector.h" void System::DetectKeypoints(cv::Mat &image, std::vector<cv::KeyPoint> &keypoints){ DeepKeypointDetector detector; keypoints = detector.Predict(image); } ``` #### 与传统SLAM的区别 相比于经典的几何法构建起来的传统SLAM方案,DK-SLAM主要优势体现在以下几个方面: - 更加精准可靠的特征提取能力; - 对光照变化、纹理缺乏等情况有更好的适应性; - 可能会减少对外部传感器(比如IMU惯导单元)的需求程度; 然而也存在一些挑战,例如计算资源消耗较大等问题需要进一步解决。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值