一、论文介绍
2019年CVPR深度预测论文
Recurrent Neural Network for (Un-)supervised Learning of Monocular Video Visual Odometry and Depth
论文链接:https://ieeexplore.ieee.org/document/8954360
代码链接:https://github.com/wrlife/RNN_depth_pose
数据集链接:
数据集解析链接:KITTI数据集calib文件解析
二、配置环境
论文中要求的是tensorflow1.12.0,但是我的环境用的tensorflow-gpu 2.4版本
(问就是装不上1.12.0o(╥﹏╥)o)
下面就是在tensorflow-gpu2.20,ubuntu20.04, python3.7版本下的代码调试记录。
我先编译的model.py
1、tensorflow.contrib
原因:tensorflow2.x版本没有contrib这个包了
解决办法:
a、安装第三方库
pip install tf-slim
b.修改源码
#import tensorflow.contrib.slim as slim
import tf_slim as slim
参考教程:https://blog.csdn.net/qq_38251616/article/details/114820099
2.opencv
import cv2 as cv
ModuleNotFoundError: No module named 'cv2'
解决办法:
pip install opencv-python
3.matplotlib
pip install matplotlib
4.AttributeError: module ‘tensorflow’ has no attribute ‘x’
AttributeError: module ‘tensorflow’ has no attribute ‘placeholder’
等因为tensorflow2.x不能调用1.x的
将所有调用tensorflow的地方都换为这两句。(血泪教训!!tensorflow版本不一致真的太烦了!!)
#import tensorflow as tf
import tensorflow.compat.v1 as tf
tf.disable_v2_behavior()
4.安装kitti数据集处理的python包
https://github.com/utiasSTARS/pykitti
pip install pykitti
三、pykitti——kitti专用处理包说明
1、创建一个dataset
其中dataset中包含的属性
dataset = pykitti.raw(basedir, date, drive)
# dataset.calib: Calibration data are accessible as a named tuple
# dataset.timestamps: Timestamps are parsed into a list of datetime objects
# dataset.oxts: List of OXTS packets and 6-dof poses as named tuples
# dataset.camN: Returns a generator that loads individual images from camera N
# dataset.get_camN(idx): Returns the image from camera N at idx
# dataset.gray: Returns a generator that loads monochrome stereo pairs (cam0, cam1)
# dataset.get_gray(idx): Returns the monochrome stereo pair at idx
# dataset.rgb: Returns a generator that loads RGB stereo pairs (cam2, cam3)
# dataset.get_rgb(idx): Returns the RGB stereo pair at idx
# dataset.velo: Returns a generator that loads velodyne scans as [x,y,z,reflectance]
# dataset.get_velo(idx): Returns the velodyne scan at idx
#self.cam3_files = sorted(glob.glob(os.path.join(self.data_path, 'image_03', 'data', '*.{}'.format(self.imtype))))
2、尝试了解pykitti
可以运行github上的文件demo_raw.py,可以得到以下信息
四、复现步骤
4.1 生成训练数据
新建一个dataset/KITTI文件夹,将下载好的KITTI数据集中的raw文件夹和depth文件夹,放在dataset文件夹下。(原始代码中没有新建文件夹的命令,也可以自己写)
其中数据集的目录分布为如下所示。
图KITTI
新建一个文件夹training_data在dataset文件夹
运行generate_kitti_train_datasets.py,生成很多cam3_[date]_ drive_[number]_sync.tfrecords文件。
4.2 运行程序
main.py文件。
修改dataset_dir为.tfrecords文件所在的目录,也就是dataset/KITTI/training_data。
运行main.py文件就开始训练了!
loss为nan.,.,能跑起来,但是不知道哪里出了问题o(╥﹏╥)o,有大佬知道吗