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

申明:本篇博客只是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版本的代码。但总归是一次宝贵的经验,分享出来和大家一起讨论,感谢大家的浏览与支持。

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值