ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

PaddleX 3D多模态融合检测产线(3D BEV Detection)实战:BEVFusion 推理、部署与二次开发指南

PaddleX 3D多模态融合检测产线(3D BEV Detection)实战:BEVFusion 推理、部署与二次开发指南 人工智能大模型低代码计算机视觉深度学习模型推理服务【免费下载链接】PaddleXAll-in-One Development Tool based on PaddlePaddle项目地址https://gitcode.com/gh_mirrors/pa/PaddleX点击查看免费下载导读3D多模态融合检测产线是 PaddleX 面向自动驾驶、机器人导航与工业自动化场景提供的一体化感知方案它以 BEVFusion 多模态模型为核心融合环视相机图像与激光雷达点云输出三维空间中目标的位置、尺寸、朝向、类别与速度。本文将带你完整走通该产线的模型能力概览、命令行与 Python 快速推理、结果解析、配置文件自定义、高性能/服务化/端侧部署以及基于私有数据的微调与模型替换全流程并给出仓库内源码级佐证帮助你在自己的项目中直接落地 3D 目标检测能力。前提说明3D多模态融合检测产线目前暂不支持 Python 3.12 及以上版本使用前请确认运行环境版本。1. 产线能力概览BEVFusion 多模态融合检测3D多模态融合检测产线支持输入多种传感器数据激光雷达、环视 RGB 相机等通过深度学习处理后在三维空间中输出物体的位置、形状、朝向、类别等信息。产线内部包含一个3D多模态融合检测模块该模块内置一个BEVFusion 模型。BEVFusion 是一种多模态 3D 目标检测模型其核心思路是把环视摄像头图像和 LiDAR 点云数据融合到统一的鸟瞰图Birds Eye View, BEV表示中实现不同传感器特征的对齐与融合从而克服单一传感器在光照、遮挡、远距离等条件下的局限性提升检测精度与鲁棒性。从仓库的模块介绍docs/module_usage/tutorials/cv_modules/3d_bev_detection.md可以看出其双分支结构Camera 分支采用 LSSLift-Splat-Shoot这类自底向上的方式显式生成图像在 BEV 视角下的特征LiDAR 分支采用经典的点云检测网络提取点云 BEV 特征最终对两种模态的 BEV 特征进行对齐与融合统一送入检测头Det Head或分割头Seg Head完成预测。在源码层面该产线的实体注册与推理入口位于 paddlex/inference/pipelines/m_3d_bev_detection/pipeline.pyBEVDet3DPipeline通过entities 3d_bev_detection声明产线身份并标注pipeline_requires_extra(cv)意味着安装时需选择cv依赖分组其predict方法为生成器内部直接透传至模块级预测器self.bev_detection_3d_model(input)。1.1 模型精度与性能基准产线内置的 BEVFusion 模型官方 benchmark推理耗时仅包含模型推理不包含前后处理耗时模型模型下载mAP(%)NDS说明BEVFusion推理模型 / 训练模型见原文档下载链接53.960.9多模态融合检测双分支 BEV 特征对齐融合测试环境说明测试数据集nuScenes 验证集mAP 0.5:0.95NDS 60.9FP32 精度硬件配置GPU NVIDIA Tesla T4CPU Intel Xeon Gold 6271C 2.60GHz软件环境Ubuntu 20.04 / CUDA 11.8 / cuDNN 8.9 / TensorRT 8.6.1.6paddlepaddle 3.0.0 / paddlex 3.0.3。推理模式说明模式GPU 配置CPU 配置加速技术组合常规模式FP32 精度 / 无 TRT 加速FP32 精度 / 8 线程PaddleInference高性能模式选择先验精度类型和加速策略的最优组合FP32 精度 / 8 线程选择先验最优后端Paddle/OpenVINO/TRT 等1.2 产线默认配置结构产线的默认配置文件为 paddlex/configs/pipelines/3d_bev_detection.yaml内容非常精简pipeline_name: 3d_bev_detection SubModules: 3DBEVDetection: module_name: 3d_bev_detection model_name: BEVFusion model_dir: null batch_size: 1从中可以看到产线对子模块的约定默认模型为BEVFusionmodel_dir为null时使用 PaddleX 内置的官方预训练权重batch_size固定为 1。注意3D 模型的推理仅支持batch_size 1这一点在批采样器 paddlex/inference/common/batch_sampler/det_3d_batch_sampler.py 的batch_sizesetter 中有明确校验设置为其他值会打印告警并强制回退为 1。2. 快速开始一行命令体验 3D 检测PaddleX 提供的预训练模型产线可以快速体验效果。目前该产线暂不支持在线体验请在本地按以下方式运行。2.1 安装前提在本地使用 3D多模态融合检测产线前请确保已按照 PaddleX 安装教程 完成 PaddleX wheel 包安装。如需选择性安装依赖该产线对应的依赖分组为cv。2.2 命令行方式体验首先下载测试文件nuscenes_demo_infer.tar到本地然后将--input替换为本地路径执行paddlex --pipeline 3d_bev_detection \ --input nuscenes_demo_infer.tar \ --device gpu:0参数说明--pipeline产线名称此处为 3D多模态融合检测产线--input输入的包含点云图像文件的.tar压缩文件的本地路径。3D多模态融合检测为多输入模型输入依赖点云、图像以及转换矩阵等其他信息。tar 解压文件包含samples路径、sweeps路径和nuscenes_infos_val.pkl文件samples包含当前输入的所有图像和点云数据sweeps包含关联帧点云数据nuscenes_infos_val.pkl包含所有点云和图像在 samples/sweeps 下的相对路径以及转换矩阵等相关信息--device使用的 GPU 序号例如gpu:0表示使用第 0 块 GPUgpu:1,2表示使用第 1、2 块 GPU也可选择使用 CPU--device cpu。从源码看输入解析由Det3DBatchSampler完成paddlex/inference/common/batch_sampler/det_3d_batch_sampler.pystr类型输入若以http开头会自动下载到缓存目录随后 tar 包被解压到临时目录nuscenes_infos_val.pkl通过pickle.load读取并对每个样本的 lidar/camera/sweep 路径拼接数据根目录再按时间戳排序进入批次队列。2.3 运行结果解析运行后会将结果打印在终端上示例如下{res: { input_path: samples/LIDAR_TOP/n015-2018-10-08-15-36-500800__LIDAR_TOP__1538984253447765.pcd.bin, sample_id: b4ff30109dd14c89b24789dc5713cf8c, input_img_paths: [ samples/CAM_FRONT_LEFT/n015-2018-10-08-15-36-500800__CAM_FRONT_LEFT__1538984253404844.jpg, samples/CAM_FRONT/n015-2018-10-08-15-36-500800__CAM_FRONT__1538984253412460.jpg, samples/CAM_FRONT_RIGHT/n015-2018-10-08-15-36-500800__CAM_FRONT_RIGHT__1538984253420339.jpg, samples/CAM_BACK_RIGHT/n015-2018-10-08-15-36-500800__CAM_BACK_RIGHT__1538984253427893.jpg, samples/CAM_BACK/n015-2018-10-08-15-36-500800__CAM_BACK__1538984253437525.jpg, samples/CAM_BACK_LEFT/n015-2018-10-08-15-36-500800__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所有预测框对应的预测类别scores_3d所有预测框对应的置信度。上述输出结构由预测器 paddlex/inference/models/m_3d_bev_detection/predictor.py 中的_format_output方法组装它将模型输出的outs[0]bboxes、outs[1]labels、outs[2]scores与img_metas中的点云路径、图像路径、sample_id 一一对应最终以dict形式返回每个样本在生成器中被封装为BEV3DDetResult对象。3. Python 脚本方式集成命令行方式适合快速体验效果而实际项目开发通常需要代码集成。通过几行代码即可完成产线的快速推理from paddlex import create_pipeline pipeline create_pipeline(pipeline3d_bev_detection) output pipeline.predict(nuscenes_demo_infer.tar) for res in output: res.print() ## 打印预测的结构化输出 res.save_to_json(./output/) ## 保存结果到json文件 res.visualize(save_path./output/, showTrue) ## 3d结果可视化如果运行环境有图形界面设置showTrue否则设置为False可视化相关说明3D 检测结果可视化需要先安装 open3d 包pip install open3d如果运行环境没有图形界面则无法直接可视化但不影响结果保存可以在支持图形界面的环境下运行如下脚本对保存的结果进行可视化python paddlex/inference/models/m_3d_bev_detection/visualizer_3d.py --save_path./output/从结果类实现 paddlex/inference/models/m_3d_bev_detection/result.py 可以看到visualize的底层行为它会读取input_path指向的二进制点云np.fromfile(..., dtypenp.float32)后按 5 维重排并取前 4 维将boxes_3d/scores/labels打包为results.npy、点云保存为points.npy当showTrue时以置信度阈值0.25调用Visualizer3D.draw_results进行三维渲染。仓库中对应的官方示例脚本见 api_examples/pipelines/test_3d_bev_detection.py它演示了完整的最小推理流程可直接参考。3.1 create_pipeline 参数说明在上述 Python 脚本中create_pipeline用于实例化 3D多模态融合检测产线对象参数参数说明参数类型默认值pipeline产线名称或是产线配置文件路径。如为产线名称则必须为 PaddleX 所支持的产线。str无device产线模型推理设备。支持gpu、cpu。strgpuuse_hpip是否启用高性能推理插件。如果为None则使用配置文件或config中的配置。bool|NoneNonehpi_config高性能推理配置。dict|NoneNone对应到产线类的构造函数paddlex/inference/pipelines/m_3d_bev_detection/pipeline.pyBEVDet3DPipeline.__init__接收config、device、engine、engine_config、pp_option、use_hpip、hpi_config等参数并从config[SubModules][3DBEVDetection]中解析子模块配置后创建模型实例。3.2 predict 输入方式predict方法参数为input用于输入待预测数据支持多种输入方式参数类型参数说明strtar 文件路径例如/root/data/nuscenes_demo_infer.tarlist列表列表元素需为上述类型数据如[/root/data/nuscenes_demo_infer1.tar, /root/data/nuscenes_demo_infer2.tar]注nuscenes_infos_val.pkl文件可以按照 BEVFusion 官方仓库的tools/create_data.py脚本进行制作。此外predict方法是一个生成器generator调用后需要迭代获取预测结果它以 batch 为单位对数据进行预测返回 list 形式的一组预测结果。批采样器内部对每个输入 tar 解压并读取 pkl 后按batch_size固定为 1逐样本产出批次。3.3 预测结果处理每个样本的预测结果均为dict类型封装为BEV3DDetResult支持打印或保存为 json 文件方法说明方法参数print打印结果到终端format_jsonbool 类型是否对输出内容使用 json 缩进格式化默认为 Trueindentint 类型json 格式化设置仅当format_json为 True 时有效默认为 4ensure_asciibool 类型json 格式化设置仅当format_json为 True 时有效默认为 Falsesave_to_json将结果保存为 json 格式的文件save_pathstr 类型保存的文件路径当为目录时保存文件命名与输入文件类型命名一致indentint 类型json 格式化设置默认为 4ensure_asciibool 类型json 格式化设置默认为 False3.4 获取并自定义产线配置文件可以获取 3D多模态融合检测产线的配置文件并加载配置文件进行预测paddlex --get_pipeline_config 3d_bev_detection --save_path ./my_path获取配置文件后即可对产线各项配置进行自定义只需将create_pipeline方法中的pipeline参数改为产线配置文件路径from paddlex import create_pipeline pipeline create_pipeline(pipeline./my_path/3d_bev_detection.yaml) output pipeline.predict(nuscenes_demo_infer.tar) for res in output: res.print() ## 打印预测的结构化输出 res.save_to_json(./output/) ## 保存结果到json文件 res.visualize(save_path./output/, showTrue) ## 3d结果可视化如果运行环境有图形界面设置showTrue否则设置为False注配置文件中的参数为产线初始化参数。如希望更改产线初始化参数可以直接修改配置文件中的参数并加载预测同时CLI 预测也支持传入配置文件--pipeline指定配置文件路径即可。4. 开发集成与部署如果 3D多模态融合检测产线达到了你对推理速度和精度的要求可以直接进行开发集成/部署。若需将通用产线直接应用到 Python 项目中可参考上文 Python 脚本方式集成 的示例代码。此外PaddleX 还提供以下三种部署方式。4.1 高性能推理在实际生产环境中许多应用对部署策略的性能指标尤其是响应速度有较严苛的标准。PaddleX 提供高性能推理插件旨在对模型推理及前后处理进行深度性能优化实现端到端流程的显著提速。详细流程请参考 PaddleX 高性能推理指南。在 API 层面可通过create_pipeline(..., use_hpipTrue)或配置hpi_config启用该能力在模块级配置 paddlex/configs/modules/3d_bev_detection/BEVFusion.yaml 的Predict.kernel_option.run_mode中也可以指定后端运行模式。4.2 服务化部署服务化部署是实际生产环境中常见的一种部署形式将推理功能封装为服务客户端通过网络请求访问服务获取推理结果。PaddleX 支持多种产线服务化部署方案详细流程请参考 PaddleX 服务化部署指南。API 参考HTTP 请求方法为 POST请求体和响应体均为 JSON 数据JSON 对象请求处理成功时响应状态码为200响应体属性如下名称类型含义logIdstring请求的 UUIDerrorCodeinteger错误码固定为0errorMsgstring错误说明固定为Successresultobject操作结果请求处理未成功时响应体属性如下名称类型含义logIdstring请求的 UUIDerrorCodeinteger错误码与响应状态码相同errorMsgstring错误说明服务提供的主要操作是infer进行 3D多模态融合检测接口为POST /bev-3d-object-detection请求体属性名称类型含义是否必填tarstring服务器可访问的 tar 文件的 URL 或路径是请求处理成功时响应体的result具有如下属性名称类型含义detectedObjectsarray目标的位置、类别等信息detectedObjects中的每个元素为一个object属性如下名称类型含义bboxarray长度为 9 的列表0 中心点 x 坐标、1 中心点 y 坐标、2 中心点 z 坐标、3 检测框宽度、4 检测框长度、5 检测框高度、6 旋转角度、7 坐标系 x 方向速度、8 坐标系 y 方向速度categoryIdinteger目标类别 IDscorenumber目标得分多语言调用服务示例Pythonimport base64 import requests API_URL http://localhost:8080/bev-3d-object-detection # 服务URL tar_path ./nuscenes_demo_infer.tar with open(tar_path, rb) as file: tar_bytes file.read() tar_data base64.b64encode(tar_bytes).decode(ascii) payload {tar: tar_data} # 调用API response requests.post(API_URL, jsonpayload) # 处理接口返回数据 assert response.status_code 200 result response.json()[result] print(Detected objects:) print(result[detectedObjects])4.3 端侧部署端侧部署将计算和数据处理功能放在用户设备本身设备可直接处理数据而不依赖远程服务器。PaddleX 支持将模型部署在 Android 等端侧设备上详细流程请参考 PaddleX 端侧部署指南。你可以根据实际需要选择合适的方式部署模型产线进而进行后续的 AI 应用集成。5. 二次开发私有数据微调与模型替换如果产线提供的默认模型权重在你的场景中精度或速度不理想可以利用自己拥有的特定领域或应用场景的数据对现有模型进行微调以提升产线在目标场景中的识别效果。5.1 模型微调参考 3D多模态融合检测模块开发教程 中的二次开发章节使用你的私有数据集对模型进行微调。该教程覆盖了从 Demo 数据下载、check_dataset数据校验、train训练、evaluate评估到predict推理的完整命令链路例如python main.py -c paddlex/configs/modules/3d_bev_detection/BEVFusion.yaml \ -o Global.modecheck_dataset \ -o Global.dataset_dir./dataset/nuscenes_demo训练与评估命令形如python main.py -c paddlex/configs/modules/3d_bev_detection/BEVFusion.yaml \ -o Global.modetrain \ -o Global.dataset_dir./dataset/nuscenes_demopython main.py -c paddlex/configs/modules/3d_bev_detection/BEVFusion.yaml \ -o Global.modeevaluate \ -o Global.dataset_dir./dataset/nuscenes_demo模块级配置 paddlex/configs/modules/3d_bev_detection/BEVFusion.yaml 中预置了Trainepochs_iters、batch_size、learning_rate、warmup_steps、Evaluatebatch_size、weight_path、Exportweight_path与Predictmodel_dir、input、kernel_option等段落并支持Global.device指定多卡如gpu:0,1,2,3、Global.datart_prefix、Global.version等训练相关选项。5.2 模型应用当使用私有数据集完成微调训练后可获得本地模型权重文件。若需要使用微调后的模型权重只需修改产线配置文件将微调后模型权重的本地路径替换到产线配置文件中的对应位置...... Pipeline: device: gpu:0 det_model: BEVFusion #可修改为微调后3D目标检测模型的本地路径 det_batch_size: 1 device: gpu ......随后参考上文命令行方式体验或Python 脚本方式集成加载修改后的产线配置文件即可完成模型替换与推理。6. 多硬件支持PaddleX 支持英伟达 GPU、昆仑芯 XPU、昇腾 NPU 和寒武纪 MLU 等多种主流硬件设备仅需修改--device参数即可完成不同硬件之间的无缝切换。例如使用 Python 运行 3D多模态融合检测产线时将运行设备从英伟达 GPU 更改为昇腾 NPU只需将脚本中的device修改为npufrom paddlex import create_pipeline pipeline create_pipeline( pipeline3d_bev_detection, devicenpu:0 # gpu:0 -- npu:0 )若需在更多种类的硬件上使用该产线请参考 PaddleX 多硬件使用指南。多硬件支持情况可同步查阅 PaddleX 模型列表 与各硬件专属列表文档如models_list_npu.md、models_list_mlu.md、models_list_xpu.md。附推理全链路源码视角从源码结构看3D多模态融合检测产线的完整推理链路由以下关键环节构成便于深入排查与二次开发输入解析与批采样Det3DBatchSamplerpaddlex/inference/common/batch_sampler/det_3d_batch_sampler.py负责 URL 自动下载、tar 解压、pkl 标注读取与 batch 产出样本读取ReadNuscenesDatapaddlex/inference/common/reader/det_3d_reader.py解析 nuScenes 格式样本支持image/lidar/radar/multimodal/multiview多种模态预处理流水线BEVDet3DRunnerPredictorpaddlex/inference/models/m_3d_bev_detection/predictor.py按Read → LoadPointsFromFile → LoadPointsFromMultiSweeps → LoadMultiViewImageFromFiles → ResizeImage → NormalizeImage → PadImage → SampleFilterByKey → GetInferInput顺序执行各算子实现集中在 paddlex/inference/models/m_3d_bev_detection/processors.py其中LoadPointsFromMultiSweeps默认融合前 10 帧 sweeps 点云并做时间戳差值LoadMultiViewImageFromFiles按六路相机逐帧读取图像推理与输出GetInferInput将多视角图像CHW 顺序、lidar2img变换矩阵、点云组装为模型输入经 Runner 推理后由_format_output组装为boxes_3d/labels_3d/scores_3d结果结果与可视化BEV3DDetResultpaddlex/inference/models/m_3d_bev_detection/result.py提供print/save_to_json/visualize能力可视化依赖 open3d并将中间结果落盘为results.npy与points.npy。整体而言该产线以 BEVFusion 双分支 BEV 融合为核心通过标准化的产线/模块架构封装了从多传感器输入到 3D 框输出的完整链路既能开箱即用地快速推理也支持配置化微调、多硬件切换与多种部署形态适合作为自动驾驶等场景 3D 感知能力的基础组件直接集成。赞分享人工智能大模型低代码计算机视觉深度学习模型推理服务【免费下载链接】PaddleXAll-in-One Development Tool based on PaddlePaddle项目地址https://gitcode.com/gh_mirrors/pa/PaddleX点击查看免费下载相关推荐PaddleX 3D 多模态融合检测3D BEV Detection模块使用教程从 BEVFusion 快速集成到二次开发PaddleX 3D 多模态融合检测3D BEV Detection模块使用教程从 BEVFusion 快速集成到二次开发 导读 3D 多模态融合检测是自人工智能大模型低代码计算机视觉深度学习NLP模型推理服务RAG微调语音PaddleX 3D BEV 多模态融合检测 Pipeline 实战指南BEVFusion 的安装、推理、部署与微调PaddleX 3D BEV 多模态融合检测 Pipeline 实战指南BEVFusion 的安装、推理、部署与微调 本文以 PaddleX 开源仓库中的 3人工智能大模型低代码计算机视觉深度学习模型推理服务PaddleX 3D多模态融合检测模块BEVFusion实战指南快速推理与二次开发全流程PaddleX 3D多模态融合检测模块BEVFusion实战指南快速推理与二次开发全流程 本文围绕 PaddleX 的 3D 多模态融合检测模块当前支持人工智能大模型低代码计算机视觉深度学习模型推理服务上一篇如何永久保存微信聊天记录WeChatMsg免费工具完整指南下一篇如何快速开发微信小程序插件使用WeiXinMPSDK的完整指南创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进