PETRV2-BEV模型部署:PaddleInfer模型导出教程
1. 引言
随着自动驾驶技术的快速发展,基于视觉的三维目标检测方法逐渐成为研究热点。PETR系列模型通过将相机视角(perspective view)与鸟瞰图(BEV, Bird's Eye View)进行有效融合,在NuScenes等主流数据集上取得了优异性能。其中,PETRV2-BEV作为该系列的重要演进版本,结合VoVNet主干网络和GridMask增强策略,显著提升了多模态感知能力。
然而,训练完成的模型若无法高效部署到实际推理环境中,则难以发挥其工程价值。本文聚焦于PETRV2-BEV 模型从训练到 Paddle Inference 模型导出的完整流程,涵盖环境准备、数据处理、模型训练、精度验证及最终的推理模型生成,并以 CSDN 星图 AI 算力平台为实践载体,提供可复现的一站式操作指南。
本教程适用于具备一定深度学习基础并希望将 BEV 检测模型落地至生产环境的研发人员,内容覆盖全流程关键命令与注意事项,确保读者能够顺利实现模型部署前的关键一步——PaddleInfer 格式的模型导出。
2. 准备环境
2.1 进入 paddle3d_env conda 环境
在开始任何操作之前,首先需要激活用于运行 Paddle3D 的 Conda 虚拟环境。该环境已预装了 PaddlePaddle 深度学习框架及相关依赖库。
conda activate paddle3d_env提示:请确认当前系统中已正确安装
paddlepaddle-gpu及paddle3d库。如未配置,请参考官方文档完成安装。
3. 下载依赖
3.1 下载预训练权重
为了加速训练过程并提升收敛效果,我们使用官方提供的 PETRV2 预训练权重作为初始化参数。
wget -O /root/workspace/model.pdparams https://paddle3d.bj.bcebos.com/models/petr/petrv2_vovnet_gridmask_p4_800x320/model.pdparams该权重文件基于完整的 NuScenes 数据集训练得到,适合作为微调起点。
3.2 下载 nuscenes v1.0-mini 数据集
由于完整 NuScenes 数据集体积较大,适合调试与快速验证的小规模子集v1.0-mini是理想选择。
wget -O /root/workspace/v1.0-mini.tgz https://www.nuscenes.org/data/v1.0-mini.tgz mkdir -p /root/workspace/nuscenes tar -xf /root/workspace/v1.0-mini.tgz -C /root/workspace/nuscenes解压后,数据目录结构应包含:
samples/sweeps/maps/annotations/
这些是后续信息提取和训练所必需的基础文件。
4. 训练 nuscenes v1.0-mini 数据集
4.1 准备数据集
Paddle3D 使用自定义格式的信息文件(info files),需先对原始 NuScenes 数据进行预处理,生成训练所需的标注缓存。
cd /usr/local/Paddle3D rm /root/workspace/nuscenes/petr_nuscenes_annotation_* -f python3 tools/create_petr_nus_infos.py --dataset_root /root/workspace/nuscenes/ --save_dir /root/workspace/nuscenes/ --mode mini_val此脚本会生成两个关键文件:
petr_nuscenes_annotation_train.pkl:训练集标注petr_nuscenes_annotation_val.pkl:验证集标注
注意:
--mode mini_val表示仅针对 mini 版本生成验证集信息。
4.2 测试精度(加载预训练模型)
在开始训练前,建议先评估原始预训练模型在当前数据集上的表现,作为基准参考。
python tools/evaluate.py \ --config configs/petr/petrv2_vovnet_gridmask_p4_800x320_nuscene.yml \ --model /root/workspace/model.pdparams \ --dataset_root /root/workspace/nuscenes/输出结果:
mAP: 0.2669 mATE: 0.7448 mASE: 0.4621 mAOE: 1.4553 mAVE: 0.2500 mAAE: 1.0000 NDS: 0.2878 Eval time: 5.8s Per-class results: Object Class AP ATE ASE AOE AVE AAE car 0.446 0.626 0.168 1.735 0.000 1.000 truck 0.381 0.500 0.199 1.113 0.000 1.000 bus 0.407 0.659 0.064 2.719 0.000 1.000 trailer 0.000 1.000 1.000 1.000 1.000 1.000 construction_vehicle 0.000 1.000 1.000 1.000 1.000 1.000 pedestrian 0.378 0.737 0.263 1.259 0.000 1.000 motorcycle 0.356 0.748 0.314 1.410 0.000 1.000 bicycle 0.063 0.760 0.236 1.862 0.000 1.000 traffic_cone 0.637 0.418 0.377 nan nan nan barrier 0.000 1.000 1.000 1.000 nan nan分析:初始 mAP 为 0.267,说明模型具备基本检测能力,但部分类别(如 trailer、barrier)尚未有效识别,需进一步微调。
4.3 开始训练
使用以下命令启动训练任务,配置包括学习率、批次大小、保存间隔等超参数。
python tools/train.py \ --config configs/petr/petrv2_vovnet_gridmask_p4_800x320_nuscene.yml \ --model /root/workspace/model.pdparams \ --dataset_root /root/workspace/nuscenes/ \ --epochs 100 \ --batch_size 2 \ --log_interval 10 \ --learning_rate 1e-4 \ --save_interval 5 \ --do_eval参数说明:
--epochs 100:训练总轮数--batch_size 2:受限于显存,采用小批量训练--log_interval 10:每 10 个 batch 打印一次 loss--save_interval 5:每 5 个 epoch 保存一次检查点--do_eval:每个保存周期后执行验证集评估
训练过程中,日志与模型权重将自动保存至output/目录下。
4.4 可视化训练曲线
为监控训练状态,推荐使用 VisualDL 工具查看 Loss 和 Metric 曲线变化。
visualdl --logdir ./output/ --host 0.0.0.0若在远程服务器运行,可通过 SSH 端口转发将本地浏览器连接至服务端界面。
4.5 配置远程访问(SSH 端口转发)
假设远程主机监听端口为8040,可通过以下命令将本地8888端口映射过去:
ssh -p 31264 -L 0.0.0.0:8888:localhost:8040 root@gpu-09rxs0pcu2.ssh.gpu.csdn.net随后在本地浏览器访问http://localhost:8888即可查看可视化面板。
4.6 查看 Loss 曲线
在 VisualDL 页面中,可观察以下关键指标趋势:
- Total Loss
- Classification Loss
- Localization Loss
- mAP / NDS 等评价指标
通过分析曲线是否平稳下降或出现震荡,判断训练是否正常收敛。
4.7 导出 PaddleInfer 推理模型
当训练完成后,需将动态图模型转换为静态图格式,以便在推理引擎中高效运行。
rm -rf /root/workspace/nuscenes_release_model mkdir -p /root/workspace/nuscenes_release_model python tools/export.py \ --config configs/petr/petrv2_vovnet_gridmask_p4_800x320_nuscene.yml \ --model output/best_model/model.pdparams \ --save_dir /root/workspace/nuscenes_release_model输出内容:
导出成功后,nuscenes_release_model目录将包含:
model.pdmodel:序列化的网络结构model.pdiparams:模型权重model.pdiparams.info:参数元信息
这三个文件共同构成可用于 Paddle Inference 引擎加载的标准模型包。
重要提示:导出时必须保证配置文件与训练一致,否则可能导致输入输出不匹配。
4.8 运行 Demo 验证推理结果
最后一步是通过内置 demo 脚本测试导出模型的实际推理效果。
python tools/demo.py /root/workspace/nuscenes/ /root/workspace/nuscenes_release_model nuscenes该脚本会随机选取若干样本图像,执行前向推理并在 BEV 空间绘制检测框。输出图像通常位于demo_output/文件夹中,可用于直观评估模型性能。
5. 训练 xtreme1 数据集 [可选]
对于特定场景优化需求(如极端天气、复杂光照),可选用第三方扩展数据集如xtreme1进行迁移训练。
5.1 准备数据集
类似地,需先生成 xtreme1 对应的 info 文件。
cd /usr/local/Paddle3D rm /root/workspace/xtreme1_nuscenes_data/petr_nuscenes_annotation_* -f python3 tools/create_petr_nus_infos_from_xtreme1.py /root/workspace/xtreme1_nuscenes_data/确保路径下存在符合 NuScenes 结构的数据文件。
5.2 测试精度(加载预训练模型)
验证原始模型在新域数据上的泛化能力。
python tools/evaluate.py \ --config configs/petr/petrv2_vovnet_gridmask_p4_800x320.yml \ --model /root/workspace/model.pdparams \ --dataset_root /root/workspace/xtreme1_nuscenes_data/输出结果:
mAP: 0.0000 mATE: 1.0703 mASE: 0.8296 mAOE: 1.0807 mAVE: 0.6250 mAAE: 1.0000 NDS: 0.0545 Eval time: 0.5s Per-class results: Object Class AP ATE ASE AOE AVE AAE car 0.000 1.308 0.232 2.074 0.000 1.000 truck 0.000 1.114 0.621 0.042 0.000 1.000 ...结论:mAP 为 0,表明预训练模型完全无法适应 xtreme1 分布,亟需针对性训练。
5.3 开始训练 xtreme1 模型
python tools/train.py \ --config configs/petr/petrv2_vovnet_gridmask_p4_800x320.yml \ --model /root/workspace/model.pdparams \ --dataset_root /root/workspace/xtreme1_nuscenes_data/ \ --epochs 100 \ --batch_size 2 \ --log_interval 10 \ --learning_rate 1e-4 \ --save_interval 5 \ --do_eval建议根据实际资源调整 batch size 或启用梯度累积以稳定训练。
5.4 导出 xtreme1 推理模型
训练结束后导出专用推理模型:
rm -rf /root/workspace/xtreme1_release_model mkdir /root/workspace/xtreme1_release_model python tools/export.py \ --config configs/petr/petrv2_vovnet_gridmask_p4_800x320.yml \ --model output/best_model/model.pdparams \ --save_dir /root/workspace/xtreme1_release_model5.5 运行 xtreme1 Demo
验证导出模型在极端条件下的检测表现:
python tools/demo.py /root/workspace/xtreme1_nuscenes_data/ /root/workspace/xtreme1_release_model xtreme1对比前后 demo 输出图像,可清晰看到模型对雨雾、低光照等场景的适应性提升。
6. 总结
本文系统介绍了如何在星图 AI 算力平台上完成 PETRV2-BEV 模型的训练与推理部署全流程,重点实现了从训练模型到 Paddle Inference 格式的导出。主要步骤包括:
- 环境搭建:激活 paddle3d_env 并下载必要依赖;
- 数据准备:处理 NuScenes mini 与 xtreme1 数据集,生成 info 文件;
- 模型训练:基于预训练权重进行微调,设置合理超参数;
- 性能评估:通过 evaluate.py 获取量化指标;
- 模型导出:利用 export.py 生成可用于工业级部署的静态图模型;
- 推理验证:通过 demo.py 实现可视化检测结果展示。
整个流程具备高度可复现性,尤其适合自动驾驶感知模块开发者快速构建定制化 BEV 检测方案。未来可进一步探索:
- 多卡分布式训练加速
- TensorRT 加速推理集成
- 自定义摄像头配置适配
掌握模型导出环节,是迈向高性能推理部署的关键一步。
获取更多AI镜像
想探索更多AI镜像和应用场景?访问 CSDN星图镜像广场,提供丰富的预置镜像,覆盖大模型推理、图像生成、视频生成、模型微调等多个领域,支持一键部署。