点云检测之TransFusion: Robust LiDAR-Camera Fusion for 3D Object Detection with Transformers

TransFusion是香港科技大学、华为和香港城市大学在2022年发表在CVPR的一篇论文
论文地址 : TransFusion


前言

  多模态融合在自动驾驶领域越来越受欢迎,但是针对劣质图像时(照明不良、传感器未校准)鲁棒性不好,由于通过相机标定矩阵建立的 Lidar 和像素的硬关联,很难解决这种问题。
在这里插入图片描述

  本文提出了 TransFusion,使用软关联机制来处理较差的图像条件。


一、Preliminary: Transformer for 2D Detection

  从DETR开始,Transformer被大量应用在目标检测中,DETR第一次引用了object queries这一概念。关于object queries是一个可学习的embeddings,在模型训练过程中再不断迭代更新参数。关于DETR的详解可以参考:DETR 论文精读【论文精读】

二、Query Initialization

Input-dependent

  object queries 是指一组特殊的可学习参数,用于在目标检测任务中查询和定位目标物体。在DETR中 object queries 作为网络参数学习的,一旦训练结束,object queries 也就确定了,与输入的数据没有关系。这种情况将会用更多的decoder层来确定真实的框在什么地方。
  对于 Input-dependent,首先通过 Lidar 的 BEV 特征图 F L F_L FL R X × Y × d R^{X × Y × d} RX×Y×d 预测中心热力图 S ˆ \^{S} Sˆ R X × Y × K R^{X × Y × K} RX×Y×K,X × Y 是 BEV 特征图的大小,K 是类别数。对于所有的类别,在每个 8 连通区域内保留一个最大值后,再选择出前 N 个分数最高的作为候选位置 S ˆ i j k \^{S}_{ijk} Sˆijk ,表示该位置 ( i i i j j j) 存在物体,对应的物体类别是 k k k,每个候选位置用于初始化query positions,这个位置对应的BEV特征为初始query features。这样输入的数据不同,得到的BEV图像不i同,热力图也不同,最后得到的object queries也将不同。通过这种方式初始object queries将位于或靠近潜在对象中心,从而消除了用多个decoder层来学习向真实对象中心移动的需要。

Category-aware

  由于在BEV平面上对象都是绝对比例,并且在同一类别之间的差异较小。为了利用这些属性进行多分类检测,此时 object queries 包括了query positions 和 query features,我们还需要对 object queries 添加类别信息使得 object queries 具有类别感知能力。
  对于每一个 S ˆ i j k \^{S}_{ijk} Sˆijk ,使用 one-hot 类别向量线性映射到 R d R^d Rd向量,将得到的向量与 R d R^d Rd对应的 query features 逐元素求和。
  加入了类别信息对于自注意力模块中的 object-object 关系和交叉注意力模块中object-context 关系可以起到辅助作用。同时在预测过程中,提供有价值的先验知识,有利于类别的预测。

The category embedding brings benefits in two aspects: on the one hand, it serves as a useful side information when modelling the object-object relations in the self-attention modules and the object-context relations in the cross-attention modules. On the other hand, during prediction, it could deliver valuable prior knowledge of the object, making the network focus on intra-category variance and thus benefiting the property prediction.

三、Transformer Decoder and FFN

  对于 decoder 遵循了DETR中的设计,第一层 decoder 的架构如下图所示,使用上文的 object queries 生成初始3D边框。
在这里插入图片描述
  query positions 通过MLP编码为 d 维向量,作为位置编码,与 query features 按元素求和,使得网络可以推理上下文信息和位置。自注意力机制可以找到不同 object 之间的某些相关性,而交叉注意力可以使 object 获得一些来自图像或者点云的特征信息。
  object queries 通过 decoder 和 FFN 得到3D边界框和类别,这种纯 Lidar 的检测部分称其为TransFusion-L,具体结构如下图所示。
在这里插入图片描述

四、LiDAR-Camera Fusion

Image Feature Fetching

  基于点集的融合方法受到了点云稀疏性的影响,当一个物体中只有少量的点云,智能获得相同数量的图像特征,损失了大量的图像语义信息。所以作者将Lidar和图像中的硬连接改为软连接,保存了所有的图像特征 F C F_C FC R N v × H × W × d R^{{N_v} × H × W × d} RNv×H×W×d , N v N_v Nv是图像视角个数。

SMCA for Image Feature Fusion

  通过交叉注意力机制,在 Lidar 和图像之间建立软连接,使网络自适应的确定从图像中获得什么信息。
  首先通过先前预测框和校准矩阵找到 object queries 所在的图像,然后将 object queries 与对应的图像特征做交叉注意力。因为点云和图像特征来自不同的领域,所以网络需要很长的训练时间才能准确识别图像上的正确区域,因此作者设计了 SMCA(spatially modulated cross attention) 模块。
  通过生成一个 Gaussian weight mask M, M i j M_{ij} Mij = e x p ( − ( i − c x ) 2 + ( j − c y ) 2 σ r 2 ) exp(-{\frac{(i - c_x)^2 + (j - c_y)^2}{σr^2}}) exp(σr2(icx)2+(jcy)2) ,其中( i i i j j j) 是 M 的空间索引,( c x c_x cx c y c_y cy) 是投影到图像平面上的2D中心,r 是3D投影在图像平面的2D边界框区域,σ是一个超参数。将M与交叉注意力权重图按元素相乘。这样每个 object queries 仅关注投影在图像上的边界框周围的区域,可以使得网络更好的根据 Lidar 特征选择相应的图像特征。

In this way, each object query only attends to the related region around the projected 2D box, so
that the network can learn where to select image features based on the input LiDAR features better and faster.

  可视化结果如下图所示。
在这里插入图片描述
  第二层 decoder 的架构如下图所示:
在这里插入图片描述

五、Label Assignment and Losses

  与DETR一样使用二分图匹配,匹配损失为:
在这里插入图片描述
   L c l s L_{cls} Lcls 是二元交叉熵损失, L r e g L_{reg} Lreg 是预测的 BEV 中心和真实中心之间的 L1 损失, L i o u L_{iou} Liou 是预测框和真实框之间的 IoU 损失。
  对于给定的样本,分类采用焦点损失,针对正样本回归损失采用 L1 loss ,热力图损失采用penalty-reduced focal loss,总损失是每个分量损失的加权和。对于两个decoder采用相同的Loss。

六、Image-Guided Query Initialization

  为了利用高分辨率的图像提高检测小物体的能力并且使稀疏点云更加的鲁棒性,利用 LiDAR 和相机信息选择object queries。
  将多视角的图像特征沿垂直维度进行压缩,作为 K,V,与Lidar BEV 特征进行交叉注意力,将图像特征 F C F_C FC R N v × H × W × d R^{{N_v} × H × W × d} RNv×H×W×d 投影到 BEV 平面,得到 LiDAR-camera BEV 特征图 F L C F_{LC} FLC。具体结构如下图所示:
在这里插入图片描述
  和 TransFusion-L 中相同,使用 F L C F_LC FLC 来预测热力图,与仅由 Lidar 生成的热力图 S ˆ \^{S} Sˆ 进行平均操作作为最终的热力图 S ˆ L C \^{S}_{LC} SˆLC。使用 S ˆ L C \^{S}_{LC} SˆLC 进行 object queries 的初始化。
  使用相机几何结构可以轻松建立 BEV 位置和图像列之间的关系,并且通常每个图像列最多有一个对象。 因此,沿高度压缩可以显着减少计算量,而不会丢失关键信息。

The collapsing operation is based on the observation that the relation between BEV locations and image columns can be established easily using camera geometry, and usually there is at most one object along each image column.

七、Network Architecture

  TransFusion由卷积主干和基于Transformer解码器的检测头组成。使用第一层 decoder 根据雷达特征生成初始边界框。与 2D 中DETR不同,本文中 object queries 是包含类别感知。第二层 decoder 将 object queries 通过空间和上下文关系融合相关的图像信息。
  2D backbone使用 DLA34,3D backbone使用 VoxelNet。整个网络框架如下图所示。
在这里插入图片描述


总结

  TransFusion使用一种软关联机制 (soft-association) 代替以往融合方法中的硬关联机制,通过这种新的机制使得算法在图像质量退化和传感器没有严格对齐的情况下能更加鲁棒。同时 Image Guidance利用高分辨率的图像提高检测小物体的能力。
  作者在 object queries 的初始化上不仅实现了input-dependent,而且还满足了 category-aware 。在实现 input-dependent 是的操作可谓是十分新颖,通过 heatmap 筛选出热点,既保证了object queries 的稀疏性,又可以通过热点位置的特征对 object 进行初始化,同时热点位置也可以用于位置编码加入到query中。

  本文是自己对论文的理解,如有不同见解,欢迎讨论、指正。

  • 25
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
根据提供的引用内容,报错信息显示在安装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 ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值