Paddle3D-PETRv1 精度测试与推理实践指南
Paddle3D-PETRv1 精度测试与推理实践指南
-
- 一、背景
- 二、内容提要
- 三、操作步骤
-
- 1、创建容器
- 2. 安装Paddle3D
- 3. 创建数据集
- 4. 修改配置文件
- 5. 下载预训练权重并测试精度
- 6. 导出模型
- 7. 自定义精度测试(保存预处理输入)
- 8. 使用Paddle Inference进行推理
- 9. 验证推理输出的精度
- 四、总结
一、背景
PETR(Position Embedding Transformation for multi-view 3D object detection)是一种基于多视角图像的3D物体检测方法。它通过将3D坐标空间的位置信息编码到2D图像特征中,实现了无需深度估计的3D检测,具有良好的实时性与准确性。Paddle3D 是飞桨推出的3D感知模型库,集成了多种先进的3D检测、分割等算法。
本文将详细介绍如何对 Paddle3D 中的 PETRv1 模型进行精度测试,包括环境配置、数据集准备、模型评估以及导出推理的全流程,并对关键步骤进行解释,帮助普通读者理解其原理与操作。
二、内容提要
- 环境准备:通过Docker配置标准测试环境
- 模型获取:安装Paddle3D并下载预训练权重
- 数据预处理:准备NuScenes迷你数据集并生成注解文件
- 精度测试:使用原始模型测试精度指标
- 模型导出:将训练好的模型导出为推理格式
- 推理验证:使用Paddle Inference进行部署并验证精度一致性,该脚本也可以用于其它推理方式输出结果的精度测试
三、操作步骤
1、创建容器
容器技术(如Docker)可以创建一个隔离且可复现的环境,避免由于系统环境差异导致的问题。
cd /home/apollo
docker run --gpus all --shm-size=128g -it -e NVIDIA_VISIBLE_DEVICES=all \--privileged --net=host \-v $PWD:/home -w /home \--name petrv1_acc registry.baidubce.com/paddlepaddle/paddle:2.4.2-gpu-cuda11.7-cudnn8.4-trt8.4 /bin/bash
参数解释:
--gpus all
:允许容器使用所有GPU--shm-size=128g
:设置共享内存大小,大型数据集需要更多内存-v $PWD:/home
:将当前目录挂载到容器的/home目录-w /home
:设置工作目录为/home- 镜像包含CUDA 11.7、cuDNN 8.4和TensorRT 8.4,适合深度学习推理
2. 安装Paddle3D
Paddle3D是飞桨的3D感知工具库,提供了多种3D感知算法的实现。
cd /home/
git clone https://github.com/PaddlePaddle/Paddle3D.git
cd /home/Paddle3D
pip3 install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
python3 setup.py install
pip install ortools==9.1.9490
步骤说明:
- 从GitHub克隆Paddle3D仓库
- 安装依赖库(使用清华镜像加速下载)
- 以开发模式安装Paddle3D
- 安装OR-Tools优化工具库,用于后续的推理优化
3. 创建数据集
NuScenes是自动驾驶领域的经典3D检测数据集,包含多传感器数据。
# 下载mini数据集(3.9GB)
wget -O /home/v1.0-mini.tgz https://www.nuscenes.org/data/v1.0-mini.tgzmkdir -p data/nuscenes
tar -xf /home/v1.0-mini.tgz -C data/nuscenes
python3 tools/create_petr_nus_infos.py --dataset_root data/nuscenes/ --save_dir data/nuscenes/ --mode mini_val
步骤说明:
- 创建数据集目录结构
- 解压预先下载的NuScenes迷你数据集
- 生成PETR模型所需的注解文件(包含物体标注、校准信息等)
4. 修改配置文件
# 修改configs/petr/petr_vovnet_gridmask_p4_800x320.yml
val_dataset:type: NuscenesMVDatasetdataset_root: data/nuscenes/ann_file: data/nuscenes/petr_nuscenes_annotation_val.pklmode: mini_val # 使用迷你数据集验证模式
重要参数:
dataset_root
:数据集根目录ann_file
:注解文件路径mode
:数据集模式(mini_val表示使用迷你验证集)
5. 下载预训练权重并测试精度
预训练权重是模型在大型数据集上已训练好的参数,可以直接用于推理。
wget https://paddle3d.bj.bcebos.com/models/petr/petr_vovnet_gridmask_p4_800x320_amp/model.pdparams
python3 tools/evaluate.py --config configs/petr/petr_vovnet_gridmask_p4_800x320.yml --model model.pdparams
输出
mAP: 0.3479
mATE: 0.7280
mASE: 0.4597
mAOE: 0.6863
mAVE: 0.8642
mAAE: 0.2995
NDS: 0.3702
Eval time: 6.7sPer-class results:
Object Class AP ATE ASE AOE AVE AAE
car 0.609 0.514 0.160 0.135 0.224 0.064
truck 0.504 0.593 0.192 0.075 0.142 0.016
bus 0.480 0.737 0.091 0.599 2.938 0.097
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.510 0.693 0.254 0.634 0.462 0.212
motorcycle 0.455 0.731 0.310 0.990 0.062 0.004
bicycle 0.243 0.585 0.199 0.745 1.086 0.004
traffic_cone 0.679 0.427 0.391 nan nan nan
barrier 0.000 1.000 1.000 1.000 nan nan
精度指标解释:
mAP
:平均精度均值,衡量检测准确性(越高越好)mATE
:平均平移误差,衡量位置准确性(越低越好)mASE
:平均尺度误差,衡量尺寸准确性(越低越好)mAOE
:平均方向误差,衡量方向准确性(越低越好)mAVE
:平均速度误差,衡量速度预测准确性(越低越好)mAAE
:平均属性误差,衡量属性预测准确性(越低越好)NDS
:NuScenes检测分数,综合指标(越高越好)
6. 导出模型
将训练好的模型导出为推理格式,便于部署。
python3 tools/export.py --config configs/petr/petr_vovnet_gridmask_p4_800x320.yml \--model model.pdparams --save_dir petr_inference
导出内容:
.pdmodel
:模型结构文件.pdiparams
:模型参数文件.pdiparams.info
:模型参数信息文件
7. 自定义精度测试(保存预处理输入)
此步骤保存模型输入数据,便于后续对比推理结果。
cat > my_eval.py <<-'EOF'
import argparse
import os
import random
import numpy as np
import paddle
from paddle3d.apis.config import Config
from paddle3d.apis.trainer import Trainer
from paddle3d.slim import get_qat_config
from paddle3d.utils.checkpoint import load_pretrained_model
from paddle3d.utils.logger import logger
from paddle3d.apis.pipeline import training_step, validation_step
import inspectclass CustomTrainer(Trainer)