VoxelNet: End-to-End Learning for Point Cloud Based 3D Object Detection
理解了PointPillars这篇文章后,看这篇文章就清晰多了,这个清晰表现在两个方面,1)PointPillars这篇文章具体是如何将点云变为伪图像过程变得清晰了,2)VoxelNet这篇文章多用公式表达并且很详细,读起来是比较容易懂的。建议先看本文再去阅读PointPillars;下面简述一下论文的大致过程。
目录
VoxelNet: End-to-End Learning for Point Cloud Based 3D Object Detection
2.1 VoxelNet Architecture(以下步骤是我的简化版本)
1 主要思想
本文的目标是实现端到端的三维目标检测,正如下图所示,输入点云直接出结果,不需要中间过程存储,和阶段性的训练。
主要问题是需要解决稀疏的点云到点云特征的转换,类比于图像,之前的手工特征在泛化能力和表达能力方面还不够强大,因此能够用一个网络建立点云到点云特征之间的联系是本文解决的一个主要问题。这也是本文称之为VoxelNet的原因。然后通过3D卷积提取特征(本文称之为卷积中间层)后接RPN,实现Anchor的分类和位置,航向的回归。引出本文框架。
2 所提方法
包含三个重要的组成部分如上图。接下来介绍VoxelNet Architecture自己之前没有注意到的部分。以及训练的损失定义。
2.1 VoxelNet Architecture(以下步骤是我的简化版本)
第一步:体素化划分,将整个点云区域按照分辨率为0.4,02,0.2米(car)进行划分成立体网格;
第二步:每个体素中随机选取T(本文是35个)个点。这些体素90% 为空,可见点云的稀疏性;
第三步:对于每一个体素(下面步骤同),堆叠体素特征编码,(1)将每个点云进行
分别表示体素的空间位置三个,三个相对体素的位置。
(2)每个点进行全卷积(FCN=a linear layer+a BN layer + a ReLU layer)获取点的特征表达 {f_i}。
(3)element-wise MaxPooling 对体素(V)内的所有的点特征 { f_i} 操作获取聚合特征{f_~},然后执行:相当于每个{f_i}后面添加{f_~}
第四步:用的层来学习一个大小为的转换矩阵。该操作输出特性结合了点向特性和局部聚合特性,叠加使用VFE层对体素中的点进行编码,最终特征表示能够学习描述形状信息。
第五步:对所有的体素进行上述第三第四步的操作,看行程稀疏张量表示:表示为4D的张量。
T:每个体素的点数
K:非空体素数
7:
2.2 损失函数
下标: pos:positive samples, neg: negative samples
上标:g:groundtruth ,a:anchor
p是表示的softmax分类器输出置信度,{L_cls}代表二进制交叉熵损失,{L_reg}SmoothL1回归loss。
训练和上一篇PointPillars差不多。数据增广也是两个方面全局操作和对目标boxes的操作。
3 实验结果