自动驾驶3D目标检测:星图AI平台训练PETRV2-BEV模型教程
自动驾驶3D目标检测:星图AI平台训练PETRV2-BEV模型教程
1. 从零开始:为什么选择PETRV2-BEV模型?
如果你正在研究自动驾驶的视觉感知,特别是如何让车辆“看懂”周围的三维世界,那么基于BEV(鸟瞰图)的3D目标检测绝对是你绕不开的技术。传统的检测方法往往需要在每个相机视角下单独识别物体,再把它们拼凑起来,这个过程不仅复杂,还容易出错。
PETRV2的出现,改变了这个局面。它就像给自动驾驶汽车装上了一双“上帝之眼”,能够直接把多个摄像头拍到的2D画面,在模型内部转换成统一的3D鸟瞰图视角,然后在这个视角下一次性检测出所有车辆、行人、障碍物的位置、大小和朝向。这种方法思路更直接,效果也更好。
今天,我们就来手把手教你,如何在星图AI算力平台上,从环境准备到模型训练,完整地跑通PETRV2-BEV模型。你不需要准备昂贵的本地显卡,也不用担心复杂的环境配置,跟着步骤走,就能在云端完成一次专业的模型训练实践。
2. 训练第一步:准备你的云端工作环境
2.1 激活预置的深度学习环境
登录星图AI平台并创建实例后,第一件事就是进入我们为你准备好的Paddle3D专用环境。这个环境已经集成了所有必要的深度学习框架和库,省去了你一个个安装的麻烦。
打开终端,输入以下命令:
conda activate paddle3d_env看到命令行提示符前面变成(paddle3d_env)就说明环境激活成功了。这个环境里已经装好了PaddlePaddle深度学习框架和Paddle3D这个3D感知工具包,一切都是开箱即用的状态。
3. 获取模型与数据:训练的两大原料
3.1 下载官方预训练模型
从头开始训练一个大型模型既耗时又耗资源,聪明的做法是使用别人已经训练好的模型作为起点,这叫做“迁移学习”。PETRV2官方提供了在大型数据集上预训练好的权重文件,我们直接下载下来用。
在终端里执行这条命令:
wget -O /root/workspace/model.pdparams https://paddle3d.bj.bcebos.com/models/petr/petrv2_vovnet_gridmask_p4_800x320/model.pdparams这个model.pdparams文件就是模型的“知识库”,里面包含了网络如何从图像中提取特征、如何预测3D框的所有经验。用上它,我们的训练能更快收敛,效果也更好。
3.2 下载迷你版数据集进行验证
为了快速验证整个流程是否通畅,我们先用一个轻量级的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(点云帧,这里用不上)、v1.0-mini(标注文件)等文件夹。数据集就准备好了。
4. 核心实战:在迷你数据集上训练与评估
4.1 为模型准备可读的数据格式
原始的数据标注是JSON文件,模型训练时需要一种更高效的二进制格式。Paddle3D提供了一个脚本,专门把NuScenes的数据转换成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这个脚本会做几件事:读取所有图片和标注,计算相机参数,生成训练和验证集列表,最后保存成.pkl文件。以后训练时,模型就直接读取这些.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 ...这里mAP是平均精度,是衡量检测准不准的核心指标,0.2669意味着模型能正确找出大约26.7%的物体。NDS是NuScenes数据集特有的综合评分。这个结果说明预训练模型具备一定的基础检测能力,但还有很大的提升空间,这正是我们接下来要做的。
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我来解释一下这几个关键参数:
--batch_size 2:一次训练喂给模型2个样本。这个数不能太大,否则显卡内存会不够用。--epochs 100:让模型把整个训练集完整地看100遍。--learning_rate 1e-4:模型学习的“步长”,步子太大容易学歪,太小又学得慢,1e-4是个常用的起点。--do_eval:每训练完一定的轮数,就自动在验证集上测试一下,方便我们监控效果。--save_interval 5:每训练5轮,就保存一次当前的模型,防止训练中断丢失进度。
训练开始后,终端会不断输出损失值下降的过程。所有训练日志和中间保存的模型,都会存放在当前目录下的output文件夹里。
4.4 可视化训练过程:用眼睛跟踪学习进度
盯着终端看数字变化太枯燥了。我们可以启动一个可视化工具,用图表来直观地观察训练情况。
在一个新的终端窗口(或者使用tmux、screen让命令在后台运行),运行:
visualdl --logdir ./output/ --host 0.0.0.0这个命令启动了VisualDL服务。但是,这个服务运行在云服务器的某个端口上(比如8040),我们本地电脑看不到。所以需要建立一个“隧道”。
4.5 建立隧道:在本地浏览器查看图表
我们需要把云服务器上的端口,映射到我们自己电脑的某个端口上。使用SSH端口转发命令(请将命令中的示例地址和端口替换成你从星图AI平台获取的实际信息):
ssh -p 你的端口号 -L 0.0.0.0:8888:localhost:8040 你的用户名@你的服务器地址命令执行成功后,打开你本地电脑的浏览器,访问http://localhost:8888。神奇的事情发生了,你看到了运行在远程服务器上的VisualDL界面!
4.6 解读训练曲线:模型学得怎么样?
在VisualDL界面中,重点关注这几条曲线:
total_loss(总损失):这是最重要的曲线,它应该随着训练轮数增加而稳步下降,最后趋于平缓。如果它剧烈震荡或者不降反升,说明学习率可能设高了,或者数据有问题。det_loss(检测损失):专门衡量模型检测物体位置和类别的能力。learning_rate(学习率):看看它是否按照我们设定的策略在变化。
通过观察这些曲线,你可以判断模型训练是否健康,是否需要提前停止或者调整参数。
4.7 导出最终模型:为部署做准备
训练完成后,output/best_model目录下保存着验证集上表现最好的那个模型。但是,这个模型文件(.pdparams)是动态图的,适合研究和继续训练,但不一定适合最终部署到产品中。
我们需要把它“固化”下来,导出为静态图模型,这样推理速度更快,也更容易集成。
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导出的模型会包含model.pdmodel(网络结构)、model.pdiparams(模型权重)和deploy.yaml(配置文件),这就是可以直接用于推理的最终成品。
4.8 眼见为实:运行Demo查看检测效果
模型训练好了,导出也完成了,是时候看看它的实际表现了。运行Demo脚本,让模型处理几张图片,并把检测结果画出来。
python tools/demo.py /root/workspace/nuscenes/ /root/workspace/nuscenes_release_model nuscenes运行后,程序会读取数据集中的一些样本,用我们刚导出的模型进行推理,然后在图片上画出预测的3D边界框(投影到2D图像上)。生成的带检测框的图片会保存在output/demo/目录下。打开看看,你就能直观地感受到模型“看到了”什么。
5. 进阶挑战:在自定义数据集上训练
如果你有自己的自动驾驶数据集(比如格式与NuScenes类似的xtreme1数据集),也可以尝试用PETRV2来训练。流程是类似的,但需要先转换数据格式。
5.1 准备自定义数据集
假设你的数据已经放在了/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/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/ # 启动训练 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_eval5.3 导出与可视化
训练完成后,同样进行模型导出和Demo可视化:
# 导出模型 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_model # 运行Demo python tools/demo.py /root/workspace/xtreme1_nuscenes_data/ /root/workspace/xtreme1_release_model xtreme16. 总结
通过这篇教程,我们完整地走通了在星图AI平台上训练PETRV2-BEV模型的流程。从激活环境、下载数据,到训练监控、模型导出和效果可视化,每一步都有具体的命令和解释。
整个过程的核心思路是:利用强大的预训练模型作为起点,在目标数据上进行“微调”。这比从头训练要高效得多。星图AI平台提供的现成环境和算力,让我们可以跳过繁琐的环境配置,直接聚焦于模型训练本身。
几个关键点再回顾一下:
- 用好预训练权重:这是快速获得一个好模型的捷径。
- 关注训练曲线:通过VisualDL及时发现问题,调整学习率等参数。
- 理解评估指标:
mAP和NDS是衡量3D检测效果的关键。 - 最终导出静态图:这是模型投入实际使用的最后一步。
希望这个教程能帮你快速上手自动驾驶3D检测模型的训练。你可以尝试调整批次大小、学习率、训练轮数等参数,看看模型效果会有什么变化,这才是深度学习的乐趣所在。
获取更多AI镜像
想探索更多AI镜像和应用场景?访问 CSDN星图镜像广场,提供丰富的预置镜像,覆盖大模型推理、图像生成、视频生成、模型微调等多个领域,支持一键部署。
