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.mzph.cn/news/66939.shtml

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

相关文章

【vue2第十一章】v-model的原理详解 与 如何使用v-model对父子组件的value绑定 和修饰符.sync

v-model的原理详解 v-model的本质就是一个语法糖,实际上就是 :value"msg" 与 input"msg $event.target.value" 的简写。 :value"msg" 从数据单向绑定到input框,当data数据中的msg内容一旦改变,而input框数据…

OpenCV(十八):图像直方图

目录 1.直方图统计 2.直方图均衡化 3.直方图匹配 1.直方图统计 直方图统计是一种用于分析图像或数据的统计方法,它通过统计每个数值或像素值的频率分布来了解数据的分布情况。 在OpenCV中,可以使用函数cv::calcHist()来计算图像的直方图。 calcHist(…

uni-app之android离线打包

一 AndroidStudio创建项目 1.1,上一节演示了uni-app云打包,下面演示怎样androidStudio离线打包。在AndroidStudio里面新建空项目 1.2,下载uni-app离线SDK,离线SDK主要用于App本地离线打包及扩展原生能力,SDK下载链接h…

电商平台api对接货源

如今,电商平台已经成为了人们购物的主要途径之一。 然而,对于电商平台来说,货源对接一直是一个比较棘手的问题。为了解决这个问题,越来越多的电商平台开始使用API来对接货源。 API,即应用程序接口,是一种允…

分支创建查看切换

1、初始化git目录,创建文件并将其推送到本地库 git init echo "123" > hello.txt git add hello.txt git commit -m "first commit" hello.txt$ git init Initialized empty Git repository in D:/Git/git-demo/.git/ AdministratorDESKT…

计算机视觉传统图像处理库opencv的使用

人工智能领域的图像处理分支,整理了计算机视觉传统图像处理库opencv的使用网址链接。 opencv使用范围,主要用在计算机视觉、视频分析、机器学习、医学影像处理、自动驾驶、工业检测、游戏开发上。 1):opencv效果视频 opencv10个应…

Qt QSlider样式

滑块控件QSlider,如果设置的垂直样式,其进度颜色和剩余颜色,刚好和横向样式的颜色相反的,不确定这个是否是Qt的BUG,Qt456都是这个现象 QSlider::groove:horizontal{ height:8px; background:#FF0000; }QSlider::add-p…

django中配置使用websocket终极解决方案

django ASGI/Channels 启动和 ASGI/daphne的区别 Django ASGI/Channels 是 Django 框架的一个扩展,它提供了异步服务器网关接口(ASGI)协议的支持,以便处理实时应用程序的并发连接。ASGI 是一个用于构建异步 Web 服务器和应用程序…

远程方法调用中间件Dubbo在spring项目中的使用

Dubbo是一个分布式服务框架,它可以帮助我们快速开发和提供高性能、高可靠性的分布式服务,同时提供服务治理、容错、负载均衡等功能。 使用Dubbo可以分为以下步骤: 引入Dubbo依赖:在项目的pom.xml文件中引入Dubbo的依赖。编写服务…

ipad手写笔什么牌子好?适合开学买的电容笔推荐

随着社会和经济水平的不断提高,对电容笔的使用日益增加。国产平替的电容笔和原装苹果的电容笔没有太大的区别,不管是功能还是手感都很像,书写上的笔锋也很流畅,这让我很惊讶,因为其的价格很便宜,但其的体验…

【实训项目】精点考研

1.设计摘要 如果说高考是一次能够改变命运的考试,那么考研应该是另外一次。为什么那么多人都要考研呢?从中国教育在线官方公布是考研动机调查来看,大家扎堆考研的原因大概集中在这6个方面:本科就业压力大,提升竞争力、…

开源照片管理服务LibrePhotos

本文是为了解决网友 赵云遇到的问题,顺便折腾的。虽然软件跑起来了,但是他遇到的问题,超出了老苏的认知。当然最终问题还是得到了解决,不过与 LibrePhotos 无关; 什么是 LibrePhotos ? LibrePhotos 是一个自托管的开源…

HTTP/1.1协议中的响应报文

2023年8月30日,周三下午 目录 概述响应报文示例详述 概述 HTTP/1.1协议的响应报文由以下几个部分组成: 状态行(Status Line)响应头部(Response Headers)空行(Blank Line)响应体&a…

后端面试话术集锦第 十二 篇:java基础部分面试话术

这是后端面试集锦第十二篇博文——java基础部分面试话术❗❗❗ 1. String类中常用的方法 split():把字符串分割成字符串数组 indexOf():从指定字符提取索引位置 trim():去除字符串两端空格 replace():替换 hashCode():返回此字符串的哈希码 subString():截取字符串 equa…

学习高级数据结构:探索平衡树与图的高级算法

文章目录 1. 平衡树:维护数据的平衡与高效性1.1 AVL 树:严格的平衡1.2 红黑树:近似平衡 2. 图的高级算法:建模复杂关系与优化2.1 最小生成树:寻找最优连接方式2.2 拓扑排序:解决依赖关系 拓展思考 &#x1…

支付参考文档

支付宝官方提供的样例代码与支付宝通信: 小程序文档 - 支付宝文档中心支付宝文档中心https://docs.open.alipay.com/api_1/alipay.trade.query 参考sdk示例: 小程序文档 - 支付宝文档中心支付宝文档中心https://docs.open.alipay.com/api_1/alipay.tra…

unity界面上Global 与Local xyz- right up forward

gloabal 如果要沿这个方向移动就比较困难 local下就不一样了

docker高级(DockerFile解析)

1、构建三步骤 编写Dockerfile文件 docker build命令构建镜像 docker run依镜像运行容器实例 2、DockerFile构建过程解析 Dockerfile内容基础知识 1:每条保留字指令都必须为大写字母且后面要跟随至少一个参数 2:指令按照从上到下,顺序执行…

【2023集创赛】加速科技杯二等奖作品:基于ATE的电源芯片测试设计与性能分析

本文为2023年第七届全国大学生集成电路创新创业大赛(“集创赛”)加速科技杯二等奖作品分享,参加极术社区的【有奖征集】分享你的2023集创赛作品,秀出作品风采,分享2023集创赛作品扩大影响力,更有丰富电子礼…

rust中使用sqlite 之 rusqlite使用

名称版本rusqlite0.29.0impl From<&rusqlite::Row<_>> for Person {fn from(r: &rusqlite