DeepFusion: Lidar-Camera Deep Fusion for Multi-Modal 3D Object Detection总结

DeepFusion: Lidar-Camera Deep Fusion for Multi-Modal 3D Object Detection

说明

  • 会议:CVPR2022
  • 标题:DeepFusion:用于多模式 3D 对象检测的激光雷达相机深度融合
  • 代码:https://github.com/tensorflow/lingvo

摘要总结

背景

  • 现状:激光雷达和摄像头是关键传感器,可为自动驾驶中的 3D 检测提供补充信息。
  • 问题:流行的多模式方法是简单的利用相机特征对原始激光雷达点云做decorate,但我们的研究表明,比起原始的数据,直接将相机的特征和深度雷达特征做融合可以达到更好的效果;然而由于这些特征经常被增强和聚合,融合的一个关键挑战是如何有效对齐两者模态转换后的特征

方法

  • 总括:在本文中,我们提出了两种新技术:InverseAug 和 LearnableAlign

  • 具体说明:

    • InverseAug 反转几何相关的增强,例如旋转,以实现激光雷达点和图像像素之间的精确几何对齐;
    • LearnableAlign 利用交叉注意力动态捕获图像之间的相关性融合过程中的激光雷达特征。

结果

基于 InverseAug 和 LearnableAlign,我们开发了一系列名为 DeepFusion 的通用多模式 3D 检测模型。

  • 它比以前的方法更准确。例如,DeepFusion 分别针对 6.7、8.9 和 6.2 LEVEL 2 APH 改进了 Point-Pillars、CenterPoint 和 3D-MAN 行人检测基线。
  • 我们的模型在 Waymo 开放数据集上实现了最先进的性能,并显示出强大的模型鲁棒性,可以防止输入损坏和分布外的数据。

具体方法

具体架构描述

框架图片
我们的方法在深度特征层面上融合了两种模式,而之前最先进的方法(以 PointPainting [34] 和 PointAugmenting [36] 为例)在输入层面上用相机特征装饰激光雷达点。为了解决深度特征融合的模态对齐问题(参见第 1 节),我们提出了两种技术 InverseAug(参见图 2 和 3)和 LearnableAlign,这是一种基于交叉注意力的特征级对齐技术。

如图1(a)所示,以前的方法,如PointPainting[34]和PointAugmenting[36],通常使用一个额外训练有素的检测或分割模型作为相机特征提取器。例如,PointPainting使用Deepalabv3+1生成每像素分割标签作为相机特征[34]。然后,用提取的相机特征确定原始激光雷达点。最后,相机特征装饰的激光雷达点被送入3D点云对象检测框架。由于以下原因,上述管道是可改进的。首先,相机特征被送入专门为处理点云数据而设计的几个模块。例如,如果采用PointPillars[17]作为3D检测框架,则需要将相机特征与原始点云一起进行体素化,以构建鸟瞰图伪图像。然而,体素化模块不是为处理相机信息而设计的。其次,相机特征提取器是从其他独立任务(即2D检测或分割)中学习的,这可能会导致(1)领域空白,(2)注释工作,(3)额外的计算成本,更重要的是,(4)次优提取特征;

我们使用卷积层来提取camera特征,并以端到端的方式将这些卷积层与网络的其他组件一起训练,我们提出的深度特征融合管道如图1(b)所示:将激光雷达点云馈送到现有的激光雷达特征提取器(例如,来自PointPillars的Pillar feature Net[17])中,以获得激光雷达特征(例如,PointPillars[17]的假图像);相机图像被馈送到2D图像特征提取器(例如ResNet[11])以获得相机特征;然后,将相机特征与激光雷达特征融合;最后,融合的特征由所选激光雷达检测框架的其余组件(例如,点柱的主干和检测头[17])处理以获得检测结果,

概括说明

挑战: 文献中现有的融合激光雷达和相机的方法大致遵循两种方法(图 1):它们要么在早期阶段融合特征,例如通过用相应的相机特征装饰激光雷达点云中的点 [34 , 36],或者他们使用中级融合(在提取特征后融合)。这两种方法的最大挑战之一是找出激光雷达和相机特征之间的对应关系。

为了解决这个问题,我们提出了两种方法:InverseAug 和 LearnableAlign 以实现有效的中级融合。
1, InverseAug 反转与几何相关的数据增强(例如,RandomRotation [46]),然后使用原始相机和激光雷达参数将两种模式相关联。
2,LearnableAlign 利用交叉注意力动态学习激光雷达特征与其对应相机特征之间的相关性。
给定一个流行的 3D 点云检测框架,例如 Point-Pillars [17] 和 CenterPoint [44],InverseAug 和 LearnableAlign 帮助相机图像有效地与激光雷达点云对齐,边际计算成本(即仅一个交叉注意层)。当融合对齐的多模态特征时,具有更高分辨率的相机信号显着提高了模型的识别和定位能力。这些优点对于远距离物体检测特别有利。

贡献:

  • 据我们所知,我们是第一个系统研究深度特征对齐对 3D 多模态检测器的影响的人;
  • 我们提出InverseAug 和LearnableAlign 来实现深度特征级对齐,从而实现准确且稳健的3D 对象检测器;
  • 我们提出的模型 DeepFusions 在 Waymo 开放数据集上实现了最先进的性能

增强对齐效果

对比表格

鉴于对齐深层特征的重要性,我们提出了两种技术,InverseAug 和 LearnableAlign,以有效对齐来自两种模态的深层特征。

InverseAug

InverseAug流程图
背景:为了在现有基准上获得最佳性能,大多数方法都需要强大的数据增强,因为训练通常会陷入过度拟合的场景。从表 1 可以看出数据增强的重要性,其中单模态模型的准确度最多可提高 5.0。此外,Cheng 等人。 [6] 还提出了数据增强对于训练 3D 对象检测模型的重要性。然而,数据增强的必要性对我们的 DeepFusion 流水线提出了一个不小的挑战。具体来说,来自两种模式的数据通常使用不同的增强策略进行增强(例如,沿 z 轴旋转 3D 点云并结合随机翻转 2D 图像),使得对齐具有挑战性。

具体方法:InverseAug 在应用与几何相关的数据增强时首先保存增强参数(例如,RandomRotate [46] 的旋转度)。在融合阶段,它反转所有这些数据增强以获得 3D 关键点的原始坐标(图 2(c)),然后在相机空间中找到其对应的 2D 坐标。请注意,我们的方法是通用的,因为它可以对齐不同类型的关键点(例如,体素中心),尽管为了简单起见,我们仅采用图 2 中的激光雷达点,并且它还可以处理两种模式都被增强的情况.

LearnableAlign

背景:对于输入级装饰方法,如 PointPainting [34] 和 PointAugmenting [36],给定一个 3D 激光雷达点,唯一对应的相机像素可以精确定位,因为存在一对一映射。相比之下,当在我们的 DeepFusion 管道中融合深度特征时,每个激光雷达特征代表一个包含点子集的体素,因此其对应的相机像素位于多边形中。因此对齐成为一个单体素到多像素的问题。一种天真的方法是对与给定体素对应的所有像素进行平均。然而,直觉上,并且正如我们的可视化结果所支持的那样,这些像素并不同等重要,因为来自激光雷达深度特征的信息与每个相机像素的对齐不均等。例如,一些像素可能包含检测的关键信息,例如要检测的目标对象,而其他像素可能信息较少,由背景组成,例如道路、植物、遮挡物等

具体方法:为了更好地对齐来自的信息激光雷达特征与最相关的相机特征,我们引入了LearnableAlign,它利用交叉注意力机制来动态捕获两种模态之间的相关性,如图 1 所示。具体来说,输入包含一个体素单元,及其所有对应的N 相机特征。 LearnableAlign 使用三个全连接层分别将体素转换为查询 q l q^l ql,将相机特征转换为键 k c k^c kc 和值 v c v^c vc。对于每个查询(即体素单元),我们在查询和键之间进行内积,以获得包含体素与其所有对应的 N 个相机特征之间的 1×N 相关性的attention affinity矩阵。通过 softmax 算子归一化,然后使用attention affinity矩阵来加权和聚合包含相机信息的值 v c v^c vc。聚合的相机信息然后由全连接层处理,最后与原始激光雷达特征连接。输出最终被送入任何标准的 3D 检测框架,例如用于模型训练的 PointPillars 或 CenterPoint。

探究点

  • InverseAug是否适用于深度图和RGB图的对齐,深度图和RGB之间是否存在对齐问题,与雷达对齐问题有何异同。
  • 论文中提到LearnableAlign的背景是“对齐成为一个单体素到多像素的问题”,在深度图和RGB对齐问题中是否存在此问题。
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
GitHub代码复现是指在GitHub上找到一个感兴趣或有用的开源代码项目,并通过阅读代码、运行代码并进行修改来重新实现或再次创建整个项目。 首先,需要在GitHub上搜索并找到目标项目。可以通过GitHub的搜索功能,输入关键词、项目名称、描述等来筛选出符合条件的项目。选择一个代码质量好、维护活跃的项目会更有保障。 一旦找到了目标项目,就可以clone(克隆)该项目到本地。可以使用git命令行或者通过GitHub Desktop等工具进行操作。克隆项目后,就可以在本地对代码进行修改、调试、定制等。 接下来,对项目进行配置和安装依赖。一般来说,项目中会有一个readme文件或者其他文档来指导配置环境和安装所需的依赖包。根据项目要求进行配置和安装。 然后,就可以运行项目了。根据项目的要求,可能需要提供一些参数或者数据集。根据项目的文档,在终端或者IDE中运行相应的命令或者程序。 当项目运行成功后,就可以根据自己的需求对代码进行修改和优化。可以根据项目的架构和实现逻辑进行更改,添加新的功能,或者提升代码的性能等。 最后,如果对项目的改进比较显著,可以考虑提交自己的贡献给项目的维护者。可以通过Fork项目、修改代码、提交Pull Request等方式向项目提交自己的改动。项目维护者会进行代码审查,并决定是否接受你的改动。 总之,GitHub代码复现是一个学习和交流的过程。通过复现别人的代码,可以提升自己的编程能力,了解项目的实现细节,还可以与其他开发者交流、合作,共同提高。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值