深度视觉里程计DeepVO(ICRA)的运行笔记

最近运行了github上的一个deepvo代码,在此做一个学习笔记。

1. 文章以及整体结构
文章:DeepVO: Towards End-to-End Visual Odometry with Deep Recurrent Convolutional Neural Networks(基于深度循环卷积神经网络的端到端视觉里程计)
作者:Sen Wang, Ronald Clark, Hongkai Wen and Niki Trigoni
来源:ICRA2017

deepvo网络结构如下:CNN+RNNs (单目VO)
深度视觉里程计DeepVO(ICRA)的运行笔记_第1张图片

CNN网络的结构:
深度视觉里程计DeepVO(ICRA)的运行笔记_第2张图片
CNN分析

  • CNN学习的是几何特征。

RNNs网络的结构:
深度视觉里程计DeepVO(ICRA)的运行笔记_第3张图片
RCNNs分析

  • 将卷积层6之后提取的特征放入RCNNs进行建模。

  • 两种激活函数:tanh函数、sigmod函数

  • LSTM神经元的输入有三部分:当前网络的输入Xt,上一时刻的输出ht-1、上一时刻的单元状态Ct-1

  • ht-1和xt进入细胞后乘以各自的权重然后作加法。

  • 细胞内更新过程:
    深度视觉里程计DeepVO(ICRA)的运行笔记_第4张图片
    代价函数和优化
    将系统看成条件概率模型:xt发生的条件下Yt发生的概率
    单目RGB图像序列Xt=(x1,…,xn),位姿Yt=(y1,…,yn)随时间的条件概率

    视觉里程计的优化参数θ*:找最优

    即真实位姿与估计位姿之间的欧式距离最小。损失函数由所有的位置p和方向φ的均方差(MSE)组成。(ϕ为欧式角)

参考的deepvo解析文章:【泡泡图灵智库】DeepVO

自己的理解:
a. 使用一种新型的网络–深度递归卷积神经网络(RNNs),设计出一种新颖的端到端的单目vo框架。
b.网络结构为CNN+RNNs,CNN自动学习有效的特征表示,RNN对时序模型(运动模型)、数据关联模型(图像序列)进行隐式建模。
c.使用的数据集为KITTI数据集中的灰色图像集为: data_odometry_poses.zip和data_odometry_gray.zip

2. 代码运行:
参考的代码:https://github.com/Kallaf/Visual-Odometry
数据集:KITTI官网

odometry-------Download odometry data set (grayscale, 22 GB)+Download odometry ground truth poses (4 MB)

深度视觉里程计DeepVO(ICRA)的运行笔记_第5张图片运行环境:.ubuntu16.04+Python+创建一个虚拟环境,在虚拟环境中安装tensorflow、opencv、opencv-contrib+jupyter notebook
创建虚拟环境教程链接:ubuntu16.04下安装&配置anaconda+ tensorflow 新手教程
安装完之后测试一下import cv2,看是否会报错,如果报错,则参考链接:No module named cv2的完美解决方法!

然后在运行代码时,还会出现一个关于CV2的问题:
ImportError: /opt/ros/kinetic/lib/python2.7/dist-packages/cv2.so: undefined symbol: PyCObject_Type
可以用以下方法:

import sys
sys.path.remove('/opt/ros/kinetic/lib/python2.7/dist-packages')

3. 运行注意事项:

a. 数据集很大,两个文件一共23GB,为了下载数据集,我买了迅雷的会员,下载了一天一夜才搞定(请不要嘲笑我,哈哈)下载完之后发现ubuntu内存不够,安装双系统的时候只分了60G(不知道当时脑子咋想的,还觉得60G很大了,O(∩_∩)O~)下载好数据集后,由于空间不够,连解压都解压不了,悲痛欲绝,然后我又把自己的ubuntu扩容到了快300G,ubuntu16.04的扩容方法在下一篇博客。
b.参考的源代码中的Mount drive部分不需要运行,这部分是用了谷歌上的虚拟GPU,我们在自己的笔记本上运行,不需要这部分,如下截图:
(如果自己有谷歌账号,想在谷歌上使用虚拟GPU运行,可以点击open in colab)
深度视觉里程计DeepVO(ICRA)的运行笔记_第6张图片c.需要修改的部分:自己的数据集存放位置。数据集解压之后都会有一个dataset文件夹,把sequences和poses两个文件夹放同一个dataset文件夹下,代码中的数据集路径为…/dataset/

4. 总结:
目前只是运行出来和github中的结果一样,但有很多不理解的地方,下一步理解之后再来更新。

你可能感兴趣的:(深度视觉里程计DeepVO(ICRA)的运行笔记)