pointpillars点云算法TensorRT环境加速系列一

简述

  近两年传统视觉方式开始往3d点云上面进行学习,以此来达到现实三维空间中的目标检测。上一篇文章second.pytorch环境配置记录简单写了一下second.pytorch算法的环境配置。当然,second.pytorch代码已经集成了pointpillars算法,不过经过一些修改。我对算法原始作者代码nutonomy/second.pytorch的代码进行一定程度的修改,以此能够有效的将模型导出成为onnx中间件(分为pfe.onnxrpn.onnx两个onnx模型),最后通过TensorRT来载入加速模型推理速度。注:将pointpillars算法pytorch模型转换成为中间件IR:onnx,我参考了网上的k0suke-murakami/train_point_pillars,并且对其里面的代码进行修改,because 这部分代码不再进行维护了,所以我修改其中网络小功能以及一些bugs. 当然,很感谢k0suke-murakami做出的工作,对我很受启发。

操作步骤

Step 1 : 首先当然是下载代码与对应的docker环境

我在nutonomy/second.pytorch修改的代码地址如下:

git clone https://github.com/SmallMunich/nutonomy_pointpillars.git

pointpillars算法所对应的docker环境:

docker pull smallmunich/suke_pointpillars:v0

docker将镜像pull下来之后,进入容器后激活pointpillars运行虚拟环境:

conda activate pointpillars

Step 2: 训练与导出ONNX模型操作:
  训练与数据准备步骤与原作者官网相同,做过训练的可以跳过此步骤:

生成预训练数据:

└── KITTI_DATASET_ROOT
       ├── training    <-- 7481 train data
       |   ├── image_2 <-- for visualization
       |   ├── calib
       |   ├── label_2
       |   ├── velodyne
       |   └── velodyne_reduced <-- empty directory
       └── testing     <-- 7580 test data
           ├── image_2 <-- for visualization
           ├── calib
           ├── velodyne
           └── velodyne_reduced <-- empty directory

数据格式如上,数据路径是你的存储kitti路径:

KITTI_DATASET_ROOT=/data/sets/kitti_second/ 

Create-kitti-infos

python create_data.py create_kitti_info_file --data_path=KITTI_DATASET_ROOT

Create-reduced-pointcloud

python create_data.py create_reduced_point_cloud --data_path=KITTI_DATASET_ROOT

Create-groundtruth-database-infos

python create_data.py create_groundtruth_database --data_path=KITTI_DATASET_ROOT

Modify-config-file

train_input_reader: {
  ...
  database_sampler {
    database_info_path: "/path/to/kitti_dbinfos_train.pkl"
    ...
  }
  kitti_info_path: "/path/to/kitti_infos_train.pkl"
  kitti_root_path: "KITTI_DATASET_ROOT"
}
...
eval_input_reader: {
  ...
  kitti_info_path: "/path/to/kitti_infos_val.pkl"
  kitti_root_path: "KITTI_DATASET_ROOT"
}

训练步骤:

cd ~/second.pytorch/second
python ./pytorch/train.py train --config_path=./configs/pointpillars/car/xyres_16.proto --model_dir=/path/to/model_dir

进行评估模型:

cd ~/second.pytorch/second/
python pytorch/train.py evaluate --config_path= configs/pointpillars/car/xyres_16.proto --model_dir=/path/to/model_dir

  如果模型评估结束,无错误,接下来可以进入模型中间件转换的步骤啦.

算法pytorch模型ONNX导出为pfe.onnx与rpn.onnx

  在运行pytorch模型导出为onnx模型之前,你需要将工程nutonomy_pointpillars下面second/pytorch/models/voxelnet.py 文件中的rows: 686 这行代码取消注释,让其返回voxel_features的特征;取消注释之后,下面运行如下命令:

cd ~/second.pytorch/second/
python pytorch/train.py onnx_model_generate --config_path= configs/pointpillars/car/xyres_16.proto --model_dir=/path/to/model_dir

  然后,你会在nutonomy_pointpillars/second文件夹下面看见两个onnx文件分别是:pfe.onnx与rpn.onnx模型。后续章节会继续分析pointpillars相关代码与TensorRT引擎下的速度性能分析,敬请关注。

小结

  开始尝试做3d点云目标检测算法有一段时间了,pointpillars算法从算力与精度上来看是目前比较优秀的3d-object-detection算法。pointpillars算法最突出的是提出一种柱形的编码功能,点云依然采取常用的体素组织起来。对比VoxelNet 直接采用体素3D卷积,SECOND的稀疏卷积,pointpillars采用pillar方式转换成为2D卷积来加深网络,以此来提高效率与精度。至于后面接SSD还是RPN等网络,只是相对于2d卷积下的网络根据应用场景与需求来进行选取。

参考文献

https://arxiv.org/abs/1812.05784

https://github.com/nutonomy/second.pytorch

https://zhuanlan.zhihu.com/p/67314405

https://github.com/k0suke-murakami/train_point_pillars

评论 36
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值