一、项目介绍
传统的VO方法pipeline一般需要包括:特征提取,特征匹配,运动估计,局部优化等模块。尽管其中一些方法已经展现了优越的性能,但通常仍需要精心设计和专门进行微调才能适应不同的任务和环境需求。同时单目视觉里程计缺失尺度信息,往往需要一些先验知识来恢复绝对尺度估计。
针对传统的方法的不足,DeepVO方法使用深度递归卷积神经网络(RCNNG),提出了一种新颖的端到端单目VO的框架。由于它是以端到端的方式进行训练和配置的,因此它可以直接从一系列原始的RGB图像(视频)中计算得到姿态,而无需采用任何传统VO框架中的模块。
DeepVO方法应该是第一个采用LSTM方法来实现视觉里程计的方法,具有里程碑的意义。
由于作者没有开源,感谢很多大佬复现了他的方法,如ChiWeiHsiao复现了DeepVO方法,github上取名为:DeepVO-pytorch。
非常感谢原文作者和ChiWeiHsiao对VO做出的贡献。
本文基于ChiWeiHsiao/DeepVO-pytorch版本项目部署,进行简单的介绍。
DeepVO方法pipeline详细分析如下图所示:
二、项目下载
下载地址:https://github.com/ChiWeiHsiao/DeepVO-pytorch
下载命令:
git clone GitHub - ChiWeiHsiao/DeepVO-pytorch: PyTorch Implementation of DeepVO
我的项目名称修改为:DeepVO。
三、项目配置
1、下载KITTI数据集和预训练模型
(1)自动下载数据集(网速块)
运行KITTI/downloader.sh自动下载数据集和预训练模型(网速快)
(注意:请使用bash命令运行,sh命令出现“downloader.sh: 3: Syntax error: "(" unexpected”错误)
bash KITTI/downloader.sh
(2)手动下载数据集(网速慢)
注意:服务器如果没有配置VPN,下载KITTI数据非常慢,可以自己先通过其他渠道下载,再上传至KITTI目录(注意文件夹的命名)
如:将文件夹2011_10_03_drive_0027下的image_03中的所有RGB图像放置在文件夹00中。
文件夹 名称 | 文件名 | 下载地址 | 备注 |
00 | 2011_10_03_drive_0027 | https://s3.eu-central-1.amazonaws.com/avg-kitti/raw_data/2011_10_03_drive_0027/2011_10_03_drive_0027_sync.zip | 训练集 |
01 | 2011_10_03_drive_0034 | https://s3.eu-central-1.amazonaws.com/avg-kitti/raw_data/2011_10_03_drive_0034/2011_10_03_drive_0034_sync.zip | 训练集 |
02 | 2011_10_03_drive_0042 | https://s3.eu-central-1.amazonaws.com/avg-kitti/raw_data/2011_10_03_drive_0042/2011_10_03_drive_0042_sync.zip | 训练集 |
03 | 2011_09_26_drive_0067 | https://s3.eu-central-1.amazonaws.com/avg-kitti/raw_data/2011_09_26_drive_0067/2011_09_26_drive_0067_sync.zip | 训练集 |
04 | 2011_09_30_drive_0016 | https://s3.eu-central-1.amazonaws.com/avg-kitti/raw_data/2011_09_30_drive_0016/2011_09_30_drive_0016_sync.zip | 测试集 |
05 | 2011_09_30_drive_0018 | https://s3.eu-central-1.amazonaws.com/avg-kitti/raw_data/2011_09_30_drive_0018/2011_09_30_drive_0018_sync.zip | 测试集 |
06 | 2011_09_30_drive_0020 | https://s3.eu-central-1.amazonaws.com/avg-kitti/raw_data/2011_09_30_drive_0020/2011_09_30_drive_0020_sync.zip | 训练集 |
07 | 2011_09_30_drive_0027 | https://s3.eu-central-1.amazonaws.com/avg-kitti/raw_data/2011_09_30_drive_0027/2011_09_30_drive_0027_sync.zip | 测试集 |
08 | 2011_09_30_drive_0028 | https://s3.eu-central-1.amazonaws.com/avg-kitti/raw_data/2011_09_30_drive_0027/2011_09_30_drive_0027_sync.zip | 训练集 |
09 | 2011_09_30_drive_0033 | https://s3.eu-central-1.amazonaws.com/avg-kitti/raw_data/2011_09_30_drive_0033/2011_09_30_drive_0033_sync.zip | 测试集 |
10 | 2011_09_30_drive_0034 | https://s3.eu-central-1.amazonaws.com/avg-kitti/raw_data/2011_09_30_drive_0034/2011_09_30_drive_0034_sync.zip | 训练集 |
DeepVO预训练模型下载:
https://drive.google.com/file/d/1l0s3rYWgN8bL0Fyofee8IhN-0knxJF22/view
放在./models文件夹下。
文件名为:
t000102050809_v04060710_im184x608_s5x7_b8_rnn1000_optAdagrad_lr0.0005.model.train
(3)下载ground truth pose
从 KITTI Visual Odometry下载ground truth pose
下载地址:
存放在:./KITTI/pose_GT/文件夹下。
2、运行preprocess.py
根据KITTI devkit中的readme文件删除未使用的图像;
将KITTI的绝对姿态(12个浮点数 [R|t])转换为6个浮点数(欧拉角 + 平移);
并将转换后的绝对姿态保存为.npy文件。
3、下载预训练模型FlowNet ( CNN part )
下载地址:
https://drive.google.com/drive/folders/16eo3p9dO_vmssxRoZCmWkTpNjKRzJzn5
随便下载哪个都可以。
下载之后放在./pretrained目录下
4、指定路径和超参数
在文件paras.py中指定数据集的路径和超参数
模型训练和验证时需要的所有参数全部在这里设置(这个工程思想很好,避免在脚本文件中带上非常多的参数)。
如果您的计算资源有限,请注意以下参数:
batch_size:根据您的GPU内存选择批处理大小
img_w、img_h:将图像降采样以适应GPU内存
pin_mem:加速GPU和内存之间的数据交换,如果您的RAM不够大,请将其设置为False。
5、训练模型
运行main.py训练模型
训练的模型和优化的参数保存在:models目录下;
记录存放在:records目录中。
6、评估模型
运行test.py预测位姿
输出在:result目录中;
文件名类似于:out_00.txt等。
7、可视化
运行visualize.py,可视化预测的位姿
8、其他文件
model.py:模型在这里调优
data_helper.py:定制PyTorch dataset and sampler
三、测试结果
使用预训练模型,对01、04、05、10四个序列进行测试,测试结果如下。
参考文献:
[1] 1709.08429.pdf (arxiv.org)
[2] GitHub - ChiWeiHsiao/DeepVO-pytorch: PyTorch Implementation of DeepVO