申明:本篇博客是在voxelnet_tensorflow版本 代码复现的过程中并不理想,经常导致内存泄漏死机,无法正常训练,在使用各种办法之后终于找到了voxelnet_pytorch版本的代码来进行复现,经过本人亲自测试,这个版本的代码要比前一个版本的好很多,以下步骤都是本人亲自实践最后成功运行。在这过程中参考了这一篇博客(https://blog.csdn.net/weixin_40805392/article/details/99549300),但是博客里面所提供的代码地址仍然是voxelnet_tensorflow版本的,不过正是因为这篇博客我才知道还有voxelnet_pytorch版本,很感谢他,也感谢原作者无私奉献的程序,在他们的帮助下成功实现了voxelnet_pytorch代码的复现,现在分享出来与大家一起学习交流。
运行系统:Ubuntu16.04
运行环境:使用virtualenv创建的voxelnet_pytorch虚拟环境
使用语言:Ubuntu1604自带的Python3.5
硬件支持:GTX1080Ti + CUDA9.0+CUDNN7.3.1 + PyTorch 0.4.1
注意:在开始之前,自己的电脑中需要 安装好 英伟达驱动 + CUDA9.0+CUDNN7.3.1
(相关的代码、数据、驱动,也可以使用我分享的百度云链接,链接: https://pan.baidu.com/s/1aRsem0f5mfhGnwHTv5bpCA 提取码: sqsi )
可以使用以下命令查看cuda和cudnn的版本
cat /usr/local/cuda/version.txt
cat /usr/local/cuda/include/cudnn.h | grep CUDNN_MAJOR -A 2
(这里所用的虚拟环境为Python3.5,程序要求使用python3)
virtualenv -p /usr/bin/python3.5 voxelnet_pytorch
(注:根据自己的实际路径找到创建好的虚拟环境进行激活)
source ~/voxelnet_pytorch/bin/activate
创建虚拟环境详情请见(https://blog.csdn.net/r1141207831/article/details/95480766)如果已经创建好了,请忽略!
根据readme要求需要安装以下库依赖库
python3.5+
(点击可以选择下载相对应版本的pytorch)
TensorBoardX
(tested on 1.4)OpenCV
Pillow
(for add_image in TensorBoardX)Boost
(for compiling evaluation code)(我在实际运行过程中安装了以下依赖库,均使用清华源进行安装,速度会快一些,逐步安装即可,当然如果你遇到还有缺失的库,如法炮制安装即可)
pip install torch-0.4.1-cp35-cp35m-linux_x86_64.whl #这一步需要下载好torch-0.4.1的安装包
pip install numpy -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install TensorBoardX==1.4 -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install Pillow -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install Boost -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install Cython -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install OpenCV-python -i https://pypi.tuna.tsinghua.edu.cn/simple
在此地址(https://github.com/Hqss/VoxelNet_PyTorch)下载voxelnet_pytorch的代码,下载完毕之后解压,并进入该目录。
python utils/setup.py build_ext --inplace
cd eval/KITTI
g++ -I path/to/boost/include -o evaluate_object_3d_offline evaluate_object_3d_offline.cpp
cd eval/KITTI
chmod +x launch_test.sh
从此处下载3D KITTI检测数据集。注释的描述可以在这里找到。要下载的数据包括:
'training'
and 'testing'
sub-folders into 'data/KITTI/point_cloud'
'training'
sub-folder into 'data/KITTI/label'
'training'
and 'testing'
sub-folders into 'data/KITTI/calib'
'training'
and 'testing'
sub-folders into 'data/KITTI/image'
(注:如果不想自己动手,也可以使用我已经裁剪好的数据进行使用(链接: https://pan.baidu.com/s/14evExO4UOSyp0AEi9C-y8A 提取码: cdqa )
裁剪点云数据以进行训练和验证。图像坐标外部的点云将被删除。修改preproc / crop.py中的数据路径并运行它以生成裁剪的数据。请注意,裁剪的点云数据将覆盖原始点云数据。
在这里下载train/val split 协议,并将其解压缩为'data/KITTI'
。修改'preproc\split.py'
中的数据路径并运行它以生成具有以下结构的train / val文件夹:
└── data
├── KITTI
└── MD_KITTI
├── training <-- training data
| ├── image_2
| ├── label_2
| └── velodyne
└── validation <--- evaluation data
├── image_2
├── label_2
└── velodyne
1、在config.py中指定要使用的GPU。当前,该代码仅支持单个GPU。
2、使用所需的超参数运行train.sh以开始训练:
在训练之前需要先更改一下train.py文件中的两处地方:
a.在代码开头添加以下代码
import sys
sys.path.remove('/opt/ros/kinetic/lib/python2.7/dist-packages')
b.修改max epoch的默认值
修改 parser.add_argument('--max_epoch', type = int, default = 1, help = 'max epoch') 里面的 default=160
c.然后执行以下命令开始训练。
bash train.sh
3、训练完成后,运行parse.sh生成学习曲线。
bash parse.sh
4、查看训练模型
在save_model / pre_trained_car中有一个预先训练的汽车模型
1、训练完成后,运行test.sh对验证集产生最终预测。将--tag标志更改为pre_trained_car将测试预训练的模型(要完成)。
bash test.sh
注意结果将被转储到preds / data中。将--vis标志设置为True可以将可视化文件转储到preds / vis中。
2、运行以下命令以测量预测的定量性能:
./eval/KITTI/evaluate_object_3d_offline ./data/MD_KITTI/validation/label_2 ./preds
至此VoxelNet_PyTorch训练过程已经结束,这个代码是继上一次VoxelNet_TensorFlow结束之后进行的又一个版本复现,分享出来和大家一起讨论,感谢大家的浏览与支持。