虚拟稀疏卷积重读:Virtual Sparse Convolution for Multimodal 3D Object Detection
前言
关于之前码上的刷榜论文重读。该论文是目前KITTI数据集下的最高分,同时采用的是多模态的处理方法,这边再次总结并详细记述其网络结构和创新点。并对相应的改进路线进行进一步的研究。
工作简述
这边主要开发了一个新的算子 Virtual Sparse Convolution (虚拟稀疏卷积),由以下两个部分组成
(1) StVD(随机体素丢弃)。 StVD 通过丢弃大量附近的冗余体素来缓解计算问题。
(2) NRConv(抗噪声子流形卷积)。 NRConv 通过在 2D 图像和 3D LiDAR 空间中编码体素特征来解决噪声问题。
并用该算子组织构成了一个主干网络 VirConvNet,相应的网络在 KITTI 数据集上取得了最好的成绩。
方法论
VirConvNet 首先将点转换为体素,并通过一系列具有1×、2×、4×和8×下采样步长的VirConv块将体素逐渐编码为特征volumes
VirConv 块由 StVD 层、一些 NRConv 层和 3D SpConv 层组成。
- 先简单方法描述这个StVD(Stochastic Voxel Discard):
由两部分组成:
(1)输入StVD :通过在训练和推理过程中丢弃虚拟点的输入体素来加速网络并提高鲁棒性。
首先我们知道体素运算存在大量的冗余信息。有两种方法可以丢弃虚拟点的多余体素 (1) 随机采样或 (2) 最远点采样 (FPS)。然而,随机采样通常会在不同距离处保持不平衡的体素,并且不可避免地会牺牲一些有用的形状线索;后者则有更高的运算复杂度 O(n^2)。
对于StVD,先根据不同的距离将输入体素分为 N 个 bin(本文采用 N b = 10)。对于附近的 bin(根据统计,≤30m),随机保留固定数量(∼ 1K)的体素。 对于远处的垃圾箱,我们保留所有内部体素。在基于 bin 的采样之后,我们丢弃了大约 90%(这实现了最佳的精度-效率权衡,见图 6)的冗余体素,并且它使网络速度提高了大约 2 倍。
(2) StVD 层:仅在训练过程中使用,丢弃每个 VirConv 块处虚拟点的体素,从而提高密度鲁棒性。具体来说,丢弃每个 VirConv 块处的体素以模拟稀疏的训练样本。本文采用15%的丢弃率(图6讨论了层StVD率)。 StVD 层用作数据增强策略,帮助增强 3D 检测器的训练。
再详细讲解右边这个蓝色框住的 NRConv (Noise-Resistant Submanifold Convolution)
左边的H代表的体素空间的索引向量,右边的X代表特征空间的向量(也算从H里面得到的)。
对于X,3D子流形卷积核K3D(·)对几何特征进行编码——这边引入一个介绍稀疏子流形卷积的链接知乎:论文阅读:Submanifold Sparse Convolutional Networks
对于H,比较复杂。由于噪声主要分布在 2D 实例边界上,因此将卷积感受野扩展到 2D 图像空间,并使用 2D 邻近体素对噪声感知特征进行编码。具体而言如下:
首先根据体素化参数将 3D 索引转换为一组网点(转换表示为 G(·))。由于最先进的检测器[7, 36]也采用旋转和缩放等变换增强(增强表示为T(tao)(·)),因此网点通常与相应图像不对齐。因此,我们根据数据增强参数将网点向后变换到原始坐标系。然后我们根据LiDARCamera 标定参数将网格点投影到2D图像平面上(投影表示为P(·))。总之就是转换为网点——旋转缩放等图像增强——投影到2D平面。最后2D卷积得到2D的特征
最后对这两个3D,2D特征结果简单串联起来来隐式学习抗噪声特征。
具体H和X之间的关系,还得进一步看代码来了解(待定)
而作者更是直接把这个算子融合到了其他的经典目标识别网络里面,有了很大的提升,证明该算子的有效性。
总结&问题和反思
数据融合上,是直接融合的图像得到的虚拟点和点云的特征。
核心的创新点在于VirConv这个算子。融合了多种数据处理的方法。具体算子怎么处理的还是要阅读/扒源代码。
改进之处在于还是把图像转移到了点云的空间里面。也就是在起始阶段的融合。和某些BEV的融合类似,有效,但是实际调研上多维度多过程的融合效果会更好,可以尝试从这里出发,结合前面的工作。
关于丢弃虚拟点的操作,本文的方法还是随机的,也可以从这里思考一些入手点。针对不同距离远近点云的稀疏程度来做工作。或者其他的丢弃方案。