基于OpenPCDet框架进行Pointpillars算法环境搭建并基于TensorRT和ROS部署

参考链接

基于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

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 .

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

4.数据集转换

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

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

kitti
├── testing
│   ├── calib
│   ├── image_2
│   ├── velodyne
├── training
│   ├── calib
│   ├── image_2
│   ├── label_2
│   ├── velodyne

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

├── data
│   ├── kitti
│   │   ├── ImageSets
│   │   ├── testing
│   │   │   ├── calib
│   │   │   ├── image_2
│   │   │   ├── velodyne
│   │   ├── training
│   │   │   ├── calib
│   │   │   ├── image_2
│   │   │   ├── label_2
│   │   │   ├── velodyne

【注意】如果不想将数据集拷贝到代码目录下,需要修改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

结束后会生成相应的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

模型训练结束后权重文件自动保存到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
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

模型转换

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

import _init_path

作者给出的代码本身有一个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
python exporter.py --ckpt ./pointpillar_7728.pth

编译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

结果

从结果上看,在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]: >>>>>>>>>>>

【测试视频】

detect3d_example

报错梳理

【报错1】

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

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

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】
首先将OpenPCDet/build目录下的编译文件删除,使用python setup.py develop进行安装

【报错3】

ModuleNotFoundError: No module named 'av2'

【解决2】

pip install av2

【报错4】

ModuleNotFoundError: No module named 'kornia'

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

pip install kornia==0.5.8

【报错5】

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

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

import _init_path
  • 12
    点赞
  • 44
    收藏
    觉得还不错? 一键收藏
  • 40
    评论
要复现OpenPCDet中的PointPillars算法,可以按照以下步骤进行操作: 1. 首先,克隆OpenPCDet的GitHub仓库到本地。可以使用以下命令进行克隆: ``` git clone https://github.com/open-mmlab/OpenPCDet.git ``` 2. 进入克隆好的OpenPCDet目录,并安装所需的Python依赖。可以使用以下命令安装依赖: ``` cd OpenPCDet pip install -r requirements.txt ``` 3. 下载PointPillars的源代码和相关环境包。可以使用以下命令进行下载: ``` mkdir -p ~/pointpillars_ros/src cd ~/pointpillars_ros/src git clone https://github.com/BIT-DYN/pointpillars_ros ``` 4. 将OpenPCDet工程中的OpenPCDet/tools目录下的全部文件以及/OpenPCDet/pcdet目录下的文件复制到~/pointpillars_ros/src/pointpillars_ros/tools目录下。确保将所有文件都复制过去,尤其要注意不要遗漏pcdet文件夹。 5. 进入~/pointpillars_ros目录,并激活OpenPCDet的环境。可以使用以下命令进行激活: ``` cd ~/pointpillars_ros conda activate pcdet ``` 6. 安装所需的ROS依赖。可以使用以下命令进行安装: ``` pip install --user rospkg catkin_pkg sudo apt-get install ros-noetic-pcl-ros sudo apt-get install ros-noetic-jsk-recognition-msg sudo apt-get install ros-noetic-jsk-rviz-plugins ``` 7. 完成上述步骤后,即可开始复现PointPillars算法。可以使用以下命令启动PointPillars: ``` source ~/pointpillars_ros/devel/setup.bash roslaunch pointpillars_ros pointpillars.launch ``` 请注意,以上步骤仅为大致指导,具体操作可能因环境和配置而有所不同。建议参考OpenPCDetPointPillars的官方文档以获取更详细的指导。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 40
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值