MonoDETR: Depth-guided Transformer for Monocular 3D Object Detection 论文解读

文章目录

  • 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

  1. MonoDTR: 仅仅引入transformer去增强数据提取而已。还是提取的局部特征,基于object center这种,严格上不是基于DETR的方法,具体可以参考:MonoDTR解读
  2. DETR3D 和PETR v2 : multi view 3D检测,使用了detr结构,但是没用到transform base的encoder。相应的也就只用了视觉信息,无深度信息。具体参考PETR v2解读 DETR 3D
  3. 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结果吧。

相关推荐
极客代码4 分钟前
【Python TensorFlow】入门到精通
开发语言·人工智能·python·深度学习·tensorflow
王哈哈^_^1 小时前
【数据集】【YOLO】【VOC】目标检测数据集,查找数据集,yolo目标检测算法详细实战训练步骤!
人工智能·深度学习·算法·yolo·目标检测·计算机视觉·pyqt
是瑶瑶子啦2 小时前
【深度学习】论文笔记:空间变换网络(Spatial Transformer Networks)
论文阅读·人工智能·深度学习·视觉检测·空间变换
wangyue43 小时前
c# 深度模型入门
深度学习
川石课堂软件测试3 小时前
性能测试|docker容器下搭建JMeter+Grafana+Influxdb监控可视化平台
运维·javascript·深度学习·jmeter·docker·容器·grafana
985小水博一枚呀3 小时前
【深度学习滑坡制图|论文解读3】基于融合CNN-Transformer网络和深度迁移学习的遥感影像滑坡制图方法
人工智能·深度学习·神经网络·cnn·transformer
985小水博一枚呀3 小时前
【深度学习滑坡制图|论文解读2】基于融合CNN-Transformer网络和深度迁移学习的遥感影像滑坡制图方法
人工智能·深度学习·神经网络·cnn·transformer·迁移学习
咔叽布吉4 小时前
【论文阅读笔记】CamoFormer: Masked Separable Attention for Camouflaged Object Detection
论文阅读·笔记·目标检测
深度学习实战训练营5 小时前
基于CNN-RNN的影像报告生成
人工智能·深度学习
深度学习lover7 小时前
<项目代码>YOLOv8 苹果腐烂识别<目标检测>
人工智能·python·yolo·目标检测·计算机视觉·苹果腐烂识别