申明:本篇博客只是voxelnet_tensorflow版本 (3D-detection) 代码的复现,并不涉及论文的解读,以下步骤都是本人亲自实践最后成功运行,由于在原地址程序https://github.com/qianguih/voxelnet中的代码是使用两张GTX01080ti英伟达显卡进行训练的,所以在自己复现过程中,还需要有一点小小的改动才能够在自己的电脑上运行,本次代码复现要感谢我的同学慷慨帮助,感谢原作者无私奉献的程序,在他们的帮助下成功实现了voxelnet_tensorflow代码的复现,现在分享出来与大家一起学习交流。
程序运行环境:
运行系统:Ubuntu16.04
运行环境:使用virtualenv创建的voxelnet_tensorflow虚拟环境
使用语言:Ubuntu1604自带的Python3.5
硬件支持:GTX1080Ti + CUDA8.0 + CUDNN6.0 + TensorFlow1.4.0
代码复现过程:
注意:在开始之前,自己的电脑中需要 安装好 英伟达驱动 + CUDA8.0 + CUDNN6.0
(相关的代码、数据、驱动,也可以使用我分享的百度云链接,链接: https://pan.baidu.com/s/1EbbEDUetsvjh5Uqcqd3pPQ 提取码: 72ke)
可以使用以下命令查看cuda和cudnn的版本
cat /usr/local/cuda/version.txt
cat /usr/local/cuda/include/cudnn.h | grep CUDNN_MAJOR -A 2
一、使用virtualenv创建虚拟环境
(这里所用的虚拟环境为Python3.5,程序要求使用python3)
1、使用以下命令创建voxelnet_tensorflow虚拟环境:
virtualenv -p /usr/bin/python3.5 voxelnet_tensorflow
2、使用以下命令激活虚拟环境:
(注:根据自己的实际路径找到创建好的虚拟环境进行激活)
source ~/voxelnet_tensorflow/bin/activate
创建虚拟环境详情请见(https://blog.csdn.net/r1141207831/article/details/95480766)如果已经创建好了,请忽略!
二、安装依赖
根据readme要求需要安装以下库依赖库
python3.5+
TensorFlow
(tested on 1.4.1)opencv
shapely
numba
easydict
(我在实际运行过程中安装了以下依赖库,均使用清华源进行安装,速度会快一些,逐步安装即可,当然如果你遇到还有缺失的库,如法炮制安装即可)
pip install Tensorflow-gpu==1.4 -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install OpenCV-python -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install numpy==1.6 -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install shapely -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install numba -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install easydict -i https://pypi.tuna.tsinghua.edu.cn/simple
三、程序安装
1、下载代码
在此地址(https://github.com/Hqss/VoxelNet_TensorFlow)下载voxelnet_tensorflow的代码,下载完毕之后解压,并进入该目录。
2、编译Cython模块
python3 setup.py build_ext --inplace
3、编译evaluation代码
cd kitti_eval
g++ -o evaluate_object_3d_offline evaluate_object_3d_offline.cpp
4、给evaluation脚本赋予执行权限
cd kitti_eval
chmod +x launch_test.sh
四、数据准备
1、下载数据
从这里在KITTI官方网址下载3D KITTI检测数据集,下载的数据要包括:
- Velodyne point clouds (29 GB): input data to VoxelNet
- Training labels of object data set (5 MB): input label to VoxelNet
- Camera calibration matrices of object data set (16 MB): for visualization of predictions
- Left color images of object data set (12 GB): for visualization of predictions
2、裁剪数据
(注:如果不想自己动手,也可以使用我已经才建好的数据进行使用链接: https://pan.baidu.com/s/1zmbGvKckF6MSDhGtyFJrfg 提取码: hbt8)
在该项目中,我们使用裁剪的点云数据进行训练和验证。图像坐标外部的点云将被删除。更新data / crop.py中的目录,然后运行data / crop.py生成裁剪的数据。请注意,裁剪的点云数据将覆盖原始点云数据。
3、数据分类
根据此处的协议将训练集分为训练集和验证集。并重新排列文件夹,使其具有以下结构:
└── DATA_DIR
├── training <-- training data
| ├── image_2
| ├── label_2
| └── velodyne
└── validation <--- evaluation data
| ├── image_2
| ├── label_2
| └── velodyne
4、更新config.py和kitti_eval / launch_test.sh中的数据集目录
五、开始训练
1、在config.py中指定要使用的GPU
在config.py中找到以下内容:
__C.GPU_AVAILABLE = '0,1'
然后改成以下内容:
__C.GPU_AVAILABLE = '0'
2、使用所需的超参数运行train.py以开始训练
在训练之前需要先更改一下train.py文件中的两处地方:
a.在代码开头添加以下代码
import sys
sys.path.remove('/opt/ros/kinetic/lib/python2.7/dist-packages')
b.修改max epoch的默认值
修改parser.add_argument('-b', '--single-batch-size', type=int, nargs='?', default=2, help='set batch size')里面的default=1
c.然后执行以下命令开始训练。
python train.py --alpha 1 --beta 10
3、训练结束之后,执行parse_log.py将生成学习曲线
python parse_log.py predictions
4、查看训练模型
在save_model / pre_trained_car中有一个针对汽车的预训练模型
六、评估
1、训练完成后,运行test.py -n默认值以对验证集产生最终预测。将-n标志更改为pre_trained_car将开始测试预训练模型(目前仅提供汽车模型)。
python test.py
结果将转储到predictions/data
中。如果想要转储可视化文件,请将--vis标志设置为True,并将其保存到predictions/vis
中。
2、运行以下命令以测量预测的定量性能:
./kitti_eval/evaluate_object_3d_offline [DATA_DIR]/validation/label_2 ./predictions
至此VoxelNet_TensorFlow训练过程已经结束,但是这个版本的代码,非常的耗内存,经常导致机器死机,代码需要进一步的优化,但是自己能力不足,所以下一步转战VoxelNet_PyTorch版本的代码。但总归是一次宝贵的经验,分享出来和大家一起讨论,感谢大家的浏览与支持。