赞
踩
本文主要是在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提出的方法有一点出入,这里是借鉴了在哪些地方编码特征的思想,并不是完全套用。具体算法步骤如下:
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的一种方法。)。
在本节中主要用于讲解sparse voxel和submanifold voxel module的设计方法。这两者的主要的区别在于submanifold voxel module严格作用于非空体素,只在非空位置提取特征,保持了三维场景的几何结构,而sparse voxel module可以在空位置提取体素特征。显示了更大的灵活性,可以根据需要扩展原有的非空体素空间(也就是之前讲的,借鉴了SECOND中sparse和submanifold的思想。)。
这里主要介绍到在sparse voxel和submanifold voxel module中都会用到的self-attention的方法。也就是下图所示的结构:
non-empty voxels integer indices array V和 feature array F。对于每一个non-empty voxels(也就是Transformer中的Query)i,我们首先给定Key和Value的来源点的范围,之后通过一系列的点得到的attention features。
设分别为query voxel和attending voxels的特征,分别为query voxel和attending voxels的indices。首先我们将转化到真实的3D coordinates中,通过公式,其中r表示voxel size。之后对于一个query embedding 和相应的key embedding 以及value embedding 可通过下述公式获得:
其中为权重参数,。
最终为softmax normalization function。
如上图所示,为submanifold的完整结构,与传统的transformer的区别在于:1)我们在feed-forward layer之后增加了一个projection layer,用于体素特征的通道调整。2)我们用batch normalization代替layer normalization。3)我们删除了模块中所有的dropout层,因为参与的体素数量已经很小,而随机剔除其中一些体素会阻碍学习过程。
在submanifold voxel module中,如上述一致,我们只会对non-empty voxels进行transformer的操作。
如上图所示,为sparse voxel module的整体结构。与submanifold voxel module不同的是,它还会对某些空值的voxel进行transformer操作(也就是跟SECOND中的sparse一样的扩展特征方法。),当然这是voxel下采样过程中通常需要的。
由于empty voxel没有feature可用,我们无法从中获得query embedding。为了解决这一问题,我们从参加transformer的voxel的特征给出了空点处气的近似值:,其中A我们默认为maxpooling函数。
除此之外,我们在sparse voxel module中移除了第一个residual connection结构,因为在本次self-attention之后,前后特征的维度发生了变化,无法进行concatenate操作。
这里也就是上述中的选择策略:1)应覆盖相邻voxel,以保留更细致的3D structure。2)应尽可能达到获取大的context information。3)中attending voxel的数量应足够小,例如小于50,以避免沉重的计算开销。
根据这些选择策略,我们得出了Local Attention和Dilated Attention结合的选择策略。
我们将定义为一个函数,该函数返回一个封闭集合[start,end]中的non-empty voxel indices,步长为stride。例如表示搜索集合:
中不为空的voxel。
在Local Attention,对于一个query embedding ,local attention的范围为,其中表示local attention的范围,在本文中选择
与Local Attention一样,Dilated Attention可以根据参数列表定义为:
其中\表示集合中的减法操作(subtraction operator),U表示取所有非空体素集的并集。
注意到,并且,这意味着在搜索距离较远的非空体素时,逐步扩大查询步长。
这也就保证了更多的query voxel附近的non-empty voxel参与attending voxel,同时仍然保持一些较远的non-empty voxel参与attending voxel。通过精心设计的参数列表,查找的范围能够达到1500万以上,但每个query voxel的attending voxel数量仍然保持在50以下。值得注意的是,当时,Local Attention可以看作是Dilated Attention中的一种特殊情况。
Fast Voxel Query是为了加速上述的查询attending voxel的速率的,具体模型见上图所示,主要是构建了一个GPU-based的hash表,里面存着所有的non-empty voxel的indices,这样就能加速查询的进程。
具体步骤为:
1、在GPU上建立哈希表,将hash后的non-empty voxel indices作为hash key,将数组V对应的indices j作为hash value(因为中的索引值,也就是真实的voxel的indices,j表示在V中的第几个值。)。
2、对于每一个query voxel i,我们运用Local Attention和Dilated Attention获得attending voxel indices(前面提到,这个j在之前的意思与现在的意思根据作者的看法应该不太一样了。)。
3、我们使用使用hash function得出的hash key 来查找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.
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。