【3D 目标检测】Voxel Transformer for 3D Object Detection

一 核心思想

本文主要是在3D backbone上用到了改进的transformer方法,以便更好的提取特征。也就是在sparse voxel module和submanifold voxel module的基础上使用transformer进行特征的提取。

提出两种attention的机制,分别为Local Attention 和 Dilated Attention。之后通过Fast Voxel Query的方法加速querying process的进程(这里之后会详细叙述。)。

VoTr包含一系列的sparse voxel和submanifold voxel modules,与之前SECOND提出的方法有一点出入,这里是借鉴了在哪些地方编码特征的思想,并不是完全套用。具体算法步骤如下:

【3D 目标检测】Voxel Transformer for 3D Object Detection

 

二 核心步骤

 VoTr是一种Transformer-based 3D backbone。与传统卷积架构 (包含3个sparse convolutional blocks和6个submanifold convolutional blocks)的设计类似,我们的VoTr由一系列sparse voxel和submanifold convolutional blocks组成,如上图所示。(需要注意的是,这里只是借鉴了传统sparse和submanifold选择采样位置的战略,而不是用到完整的sparse和submanifold convolutional blocks的结构。)

我们设计了3个sparse voxel modules,对voxel-grid进行3次采样。每个sparse voxel modules后面跟着2个submanifold voxel modules,保持输入和输出非空位置不变,在保持原始三维结构的同时扩大接受域(也就是sparse用于扩展特征position,submanifold用于在保持输入输出特征位置不变的情况下提取更多的特征。)。

Multi-head attention在sparse voxel modules和submanifold voxel modules中执行,Multi-head attention中每个querying voxel的对应需要参加key和value的voxel由两种特殊的attention决定: Local Attention 和 Dilated Attention,这两种机制能够很好地捕捉不同范围内的不同语境。在此基础上,提出了Fast Voxel Query算法,加速了Multi-head attention中非空体素的搜索过程(说白了Fast Voxel Query就是为了快速查找参加transformer的key和value里面的值的voxel的一种方法。)。

2.1 Voxel Transformer Module

在本节中主要用于讲解sparse voxel和submanifold voxel module的设计方法。这两者的主要的区别在于submanifold voxel module严格作用于非空体素,只在非空位置提取特征,保持了三维场景的几何结构,而sparse voxel module可以在空位置提取体素特征。显示了更大的灵活性,可以根据需要扩展原有的非空体素空间(也就是之前讲的,借鉴了SECOND中sparse和submanifold的思想。)。

2.1.1 Self-attention on sparse voxels

这里主要介绍到在sparse voxel和submanifold voxel module中都会用到的self-attention的方法。也就是下图所示的结构:

【3D 目标检测】Voxel Transformer for 3D Object Detection【3D 目标检测】Voxel Transformer for 3D Object Detection

 

non-empty voxels 【3D 目标检测】Voxel Transformer for 3D Object Detection integer indices array V和【3D 目标检测】Voxel Transformer for 3D Object Detection feature array F。对于每一个non-empty voxels(也就是Transformer中的Query)i,我们首先给定Key和Value的来源点的范围【3D 目标检测】Voxel Transformer for 3D Object Detection,之后通过一系列的点【3D 目标检测】Voxel Transformer for 3D Object Detection得到的attention features【3D 目标检测】Voxel Transformer for 3D Object Detection

【3D 目标检测】Voxel Transformer for 3D Object Detection分别为query voxel和attending voxels的特征,【3D 目标检测】Voxel Transformer for 3D Object Detection分别为query voxel和attending voxels的indices。首先我们将【3D 目标检测】Voxel Transformer for 3D Object Detection转化到真实的3D coordinates中,通过公式​​​​​​​【3D 目标检测】Voxel Transformer for 3D Object Detection,其中r表示voxel size。之后对于一个query embedding 【3D 目标检测】Voxel Transformer for 3D Object Detection和相应的key embedding 【3D 目标检测】Voxel Transformer for 3D Object Detection以及value embedding 【3D 目标检测】Voxel Transformer for 3D Object Detection可通过下述公式获得:

【3D 目标检测】Voxel Transformer for 3D Object Detection

 其中【3D 目标检测】Voxel Transformer for 3D Object Detection为权重参数,【3D 目标检测】Voxel Transformer for 3D Object Detection

最终【3D 目标检测】Voxel Transformer for 3D Object Detection为softmax normalization function。

 2.1.2 Submanifold voxel module

 

【3D 目标检测】Voxel Transformer for 3D Object Detection

 

如上图所示,为submanifold的完整结构,与传统的transformer的区别在于:1)我们在feed-forward layer之后增加了一个projection layer,用于体素特征的通道调整。2)我们用batch normalization代替layer normalization。3)我们删除了模块中所有的dropout层,因为参与的体素数量已经很小,而随机剔除其中一些体素会阻碍学习过程。

在submanifold voxel module中,如上述一致,我们只会对non-empty voxels进行transformer的操作。

2.1.3 Sparse voxel module 

 

【3D 目标检测】Voxel Transformer for 3D Object Detection

 如上图所示,为sparse voxel module的整体结构。与submanifold voxel module不同的是,它还会对某些空值的voxel进行transformer操作(也就是跟SECOND中的sparse一样的扩展特征方法。),当然这是voxel下采样过程中通常需要的。

由于empty voxel没有feature【3D 目标检测】Voxel Transformer for 3D Object Detection可用,我们无法从【3D 目标检测】Voxel Transformer for 3D Object Detection中获得query embedding【3D 目标检测】Voxel Transformer for 3D Object Detection。为了解决这一问题,我们从参加transformer的voxel的特征【3D 目标检测】Voxel Transformer for 3D Object Detection给出了空点处气的近似值:【3D 目标检测】Voxel Transformer for 3D Object Detection,其中A我们默认为maxpooling函数。

 除此之外,我们在sparse voxel module中移除了第一个residual connection结构,因为在本次self-attention之后,前后特征的维度发生了变化,无法进行concatenate操作。

 2.2 Efficient Attention Mechanism

 

【3D 目标检测】Voxel Transformer for 3D Object Detection

 这里也就是上述中【3D 目标检测】Voxel Transformer for 3D Object Detection的选择策略:1)【3D 目标检测】Voxel Transformer for 3D Object Detection应覆盖相邻voxel,以保留更细致的3D structure。2)【3D 目标检测】Voxel Transformer for 3D Object Detection应尽可能达到获取大的context information。3)【3D 目标检测】Voxel Transformer for 3D Object Detection中attending voxel的数量应足够小,例如小于50,以避免沉重的计算开销。

 根据这些选择策略,我们得出了Local Attention和Dilated Attention结合的选择策略。

 2.2.1 Local Attention

 我们将【3D 目标检测】Voxel Transformer for 3D Object Detection定义为一个函数,该函数返回一个封闭集合[start,end]中的non-empty voxel indices,步长为stride。例如【3D 目标检测】Voxel Transformer for 3D Object Detection表示搜索集合:​​​​​​​【3D 目标检测】Voxel Transformer for 3D Object Detection

 中不为空的voxel。

 在Local Attention,对于一个query embedding 【3D 目标检测】Voxel Transformer for 3D Object Detection,local attention的范围为【3D 目标检测】Voxel Transformer for 3D Object Detection,其中【3D 目标检测】Voxel Transformer for 3D Object Detection表示local attention的范围,在本文中选择【3D 目标检测】Voxel Transformer for 3D Object Detection 

【3D 目标检测】Voxel Transformer for 3D Object Detection

 2.2.2 Dilated Attention

 与Local Attention一样,Dilated Attention可以根据【3D 目标检测】Voxel Transformer for 3D Object Detection参数列表【3D 目标检测】Voxel Transformer for 3D Object Detection定义为:

 

【3D 目标检测】Voxel Transformer for 3D Object Detection

 其中\表示集合中的减法操作(subtraction operator),U表示取所有非空体素集的并集。

 注意到【3D 目标检测】Voxel Transformer for 3D Object Detection,并且【3D 目标检测】Voxel Transformer for 3D Object Detection,这意味着在搜索距离较远的非空体素时,逐步扩大查询步长【3D 目标检测】Voxel Transformer for 3D Object Detection

 这也就保证了更多的query voxel附近的non-empty voxel参与attending voxel,同时仍然保持一些较远的non-empty voxel参与attending voxel。通过精心设计的参数列表【3D 目标检测】Voxel Transformer for 3D Object Detection,查找的范围能够达到1500万以上,但每个query voxel的attending voxel数量仍然保持在50以下。值得注意的是,当【3D 目标检测】Voxel Transformer for 3D Object Detection【3D 目标检测】Voxel Transformer for 3D Object Detection时,Local Attention可以看作是Dilated Attention中的一种特殊情况。

 2.3 Fast Voxel Query

【3D 目标检测】Voxel Transformer for 3D Object Detection

 Fast Voxel Query是为了加速上述的查询attending voxel的速率的,具体模型见上图所示,主要是构建了一个GPU-based的hash表,里面存着所有的non-empty voxel的indices,这样就能加速查询的进程。

具体步骤为:

1、在GPU上建立哈希表,将hash后的non-empty voxel indices【3D 目标检测】Voxel Transformer for 3D Object Detection作为hash key,将数组V对应的indices j作为hash value(因为【3D 目标检测】Voxel Transformer for 3D Object Detection中的索引值,也就是真实的voxel的indices,j表示在V中的第几个值。)。

2、对于每一个query voxel i,我们运用Local Attention和Dilated Attention获得attending voxel indices【3D 目标检测】Voxel Transformer for 3D Object Detection(前面提到【3D 目标检测】Voxel Transformer for 3D Object Detection,这个j在之前的意思与现在的意思根据作者的看法应该不太一样了。)。

 3、我们使用使用hash function得出的hash key 【3D 目标检测】Voxel Transformer for 3D Object Detection来查找j。

4、最终我们从V和F中获得query voxel 的attending voxels。

三 总结

本文充分融合了Transformer和SECOND中提出的稀疏卷积方法,具有很高的参考价值。

 参考文献

 [1] Mao J ,  Xue Y ,  Niu M , et al. Voxel Transformer for 3D Object Detection.  2021.

上一篇:Golang 1.16新特性-embed包及其使用


下一篇:TensorFlow实战——深度学习训练个性化推荐系统