1. PETR方法概述:多视角3D目标检测的新范式
在自动驾驶和机器人感知领域,基于多视角相机的3D目标检测技术正变得越来越重要。相比昂贵的激光雷达方案,纯视觉方案具有成本低、安装灵活的优势,但同时也面临着从2D图像到3D空间转换的固有挑战。传统方法如DETR3D需要将预测的3D参考点投影回各个视角的图像上,然后在这些位置采样2D特征,这个过程存在三个主要问题:
-
计算复杂度高:每次投影和特征采样都需要大量矩阵运算,特别是当处理多相机系统时,计算量会成倍增加。
-
投影误差累积:相机标定的微小误差会在多次坐标转换中被放大,导致最终3D定位不准确。
-
信息损失严重:仅使用单点特征会丢失目标周围的上下文信息,而这些信息对于准确分类和定位至关重要。
PETR(Position Embedding Transformation)提出了一种革命性的解决思路:与其反复进行2D-3D-2D的投影转换,不如直接将3D空间信息编码到图像特征中,形成"3D位置感知特征"。这种方法的巧妙之处在于:
-
前向计算一次完成:3D位置编码在特征提取阶段就已完成,后续检测过程无需重复计算。
-
信息保留完整:每个特征点都携带了其对应的3D位置信息,避免了传统方法中的信息损失。
-
端到端可训练:整个系统可以统一优化,不需要分阶段训练。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. PETR核心技术解析
2.1 3D位置编码器的设计原理
3D位置编码器是PETR的核心创新组件,它的作用是将3D空间坐标信息编码成与图像特征维度相同的向量。具体实现包含以下关键步骤:
-
3D坐标网格生成:
- 在相机视锥空间内建立均匀的3D网格坐标,形状为[H, W, D, 3]
- H和W对应特征图的空间尺寸,D是预设的深度切片数量
- 每个网格点存储了(u,v,d)坐标,其中(u,v)是2D位置,d是深度值
-
坐标空间转换:
python复制# 伪代码:相机坐标到世界坐标的转换 def transform_coords(cam_coords, extrinsic): # cam_coords: [H,W,D,3] # extrinsic: [4,4]相机外参矩阵
