DA-BEV: 3D检测新 SOTA!一种强大的深度信息挖掘方法(CVPR 2023)

2024-03-17 03:30

本文主要是介绍DA-BEV: 3D检测新 SOTA!一种强大的深度信息挖掘方法(CVPR 2023),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

作者 | 派派星  编辑 | 极市平台

点击下方卡片,关注“自动驾驶之心”公众号

ADAS巨卷干货,即可获取

点击进入→自动驾驶之心【3D目标检测】技术交流群

后台回复【3D检测综述】获取最新基于点云/BEV/图像的3D检测综述!

导读

 

本文针对之前 DETR-based 的 3D 检测器中忽略了空间交叉注意力中的深度信息,并在检测物体时产生了严重的模糊问题进行了研究。为了解决这个问题,本文提出了深度感知的空间交叉注意力(DA-SCA) 来编码深度信息,并提出了深度对比学习 (DCL) 来帮助模型以对比的方式学习深度。 

ba9bbd8dbc92520c2d1fe5b78b239b6f.png

Title: DA-BEV: Depth Aware BEV Transformer for 3D Object Detection
Paper: https://arxiv.org/pdf/2302.13002v1.pdf

导读

本文提出了一种隐式深度学习方法 DA-BEV,这是一种以环视图像作为输入,在 BEV 视角下利用 Transformer 进行 3D 目标检测的方法。该方法包括两个关键部分:深度感知空间交叉注意力 (Depth-Aware Spatial Cross-AttentionDA-SCA)模块和深度对比学习 (Depth-wise Contrastive LearningDCL)。DA-SCA 模块负责将深度信息融合至 BEV 特征中,以至于能更好地捕捉目标的深度信息。而 DCL 则通过对正负 BEV 特征进行采样,进一步增强了 BEV 特征的深度感知能力。实验结果表明,DA-BEV 方法在 nuScenes 数据集上取得了 SOTA 检测性能。源码即将开源,敬请期待!

BEV感知

68084c95185c016fbc497bc84535d45f.png

相当于给自动驾驶开启了“上帝视角”,能够让车辆无遮挡的“看清”道路上的实况信息,在BEV视角下统一完成感知和预测任务。

隐式深度学习

隐性深度学习的主要思想是在不需要显式定义输出的情况下学习目标函数。与传统的显式表示方法相比,隐性深度学习不需要人工标注的数据来指定输出,因此可以更好地适应各种复杂的任务和数据类型。

创作背景

3D 目标检测是自动驾驶和机器人等许多应用中的基本任务。相较于基于激光雷达的方法,基于相机的方法具有成本低、感知范围长、可以识别纯视觉信号(如红绿灯和停止标志)等优势。但是,相机方法面临的一个关键挑战是缺乏深度信息

前人研究表明,高质量的深度信息能够显著提高 3D 检测性能,因此当前许多研究工作致力于从相机图像中恢复深度信息,然而,深度估计仍是一个不适定问题。现有主流研究采用的两种方法,一种是显式深度学习方法:通过深度估计网络生成伪激光雷达信息,再用激光雷达检测器进行 3D 检测,另一种是隐式深度学习方法:直接预测三维框而不预测深度。

显示学习方法

结果提升方法 (Result-lifting)

将 3D 检测分解为 2D 检测和深度预测,并根据几何特性和约束条件预测对象。

特征提升方法 (Feature-lifting)

将图像特征提升到三维空间,通过预测深度图并将其提升到伪激活雷达来模拟激活雷达信号。

隐式学习方法

DETR3D、BEVFormer、PETR

使用目标查询 (object query) 来探测特征并为每个查询输出预测,而不预测深度。

本文提出了一种新方法,通过在空间交叉注意力SCA)模块中引入深度信息,同时提出了深度对比学习方法 (DCL),有效提高了 3D 检测性能。该方法在nuScenes数据集上得到了较好的性能,超过了现有的基准和最先进方法。

方法

动机

d977467579288fd854d16db1c713a5cc.png
图1. 基于 DETR 的 3D 检测器中常见歧义问题

DA-BEV 的设计动机来自于以往 DETR-based 3D 检测器的常见问题。具体来说,以 BEVFormer 为例,其会将同一光线上的不同 3D 参考点被映射到相同的摄像机参考点上,导致检测头难以确定目标在深度方向上的确切位置,可能导致重复预测。

概述

e44e3c89221552d519d0d4584ec16320.png
图2. 本文方法的训练Pipeline

本文方法主要解决的是,之前 DETR-based 3D 检测器在处理图像特征时存在的深度信息缺失问题。本方法将深度信息编码到查询 (query) 和 (value) 中,并提出了一个深度感知的空间交叉注意力模块和一个深度感知的对比学习方法,以增强深度信息的学习和比较。

DA-BEV 的训练流程分为四个部分,包括特征提取BEV编码器深度感知的空间交叉注意力模块深度对比学习,最后通过 DETR 检测器对 BEV 特征进行预测,得出物体的 3D 边界框和类别信息。

深度感知的空间交叉注意力

c0bcb74c11654cb94ab39abc376c6991.png
图3. DA-SCA与以往作品中SCA的对比

在传统的 DETR-based 3D 检测器中,空间交叉注意力SCA)没有考虑深度信息。本文提出了深度感知的空间交叉注意力DA-SCA),通过在查询和值中引入深度编码来解决这一问题。与此前的方法相比,本文的 DA-SCA 采用的是不均匀的深度采样方式,可以更好地提取深度信息。实验结果表明,本文方法可以显著提高目标检测的性能。

在 DA-SCA中,通过将深度信息包含在位置编码中,将每个像素的深度与其位置信息一起编码。具体地,DA-SCA 采用了可变形注意力机制,使得查询点和值点可以自适应地调整形状,从而更好地适应不同的物体形状。此外,由于 DA-SCA 中的每个查询点都有自己的深度编码,因此可以更好地区分具有不同深度的像素,从而使深度信息更好地融入到空间交叉注意力中。

深度对比学习

深度对比学习 (DCL) 用于鼓励模型学习深度和其在 BEV 特征中的关系。

DCL 为每个对象分配一个对象射线,然后将其上的点映射到BEV特征上。对于每个对象,从中采样  个 BEV 特征作为正样本,  个作为负样本。对于每个特征,使用其深度值和其在对象线上的 GT 深度值之差来确定其是正样本还是负样本。

通过将正样本和负样本输入到 box head 和 cls head,来进行DCL训练。对于正样本,使用对象的 GT 类别进行监督,而对于负样本则使用 “no object” 。此对比损失函数的目的是使预测深度趋近于 GT 深度,并鼓励模型为正样本输出高分类分数,为负样本输出低分类分数。

实验

771257fa8a1c419502e411c50cde7381.png
表1. 在nuScenes数据集的验证集上对比结果
  • DA-BEV-S 模型相比于 BEVFormer 模型,在NDS和mAP上分别提升了2.2和1.2个点。

  • 虽然 BEVDet4D-Based 模型的 NDS 与 DA-BEV 相同,但 GFLOPS 要高得多,并且mAP 低于 DA-BEV。

a73e474df89e0c74f1e9b5c1eed2f0f3.png
表2. 模型可扩展性对比
  • DA-BEV 的 mAP 比之前的最优模型 BEVDepth 高1.2个点。

  • 此外,之前的 baseline 模型 BEVFormer 与 DA-BEV: DA-BEV在 mAP 和 NDS 两个指标上分别比 BEVFormer 高出 3.4 和 3.1。这说明 DA-BEV 可以适应更强的预训练模型,并在各项指标上表现出色。

d25b2726a09a21684eaefc4841af17f7.png
  • 表.3 & 表.4 展示了模型的每个组成部分的有效性。

  • 通过逐步增加不同的组件,模型性能都获得了进一步的提升。

e24e4e78fbc4ac11175a8b9c9099fc48.png
图4. DA-BEV和基线模型BEVFormer的预测可视化
  • 在图4(b)中,沿深度轴的重复预测被减少了。这个可视化证实了我们的模型可以解决在动机小节中提到的歧义问题。

  • 但是,当两个不同对象的对象光线重叠时,DA-BEV的预测也存在问题。可能存在两个潜在原因导致这个问题。首先,后面的对象被前面的对象遮挡。其次,在我们的 DCL 中,这样深度轴上的两个对象可能会成为彼此的负面例子,导致预测遗漏。

总结

本文针对之前 DETR-based 的 3D 检测器中忽略了空间交叉注意力中的深度信息,并在检测物体时产生了严重的模糊问题进行了研究。为了解决这个问题,本文提出了深度感知的空间交叉注意力(DA-SCA) 来编码深度信息,并提出了深度对比学习 (DCL) 来帮助模型以对比的方式学习深度。实验结果表明,DA-BEV 在不使用额外技巧的情况下取得了显著的改进,并达到了 SOTA 表现。未来,作者计划进一步将这种方法应用到更多检测器中,并研究隐式深度学习与显式深度学习的差异,并尝试将它们结合起来。

往期回顾

史上最全综述 | 3D目标检测算法汇总!(单目/双目/LiDAR/多模态/时序/半弱自监督)

3126e38b4cd08ba8c06a300eeac37908.png

国内首个自动驾驶学习社区

近1000人的交流社区,和20+自动驾驶技术栈学习路线,想要了解更多自动驾驶感知(分类、检测、分割、关键点、车道线、3D目标检测、多传感器融合、目标跟踪、光流估计、轨迹预测)、自动驾驶定位建图(SLAM、高精地图)、自动驾驶规划控制、领域技术方案、AI模型部署落地实战、行业动态、岗位发布,欢迎扫描下方二维码,加入自动驾驶之心知识星球,这是一个真正有干货的地方,与领域大佬交流入门、学习、工作、跳槽上的各类难题,日常分享论文+代码+视频,期待交流!

816d23bba66db76579db605187477551.jpeg

自动驾驶之心】全栈技术交流群

自动驾驶之心是首个自动驾驶开发者社区,聚焦目标检测、语义分割、全景分割、实例分割、关键点检测、车道线、目标跟踪、3D目标检测、BEV感知、多传感器融合、SLAM、光流估计、深度估计、轨迹预测、高精地图、NeRF、规划控制、模型部署落地、自动驾驶仿真测试、产品经理、硬件配置、AI求职交流等方向;

467bf2b80152e2a316fc9c6a4bc0f6ad.jpeg

添加汽车人助理微信邀请入群

备注:学校/公司+方向+昵称

这篇关于DA-BEV: 3D检测新 SOTA!一种强大的深度信息挖掘方法(CVPR 2023)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/817660

相关文章

Java 中的 @SneakyThrows 注解使用方法(简化异常处理的利与弊)

《Java中的@SneakyThrows注解使用方法(简化异常处理的利与弊)》为了简化异常处理,Lombok提供了一个强大的注解@SneakyThrows,本文将详细介绍@SneakyThro... 目录1. @SneakyThrows 简介 1.1 什么是 Lombok?2. @SneakyThrows

判断PyTorch是GPU版还是CPU版的方法小结

《判断PyTorch是GPU版还是CPU版的方法小结》PyTorch作为当前最流行的深度学习框架之一,支持在CPU和GPU(NVIDIACUDA)上运行,所以对于深度学习开发者来说,正确识别PyTor... 目录前言为什么需要区分GPU和CPU版本?性能差异硬件要求如何检查PyTorch版本?方法1:使用命

Qt实现网络数据解析的方法总结

《Qt实现网络数据解析的方法总结》在Qt中解析网络数据通常涉及接收原始字节流,并将其转换为有意义的应用层数据,这篇文章为大家介绍了详细步骤和示例,感兴趣的小伙伴可以了解下... 目录1. 网络数据接收2. 缓冲区管理(处理粘包/拆包)3. 常见数据格式解析3.1 jsON解析3.2 XML解析3.3 自定义

SpringMVC 通过ajax 前后端数据交互的实现方法

《SpringMVC通过ajax前后端数据交互的实现方法》:本文主要介绍SpringMVC通过ajax前后端数据交互的实现方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价... 在前端的开发过程中,经常在html页面通过AJAX进行前后端数据的交互,SpringMVC的controll

Java中的工具类命名方法

《Java中的工具类命名方法》:本文主要介绍Java中的工具类究竟如何命名,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录Java中的工具类究竟如何命名?先来几个例子几种命名方式的比较到底如何命名 ?总结Java中的工具类究竟如何命名?先来几个例子JD

Spring Security自定义身份认证的实现方法

《SpringSecurity自定义身份认证的实现方法》:本文主要介绍SpringSecurity自定义身份认证的实现方法,下面对SpringSecurity的这三种自定义身份认证进行详细讲解,... 目录1.内存身份认证(1)创建配置类(2)验证内存身份认证2.JDBC身份认证(1)数据准备 (2)配置依

python获取网页表格的多种方法汇总

《python获取网页表格的多种方法汇总》我们在网页上看到很多的表格,如果要获取里面的数据或者转化成其他格式,就需要将表格获取下来并进行整理,在Python中,获取网页表格的方法有多种,下面就跟随小编... 目录1. 使用Pandas的read_html2. 使用BeautifulSoup和pandas3.

Spring 中的循环引用问题解决方法

《Spring中的循环引用问题解决方法》:本文主要介绍Spring中的循环引用问题解决方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录什么是循环引用?循环依赖三级缓存解决循环依赖二级缓存三级缓存本章来聊聊Spring 中的循环引用问题该如何解决。这里聊

Java学习手册之Filter和Listener使用方法

《Java学习手册之Filter和Listener使用方法》:本文主要介绍Java学习手册之Filter和Listener使用方法的相关资料,Filter是一种拦截器,可以在请求到达Servl... 目录一、Filter(过滤器)1. Filter 的工作原理2. Filter 的配置与使用二、Listen

Pandas统计每行数据中的空值的方法示例

《Pandas统计每行数据中的空值的方法示例》处理缺失数据(NaN值)是一个非常常见的问题,本文主要介绍了Pandas统计每行数据中的空值的方法示例,具有一定的参考价值,感兴趣的可以了解一下... 目录什么是空值?为什么要统计空值?准备工作创建示例数据统计每行空值数量进一步分析www.chinasem.cn处