【论文阅读】【多传感器融合】TransFusion: Robust LiDAR-Camera Fusion for 3D Object Detection with Transformers

论文标题:TransFusion: Robust LiDAR-Camera Fusion for 3D Object Detection with Transformers

CVPR2022
现存的Lidar-Camera融合的方法:主要分为三类:result-level,proposal-level以及point-level
result level是这么做的:首先用现成的2d检测器来生成3dproposals,然后用pointnet来进行物体定位。(FPointNet/RoarNet)
proposal level是这么做的:融合在proposal阶段,通过对于两个模态的信息进行roi pool操作进行融合。但是这种方法的效果不理想,主要是在image会引入很多的背景噪声点,这是我们不希望得到的。(MV3D、AVOD)
point level则是尝试在点层面进行融合,在lidar点云和pixel像素之间建立硬连接,然后进行concat拼接。
这么做有什么不好的地方呢?
首先这样做很大程度地收到image质量的影响。其次硬链接是一对一的连接,这样浪费了很多pixel的丰富的语义信息,同时还需要很精准的calibration。
本文要讲这么一个故事:怎么设计一个鲁棒的检测器来进行两种信息域信息的软连接?
老规矩 上图!
在这里插入图片描述

query initialization

整篇文章的架构很像DETR和3DETR,没有看过的朋友可以先看一下这两篇文章。收到efficient DETR的启发,给定query一个精准的定位,相比随机的参数初始化是很有意义的。通过这个操作,我们可以减少对于特征层的深度。
最原始的思想是query由你的imput输入,自然,就是你的lidar点云信息来提取query。首先我们将点云信息voxel化,投影到bev图中,类似centerpoint的做法来生成一个基于类别热度图S,每个点预测k个类别的可能。类似centernet,我们取峰值点,取前N个作为我们的query点。我们用这个点对应的BEV特征和位置来初始化query。
作者认为每个类别有着很大的差异的信息,例如尺寸等等,而让query意识到class信息有利于多个类别的检测,具体的做法就是在每一个我们选取的query加一个embedding。具体做法就是选出每个query的类别热度图值S,利用一个linear层投影到d维度,随后与query进行element wise的相加处理。

Lidar decoder

还是沿袭Detr的思想,对于我们得到的query,我们先计算一个他们之间的selfattention,这里得到的是不同object之间的交互信息。再与BEV进行一个corss attention 这就是为了query感受野的扩大和提取全局信息了。位置编码是直接将query的位置进行mlp处理到d维度,再与query进行元素级别的相加得到的。最后再把这N个query送进前置层,进行前项推理,即可以得到预测结果。每一个decoder后面都有一个FFN,用来辅助检测后限制后面融合模块的corss attention。
在这里插入图片描述

Lidar camera fusion

对于一些远处的物体 lidar点是很稀疏的,如果直接与pixel进行concat拼接实际上是浪费了丰富的pixel的语义信息。所以硬链接是一个suboptimal的方法。我们转而采用cross attention的方法,对于2d backbone提取的feature,我们建立起两个信息域直接的软连接:
首先利用标定矩阵和预测结果找到投影到image上的区域,注意 这些区域肯定是含有背景pixel的,这对于我们的检测来说是噪声,而且会带来计算负担,怎么办呢 作者采用了一个类似centernet的2d高斯掩码,加权以每个query为中心的投影周围的cross attention map (SMCA),随后让query与这个经过加权后的pixel做cross attention, 再对于这些query进行FFN输出最终的结果。

后面的loss计算的label assignment还是沿袭的DETR的set prediction,采用匈牙利算法进行一对一的匹配后计算loss。没啥好说的。

image guide query

这里是对于query初始化的优化,能够在选取query阶段就具有image的信息的指引?
答案是可以的。那就是对于BEV的feature做为query 与image的信息进行一个cross attention的计算。,生成一个集合了image信息的bev。注意为了节省计算量 这里对于image的高度维度进行了压缩。出于一遍在高度维度只存在一个object的考虑。(有点扯)
在这里插入图片描述
来看看结果:
在这里插入图片描述
在这里插入图片描述
waymo上打不过一阶段的centerpoint 不过既然是基于centerpoint tracking任务还是完成的很不错!
后面做了一些夜间场景、掉帧和标定不准情况下的结果,很nice!
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
ablation实验:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

我的思考

首先第一个问题 同样为一阶段网络,为什么打不过centerpoint呢?我认为融合是没有问题的,transformer也带来了更多的更好的语义信息,主要原因可能还是在于不同的检测头,使用set prediction的方法对于网络来说是困难的,需要首先进行一对一的匹配,这是否对于目标检测来说是最优的 没有一个定论。我看过的一篇文章,与detr分析过检测结果,发现无论如何迭代 set prediction的方法总是与手动的布置gt的方法存在ap上的gap。认为这种assignment对于网络来说是难以学习的。
在这里插入图片描述
其次 我认为这个方法的鲁棒性主要源自于fusion 模块的cross attention采用pixel的一个区域,这样 解释标定再不准 image再模糊 还是能提取到目标上的一些有用信息 而不会像硬链接一样 随便偏移一点就 会出现很大的偏差。
效果并不是很好 不过有了trans这个噱头。

  • 2
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
根据提供的引用内容,报错信息显示在安装mmdetection3d时出现了问题。具体来说,报错信息包括两个部分。首先,报错一指出在执行`get_indice_pairs`函数时出现了错误,具体错误信息是`cuda execution failed with error 2`。其次,报错二指出在编译`scatter_points_cuda.cu`文件时出现了错误,具体错误信息是`no instance of overloaded function "at::Tensor::index_put_" matches the argument list`。 针对这个问题,可能的原因是环境配置或依赖项安装不正确。为了解决这个问题,可以尝试以下几个步骤: 1. 确保已正确创建并激活了名为`transfusion`的conda环境,并且Python版本为3.7。 2. 确保已正确安装了PyTorch、mmcv和mmdet。可以使用`pip list`命令检查已安装的包,并确保版本与引用中提供的版本一致。 3. 检查CUDA和cuDNN的版本是否与安装的PyTorch版本兼容。可以在PyTorch官方网站上查找相应的兼容性信息。 4. 如果报错一中的错误是由于CUDA执行失败导致的,可以尝试更新显卡驱动程序或降低PyTorch的版本。 5. 如果报错二中的错误是由于编译错误导致的,可以尝试更新或重新安装相关的依赖项,如mmpycocotools。 关于mmpycocotools的安装问题,由于提供的引用内容中没有包含相关信息,无法给出具体的解决方案。但一般来说,可以尝试使用以下命令安装mmpycocotools: ``` pip install mmpycocotools ``` 如果仍然遇到问题,建议查阅相关文档或寻求开发者或社区的帮助来解决安装问题。 #### 引用[.reference_title] - *1* *2* *3* [TransFusion环境配置以及遇到的各种报错处理](https://blog.csdn.net/weixin_43603658/article/details/131756871)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值