论文题目:TANet: Robust 3D Object Detection from Point Clouds with Triple Attention
代码开源出来的 可以放心使用!
文章在kitti上做的实验,发现对于小目标的检测效果很好 作者也做了一些噪声的实验 主要是在物体上加噪声,以此来证明网络的鲁棒性。这是文章的两个出发点。
这是怎么做的呢?
主要是作者认为考虑点级别、channel级别和voxel级别的检测器,对于小物体的效果是好的。因为这些小物体本身上面的点云就很小,如果和大物体例如车辆一样,对他们上面的点云一视同仁形成一个个voxel来进行检测,那效果肯定是不如车辆的检测效果的。
老规矩 上图:
文章让我耳目一新的主要是TA module。后面的回归模块实际上没啥可说的。
我们先来看看TA module:
首先对于点云进行voxel处理,注意 这里只是将点云划分到了每一个格子中,没有对他们进行其他的操作。假设每个voxel中的最大点云数是N,总共有K个voxel,每个点云的feature维度为C,经过这一步我们得到的是一个KNC的矩阵。PS:作者这里进行的voxel实际上是进行pillar化,所以在Z维度上只有一个voxel。
point-wise feature
随后我们对每个voxel内点云进行一个attention操作。对于某一个voxelVk,我们对于channel维度进行max处理 得到Ek(N1),送进linear层将Ek转化为r维度的向量,进行relu激活后再送进linear层 将维度调整回原来的N,这里我们得到Sk,维度为N1,这里代表的是voxel内每一个point的空间关联性。它们的值便对应了每一个point的重要性。
Channel-wise feature
同样的操作,对于每一个voxel,我们对于点云数目维度N进行max操作,得到C维度的向量,后面操作同point维度。最后得到的是一个Tk(维度为1*C)
我们将上面两个矩阵相乘后送入sigmoid函数中,得到voxel内 每个点 每个channel的权重值,它的维度和点云维度一致(N*C)
把这个矩阵与点云进行相乘 得到加权后的point cloud。
voxel-wise feature
这个便有些全局attention的意思了,对于我们上面得到的KNC矩阵 concat上每一个voxel的中心 我们max操作在N和C 得到每一个voxel的权重值:K11,这个值与每一个voxel内的point相乘 便是有全局意识的voxel-point了。
对于这个模块得到的点N*C,我们再concat上原点云,叠加两个模块后进行linear voxel-max操作 得到voxel化的feature。
将这个feature map输入到后面的回归模块:
实在没啥好讲的 也很粗略 就是把回归模块分成了两个分支 一个负责coarse regression 这个和pointpillar等网络的操作是一致的。
另一个就是对于FPN的不同scale的feature进行一个特征融合 融合手段就是下采样或者上采样到同样的维度后进行拼接。
实验做了对于噪声的鲁棒性测试:
对于小目标的检测还是很耀眼的
ablation:
我的思考:
文章不算惊艳,不过一些思想是可以借鉴的:
对于小目标的检测 我们就是需要一些细化的feature 而这些细化的feature往往是点给予的。
其次 2d卷积确实是不如transformer和3d卷积的 哪怕它很快!因为对于感受野扩大 全局feature的提取 都是困难的。
但是它快啊!