代码复现:voxelnet_pytorch版本(3D-detection)

申明:本篇博客是在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

一、使用virtualenv创建虚拟环境

(这里所用的虚拟环境为Python3.5,程序要求使用python3)

1、使用以下命令创建voxelnet_tensorflow虚拟环境:

virtualenv -p /usr/bin/python3.5 voxelnet_pytorch

2、使用以下命令激活虚拟环境:

(注:根据自己的实际路径找到创建好的虚拟环境进行激活)

 source ~/voxelnet_pytorch/bin/activate

创建虚拟环境详情请见(https://blog.csdn.net/r1141207831/article/details/95480766)如果已经创建好了,请忽略!

二、安装依赖

根据readme要求需要安装以下库依赖库

  • python3.5+
  • Pytorch (tested on 0.4.1) (点击可以选择下载相对应版本的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

三、程序安装

1、下载代码

    在此地址(https://github.com/Hqss/VoxelNet_PyTorch)下载voxelnet_pytorch的代码,下载完毕之后解压,并进入该目录。

2、编译Cython模块

python utils/setup.py build_ext --inplace

3、编译evaluation代码

cd eval/KITTI
g++ -I path/to/boost/include -o evaluate_object_3d_offline evaluate_object_3d_offline.cpp

4、给evaluation脚本赋予执行权限

cd eval/KITTI
chmod +x launch_test.sh

四、数据准备

1、下载数据

    从此处下载3D KITTI检测数据集。注释的描述可以在这里找到。要下载的数据包括:

  • Velodyne point clouds (29 GB): unzip it and put 'training' and 'testing' sub-folders into 'data/KITTI/point_cloud'
  • Training labels of object data set (5 MB) for input labels of VoxelNet: unzip it and put 'training' sub-folder into 'data/KITTI/label'
  • Camera calibration matrices of object data set (16 MB) for visualization of predictions: unzip it and put 'training' and 'testing' sub-folders into 'data/KITTI/calib'
  • Left color images of object data set (12 GB) for visualization of predictions: unzip it and put 'training' and 'testing' sub-folders into 'data/KITTI/image'

2、裁剪数据

    (注:如果不想自己动手,也可以使用我已经裁剪好的数据进行使用(链接: https://pan.baidu.com/s/14evExO4UOSyp0AEi9C-y8A 提取码: cdqa )

    裁剪点云数据以进行训练和验证。图像坐标外部的点云将被删除。修改preproc / crop.py中的数据路径并运行它以生成裁剪的数据。请注意,裁剪的点云数据将覆盖原始点云数据。

3、数据分类

    在这里下载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

4、更新config.py和eval / KITTI / launch_test.sh中的数据集目录

五、开始训练

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结束之后进行的又一个版本复现,分享出来和大家一起讨论,感谢大家的浏览与支持。

发布了19 篇原创文章 · 获赞 21 · 访问量 5515

猜你喜欢

转载自blog.csdn.net/r1141207831/article/details/103000339