VoxelNet: 基于点云的 3D 对象检测的端到端学习
论文 :VoxelNet: End-to-End Learning for Point Cloud Based 3D Object Detection
原文地址:https://arxiv.org/abs/1711.06396
非官方的复现代码:https://github.com/qianguih/voxelnet
摘要
准确检测 3D 点云中的对象是许多应用中的核心问题,例如自主导航、家政机器人和增强/虚拟现实。 为了将高度稀疏的 LiDAR 点云与区域建议网络 (RPN) 连接起来,现有的大多数工作都集中在手工制作的特征表示上,例如鸟瞰图投影。 在这项工作中,我们消除了对 3D 点云进行手动特征工程的需要,并提出了 VoxelNet,这是一种通用的 3D 检测网络,它将特征提取和边界框预测统一到一个单一的阶段、端到端的可训练深度网络中。 具体来说,VoxelNet 将点云划分为等间距的 3D 体素,并通过新引入的体素特征编码 (VFE) 层将每个体素内的一组点转换为统一的特征表示。 通过这种方式,点云被编码为描述性的体积表示,然后连接到 RPN 以生成检测。 在 KITTI 汽车检测基准上的实验表明,VoxelNet 大大优于基于 LiDAR 的最先进的 3D 检测方法。 此外,我们的网络学习了具有各种几何形状的对象的有效判别表示,从而在仅基于 LiDAR 的行人和骑自行车者的 3D 检测方面取得了令人鼓舞的结果。
前言
基于点云的 3D 对象检测是各种现实世界应用的重要组成部分,例如自主导航 [11、14]、家政机器人 [26] 和增强/虚拟现实 [27]。 与基于图像的检测相比,LiDAR 提供了可靠的深度信息,可用于准确定位对象并表征其形状 [21, 5]。 然而,与图像不同的是,由于 3D 空间的非均匀采样、传感器的有效范围、遮挡和相对姿态等因素,LiDAR 点云是稀疏的并且具有高度可变的点密度。 为了应对这些挑战,许多方法为点云手动制作了特征表示,这些特征表示针对 3D 对象检测进行了调整。 几种方法将点云投影到透视图中并应用基于图像的特征提取技术 [28,15,22]。 其他方法将点云光栅化为 3D 体素网格,并使用手工制作的特征对每个体素进行编码 [41、9、37、38、21、5]。 然而,这些手动设计选择引入了信息瓶颈,阻碍了这些方法有效利用 3D 形状信息和检测任务所需的不变性。 图像识别 [20] 和检测 [13] 任务的重大突破是由于从手工制作的特征转向机器学习的特征。 最近,Qi 等人[29] 提出了PointNet,一个端到端的深度神经网络,直接从点云中学习逐点特征。 这种方法在 3D 对象识别、3D 对象部分分割和逐点语义分割任务上展示了令人印象深刻的结果。 在 [30] 中,引入了 PointNet 的改进版本,使网络能够学习不同尺度的局部结构。 为了获得令人满意的结果,这两种方法在所有输入点(~1k 点)上训练了特征变换器网络。 由于使用 LiDAR 获得的典型点云包含约 100k 点,因此像 [29, 30] 中那样训练架构会导致计算和内存要求很高。 将 3D 特征学习网络扩展到更多数量级的点和 3D 检测任务是我们在本文中解决的主要挑战。
区域提议网络(RPN)[32] 是一种高度优化的算法,用于高效的目标检测 [17、5、31、24]。 然而,这种方法要求数据密集并以张量结构(例如图像、视频)进行组织,而典型的 LiDAR 点云并非如此。 在本文中,我们缩小了点集特征学习和 RPN 在 3D 检测任务中的差距。 我们提出了 VoxelNet,一个通用的 3D 检测框架,它同时从点云中学习判别特征表示并以端到端的方式预测准确的 3D 边界框,如图 2 所示。我们设计了一种新颖的体素特征编码(VFE ) 层,通过将逐点特征与局部聚合特征相结合,实现体素内的点间交互。 堆叠多个 VFE 层允许学习用于表征局部 3D 形状信息的复杂特征。 具体来说,VoxelNet 将点云划分为等间距的 3D 体素,通过堆叠的 VFE 层对每个体素进行编码,然后 3D 卷积进一步聚合局部体素特征,将点云转换为高维体积表示。 最后,RPN 使用体积表示并产生检测结果。 这种高效的算法受益于稀疏点结构和体素网格上的高效并行处理。 我们在 KITTI 基准 [11] 提供的鸟瞰图检测和完整的 3D 检测任务上评估 VoxelNet。 实验结果表明,VoxelNet 大大优于最先进的基于 LiDAR 的 3D 检测方法。 我们还证明了 VoxelNet 在从 LiDAR 点云中检测行人和骑自行车的人方面取得了令人鼓舞的结果。
1.1. 相关工作
3D 传感器技术的快速发展促使研究人员开发有效的表示来检测和定位点云中的对象。 一些早期的特征表示方法是 [39, 8, 7, 19, 40, 33, 6, 25, 1, 34, 2]。 当有丰富而详细的 3D 形状信息可用时,这些手工制作的特征会产生令人满意的结果。 然而,他们无法适应更复杂的形状和场景,也无法从数据中学习所需的不变性,这导致在自主导航等不受控制的场景中取得有限的成功。 鉴于图像提供了详细的纹理信息,许多算法从 2D 图像中推断出 3D 边界框 [4, 3, 42, 43, 44, 36]。 然而,基于图像的 3D 检测方法的准确性受限于深度估计的准确性。 几种基于 LIDAR 的 3D 对象检测技术利用体素网格表示。 [41, 9] 用 6 个统计量对每个非空体素进行编码,这些统计量源自体素中包含的所有点。 [37]融合了多个局部统计数据来表示每个体素。 [38] 计算体素网格上截断的有符号距离。 [21] 对 3D 体素网格使用二进制编码。 [5] 通过计算鸟瞰视图中的多通道特征图和正面视图中的圆柱坐标,引入了 LiDAR 点云的多视图表示。 其他几项研究将点云投影到透视图上,然后使用基于图像的特征编码
还有几种多模态融合方法可以结合图像和激光雷达来提高检测精度[10,16,5]。 与仅使用 LiDAR 的 3D 检测相比,这些方法提供了改进的性能,特别是对于小物体(行人、骑自行车的人)或物体较远时,因为相机提供的测量值比 LiDAR 多一个数量级。 然而,需要一个与 LiDAR 时间同步和校准的附加相机限制了它们的使用,并使解决方案对传感器故障模式更加敏感。 在这项工作中,我们专注于仅 LiDAR 检测。
1.2. 贡献
? 我们提出了一种新颖的端到端可训练深度架构,用于基于点云的 3D 检测,VoxelNet,它直接对稀疏 3D 点进行操作,避免了手动特征工程引入的信息瓶颈。 ? 我们提出了一种实现VoxelNet 的有效方法,该方法受益于稀疏点结构和体素网格上的高效并行处理。 ? 我们在 KITTI 基准上进行实验,并表明 VoxelNet 在基于 LiDAR 的汽车、行人和骑车人检测基准中产生了最先进的结果。
VoxelNet
在本节中,我们将解释 VoxelNet 的架构、用于训练的损失函数以及实现网络的有效算法。
2.1. VoxelNet 架构
提出的 VoxelNet 由三个功能块组成:(1) 特征学习网络,(2) 卷积中间层,和 (3) 区域提议网络 [32],如图 2 所示。我们在 以下部分。
2.1.1 特征学习网络 Feature Learning Network
体素划分给定一个点云,我们将 3D 空间细分为等间距的体素,如图 2 所示。假设点云包含沿 Z、Y、X 轴范围为 D、H、W 的 3D 空间 分别。 我们相应地定义大小为 vD、vH 和 vW 的每个体素。 生成的 3D 体素网格的大小为
D
’
=
D
/
v
D
;
H
’
=
H
/
v
H
;
W
0
=
W
/
v
W
D’ = D/vD; H’ = H/vH; W 0 = W/vW
D’=D/vD;H’=H/vH;W0=W/vW 在这里,为简单起见,我们假设 D、H、W 是 vD、vH、vW 的倍数。
分组我们根据它们所在的体素对点进行分组。由于距离、遮挡、对象的相对姿态和非均匀采样等因素,LiDAR 点云是稀疏的,并且在整个空间中具有高度可变的点密度。 因此,分组后,一个体素将包含可变数量的点。 图 2 显示了一个示例,其中 Voxel-1 的点明显多于 Voxel-2 和 Voxel-4,而 Voxel-3 不包含任何点。 随机采样 通常,高清 LiDAR 点云由约 100k 点组成。 直接处理所有点不仅会增加计算平台的内存/效率负担,而且整个空间中高度可变的点密度可能会使检测产生偏差。 为此,我们从包含超过 T 个点的体素中随机抽取一个固定数量的点 T。 这种抽样策略有两个目的,(1)节省计算量(详见第 2.3 节); (2) 减少体素之间的点不平衡,从而减少采样偏差,并为训练增加更多变化。
堆叠体素特征编码 关键创新是 VFE 层链。 为简单起见,图 2 说明了一个体素的分层特征编码过程。 不失一般性,我们在下一段中使用 VFE Layer-1 来描述细节。 图 3 显示了 VFE 第 1 层的架构。
用V = {pi = [xi; yi; zi; ri]T ∈ R4}i=1…t 作为包含 t ≤ T 个 LiDAR 点的非空体素,其中 pi 包含第 i 个点的 XYZ 坐标,ri 是接收到的反射率。 我们首先将局部均值计算为 V 中所有点的质心,记为 (vx;vy;vz)。我们利用相对相对偏移来增加每个点 pi特征。即将输入点云的特征集扩展为
V
i
n
=
{
p
i
=
[
x
i
;
y
i
;
z
i
;
r
i
;
x
i
?
v
x
;
y
i
?
v
y
;
z
i
?
v
z
]
T
∈
R
7
}
i
=
1...
t
Vin = \{ p^i =[xi; yi; zi; ri; xi ?vx; yi ?vy; zi ?vz]^T∈R^7 \} i=1...t
Vin={pi=[xi;yi;zi;ri;xi?vx;yi?vy;zi?vz]T∈R7}i=1...t 。 接下来,每个 p^i 通过全连接网络 (FCN) 转换为一个特征空间,我们可以在其中聚合来自点特征 fi ∈ Rm 的信息,以编码包含在体素内的表面形状。 FCN 由线性层、批归一化 (BN) 层和整流线性单元 (ReLU) 层组成。 在获得逐点特征表示后,我们在与 V 关联的所有 fi 上使用逐元素 MaxPooling 来获得 V 的局部聚合特征 f~∈Rm。最后,我们用 ~f i增加每个 fi 以形成逐点连接特征 如 fout i = [fit ; ~fiT]^T ∈ R^2m。 因此我们得到输出特征集 Vout = {fiout}i…t。 所有非空体素都以相同的方式编码,并且它们在 FCN 中共享相同的参数集。 我们使用 VFE-i(cin,cout) 来表示第 i 个 VFE 层,它将维度 cin 的输入特征转换为维度 cout 的输出特征。 线性层学习大小为 cin ×(cout/2) 的矩阵,逐点连接产生维度 cout 的输出。
因为输出特征结合了逐点特征和局部聚合特征,堆叠 VFE 层对体素内的点交互进行编码,并使最终特征表示能够学习描述性形状信息。 通过 FCN 将 VFE-n 的输出转换为 R^C 并应用 element-wise Maxpool 获得体素特征,其中 C 是体素特征的维度,如图 2 所示。(重点记住f和f~的由来)
稀疏张量表示通过仅处理非空体素,我们获得体素特征列表,每个体素特征唯一地关联到特定非空体素的空间坐标。 获得的体素特征列表可以表示为一个稀疏的 4D 张量,大小为 C × D‘ × H’ × W‘,如图 2 所示。虽然点云包含 ~100k 点,但通常超过 90% 的体素是 空的。 将非空体素特征表示为稀疏张量大大降低了反向传播期间的内存使用和计算成本,这是我们高效实现的关键步骤。
2.1.2 卷积中间层
我们使用ConvMD(cin,cout, k, s, p)来表示一个M维卷积算子,其中cin和cout是输入输出通道的数量,k、s、p是M维分别对应于内核大小、步幅大小和填充大小的向量。 当跨 M 维的大小相同时,我们使用标量来表示大小,例如 k 对于 k = (k,k,k)。 每个卷积中间层依次应用 3D 卷积、BN 层和 ReLU 层。 卷积中间层在逐渐扩展的感受野中聚合体素特征,为形状描述添加更多上下文。 卷积中间层中过滤器的详细尺寸在第 3 节中解释。
2.1.3 区域提议网络RPN
最近,区域提议网络 [32] 已成为性能最佳的目标检测框架 [38, 5, 23] 的重要组成部分。 在这项工作中,我们对 [32] 中提出的 RPN 架构进行了几项关键修改,并将其与特征学习网络和卷积中间层相结合,形成端到端的可训练管道。 我们的 RPN 的输入是卷积中间层提供的特征图。 该网络的架构如图 4 所示。该网络具有三个完全卷积层块。 每个块的第一层通过步长为 2 的卷积将特征图下采样一半,然后是步长为 1 的卷积序列(×q 表示滤波器的 q 次应用)。 在每个卷积层之后,应用 BN 和 ReLU 操作。 然后我们将每个块的输出上采样到固定大小并连接以构建高分辨率特征图。 最后,将此特征图映射到所需的学习目标:(1)概率分数图和(2)回归图。
|