从数据准备到模型训练:PETRV2-BEV完整实战教程
1. 引言
1.1 学习目标
本教程旨在带领读者完成基于Paddle3D框架的PETRv2-BEV(Bird's Eye View)模型从环境搭建、数据准备、模型训练到推理部署的全流程实践。通过本指南,您将掌握:
- 如何配置PETRv2所需的PaddlePaddle深度学习环境
- 下载并处理NuScenes和Xtreme1数据集的方法
- 使用预训练权重进行模型评估与微调训练
- 训练过程监控、模型导出及可视化推理演示
最终实现一个可在BEV空间中准确检测多类交通目标的三维目标检测系统。
1.2 前置知识
建议读者具备以下基础:
- 熟悉Linux命令行操作
- 了解Python编程与深度学习基本概念
- 对3D目标检测任务有一定认知(如LiDAR点云、相机融合感知等)
- 掌握Conda虚拟环境管理工具
1.3 教程价值
本文提供的是可直接复现的一站式解决方案,特别适用于自动驾驶感知算法研发人员、高校科研人员以及AI工程化落地团队。所有步骤均经过实测验证,代码可一键运行,极大降低入门门槛。
2. 准备环境
2.1 进入paddle3d_env conda环境
首先确保已安装Anaconda或Miniconda,并创建了名为paddle3d_env的虚拟环境。该环境应包含PaddlePaddle及相关依赖库。
激活环境命令如下:
conda activate paddle3d_env提示:若未创建此环境,请参考Paddle3D官方文档使用提供的
environment.yml文件进行初始化。
3. 下载依赖
3.1 下载预训练权重
PETRv2模型采用VoVNet主干网络并结合GridMask增强策略,在NuScenes数据集上表现优异。我们首先下载其预训练参数用于后续微调。
执行以下命令获取模型权重:
wget -O /root/workspace/model.pdparams https://paddle3d.bj.bcebos.com/models/petr/petrv2_vovnet_gridmask_p4_800x320/model.pdparams该权重文件大小约为300MB,适用于输入分辨率为800×320的图像序列。
3.2 下载nuscenes v1.0-mini数据集
为快速验证流程,我们先使用轻量级的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/:标注JSON文件
4. 训练nuscenes v1.0-mini数据集
4.1 准备数据集
进入Paddle3D主目录,并生成适用于PETR模型的数据索引文件。
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:验证集信息缓存
这些文件记录了每帧的图像路径、标定参数、3D边界框等元数据,提升训练时的数据加载效率。
4.2 测试精度
在开始训练前,先用预训练模型对mini数据集进行一次评估,确认环境无误。
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为26.69%,NDS为28.78%,说明模型具备初步检测能力,适合作为微调起点。
4.3 模型训练
启动训练任务,设置超参数如下:
- 训练轮数:100 epochs
- 批次大小:2
- 学习率:1e-4
- 每10步打印日志
- 每5个epoch保存一次检查点
- 启用验证(
--do_eval)
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训练过程中,日志将保存至output/目录下,包括:
log.txt:训练状态输出best_model/:最优权重保存路径latest_model/:最新检查点
4.4 可视化训练曲线
使用VisualDL工具查看Loss和Metric变化趋势:
visualdl --logdir ./output/ --host 0.0.0.04.5 端口转发访问可视化界面
若在远程服务器运行,可通过SSH隧道将本地端口映射至服务器:
ssh -p 31264 -L 0.0.0.0:8888:localhost:8040 root@gpu-09rxs0pcu2.ssh.gpu.csdn.net随后在浏览器访问http://localhost:8888即可查看实时训练曲线,包括:
- Total Loss下降趋势
- mAP/NDS上升曲线
- 分类、定位损失分解图
4.6 导出PaddleInference模型
训练完成后,将动态图模型转换为静态图格式,便于部署:
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导出内容包括:
inference.pdmodel:网络结构inference.pdiparams:模型权重inference.pdiparams.info:参数信息
4.7 运行DEMO进行可视化推理
最后执行推理脚本,生成带3D框的可视化结果:
python tools/demo.py /root/workspace/nuscenes/ /root/workspace/nuscenes_release_model nuscenes输出视频或图像将展示:
- 多视角相机融合下的3D检测框
- BEV视角中的车辆分布热力图
- 类别标签与置信度显示
5. 训练xtreme1数据集[可选]
5.1 准备数据集
Xtreme1是更具挑战性的城市场景数据集,支持复杂光照与天气条件下的模型泛化能力测试。
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/该脚本自动解析Xtreme1格式数据并生成兼容PETRv2的info文件。
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 bus 0.000 1.000 1.000 1.000 1.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.000 1.280 0.444 1.611 0.000 1.000 motorcycle 0.000 1.000 1.000 1.000 1.000 1.000 bicycle 0.000 1.000 1.000 1.000 1.000 1.000 traffic_cone 0.000 1.000 1.000 nan nan nan barrier 0.000 1.000 1.000 1.000 nan nan可见模型在未见过的Xtreme1数据上性能严重退化(mAP=0),需进行针对性微调。
5.3 模型训练
启动迁移学习训练:
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建议调整学习率调度策略以加快收敛速度。
5.4 导出PaddleInference模型
训练结束后导出最优模型:
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 运行DEMO进行可视化推理
执行推理脚本查看效果:
python tools/demo.py /root/workspace/xtreme1_nuscenes_data/ /root/workspace/xtreme1_release_model xtreme1观察模型是否能在恶劣光照条件下稳定检测行人、非机动车等小目标。
6. 总结
6.1 全流程回顾
本文详细介绍了基于Paddle3D框架训练PETRv2-BEV模型的完整流程,涵盖:
- 环境配置与依赖安装
- NuScenes mini数据集准备与评估
- 模型训练、监控与导出
- Xtreme1数据集迁移训练方案
整个流程实现了从“零”到“部署”的闭环,适合用于学术研究与工业原型开发。
6.2 实践建议
- 资源优化:若显存不足,可进一步降低
batch_size至1,或启用梯度累积。 - 加速训练:对于全量
v1.0-trainval数据,建议使用分布式训练(--num_workers > 1)。 - 调参建议:尝试调整学习率warmup周期、优化器类型(AdamW vs SGD)、数据增强强度。
- 模型压缩:生产环境中可考虑使用PaddleSlim进行剪枝量化,提升推理速度。
6.3 下一步学习路径
- 尝试其他BEV方法:如BEVFormer、RTMDet3D等
- 接入真实车载数据流进行在线推理测试
- 部署至边缘设备(Jetson系列)实现低延迟感知
- 结合轨迹预测模块构建端到端自动驾驶 pipeline
获取更多AI镜像
想探索更多AI镜像和应用场景?访问 CSDN星图镜像广场,提供丰富的预置镜像,覆盖大模型推理、图像生成、视频生成、模型微调等多个领域,支持一键部署。