一.总结
目标: 开发一个基于DETR的简单而优雅的3D目标检测框架。检验是否有可能将2D特征从多视图转换为3d感知特征。以便于对象查询就可以在3D环境下直接更新。
优点: 1. 保留了原始DETR的端到端的优点
2. 避免了复杂的2d到3d的投影和特征采样
二.比较
1.DETR
输入: 2D的特征 和 2D的位置编码(2D PE)
输入2: Object Query
每一个 query都代表一个目标 通过object query去找到2d特征图对应的特征 再通过2d特征编码信息去迭代更新object query
解码模式: Decoder
2.DETR3D
输入: 输入Object Query
流程1: 提取ref point
流程2:采样图像特征
解码模块: Decoder
3.PETR
输入1: 3D位置编码
3D位置编码将多视角的2D图像特征转化为3D感知特征
输入2: 提取Object Query
query可以在3D语义环境下进行一个更新 省略了来回反投影的一个过程以及特征重复采样的一个过程
解码模式: Decoder
三.主体结构
1. 输入和输出
输入: N个多视角图像 (N等于6)
输出: 3D检测结果(由目标类别和功能框组成)
2. 提取多视角图像的2D图像特征
输入: 多视角图像
步骤:2DBackbone
输出:Camera Features
3. 3D Coordinates Generator(3D 坐标生成器)
目的: 将图像坐标转化为3D空间坐标 从而完成2D到3D的转换
步骤1:将相机视锥空间离散成大小为(
,
,D)的网格,网格中的每一个点用
表示,其中
是图像中的像素坐标 ,
是沿着正交于图像平面的轴线的深度值,每个j表示当前离散化网格的一个点 。
1.建立2D图像和3D空间之间的关系,我们将相机视锥空间中的点投影到3D空间(这两个空间之间的点是一对一分配)。
步骤2:相机i 在视锥空间的第j个点 是:
1.PETR的输入是多个视角图像所以我们以nuScence为例,包含6个视角的相机图像
2.i :表示第i个相机 j:相机空间第i个相机空间中的第j个点
3.相机空间第i个相机空间中的第j个点的3d坐标
4.如何从
表示
?
相机坐标系到世界坐标系的转换公式:
步骤3:通过相机内外参可以将相机视锥空间转换到3D世界坐标,
是相机i的转换矩阵
每个视角的图像都经过相应的转换,所以就可以得到6个坐标下不同的转换结果(6个不同颜色表示)。并且由一定重叠区域,6个视角下不同的转换结果组成了完整的3d空间
步骤4:所有视图的3D坐标覆盖了转换后场景的全景图。我们将3D坐标进一步归一化
4. 3D Position Encoder
输入1: 2D图像特征
输入2:3D坐标
步骤:特征-坐标自适应映射
步骤1:将多视图2D图像特征输入到1 x1卷积层进行降维。
步骤2:由3D坐标生成器产生的3D坐标通过多层感知器转换为3D位置嵌入
步骤3:3D位置嵌入与同一视图的2D图像特征相加,产生3D位置感知特征。
步骤4:3D位置感知特征被平展(
是扁平化操作),并作为transformer解码器的输入。
输出: 3D Position-aware Feature(融合了位置信息的特征)
5. Query Generator(查询生成器)和Decoder(解码器)
Query Generator :
步骤1: PETR为了降低3D场景的收敛难度,先在3D世界空间中以均匀分布的方式初始化一组可学习的3D anchor(3D锚点),然后3D ancho(锚点)经过一个小型MLP生成初始的object query
步骤2: 将3D Position-aware Feature和object query 一起喂给Decoder 可以迭代更新 object query 以便用来做检测
四.实验
1. 性能对比
- 分辨率越高的图像好于分辨率较低的图像
- 更强大的backbone性能也是更好的
- 表示是从FCOS3d开始初始化的