Abstract
由于点云数据稀疏的特点,比起稀疏3d卷积,transformer更适合对远距离的relationship进行建模。但是直接用标准的transformer处理点云数据不易实现。论文提出了Dynamic Sparse Voxel Transformer (DSVT)不仅性能优越,而且易于部署,只需要深度学习工具就可以实现,无需在cuda上实现自定的功能。
Methodology
目前处理点云的方法有基于point-net的方法,通过MLP和maxpololing的提取feature,以及通过稀疏卷积将点云转化为regular grids再处理。但是这些方法1.需要大量的计算。2. 受submanifold dilation影响表达能力有限。3.无法只靠深度学习工具实现,需要自定义的cuda操作。
submanifold dilation:一个active site在通过一个3*3的卷积核会发生扩散,产生9个activate site,随着网络的加深,数据稀疏性极速下降。
论文采用了基于voxel的方法(voxel feature encoding (VFE) module),先将点云数据处理成voxel。每个voxel就相当于transformer中的一个token。考虑到tansformer充足的感受野,和户外检测物体的尺寸都比较小,论文采用single-stride的网络设计。不会减少feature map的尺寸。通过若干个DSVT Block处理voxel
vfe:实际就是将两个pointnet拼在一起
Dynamic Sparse Window Attention
为了能够并行的处理稀疏点云,提出了Dynamic Sparse Window Attention。
由于3d 点云的稀疏性,大量的voxel中是没有点的,而且非空voxel中点的数量差异也很大,直接使用标准的transformer不易实现,对没有点的区域做padding是一件计算复杂度很高的事情。论文提出了Dynamic Sparse Window Attention。可以并行处理稀疏的3d voxels。
Dynamic set partition.
在将点云转换成voxel之后,将voxel进一步划分成一系列non-overlapping的window(尺寸固定L × W × H),每一个window包含N(N对每个window都不同)个非空的voxel。
对于每一个window内部,再将其进一步划分为大小相等的subsets. 每个subset包含不超过τ个非空voxels(τ是一个超参数)。最后window被划分成S(N / τ ,向上取整)个subset。
每个window根据自身的稀疏程度会计算出对应的S值,并按照其大小分配对应的计算资源。
然后将非空的voxels均匀的分配成S份,使个subset都包含τ个voxels,以实现全并行的处理方式。为了实现每个subset都严格包含τ个voxels可能会复制一些voxels,这些多余的voxels会在执行attention的时候被mask掉。(eg,τ = 3,N = 10,S = 4,subset_1: 3, subset_2: 3, subet_3: 2, subset_4: 2 不足3的subset会复制voxel)
最后获取从每个voxel中的feature,以及该voxel在坐标系中的位置(x, y, z)。到此我们获得了一些window,每个window中都包含了数目不等的subsets,每个subset都包含同样数量的非空voxel。
Rotated set attention for intra-window feature propagation
为了建立同一个window下不同voxel之间的联系。论文提出了rotated-set attention。论文的DSVT包含两层self-attention layers。在两层采用不同的voxels的排序方式来生成不同的subsets。第一层沿x轴的方向对voxel排序,并赋予下标,根据下标生成subets,然后过一次Multi-head Self-Attention layer,第二层沿y轴的方向排序,再过一次Multi-head Self-Attention layer。两层layer的subset中voxels的组成方式不同,通过这种方式建立不同subsets之间的联系。
Hybrid window partition for inter-window feature prop- agation
为了建立不同window之间的voxels的联系,提出了hybrid window partition。
dynamic window attention layer的线性复杂度随所有subsets的数量线性增加。增大window的size可以减少复杂度,但是会影响检测小物体的性能。
论文采用了swin-transformer的方式,在两个block之间通过滑动窗口的方式来重新划分window,而且window的尺寸也会发生变化。
Attention-style 3D Pooling
直接使用MLP网络做下采样很难学习到稀疏区域的空间信息(有太多zero-padded holes)。论文尝试在两个transformer blocks之间插入MLP层,但是会影响到网络的优化。为了更有效的进行下采样并对空间信息进行编码,论文提出了attention-style 3D pooling。
给定一个l × w × h的pooling区域,包含P个非空的voxels,
1.首先对稀疏的区域做padding,生成l × w × h个voxels。然后做标准的pooling。
2.用经过pooling之后的feature作为query vecter Q, 将经过pooling之前的voxel作为K和V,做attention。
Experiments
在waymo和nusence数据集上实验,在单帧和多帧的效果上好于pointpillar, centerpoint,mppnet。