本文分享单目3D目标检测,DD3D 模型的论文解读,了解它的设计思路,论文核心观点,模型结构,以及效果和性能。
一、DD3D简介
DD3D是一种端到端、单阶段的单目3D目标检测方法,它在训练时用到了点云数据,监督深度图的生成,共享预测深度的特征提取层;
推理时不用点云数据了,只需图像数据和相机内参,即可完成3D框的信息预测。这是预训练和共享权重的思路。
开源地址:https://github.com/TRI-ML/dd3d
论文地址:Is Pseudo-Lidar needed for Monocular 3D Object detection?
二、论文核心观点
论文核心观点,主要包括:
- 观点背景:当前有两阶段的方法,首先单目深度估计生成深度图,并将图像数据转为点云数据;然后用三维点云的检测器输出3D框信息,从而将相机转变为伪激光雷达传感器。这类方法通常网络结构较为复杂且容易过拟合。
- 设计一种端到端、单阶段的单目3D目标检测。
- 基于预训练和共享权重的思路;训练时用到了点云数据,监督深度图的生成,共享预测深度的特征提取层;推理时只需图像数据和相机内参,即可完成3D框的信息预测。
三、模型框架
DD3D是一个单阶段的框架,基于FCOS思想,实现单目3d检测的。模型结构如下:
Backbone:DLA34
Neck:FPN
Head:由三部分组成
第一部分:类别检测(默认3分类:车、行人、骑车的人)
第二部分:2D框检测(2D-box和center-ness)
第三部分:3D检测(3D框信息——朝向、深度距离、中心偏差、三维尺寸,深度图,置信度)
模型结构如下图所示:
在FPN中,通过以下方式形成5 种尺度的Features输出:
- 引用DLA34中Level5的Features进行CBL计算得到P5。
- 引用Level3~5的Features进行跨尺度融合得到P3、P4。
- 在P5的基础上经过两次s=2的CBL计算得到P6和P7。
DD3D的训练过程,包括3个阶段:Feature学习训练 → 深度估计训练 → 3D目标检测训练
- Feature学习训练:用COCO数据集预训练2D目标检测,主要是学习图像中的features,用到的heads包括:Logits、2D-box和center-ness。
- 深度估计(dense depth)训练:单目深度估计模块,在KITTI-Depth数据中对PackNet进行训练,生成深度图,用到的head是Dense-depth。
- 3D目标检测训练: 用KITTI-3D数据集训练3D目标检测,用到除了dense-depth之外的所有heads。
在深度估计训练时,形成效果好的模型参数,即:预测深度的特征提取层;
在3D目标检测训练,需要预测深度信息,会共享部分预测深度的特征提取层。
四、损失函数
DD3D 的损失由3部分组成,
2D 框检测损失:3部分
- 通过binary focal loss计算分类损失
- 通过binary cross entropy计算中心点center-ness的损失
- 通过IOU损失计算2D box回归损失
3D 框检测损失:4部分
- 预测朝向,偏航角使用L1 Loss函数。
- 预测3D投影坐标偏移;使用 L1 Loss 函数。
- 预测3D框的尺寸。
- 预测中心点的深度值。
3D 框的信息是使用L1 loss来计算,公式如下。
每次从回归3D框的4组元素(朝向,3D-bbox投影中心,深度,尺寸)中取1个,其它三个用目标真值,来构建一个3D-bbox的8个顶点,然后用公式计算损失。这样重复4次计算各组元素的3D loss。
3D 框置信度损失
通过3D IOU计算3D的置信度。DD3D是通过单阶段网络端到端做3D目标检测的,其对于每一个像素点都会输出一组参数用于获取3D bounding box,但是并非每一个像素点的预测都是有效的(如背景区域),还有一些预测结果可能存在错误或者冲突,因此需要引入置信度评估对预测结果进行过滤。
总体的损失函数,如下所示:
总体的损失函数 = 2D 框检测损失 + 3D 框检测损失 + 3D 框置信度损失
五、核心内容——点云数据预训练深度信息,共享深度信息特征提取层
当前有两阶段的方法,首先单目深度估计生成深度图,并将图像数据转为点云数据;
然后用三维点云的检测器输出3D框信息,从而将相机转变为伪激光雷达传感器。这类方法通常网络结构较为复杂且容易过拟合。
DD3D 设计一种端到端、单阶段的单目3D目标检测。基于预训练和共享权重的思路;训练时用到了点云数据,监督深度图的生成,共享预测深度的特征提取层;推理时只需图像数据和相机内参,即可完成3D框的信息预测。下面详细分析检测头head-3D detection。
3D detection head,包含三部分检测头,共12个数值:
- 3D框检测信息,3D-box head,包含10个参数。朝向角的四元素q(qw, qx, qy, qz)、深度信息Zc、3D 框中心的偏移量O (∆u,∆v)、3D尺寸δ (δW , δH, δH) 。
- 深度估计预训练,Dense-depth head,包含1个参数,预测Zp;点云投影到 图像上特征图 所在位置点的z方向深度(dense-depth)。
- 3D置信度,3D-confidence head,包含1个参数,预测置信度。
解析3D框检测信息:
q(qw, qx, qy, qz): 直接回归得到的是Allocentric orientation (q_allo),即以3D-bbox自身为中心朝向的四元数。然后被归一化、转换成以相机为中心的朝向(Egocentric orientation)。
O =(∆u,∆v)表示从特征位置到投影到相机平面上的 3D 边界框中心的偏移量。最终将通过反投影得到3D框中线点的3D坐标。
δ = (δW , δH, δH) 表示 3D 边界框的大小与特定类别物体的规范大小的偏差。由于在实际中,每一类具体的物体的物理尺寸通常变化不大,因此可以通过对每一类的物体预设一个尺度(可以在训练集中计算出每一类物体的平均尺寸),然后在此基础上预测尺寸的偏差即可。
Zc表示为目标3D bbox中心的Z分量,因此只与前景特征相关。
Zp表示点云投影到 图像上特征图 所在位置点的z方向深度,覆盖整图像范围,它与每个像素相关联,类似逐像素的深度图。
深度信息的值,可以通过下面的转换公式得到:
Z∈{Zc,Zp}由模型输出,通过上面的公式,得到d∈{dc,dp}预测深度。
其中(σl和μl)为可学习的缩放因子和偏移量,初值来自对数据集的统计值。
p为从焦距f计算得到的像素大小fx和fy;c为常数,工程中设为500。
上述的公式中用到了相机的内参(fx和fy),而这赋予了DD3D模型以相机感知能力,使得学习到的深度不仅与图像有关还与像素的大小密切相关。
dense depth head的深度预训练
在pre-training depth时,对来自FPN每一层特征图(5张)的逐像素深度预测值。
计算Loss时,只选用从Lidar 稀疏点云映射到图像平面上具备有效ground-truth depth的像素点,按照如下公式来计算:
D∗ 是gt-depth map,D是来自每个一层特征图的深度预测值,它们都被插值成了与图像相同的精度,。
M是二进制指标,用来表示哪些pixel有效的mask(即那些从激光点云投影到图像上的像素点)。
Zc表示为目标3D bbox中心深度信息。
Zp表示点云预训练的深度信息,覆盖整图像范围,类似逐像素的深度图。
Zc和Zp都是预测深度,这两个路径只有最后3x3卷积层不同,即它们共享了几乎所有的参数。从深度预训练任务中学习到的深度估计能力,可以有效地迁移到目标任务3d bbox的深度预测任务中。
补充内容:
论文也给出了一套基于伪激光雷达做3D目标检测的方案作为对比,流程大概如下:
- 首先通过PackNet进行单目深度估计,并将生成的深度图转换成点云。
- 然后将每一个像素点的点云坐标和图像像素值拼接成一个6维的tensor。
- 再基于现有的2D目标检测器获取ROI区域,将每一个ROI区域所对应的6通道tensor,输入到3D检测网络中预测出3D bounding box。
六、实验对比与模型效果
在KITTI-3D 测试集,选Car这个类进行评估,用以粗体突出显示最佳结果。
Kitti数据集的模型效果:
下面是在nuScenes测试集评估的结果:
nuScenes数据集的模型效果:
分享完成~
【数据集】单目3D目标检测:
3D目标检测数据集 KITTI(标签格式解析、3D框可视化、点云转图像、BEV鸟瞰图)_kitti标签_一颗小树x的博客-CSDN博客
3D目标检测数据集 DAIR-V2X-V_一颗小树x的博客-CSDN博客
【论文解读】单目3D目标检测:
【论文解读】SMOKE 单目相机 3D目标检测(CVPR2020)_相机smoke-CSDN博客
【论文解读】单目3D目标检测 CUPNet(ICCV 2021)-CSDN博客
【论文解读】单目3D目标检测 MonoDLE(CVPR2021)_一颗小树x的博客-CSDN博客
【论文解读】单目3D目标检测 MonoCon(AAAI2022)_一颗小树x的博客-CSDN博客
【实践应用】
单目3D目标检测——SMOKE 环境搭建|模型训练_一颗小树x的博客-CSDN博客
单目3D目标检测——SMOKE 模型推理 | 可视化结果-CSDN博客
单目3D目标检测——MonoDLE 模型训练 | 模型推理_一颗小树x的博客-CSDN博客
单目3D目标检测——MonoCon 模型训练 | 模型推理-CSDN博客
后面计划分享,实时性的单目3D目标检测:MonoFlex、MonoEF、MonoDistillI、DEVIANT等