保姆级教程:从0开始用PETRV2-BEV模型训练自动驾驶数据集
1. 引言
1.1 学习目标
本文旨在为深度学习工程师和自动驾驶算法研究人员提供一份完整的PETRv2-BEV模型训练指南。通过本教程,读者将掌握以下技能:
- 配置Paddle3D环境并加载预训练权重
- 下载与处理nuScenes v1.0-mini数据集
- 执行模型评估、训练及可视化
- 导出可用于推理的PaddleInference模型
- 运行DEMO进行结果可视化
最终实现一个端到端的BEV(鸟瞰图)感知系统训练流程。
1.2 前置知识
建议读者具备以下基础:
- 熟悉Python编程语言
- 了解PyTorch或PaddlePaddle框架基本操作
- 掌握Linux命令行常用指令
- 对3D目标检测与BEV空间表示有一定理解
1.3 教程价值
本教程基于星图AI算力平台提供的镜像环境,整合了从环境配置到模型部署的全流程实践步骤,避免常见依赖冲突问题,极大提升开发效率。所有代码均可直接运行,适合快速验证算法效果和二次开发。
2. 准备环境
2.1 激活Conda环境
首先确保已进入Paddle3D专用的conda环境:
conda activate paddle3d_env该环境已预装PaddlePaddle、Paddle3D及相关依赖库,无需手动安装。
提示:可通过
conda env list查看当前可用环境,确认paddle3d_env是否存在。
3. 下载依赖
3.1 下载预训练权重
使用wget工具下载PETRv2在nuScenes上训练好的主干网络权重文件:
wget -O /root/workspace/model.pdparams https://paddle3d.bj.bcebos.com/models/petr/petrv2_vovnet_gridmask_p4_800x320/model.pdparams该权重基于VoVNet主干网络,并采用GridMask增强策略,在完整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解压后目录结构如下:
/root/workspace/nuscenes/ ├── maps/ ├── samples/ ├── sweeps/ └── v1.0-mini/ ├── attribute.json ├── calibrated_sensor.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此脚本会解析原始JSON标注,生成适用于PETR系列模型的.pkl格式缓存文件,包括训练集和验证集划分。
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 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.7%,NDS为28.8%,表明模型具备基本检测能力,可作为微调起点。
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 | 每卡批量大小(受限于显存) |
--learning_rate 1e-4 | 初始学习率 |
--log_interval 10 | 每10个step打印一次loss |
--save_interval 5 | 每5个epoch保存一次checkpoint |
--do_eval | 每次保存时同步评估性能 |
训练过程中,日志和模型将保存至./output/目录。
4.4 可视化训练曲线
使用VisualDL启动可视化服务:
visualdl --logdir ./output/ --host 0.0.0.0然后通过SSH端口转发访问前端界面:
ssh -p 31264 -L 0.0.0.0:8888:localhost:8040 root@gpu-09rxs0pcu2.ssh.gpu.csdn.net打开浏览器访问http://localhost:8888即可查看Loss、mAP等指标变化趋势。
4.5 导出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:模型参数deploy.yaml:部署配置文件
4.6 运行DEMO进行可视化
最后运行DEMO脚本查看检测结果:
python tools/demo.py /root/workspace/nuscenes/ /root/workspace/nuscenes_release_model nuscenes程序将随机选取测试样本,输出融合后的BEV检测框并生成可视化图像,便于直观分析模型表现。
5. 训练xtreme1数据集(可选扩展)
若需在自定义数据集上训练,如xtreme1格式的数据,可参考以下流程。
5.1 准备xtreme1数据集
假设数据已放置于/root/workspace/xtreme1_nuscenes_data/路径下:
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格式转换为PETR兼容的info文件。
5.2 测试预训练模型在xtreme1上的性能
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注意:初始mAP为0,说明预训练模型无法泛化到新数据集,必须重新训练。
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训练逻辑与nuScenes一致,仅更换数据路径。
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观察检测结果是否符合预期,可用于调试数据标注质量或模型收敛情况。
6. 总结
6.1 实践经验总结
本文详细演示了如何在星图AI算力平台上使用PETRv2-BEV模型完成从环境搭建到模型部署的全流程训练任务。关键要点包括:
- 使用预训练权重可显著加快收敛速度
- 数据预处理脚本是适配新数据集的核心环节
- batch size受限于GPU显存,建议根据设备调整
- VisualDL是监控训练过程的有效工具
- 导出模型后可通过demo快速验证效果
6.2 最佳实践建议
- 训练稳定性优化:若出现Loss震荡,尝试降低学习率至5e-5或启用warmup策略。
- 数据增强利用:可在配置文件中开启MixUp、Mosaic等增强方式提升泛化能力。
- 多卡训练加速:如有多个GPU,可通过
--num_workers和分布式训练进一步提速。 - 定期备份模型:重要checkpoint建议同步至云端存储以防丢失。
获取更多AI镜像
想探索更多AI镜像和应用场景?访问 CSDN星图镜像广场,提供丰富的预置镜像,覆盖大模型推理、图像生成、视频生成、模型微调等多个领域,支持一键部署。