---
comments: true
---
# 3D多模态融合检测产线使用教程
## 1. 3D多模态融合检测产线介绍
3D多模态融合检测产线支持输入多种传感器(激光雷达、环视RGB相机等)数据,通过深度学习等方法对数据进行处理,输出三维空间中物体的位置、形状、朝向、类别等信息。在自动驾驶、机器人导航、工业自动化等领域具有广泛应用。
BEVFusion 是一种多模态 3D 目标检测模型,通过将环视摄像头图像和 LiDAR 点云数据融合到统一的鸟瞰图(Bird's Eye View,BEV)表示中,实现不同传感器的特征对齐并融合,克服了单一传感器的局限性,显著提升了检测精度和鲁棒性,适用于自动驾驶等复杂场景。
3D多模态融合检测产线中包含了3D多模态融合检测模块,模块中包含了一个BEVFusion模型,我们提供了该模型的 benchmark 数据:
3D多模态融合检测模块:
| 模型 | 模型下载链接 | mAP(%) | NDS | 介绍 |
|---|---|---|---|---|
| BEVFusion | 推理模型/训练模型 | 53.9 | 60.9 | BEVFusion是一种在BEV视角下的多模态融合检测模型,采用两个分支处理不同模态的数据,得到lidar和camera在BEV视角下的特征,camera分支采用LSS这种自底向上的方式来显式的生成图像BEV特征,lidar分支采用经典的点云检测网络,最后对两种模态的BEV特征进行对齐和融合,应用于检测head或分割head。 |
注:以上精度指标为nuscenes验证集 mAP(0.5:0.95), NDS 60.9, 精度类型为 FP32。
## 2. 快速开始 PaddleX 所提供的预训练的模型产线均可以快速体验效果,你可以在线体验3D多模态融合检测产线的效果,也可以在本地使用命令行或 Python 体验3D多模态融合检测产线的效果。 ### 2.1 在线体验 暂不支持在线体验。 ### 2.2 本地体验 > ❗ 在本地使用3D多模态融合检测产线前,请确保您已经按照[PaddleX安装教程](../../../installation/installation.md)完成了PaddleX的wheel包安装。 #### 2.2.1 命令行方式体验 一行命令即可快速体验3D多模态融合检测产线效果,使用 [测试文件](https://paddle-model-ecology.bj.bcebos.com/paddlex/det_3d/demo_det_3d/nuscenes_demo_infer.tar),并将 `--input` 替换为本地路径,进行预测 ```bash paddlex --pipeline 3d_bev_detection \ --input nuscenes_demo_infer.tar \ --device gpu:0 ``` 参数说明: ``` --pipeline:产线名称,此处为3D多模态融合检测产线 --input:输入的包含点云图像文件的.tar压缩文件的本地路径。3D多模态融合检测为为多输入模型,输入依赖点云、图像以及转换矩阵等其他信息。tar解压文件包含samples路径,sweeps路径和nuscnes_infos_val.pkl文件,其中samples包含当前输入的所有图像和点云数据,sweeps包含关联帧点云数据,nuscnes_infos_val.pkl文件包含所有点云和图像在samples和sweeps下的相对路径以及转换矩阵等相关信息。 --device 使用的GPU序号(例如gpu:0表示使用第0块GPU,gpu:1,2表示使用第1、2块GPU),也可选择使用CPU(--device cpu) ``` 运行后,会将结果打印在终端上,结果如下: ```bash {"res": { 'input_path': 'samples/LIDAR_TOP/n015-2018-10-08-15-36-50+0800__LIDAR_TOP__1538984253447765.pcd.bin', 'sample_id': 'b4ff30109dd14c89b24789dc5713cf8c', 'input_img_paths': [ 'samples/CAM_FRONT_LEFT/n015-2018-10-08-15-36-50+0800__CAM_FRONT_LEFT__1538984253404844.jpg', 'samples/CAM_FRONT/n015-2018-10-08-15-36-50+0800__CAM_FRONT__1538984253412460.jpg', 'samples/CAM_FRONT_RIGHT/n015-2018-10-08-15-36-50+0800__CAM_FRONT_RIGHT__1538984253420339.jpg', 'samples/CAM_BACK_RIGHT/n015-2018-10-08-15-36-50+0800__CAM_BACK_RIGHT__1538984253427893.jpg', 'samples/CAM_BACK/n015-2018-10-08-15-36-50+0800__CAM_BACK__1538984253437525.jpg', 'samples/CAM_BACK_LEFT/n015-2018-10-08-15-36-50+0800__CAM_BACK_LEFT__1538984253447423.jpg' ] "boxes_3d": [ [ 14.5425386428833, 22.142045974731445, -1.2903141975402832, 1.8441576957702637, 4.433370113372803, 1.7367216348648071, 6.367165565490723, 0.0036598597653210163, -0.013568558730185032 ] ], "labels_3d": [ 0 ], "scores_3d": [ 0.9920279383659363 ] } } ``` 运行结果参数含义如下: - `input_path`:表示输入待预测样本的输入点云数据路径 - `sample_id`:表示输入待预测样本的输入样本的唯一标识符 - `input_img_paths`:表示输入待预测样本的输入图像数据路径 - `boxes_3d`:表示该3D样本的所有预测框信息, 每个预测框信息为一个长度为9的列表, 各元素分别表示: - 0: 中心点x坐标 - 1: 中心点y坐标 - 2: 中心点z坐标 - 3: 检测框宽度 - 4: 检测框长度 - 5: 检测框高度 - 6: 旋转角度 - 7: 坐标系x方向速度 - 8: 坐标系y方向速度 - `labels_3d`:表示该3D样本的所有预测框对应的预测类别 - `scores_3d`:表示该3D样本的所有预测框对应的置信度 #### 2.2.2 Python脚本方式集成 * 上述命令行是为了快速体验查看效果,一般来说,在项目中,往往需要通过代码集成,您可以通过几行代码即可完成产线的快速推理,推理代码如下: ```python from paddlex import create_pipeline pipeline = create_pipeline(pipeline="3d_bev_detection") output = pipeline.predict("nuscenes_demo_infer.tar") for res in output: res.print() ## 打印预测的结构化输出 res.save_to_json("./output/") ## 保存结果到json文件 ``` 在上述 Python 脚本中,执行了如下几个步骤: (1)调用 `create_pipeline` 实例化 3D多模态融合检测 产线对象:具体参数说明如下:| 参数 | 参数说明 | 参数类型 | 默认值 |
|---|---|---|---|
pipeline |
产线名称或是产线配置文件路径。如为产线名称,则必须为 PaddleX 所支持的产线。 | str |
无 |
device |
产线模型推理设备。支持:“gpu”,“cpu”。 | str |
gpu |
use_hpip |
是否启用高性能推理,仅当该产线支持高性能推理时可用。 | bool |
False |
| 参数类型 | 参数说明 |
|---|---|
| str | tar文件路径,例如:/root/data/nuscenes_demo_infer.tar |
| list | 列表,列表元素需为上述类型数据,如["/root/data/nuscenes_demo_infer1.tar", "/root/data/nuscenes_demo_infer2.tar"] |
注:pkl文件可以按照脚本进行制作。
(3)调用`predict`方法获取预测结果:`predict` 方法为 `generator`,因此需要通过调用获得预测结果,`predict` 方法以batch为单位对数据进行预测,因此预测结果为list形式表示的一组预测结果。 (4)对预测结果进行处理:每个样本的预测结果均为 `dict` 类型,且支持打印,或保存为json文件,如:| 方法 | 说明 | 方法参数 |
|---|---|---|
| 打印结果到终端 | - format_json:bool类型,是否对输出内容进行使用json缩进格式化,默认为True;- indent:int类型,json格式化设置,仅当format_json为True时有效,默认为4;- ensure_ascii:bool类型,json格式化设置,仅当format_json为True时有效,默认为False; |
|
| save_to_json | 将结果保存为json格式的文件 | - save_path:str类型,保存的文件路径,当为目录时,保存文件命名与输入文件类型命名一致;- indent:int类型,json格式化设置,默认为4;- ensure_ascii:bool类型,json格式化设置,默认为False; |