当前位置:   article > 正文

基于OpenPCDet框架进行Pointpillars算法环境搭建并基于TensorRT和ROS部署_openpcdet怎样选择最后的权重文件

openpcdet怎样选择最后的权重文件

参考链接

基于OpenDet进行训练,基于tensorrt-8.5进行部署并移植到ROS
参考链接:https://github.com/windzu/pointpillars

本篇指涉及环境搭建和自己测试的效果演示,部分修改的代码目前不方便放出,留待以后吧,而且只是一些小改动实现也比较简单。

训练和推理环境:

  • 显卡:3090Ti
  • CUDA:电脑本地安装了cuda11.6但是在conda环境中配置的是cuda11.3,倒是也没耽误训练和推理。
  • tensorrt:8.5版本

1.创建虚拟环境

conda create -n pointpillars_ros python=3.8
conda activate pointpillars_ros
conda install pytorch=1.11.0 torchvision torchaudio cudatoolkit=11.3 -c pytorch -y
  • 1
  • 2
  • 3

2.安装OpenDet

git clone https://github.com/open-mmlab/OpenPCDet.git
cd OpenPCDet
pip install spconv-cu113
pip install av2
pip install kornia==0.5.8
pip install -r requirements.txt
pip install -v e .
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

3.安装用于模型转换的库

pip install pyyaml scikit-image onnx==1.14.0 onnx-simplifier==0.4.33
pip install onnx_graphsurgeon==0.3.27 --index-url https://pypi.ngc.nvidia.com
pip install onnxruntime==1.15.1
  • 1
  • 2
  • 3

4.数据集转换

之前使用mmdetection3d中给出的数据预处理脚本得到的代码无法用在这里,好像是数据格式之类的对不上,无奈再转一次

kitti3D检测数据集下载完成后整理为以下目录:

kitti
├── testing
│   ├── calib
│   ├── image_2
│   ├── velodyne
├── training
│   ├── calib
│   ├── image_2
│   ├── label_2
│   ├── velodyne
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

然后将testingtraining文件夹拷贝到OpenPCDet/data/kitti/目录下,此时该目录的结构为:

├── data
│   ├── kitti
│   │   ├── ImageSets
│   │   ├── testing
│   │   │   ├── calib
│   │   │   ├── image_2
│   │   │   ├── velodyne
│   │   ├── training
│   │   │   ├── calib
│   │   │   ├── image_2
│   │   │   ├── label_2
│   │   │   ├── velodyne
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

【注意】如果不想将数据集拷贝到代码目录下,需要修改OpenPCDet/tools/cfgs/dataset_configs/kitti_dataset.yaml中的数据集根目录

运行以下程序进行数据集转换

python -m pcdet.datasets.kitti.kitti_dataset create_kitti_infos tools/cfgs/dataset_configs/kitti_dataset.yaml
  • 1

结束后会生成相应的pkl文件:
在这里插入图片描述

5.模型训练

修改OpenPCDet/tools/cfgs/dataset_configs/kitti_dataset.yaml目录下的数据集路径

根据自己的配置修改该文件中的BATCH_SIZE_PER_GPU,NUM_EPOCHS,LR

cd OpenPCDet/tools
python train.py --cfg_file ./cfgs/kitti_models/pointpillar.yaml
  • 1
  • 2

模型训练结束后权重文件自动保存到OpenPCDet/output/cfgs/kitti_models/pointpillar/default/ckpt目录下,选择最后一次迭代得到的权重文件checkpoints_epoch_80.pth

6.部署

安装tensorrt

在官网下载和自己cuda版本对应的tensorrt,这里下载的8.5
https://developer.nvidia.com/nvidia-tensorrt-8x-download

然后解压

cd python
pip install tensorrt-8.5.1.7-cp38-none-linux_x86_64.whl
cd ../graphsurgeon
pip install graphsurgeon-0.4.6-py2.py3-none-any.whl
sudo cp -r lib/* /usr/lib
sudo cp -r include/* /usr/include
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
vim ~/.bashrc
# 添加以下内容
export LD_LIBRARY_PATH=/home/tjsiasun/3rdparty/TensorRT-8.5.1.7/lib:$LD_LIBRARY_PATH
export LIBRARY_PATH=/home/tjsiasun/3rdparty/TensorRT-8.5.1.7/lib:$LIBRARY_PATH
 
source ~/.bashrc
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

模型转换

exporter.py文件的开头处加上一句:

import _init_path
  • 1

作者给出的代码本身有一个toolspect文件夹,模型转换的相关脚本在tools文件夹中,但是在跑脚本的时候会出现报错ImportError: cannot import name 'iou3d_nms_cuda' from 'pcdet.ops.iou3d_nms',因此直接将模型转换的文件移动到OpenPCDet/tools下。

cd tools
cp exporter.py exporter_paramters.py simplifier_onnx.py ../OpenPCDet/tools
  • 1
  • 2
python exporter.py --ckpt ./pointpillar_7728.pth
  • 1

编译ROS工程

如果是在conda虚拟环境下编译需要指定下python环境catkin_make -DPYTHON_EXECUTABLE=/usr/bin/python3,但部署环境只需要有tensorrt和cuda环境就可以了,不需要在conda环境下。

作者的ROS节点中将3D检测框封成了autoware_msgs消息格式,这里对作者的ROS节点进行了修改,在ROS节点中新增点云转BEV图像并在图像绘制检测框和发布检测结果等内容,另外就是为了适配开发需求至保留了前向的雷达数据。

为了方便测试,将3D检测数据集的velodyne点云数据转成了bag进行测试

【注意】在第一次运行程序时,播放数据集后需要稍微等待一会,会生成一个pointpillar.onnx.cache,下次再运行程序时便可以快速进行推理了

catkin_make
source devel/setup.bash
roslaunch det3d det3d.launch
# 新开一个终端
rosbag play kitti-11.bag
  • 1
  • 2
  • 3
  • 4
  • 5

结果

从结果上看,在3090 Ti上跑的话,推理时间在10ms以内,6-7ms的样子,但是推理效果差强人意吧(见下方视频),还是存在一些漏检误检情况的,除了算法本身的问题之外,将雷达换成更高线束或者固态激光雷达应该会好一些,留待后期验证

[DEBUG] [1714358006.911716987]: find points num: 119369
[DEBUG] [1714358006.920608202]: TIME: pointpillar: 7.42605 ms.
[DEBUG] [1714358006.920830268]: Bndbox objs: 2
[DEBUG] [1714358006.952122977]: >>>>>>>>>>>
[DEBUG] [1714358007.009191113]: find points num: 118731
[DEBUG] [1714358007.017682531]: TIME: pointpillar: 6.77171 ms.
[DEBUG] [1714358007.017896892]: Bndbox objs: 2
[DEBUG] [1714358007.058071466]: >>>>>>>>>>>
[DEBUG] [1714358007.114336414]: find points num: 118054
[DEBUG] [1714358007.122160031]: TIME: pointpillar: 6.39386 ms.
[DEBUG] [1714358007.122356912]: Bndbox objs: 3
[DEBUG] [1714358007.156686901]: >>>>>>>>>>>
[DEBUG] [1714358007.221342189]: find points num: 118725
[DEBUG] [1714358007.228728811]: TIME: pointpillar: 6.05872 ms.
[DEBUG] [1714358007.228962855]: Bndbox objs: 2
[DEBUG] [1714358007.265633679]: >>>>>>>>>>>
[DEBUG] [1714358007.326172815]: find points num: 118807
[DEBUG] [1714358007.334805892]: TIME: pointpillar: 7.41907 ms.
[DEBUG] [1714358007.334993421]: Bndbox objs: 2
[DEBUG] [1714358007.370434275]: >>>>>>>>>>>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20

【测试视频】

detect3d_example

报错梳理

【报错1】

在数据集转换时报错,找不到相应图像数据

  File "/workspace/aixiding/OpenPCDet/pcdet/datasets/kitti/kitti_dataset.py", line 69, in get_image_shape
    assert img_file.exists()
AssertionError
  • 1
  • 2
  • 3

OpenPCDet/data/kitti/ImageSets目录下给出了train.txt,test.txt等,因为在处理数据集时用了之前mmdetection3d的文件目录,所以出现了缺少文件的提示,用该目录下的ImageSets替换掉对应的文件即可

【报错2】

ImportError: cannot import name 'iou3d_nms_cuda' from 'pcdet.ops.iou3d_nms' (/home/tjsiasun/demos/pointpillars/tools/../pcdet/ops/iou3d_nms/__init__.py)
  • 1

【解决1】
首先将OpenPCDet/build目录下的编译文件删除,使用python setup.py develop进行安装

【报错3】

ModuleNotFoundError: No module named 'av2'
  • 1

【解决2】

pip install av2
  • 1

【报错4】

ModuleNotFoundError: No module named 'kornia'
  • 1

要注意版本,目前0.5.8版本安全

pip install kornia==0.5.8
  • 1

【报错5】

ModuleNotFoundError: No module named 'pcdet.models.backbones_3d.focal_sparse_conv'
  • 1

exporter.py文件的开头处加上一句:

import _init_path
  • 1
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/你好赵伟/article/detail/787543
推荐阅读
相关标签
  

闽ICP备14008679号