PETRV2-BEV模型训练指南:星图AI平台新手入门完整教程
新手必看:在星图AI平台训练PETRV2-BEV模型的完整教程
在自动驾驶的感知世界里,BEV(鸟瞰图)技术正扮演着越来越关键的角色。它像一双“上帝之眼”,能将车辆周围多个摄像头捕捉的2D画面,无缝融合成一个统一的、俯视视角的3D空间。而在众多BEV方案中,PETRV2无疑是当前最受瞩目的选手之一。它凭什么脱颖而出?简单来说,三点:多视角融合能力强,能把前、后、左、右各个角度的信息整合得明明白白;3D检测精度高,在nuScenes这类权威测试集上表现拔尖;训练效率也做了优化,比初代版本快了不止一星半点。
今天,我们就来手把手走一遍,如何在星图AI平台上,从零开始完成一个PETRV2-BEV模型的完整训练。别担心,即便你是深度学习的新手,跟着步骤来,也能顺利跑通。
环境准备与快速启动
激活预配置环境
星图AI平台已经把繁琐的环境配置工作都做好了。我们只需要打开终端,输入一条命令,就能进入准备好的战场:
conda activate paddle3d_env
看到命令行提示符前面出现 (paddle3d_env) 的标识,就说明环境激活成功了。顺手验证一下PaddlePaddle是否就位:
python -c "import paddle; print(paddle.__version__)"
如果终端打印出类似 2.6.0 的版本号,那么恭喜,基础环境一切正常。
了解目录结构
开工之前,先摸清几个关键目录的位置,后续操作会频繁用到:
/usr/local/Paddle3D:这里是Paddle3D框架的大本营。/root/workspace:我们的主工作区,数据和模型都会放在这里。/root/workspace/nuscenes:专门用来存放nuScenes数据集。
数据准备与预处理
下载预训练模型
为了节省时间并提升效果,我们采用迁移学习的方式。第一步,就是把官方预训练好的模型权重请过来:
wget -O /root/workspace/model.pdparams https://paddle3d.bj.bcebos.com/models/petr/petrv2_vovnet_gridmask_p4_800x320/model.pdparams
下载完成后,不妨检查一下文件大小,确保完整无误(大约172MB):
ls -lh /root/workspace/model.pdparams
获取nuScenes 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 目录下看看,应该会出现 samples、sweeps 等标准文件夹。
生成数据索引文件
PETRV2模型需要特定格式的数据索引。别担心,有现成的脚本可以一键生成:
cd /usr/local/Paddle3D
rm /root/workspace/nuscenes/petr_nuscenes_annotation_* -f
python3 tools/create_petr_nus_infos.py --dataset_root /root/workspace/nuscenes/ --sa ve_dir /root/workspace/nuscenes/ --mode mini_val
脚本运行成功后,会在指定目录生成两个关键的 .pkl 文件,它们是后续训练的“地图”:
ls /root/workspace/nuscenes/petr_nuscenes_annotation_*.pkl
模型训练与监控
启动训练任务
万事俱备,现在可以点燃引擎,开始训练了。复制下面的命令,根据你的实际情况微调参数:
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 \
--sa ve_interval 5 \
--do_eval
这里有几个参数值得关注:--epochs 100 代表训练100轮;--batch_size 2 表示每批处理2组数据(注意,每组包含6个视角,所以实际是12张图);--do_eval 这个开关很重要,它会让模型在每轮训练后都在验证集上跑一遍,方便我们实时评估性能。
监控训练过程
训练启动后,我们当然不能干等着。星图平台集成了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。一个丰富的仪表盘就会展现在眼前,里面通常包括:训练损失是如何一步步下降的;验证集上的mAP指标有没有稳步提升;以及学习率是否在按计划调整。
模型导出与效果验证
导出推理模型
训练完成后,我们通常需要把最好的那个模型“固化”下来,导出成标准的推理格式,方便后续部署和应用。命令如下:
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 \
--sa ve_dir /root/workspace/nuscenes_release_model
导出成功后,在目标文件夹里你会看到三个文件:inference.pdmodel、inference.pdiparams 和 inference.pdiparams.info。这就是可以直接用于预测的模型了。
运行DEMO测试
模型好不好,拉出来溜溜才知道。用下面这个demo脚本,可以直观地看到模型的检测效果:
python tools/demo.py /root/workspace/nuscenes/ /root/workspace/nuscenes_release_model nuscenes
运行后,结果会保存在 output/demo/ 目录下。打开看看,你会得到几种可视化结果:原始多个摄像头画面的拼接图;从鸟瞰视角看下去的3D检测框;以及每个检测框对应的类别和置信度。效果一目了然。
进阶:Xtreme1数据集训练
数据准备
如果你想在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/
训练与评估
数据准备好之后,启动训练的命令只需要修改数据集路径即可:
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 \
--sa ve_interval 5 \
--do_eval
常见问题排查
数据路径错误
症状:终端报错 FileNotFoundError 或 KeyError。
解决方法:按顺序检查这三步:1. 确认 /root/workspace/nuscenes/ 目录确实存在,并且里面包含了下载好的数据文件。2. 检查上一步生成 .pkl 索引文件的操作是否成功。3. 核对配置文件(.yml)里的数据路径设置是否正确。
训练loss不下降
可能原因:
- 学习率设置不合适:可以尝试调整 --learning_rate 参数,比如从1e-4调到5e-5或2e-4试试。
- 数据预处理有问题:确保数据索引文件(.pkl)是基于当前数据集正确生成的,必要时删除旧文件重新生成一遍。
- 模型权重加载失败:检查 --model 参数指向的 model.pdparams 文件路径是否正确,文件是否完整。
显存不足
解决方案:
- 最直接的办法:减小 batch_size,可以尝试设为1。
- 使用梯度累积(gradient_accumulation)技术,模拟更大的批次,但需要相应调整学习率。
- 关闭训练过程中非必要的实时可视化或日志功能,节省显存开销。
总结与下一步
走完这一趟,你应该已经掌握了在星图AI平台上玩转PETRV2-BEV模型的核心技能:从环境搭建、数据预处理,到模型训练、监控、导出和效果验证,形成了一条完整的闭环。
接下来可以尝试的方向有很多:比如调整BEV网格的尺寸、特征通道数等模型参数,看看对精度和速度的影响;或者,将这套流程迁移到你自己的数据集上进行微调;再进一步,可以把PETRV2和其他BEV模型(比如BEVFormer、BEVDet)放在一起做个横向对比,深入理解它们各自的优劣。