PointPillars 工程复现

这篇具有很好参考价值的文章主要介绍了PointPillars 工程复现。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

PointPillars 工程复现

先赞后看,养成好习惯。有帮助的话,点波关注!我会坚持更新,感谢谢您的支持!

需求: 学习并复现PointPillars,解决部署时遇到的各类问题,原始参考工程为PointPillars_MultiHead_40FPS,注释版以及添加ROS节点版本在PointPillars_MultiHead_40FPS_ROS,供大家参考学习,欢迎留言!

参考工程
1. PointPillars_MultiHead_40FPS
2. OpenPCDet
3. onnx2trt
4. onnx2trt安装过程可能遇到的问题
5. Spconv


PointPillars 工程复现


一. 准备工作

1. 下载工程

  • PointPillars_MultiHead_40FPS:点云目标检测网络主工程
  • OpenPCDet工具:用于将pth的模型,转换为onnx模型
  • onnx-tensorrt工具:用于onnx到trt模型的转换。
git clone https://github.com/hova88/PointPillars_MultiHead_40FPS.git --recursive
git clone https://github.com/hova88/OpenPCDet.git 
git clone https://github.com/onnx/onnx-tensorrt.git

2. 模型转换:
注意
官方提供的两个onnx两个链接文件地址失效,故只能采用OpenPCDet工具进行onnx的生成。
1) cbgs_pp_multihead_pfe.onnx. 2) cbgs_pp_multihead_backbone.onnx
2.1)pth转化为onnx
在OpenPCDet工具工程下,执行下面的操作:

  • A. 下载*.pth权重文件拷贝到OpenPCDet工程下
  • B. 配置修改
    主要修改tools/onnx_utils/trans_pfe.py和tools/onnx_utils/trans_backbone_multihead.py相关路径,例如:
## 1. trans_pfe.py, 修改main文件中三处路径, 用### 标记
if __name__ == "__main__":
    from pcdet.config import cfg, cfg_from_yaml_file
    cfg_file = '/home/cui/workspace/deepLearning/OpenPCDet/tools/cfgs/nuscenes_models/cbgs_pp_multihead.yaml' ###
    filename_mh = "/home/cui/workspace/deepLearning/OpenPCDet/pp_multihead_nds5823_updated.pth" ###
    cfg_from_yaml_file(cfg_file, cfg)
    model_cfg=cfg.MODEL
    pfe , dummy_input  = build_pfe( filename_mh, cfg)
    pfe.eval().cuda()
    export_onnx_file = "/home/cui/workspace/deepLearning/OpenPCDet/cbgs_pp_multihead_pfe.onnx" ###
    torch.onnx.export(pfe,
                    dummy_input,
                    export_onnx_file,
                    opset_version=12,
                    verbose=True,
                    do_constant_folding=True) # 输出名
                    
## 2. trans_backbone_multihead.py,同样修改三处路径,形式如下:
if __name__ == "__main__":
    from pcdet.config import cfg, cfg_from_yaml_file
    cfg_file = '/home/cui/workspace/deepLearning/OpenPCDet/tools/cfgs/nuscenes_models/cbgs_pp_multihead.yaml'
    filename_mh = "/home/cui/workspace/deepLearning/OpenPCDet/pp_multihead_nds5823_updated.pth"
    cfg_from_yaml_file(cfg_file, cfg)
    model_cfg=cfg.MODEL
    pfe , dummy_input  = build_pfe( filename_mh, cfg)
    pfe.eval().cuda()
    export_onnx_file = "/home/cui/workspace/deepLearning/OpenPCDet/cbgs_pp_multihead_pfe.onnx"
    torch.onnx.export(pfe,
                    dummy_input,
                    export_onnx_file,
                    opset_version=12,
                    verbose=True,
                    do_constant_folding=True) # 输出名
  • C. 安装SparseConv库
    根据系统中CUDA版本,执行不同命令,具体参考 Spconv,本文CUDA10.2如下:
pip install spconv-cu102  # 本人使用cuda10.2版本
  • D. 安装pcdet工具
conda create -n pointpillars python=3.6   #创建pointpillars
conda activate pointpillars    #进入pointpillars虚拟环境
pip install -r requirements.txt   # 安装依赖,在OpenPCDet工程下
python setup.py develop
  • E. 执行onnx生成脚本
cd tools/onnx_utils
python trans_pfe.py   # 在OpenPCDet目录下,生成cbgs_pp_multihead_pfe.onnx
python trans_backbone_multihead.py  # 在OpenPCDet目录下,生成cbgs_pp_multihead_backbone.onnx

注意执行脚本过程中有任何问题,参考第五部分问题答疑

2.2)onnx转化为trt模型
拷贝上一步中两个onnx文件到workspace/tools/onnx-tensorrt/build目录下,然后执行转换命令:

cd workspace/tools/onnx-tensorrt/build  # 进入onnx-tensorrt工具的目录
onnx2trt cbgs_pp_multihead_pfe.onnx -o cbgs_pp_multihead_pfe.trt -b 1 -d 16
onnx2trt cbgs_pp_multihead_backbone.onnx -o cbgs_pp_multihead_backbone.trt -b 1 -d 16

生成类似如下结果,即生成成功!

----------------------------------------------------------------
Input filename:   cbgs_pp_multihead_backbone.onnx
ONNX IR version:  0.0.7
Opset version:    10
Producer name:    pytorch
Producer version: 1.10
Domain:           
Model version:    0
Doc string:       
----------------------------------------------------------------
Parsing model
[2022-07-29 02:47:54 WARNING] [TRT]/home/cui/workspace/tools/onnx-tensorrt/onnx2trt_utils.cpp:220: Your ONNX model has been generated with INT64 weights, while TensorRT does not natively support INT64. Attempting to cast down to INT32.
Building TensorRT engine, FP16 available:1
    Max batch size:     1
    Max workspace size: 1024 MiB
Writing TensorRT engine to cbgs_pp_multihead_backbone.trt
All done

3. 模型路径修改
拷贝4个模型文件到PointPillars/model下。
如果有模型文件变动,则需要修改bootstrap.yaml文件中,*.onnx 和 *.trt 模型路径。

## bootstrap.yaml文件内容
BoxFeature: 7
ScoreThreshold: 0.1
NmsOverlapThreshold: 0.2
UseOnnx: false 

PfeOnnx: ../model/cbgs_pp_multihead_pfe.onnx
BackboneOnnx: ../model/cbgs_pp_multihead_backbone.onnx

PfeTrt: ../model/cbgs_pp_multihead_pfe.trt
BackboneTrt: ../model/cbgs_pp_multihead_backbone.trt

ModelConfig: ../pointpillars/cfgs/cbgs_pp_multihead.yaml

InputFile: ../test/testdata/nuscenes_10sweeps_points.txt
OutputFile: ../test/testdata/demo_boxes.txt

4. 下载测试点云数据
nuscenes_10sweeps_points.txt


二. 编译

cd PointPillars_MultiHead_40FPS
mkdir build && cd build
cmake .. && make -j8

注意编译过程中有任何问题,参考第五部分问题答疑

三. 运行测试

./test/test_model

注意运行过程中有任何问题,参考第五部分问题答疑

四. 可视化结果

python viewer.py

PointPillars 工程复现

五. 问题排疑

Q1. CMake Error at CMakeLists.txt:1 (cmake_minimum_required):
CMake 3.17 or higher is required. You are running version 3.16.6
A1:Cmakelists.txt中cmake版本过高,降低即可。

cmake_minimum_required(VERSION 3.16) # 本机是3.16版本

Q2. test中的Cmakelists报错,CMake Error at test/CMakeLists.txt:1 (add_subdirectory): The source directory
A2:工程中test/gtest是属于子工程 submodule,原因在于工程未下载完全。

git clone https://github.com/hova88/PointPillars_MultiHead_40FPS.git --recursive

Q3. NVINFER NOT FOUND
A3:添加TensorRT的地址

set(CMAKE_PREFIX_PATH "/usr/local/TensorRT/TensorRT-7.1.3.4/lib") # 设置前缀路径

Q4. #error – unsupported GNU version! gcc versions later than 6 are not supported!
A4: 查看CUDA环境,发现版本不对,切换到CUDA10.2的conda环境,重新编译执行即可。

Q5. fatal error: NvInfer.h: No such file or directory
A5: 未添加包含目录,根据本机TensorRT情况添加include路径

include_directories("/usr/local/TensorRT/TensorRT-7.1.3.4/include")

Q6. nuscenes_10sweeps_points.txt 样例数据下载地址不对
A6. 更换下载地址为: nuscenes_10sweeps_points.txt 新下载地址

Q7. 使用可视化脚本python viewer.py提示找不到数据
A7. 需要修改数据路径,bootstrap.yaml文件中, 修改InputFile和OutputFile,例如

InputFile: ../test/testdata/nuscenes_10sweeps_points.txt # 将Q6中下载好的数据放入此文件夹中
OutputFile: ../test/testdata/demo_boxes.txt

Q8. 执行trans_pfe.py 脚本时,报错 SyntaxError: Non-ASCII character ‘\xe8’ in file trans_pfe.py on line 113, but no encoding declared;
A8. 在trans_pfe.py文件开头位置,添加如下代码,支持中文字符

# -*- coding:utf-8 -*-

Q9. 执行trans_pfe.py 脚本时, 报错 No module named ‘pcdet’
A9. 需要根据安装教程,先安装pcdet工程,也可以参考本文 2.1)C.步骤。

Q10. 执行trans_pfe.py 脚本时,报错 AttributeError: module ‘spconv’ has no attribute ‘SparseModule’
A10. 参考:
1. github spconv issue
2. openpcdet项目代码(调试及问答记录)
修改pcdet/models/backbones_3d/spconv_backbone.py文件和pcdet/models/backbones_3d/spconv_unet.py文件

## 文件初始位置引入spconv
from spconv.pytorch import ops
from spconv.pytorch.conv import (SparseConv2d, SparseConv3d, SparseConvTranspose2d,
                         SparseConvTranspose3d, SparseInverseConv2d,
                         SparseInverseConv3d, SubMConv2d, SubMConv3d)
from spconv.pytorch.core import SparseConvTensor
from spconv.pytorch.identity import Identity
from spconv.pytorch.modules import SparseModule, SparseSequential
from spconv.pytorch.ops import ConvAlgo
from spconv.pytorch.pool import SparseMaxPool2d, SparseMaxPool3d
from spconv.pytorch.tables import AddTable, ConcatTable

class SparseBasicBlock(SparseModule)  ## 去掉spconv.

Q11. 执行trans_pfe.py 脚本时,报错No such file or directory: ‘cfgs/dataset_configs/nuscenes_dataset.yaml’
A11. 修改tools/cfgs/nuscenes_models/cbgs_pp_multihead.yaml文件中第5行,_BASE_CONFIG_为绝对路径,修改为如下效果:

_BASE_CONFIG_: /home/cui/workspace/deepLearning/OpenPCDet/tools/cfgs/dataset_configs/nuscenes_dataset.yaml

Q12. 执行可视化脚本python viewer.py 时,报错 ModuleNotFoundError: No module named ‘open3d’
A12. 安装open3d

pip install open3d

Q13. 将gtest文件修改为普通文件,方便单步调试查看文件中变量,编译报错 unsupported GNU version! gcc versions later than 6 are not supported
A13. 编译时候,cmake指令指定gcc g++6.0版本文章来源地址https://www.toymoban.com/news/detail-456341.html

cmake -DCMAKE_C_COMPILER=/usr/bin/gcc-6 -DCMAKE_CXX_COMPILER=/usr/bin/g++-6 ..

到了这里,关于PointPillars 工程复现的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 目标检测算法之voxelNet与pointpillars对比

    点云目标检测目前发展历经VoxelNet、SECOND、PointPillars、PV-RCNN。 2017年苹果提出voxelnet,是最早的一篇将点云转成voxel体素进行3D目标检测的论文。 然后2018年重庆大学的一个研究生Yan Yan在自动驾驶公司主线科技实习的时候将voxelnet代码完善,提出了高效的spconv实现,并增加了数据

    2024年02月02日
    浏览(38)
  • Apollo官方课程算法解读笔记——激光雷达感知模块、基于PointPillars的激光雷达点云检测算法、PointPillars模型的部署和优化模型的部署和优化

    感知模块检测效果: 左边为摄像头拍摄图像,激光雷达感知不依赖左边CAMERA,而是点云数据对应的效果图(黄色上方数字为Tracking ID) 主车红灯时的激光点云检测效果图 车道线给CAMERA提供一个标定参考,使得camera检测出来的障碍物从2维转化为3维的信息,因为此标定的参考,

    2024年02月14日
    浏览(44)
  • 3D目标检测--PointPillars论文和OpenPCDet代码解读

    解决传统基于栅格化的3D目标检测方法在面对高密度点云数据时的性能瓶颈; 栅格化方法需要将点云数据映射到规则的网格中,但是对于高密度点云,栅格化操作会导致严重的信息损失和运算效率低下; 因此,该论文提出了一种新的基于点云的3D目标检测方法——PointPillars,

    2023年04月22日
    浏览(83)
  • pointpillars在2D CNN引入自适应注意力机制

    在给定的代码中,您想要引入自适应注意力机制。自适应注意力机制通常用于增强模型的感受野,从而帮助模型更好地捕捉特征之间的关系。在这里,我将展示如何在您的代码中引入自适应注意力机制,并提供详细的解释。 首先,让我们导入自适应注意力机制的相关模块。假

    2024年02月12日
    浏览(44)
  • 文章解读与仿真程序复现思路——中国电机工程学报EI\CSCD\北大核心《基于合作博弈与矩阵半张量积的多园区综合能源系统协同优化运行方法》

    本专栏栏目提供文章与程序复现思路,具体已有的论文与论文源程序可翻阅本博主免费的专栏栏目 《论文与完整程序》 论文与完整源程序_电网论文源程序的博客-CSDN博客 https://blog.csdn.net/liang674027206/category_12531414.html 电网论文源程序-CSDN博客 电网论文源程序擅长文章解读,论文

    2024年04月16日
    浏览(82)
  • 如何复现论文?什么是论文复现?

    参考资料: 学习篇—顶会Paper复现方法 - 知乎 如何读论文?复现代码?_复现代码是什么意思 - CSDN 我是如何复现我人生的第一篇论文的 - 知乎 在我看来,论文复现应该有 一个大前提 和分为 两个层次 。 大前提是你要清楚地懂得自己要复现论文的核心算法(或内容)。自己能

    2024年02月02日
    浏览(31)
  • 【复现笔记】clean-pvnet复现

    源代码链接:GitHub - zju3dv/clean-pvnet: Code for \\\"PVNet: Pixel-wise Voting Network for 6DoF Pose Estimation\\\" CVPR 2019 oral 目录 1、下载代码 2、配置环境 3、Compile cuda extensions under lib/csrc 4、Set up datasets: (1)数据集 (2)训练好的权重文件 (3)测试成功 (4)虽然在data文件夹中新出现一个result文件夹,但里

    2023年04月23日
    浏览(36)
  • 【代码复现】Windows10复现nerf-pytorch

    由于这段时间正在学习NeRF系列的论文,所以博主决定尝试复现一下原文中实现的效果。 这篇文章将会介绍在win10系统下对NeRF的复现过程。最初是想复现原文作者Ben Mildenhall的源码,不过一直在编译环节报错,参考了几位大佬的blog之后发现是因为原作者使用了tensorflow 1.15,本

    2024年02月08日
    浏览(34)
  • web渗透测试漏洞复现:Elasticsearch未授权漏洞复现

    Elasticsearch 是一款 Java 编写的企业级搜索服务,它以分布式多用户能力和全文搜索引擎为特点,采用 RESTful web 接口。这款搜索引擎由 Java 开发,作为 Apache 许可下的开源软件发布,是流行的企业级搜索引擎之一。Elasticsearch 的增删改查操作都通过 http 接口完成。开源的版本可能

    2024年04月10日
    浏览(48)
  • Apache Struts2漏洞复现之s2-001漏洞复现

            仅供学习参考使用,请勿用作违法用途,否则后果自负。         Apache Struts 2是一个用于开发Java EE网络应用程序的开放源代码网页应用程序架构。它利用并延伸了Java ServletAPI,鼓励开发者采用MVC架构。         缘起于Apache Struts的WebWork框架,旨在提供相对

    2024年02月16日
    浏览(34)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包