https://arxiv.org/abs/2011.10033
对于室外驾驶场景中大规模LiDAR点云分割,常用的方法是将点云投影到二维空间,再通过2D卷积对其进行处理。这样做虽然有不错的表现,但它丢弃了点云的三维拓扑和几何关系信息。一种减少这种信息丢失的方法是对点云使用立方体划分的体素化再通过3D卷积对其进行处理,但这种方法得到的改善相当有限,因为室外点云还具有稀疏性和密度不均匀性。这篇论文提出了Cylinder3D:
Cylinder3D在SemanticKITTI和nuScenes点云分割数据集上的表现达到当时的第一,并且能很好地推广到LiDAR全景分割和三维检测的任务中。
Cylinder3D的整体框架如图:
有四个主要组件:
包括不对称残差模块(A)、不对称下样本块(AD)、不对称上采样模块(AU)和基于维度分解的上下文建模(DDCM)。
LiDAR点云首先输入MLP,得到点特征。然后根据柱面划分( Cylindrical Partition)对点特征进行重新分配得到圆柱特性(Cylindrical Features)。最后对圆柱特征使用非对称的3D卷积网络(Asymmetrical 3D Convolution Network,Asym-CNN)和基于维度分解的上下文建模(DDCM)来生成体素输出,并引入一个逐点细化模块(Point-wise Refinement Module,PR)来细化这些输出。
圆柱体划分的流程如图:
图片来源:https://arxiv.org/pdf/2109.05441.pdf
首先,将点从笛卡尔坐标系转换到圆柱坐标系。这个步骤将点
(
x
,
y
,
z
)
(x,y,z)
(x,y,z)转换为
ρ
,
θ
,
z
\rho,\theta,z
ρ,θ,z,这需要计算半径
ρ
\rho
ρ(点在x-y平面上投影与原点的距离)和方位角
θ
\theta
θ(自
x
x
x轴到
y
y
y轴的角度)。进而在
ρ
−
θ
−
z
\rho-\theta-z
ρ−θ−z三个维度上执行圆柱体划分。
在此基础上,对MLP得到的逐点特征根据对应坐标进行重新分配,然后对各个单元使用max-pooling得到圆柱体特征。
经过以上步骤,从0度展开圆柱体即可得到三维圆柱体表示 R ∈ C × H × W × L \mathbb{R}∈C × H × W × L R∈C×H×W×L,其中 C C C表示特征维数, H , W , L H, W, L H,W,L表示半径、方位角和高度。后续的非对称3D卷积网络将在此表示上执行。
远离原点的区域的点更稀疏。而在圆柱坐标中,区域越远,单元格越大。这使得圆柱体划分比立方体划分得到的点分布更均匀:
下图显示了两种划分方法随着距离增加非空单元格的比例。可以看到,圆柱体划分相比于立方体划分非空比例更高,且随着距离增加越明显:
此外,不同于将点投影到二维视图的方法,圆柱体划分一定程度上保持了点云的三维拓扑和几何关系信息。
不对称残差块(Asymmetrical Residual Block)
受ACNet的启发,Cylinder3D使用了不对称3D卷积构造残差块。以Car 和Motorcycle为例,下图展示了作用于圆柱体素的不对称残差块中的3D卷积:
不对称的残差块很好地匹配目标(汽车、卡车、公共汽车、摩托车等立方体物体)的点分布,也节省了计算量和内存开销。
Cylinder3D用不对称残差块设计下采样块和上采样块:
并将多个采样块和下采样块叠加,构建三维卷积网络:
DDCM使用三个秩为1的低秩卷积核提取特征,然后聚合在一起,最终得到 C c l a s s × H × W × L C_{class}×H×W×L Cclass×H×W×L的综合特征。
体素化方法(包括基于立方体划分和基于圆柱体划分的方法)为每个单元预测一个标签,这虽然有效地探索大范围点云,但不可避免地将不同类别的点被划分为同一个单元,从而导致信息丢失。
下图统计了不同标记编码方法的效果:
其中多数编码(majority encoding)表示使用单元内点的大多数类别作为单元标签,少数编码(minority encoding)表示使用少数类别作为单元标签。理想情况下,点云在划分之后各个点的标签应不变,即与原始标签点的mIoU应为100%。但可以观察到,多数编码和少数编码都无法达到100%的mIoU。
所以,Cylinder3D引入了逐点细化(point-wise refinement)模块来缓解编码带来的标签干扰。
首先根据逆点-体素映射表将圆柱体素特征投影回各个点(同一体素单元内的点将被分配到相同的特征)。然后,将三维卷积网络前后的点特征融合在一起并输入逐点细化模块以细化输出。
最终目标函数包括逐体素损失 L v o x e l L_{voxel} Lvoxel和逐点损失 L p o i n t L_{point} Lpoint
L = L v o x e l + L p o i n t L=L_{voxel}+L_{point} L=Lvoxel+Lpoint
L v o x e l L_{voxel} Lvoxel为加权交叉熵损失weighted cross-entropy loss 加 lovasz(洛瓦兹)-softmax。而 L p o i n t L_{point} Lpoint只有加权交叉熵损失。
对于训练后的推断,使用的是逐点细化模块的输出。