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

文章目录

  • 1.Abstract
  • 2. Introduction
  • 3. Related work
    • DETR base methods
  • 4. Method
    • 4.1Feature Extraction
      • Visual Features
      • depth features
      • foreground depth map
    • 4. 2 Depth guided transformer
      • Visual and depth encoders
      • Depth-guided-decoder
      • Depth positional encoding
    • 4. 3 Detection heads and loss
      • bipartite matching
      • overall loss
    • 4.4 Plug-and-play for Multi-view Detectors
  • 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 HW/162 H ∗ W / 3 2 2 H*W/32^2 HW/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结果吧。

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/102239.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Golang专题精进

Golang专题精进 Golang单元测试Golang错误处理Golang正则表达式Golang反射Golang验证码Golang日期时间处理库CarbonGolang发送邮件库emailGolang log日志Golang log日志框架logrusGolang加密和解密应用Golang访问权限控制框架casbinGolang使用swagger生成api接口文档Golang jwt…

css强制显示一行

要强制将文本内容显示在一行中,可以使用CSS的white-space属性和overflow属性来实现。 首先,将white-space属性设置为nowrap,这样文本内容就不会换行。然后,将overflow属性设置为hidden,这样超出一行的内容就会被隐藏起…

Apache Tomcat 漏洞复现

文章目录 Apache Tomcat 漏洞复现1. Tomcat7 弱密码和后端 Getshell 漏洞1.1 漏洞描述1.2 漏洞复现1.3 漏洞利用1.3.1 jsp小马1.3.2 jsp大马 2. Aapache Tomcat AJP任意文件读取/包含漏洞2.1 漏洞描述2.1 漏洞复现2.2 漏洞利用工具 3. 通过 PUT 方法的 Tomcat 任意写入文件漏洞…

ABB MPRC086444-005数字输入模块

ABB MPRC086444-005 是一款数字输入模块,通常用于工业自动化和控制系统中,用于接收和处理数字信号。以下是这种类型的数字输入模块通常可能具备的一般功能和特点: 数字输入接口:MPRC086444-005 模块通常配备多个数字输入通道&…

服务器数据恢复-Xen server虚拟机数据恢复案例

服务器数据恢复环境: 一台某品牌服务器通过一张同品牌某型号RAID卡将4块STAT硬盘组建为一组RAID10阵列。上层部署Xen Server虚拟化平台,虚拟机上安装的是Windows Server操作系统,包括系统盘 数据盘两个虚拟机磁盘,作为Web服务器使…

08-JVM垃圾收集器详解

上一篇:07-垃圾收集算法详解 如果说收集算法是内存回收的方法论,那么垃圾收集器就是内存回收的具体实现。 虽然我们对各个收集器进行比较,但并非为了挑选出一个最好的收集器。因为直到现在为止还没有最好的垃圾收集器出现,更加没…

京东搜索EE链路演进 | 京东云技术团队

导读 搜索系统中容易存在头部效应,中长尾的优质商品较难获得充分的展示机会,如何破除系统的马太效应,提升展示结果的丰富性与多样性,助力中长尾商品成长是电商平台搜索系统的一个重要课题。其中,搜索EE系统在保持排序…

Django请求的生命周期

Django请求的生命周期是指: 当用户在浏览器上输入URL到用户看到网页的这个时间段内,Django后台所发生的事情。 直白的来说就是当请求来的时候和请求走的阶段中,Django的执行轨迹。 一个完整的Django生命周期: 用户从客户端发出一条请求以后&#xff…

【C++】智能指针(RAII)详解

我们在上篇文章中(异常处理详解)提到了 RAII 。那么本篇文章会对此进行详解。重点是智能指针的详解。其中会讲解到 RAII 思想、auto_ptr、unique_ptr、shared_ptr、weak_ptr、循环引用问题。希望本篇文章会对你有所帮助。 文章目录 一、为什么需要智能指…

MySQL 8.0.34(x64)安装笔记

一、背景 从MySQL 5.6到5.7,再到8.0,版本的跳跃不可谓不大。安装、配置的差别也不可谓不大,特此备忘。 二、过程 (1)获取MySQL 8.0社区版(MySQL Community Server)   从 官网 字样 “MySQL …

AVLTree模拟实现

一、常用的搜索逻辑 1、暴力搜索 O(N) 2、二分搜索 前提是有序,可以先用O(NlogN)排序一次,后续每次查找都是logN。 缺点:快排需要容器有随机访问功能,即为顺序表等。 如果不仅要搜索,还要插入删除,此时…

Kubernetes(k8s)部署高可用多主多从的Redis集群

Kubernetes部署高可用多主多从的Redis集群 环境准备准备Kubernetes准备存储类 部署redis准备一个命名空间命令创建yaml文件创建(推荐) 准备redis配置文件准备部署statefulset的资源清单文件执行文件完成部署初始化集群 环境准备 准备Kubernetes 首先你…