文章目录
- 1.Abstract
- [2. Introduction](#2. Introduction)
- [3. Related work](#3. Related work)
-
- [DETR base methods](#DETR base methods)
- [4. Method](#4. Method)
-
- [4.1Feature Extraction](#4.1Feature Extraction)
-
- [Visual Features](#Visual Features)
- [depth features](#depth features)
- [foreground depth map](#foreground depth map)
- [4. 2 Depth guided transformer](#4. 2 Depth guided transformer)
-
- [Visual and depth encoders](#Visual and depth encoders)
- Depth-guided-decoder
- [Depth positional encoding](#Depth positional encoding)
- [4. 3 Detection heads and loss](#4. 3 Detection heads and loss)
-
- [bipartite matching](#bipartite matching)
- [overall loss](#overall loss)
- [4.4 Plug-and-play for Multi-view Detectors](#4.4 Plug-and-play for Multi-view Detectors)
- [5 Experiments](#5 Experiments)
1.Abstract
单目目标检测在自动驾驶领域,一直是一个具有挑战的任务。现在大部分的方式都是沿用基于卷积的2D 检测器,首先检测物体中心,后通过中心附近的特征去预测3D属性。
但是仅仅通过局部的特征去预测3D特征是不高效的,且并没有考虑一些长距离的物体之间的深度关系,丢失了很多的有意义的信息。
在本作中,作者介绍了一种基于DETR框架的用于单目检测的网络。作者通过对原始的transformer网络进行改造,加入了以深度为引导的transformer结构。作者将此网络结构命名为MonoDETR。
具体来说,作者在使用视觉encoder去提取图像的特征外,还引入了一种depth encoder去预测前景深度地图,后续将其转化为depth embeddings。之后就和传统的DETR或者BevFormer一致,使用3D object query去与前述生成的vision embeding 和 depth embending分别做self 和 cross attention,通过decoder得到最终的2D以及3D结果。通过此种方法,每一个3D物体都是通过depth-guided regions(embedding)去获取的3D信息,而非限制在局部的视觉特征。
2. Introduction
相对于基于lidar和multi-view 的3D检测任务,单目3D检测是相对较困难的。因为没有可依赖的3D深度信息以及多视角几何学关系。所以相应的检测结果也不会那么的好。
为了解决这些问题,我们根据DETR的2
D检测框架提出了本文的网络结构。如上图所示b所示:此结构包括两个平行部分,分别为vision encoder 和 depth encoder。
划重点:如何去学习深度信息呢?这里论文使用了了一个"轻"的监督去获取输入图像的深度信息。具体是在在image backbone后接了一个depth predictor,用于输出前景深度地图。同时在过程中产生的depth feature会输入到紧接着的depth encoder,用来提取深度信息。同时我们对输出的前景地图进行监督。此监督仅仅是由我们的labeled object构成即可,也就是一个discrete depth of objects。这样就不需要稠密的深度地图label。减轻了对数据的压力。又能获取使用的深度信息。
在这两个encoder后,继续接一个transformer结构,使用object query从视觉embeding和depth embeding中聚合信息,从而对物体进行检测。
此处的优势就比较明显,相对于目前自动驾驶领域的各种繁重的数据pipeline,此方法仅仅需要常规的物体标注结果即可完成全部的检测流程。而无需额外的dense depth maps或者Lidar信息。且在kitti中取得了SOTA的成绩。
同时这里边提到的depth encoder也可以作为一个plug and play的插件直接用来增强多视觉3D检测效果,比如BEVFormer。(当然我看来这几个点,似乎没啥用~)
3. Related work
咱自己看论文哈~和本文关系不太大
突然看到有个有点意思的介绍,这里简单说下:
DETR base methods
- MonoDTR: 仅仅引入transformer去增强数据提取而已。还是提取的局部特征,基于object center这种,严格上不是基于DETR的方法,具体可以参考:MonoDTR解读
- DETR3D 和PETR v2 : multi view 3D检测,使用了detr结构,但是没用到transform base的encoder。相应的也就只用了视觉信息,无深度信息。具体参考PETR v2解读 DETR 3D
- BEVFormer:加了个从image feature到bev feature的encoder进行信息提取。后续在bev空间进行3D检测。GOOD!BEVFormer 解读
4. Method
又到了喜闻乐见的看图说论文环节,上图
4.1Feature Extraction
Visual Features
无需过多赘述,用来提取图像高阶特征的常规cnn网络,基本收敛在使用resnet上。这里设置的下采样倍率是1/8, 1/16, 1/32。这里论文中没有对三层fpn的结果都使用,而是选择了语义信息最丰富的最后一层作为visual feature输入vision encoder。
depth features
这里深度特征,先将从backbone提取的三层特征都进行了融合(element-wise addition),主要目的是保留小目标的特征。之后使用3*3的网络提取depth feature。
foreground depth map
为了让深度特征更加的高效以及丰富。这里添加了一个额外的深度监督。通过将depth feature经过一个1*1的卷积,生成一个前景深度图。而我们通过离散的基于gt的深度标签对其进行监督。具体规则:在2D bbox内的pixel统一赋值为物体的深度。如果是在两个bbox内的pixel,则选择离相机近的距离值赋值。同时这里对深度也进行了离散编码。参考的方法见:Categorical depth distributionnetwork for monocular 3d object detection
简单总结:在检测距离 [ d x , d y ] [d_x, d_y] [dx,dy] 内使用linear increasing discretization (LID)分布对其进行编码,一共编码成k+1个bins。其中k个为前景,最后一个为背景。具体使用公式如下:
其中 δ \delta δ 是相关参数公差。可以根据检测距离和需要的bins数量得到。
4. 2 Depth guided transformer
Visual and depth encoders
作者使用两个encoder对获取的图像和深度feature进行进一步的全局特征提取。这里作者也贴心的将使用transformer时需要将feature flatten的操作通过对feature维度的描写给大家展示出来了。维度分别为 H ∗ W / 1 6 2 H*W/16^2 H∗W/162 和 H ∗ W / 3 2 2 H*W/32^2 H∗W/322。具体构成就是每一个encoder block由一个self-attention 和 ffn构成。encoder的作用在这里就是将local feature 升格成global feature了。由于vision feature含有更复杂的信息,所以使用了3个block去更好的提取vision 信息。
Depth-guided-decoder
划重点:核心部分。
根据从encoder提取的全局特征 f D e f_D^e fDe 和 f V e f_V^e fVe,作者设计了基于深度引导的decoder结构。使用预先设定的object queries q去和 f D e f_D^e fDe 和 f V e f_V^e fVe做cross attention。每一个block包含了一个depth cross-attention、一个inter-query self-attention、一个视觉cross-attention和做一个FFN。这样输出的object embedings就既包括视觉信息,又包括深度信息,可以更好的进行预测工作。
为了更好的融合提取信息,作者一共使用了3个block来做decoder工作。
Depth positional encoding
在transformer中需要position embeding。这里没有像其他结构一样,直接使用一个sin函数来作为position encoding。而是使用了一个可学习的depth positional encodings。具体细节是使用前序得的depth map去差值获取与 f D e f_D^e fDe 相对应的深度信息,然后与 f D e f_D^e fDe 进行逐点相加。这样object query就能更好的去capture scene-level 深度信息并更好的理解3D 几何信息。
4. 3 Detection heads and loss
bipartite matching
使用二分匹配,设计了两组metric,一组是2D信息,包含类别、2D位置、2D大小。第二组包含3D位置,3D大小,orientation。理论上应该是使用两组cost 的和去做匹配。但是因为3D信息比较难学,且不稳定,会导致matching失败,所以是仅仅使用了第一组信息去做匹配。
overall loss
2D loss+3D loss + depth map loss
公式如下:
4.4 Plug-and-play for Multi-view Detectors
主要结论是可以加入到multi view的目标检测中,作为3D信息的补充,可以得到更好的结果。不一一赘述了。工程化部署时,收益肯定没有付出的算力多。(作者不要来打我)
5 Experiments
我们是最棒的,所有的消融实验的能证明现在的结构最好~我就只贴下map结果吧。