当前位置: 首页 > news >正文

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 模型进行精度测试,包括环境配置、数据集准备、模型评估以及导出推理的全流程,并对关键步骤进行解释,帮助普通读者理解其原理与操作。

二、内容提要

  1. 环境准备:通过Docker配置标准测试环境
  2. 模型获取:安装Paddle3D并下载预训练权重
  3. 数据预处理:准备NuScenes迷你数据集并生成注解文件
  4. 精度测试:使用原始模型测试精度指标
  5. 模型导出:将训练好的模型导出为推理格式
  6. 推理验证:使用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)
http://www.dtcms.com/a/344225.html

相关文章:

  • JavaSSM框架从入门到精通!第三天(MyBatis(二))!
  • C++ OpenGL中几个常见库及其区别
  • 轮廓检测技术不仅能精确计算图像中的轮廓数量,还能完整记录每个轮廓包含的所有像素点坐标
  • Linux服务测试
  • Jenkins用户授权管理 企业级jenkins授权策略 jenkins用户权限分配
  • Flutter InheritedWidget 详解
  • 学习嵌入式的第二十四天——数据结构——队列和树
  • Flutter 从入门到精通 - 完整课程总结
  • 打印机怎么连接电脑?打印机驱动?【图文详解】USB连接打印机?wifi连接打印机?
  • ZKmall模块商城的跨境电商支付安全方案:加密与权限的双重防护
  • STL关联式容器解析:map与set详解
  • 电脑芯片大的32位与64位指的是什么
  • 94. 城市间货物运输 I, Bellman_ford 算法
  • 解读商业智能BI,数据仓库中的元数据
  • Python训练营打卡Day40-简单CNN
  • memcmp 函数的使用及其模拟实现
  • io.github.lucksiege:pictureselector状态栏没沉浸问题
  • 十大麦克风品牌排行榜,顶级麦克风品牌排行榜,麦克风品牌排行榜
  • 同济北化工联手AM:800 ℃/20 s磁感应闪焊合金负极,金属电池枝晶终结者
  • 一洽客服系统:自定义渠道启用路由和样式设置
  • 【自用】Maven常用依赖
  • AI知识管理全面指南:助力企业高效协作与创新
  • 【STM32】CubeMX(十一):FreeRTOS任务挂起与解挂
  • 汽车行业AI视觉检测方案(四):管控发动机外观缺陷
  • 【网卡配置编辑器】快捷的编辑网卡配置,便于调试网络设备
  • DOLO 上涨:Berachain 生态爆发的前奏?
  • 怎么用pytorch训练一个模型,并跑起来
  • More Effective C++ 条款02:最好使用C++转型操作符
  • JMeter 安装教程:轻松开启性能测试之旅
  • 前后端分离项目(Web篇)