VoxelNet 学习笔记

CVPR2018《VoxelNet: End-to-End Learning for Point Cloud Based 3D Object Detection》


前言

VoxelNet是苹果公司提出的一个只用点云来实现端到端的点云目标检测网络,和图像视觉中的深度学习方法一样,其不需要人为设计的目标特征,通过大量的训练数据集,即可学习到对应的目标的特征,从而检测出点云中的目标。

在VoxelNet发表之前,pointnet 和 pointnet++ 两篇paper都已经发表了。说到了这种方法对计算要求比较高。VoxelNet则受到pointnet的启发,对于voxel内的点采用了learning-based的方式,提高了点的表达能力。受Faster R-CNN 的启发,VoxelNet 也应用了 RPN(Region Proposal Network),只不过这里是3d的。

一、主要思想和创新点

三维点云中目标的精确检测是许多应用中的核心问题,如自主导航、管家机器人和增强/虚拟现实等。为了将高度稀疏的激光雷达点云与区域建议网络(RPN)连接,大多数现有的工作都集中在手工制作的特征表示上,例如,鸟瞰图投影。这项工作消除了人工特征工程对三维点云的需求,提出了VoxelNet,一种将特征提取和box预测统一为一个单阶段、端到端可训练的深度通用三维检测网络。具体来说:

  • 提出了VoxelNet,一种通用的三维检测框架,它可以从点云中同时学习区分特征表示,并以端到端的方式预测精确的三维边界框。
  • 设计了一种新的体素特征编码(VFE)层,通过将点特征与局部聚集特征相结合,实现了体素内部的点间交互,通过叠加多个VFE层可以学习复杂特征来表征局部3D形状信息。
  • VoxelNet将点云划分为等间距的三维体素,通过叠加的VFE层对每个体素进行编码,然后三维卷积进一步聚集局部体素特征,将点云转化为高维体素表示。
  • RPN使用体积表示并产生检测结果。这种有效的算法既有稀疏点结构的优点,又有体素网格上高效并行处理的优点。
  • 本网络主要面向RPN+点云操作,并没有建立类别级的分类,作为一个通用的面向激光雷达点云操作的RPN框架使用。

二、整体网络框架

如下图所示,网络主要包括三个模块:Feature Learning Network、Convolutional Middle Layers和Region Proposal Network。
在这里插入图片描述

1.Feature Learning Network

特征学习网络的结构如下图所示,包括体素分块(Voxel Partition),点云分组(Grouping),随机采样(Random Sampling),多层的体素特征编码(Stacked Voxel Feature Encoding),稀疏张量表示(Sparse Tensor Representation)等步骤。
在这里插入图片描述
1.Voxel Partition
在这里插入图片描述
2.Groupping

在同一个voxel内的点被一起进行后续操作(根据voxel的分割将点云划分分组)。从上图中可以了解到,划分后每个体素格内的点云数量是不同的,有的多有的少,像3这个格子干脆就没有点云了。

3.Random Sampling

64线的激光雷达一次扫描包含差不多10万个点,全部处理需要的计算力和内存都很高,而且高密度的点势必会给神经网络的计算结果带来偏差。所以作者这里设定了一个T值,这个T值是每个体素格内随机取的点数。随机取点的目的是使每个点被取到的机会都是相等的。当点数大于或等于T值时,总共随机取T个点。这样处理,能够使得点的数量减少90%,大大减小了计算量。并且使体素格内的点均匀分布。

4.Stacked Voxel Feature Encoding

之后是多个体素特征编码层,简称为VFE层,这是特征学习的主要网络结构,以第一个VFE层为例说明:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
通过对体素格内所有点进行最大池化,得到一个体素格内特征表示 C 。

5.Sparse Tensor Representation
在这里插入图片描述后,特征学习网络的输出即为一个尺寸为 ( 128 × 10 × 400 × 352 ) 的4D稀疏张量。(128代表特征维度,后面是voxel的个数)

2.Convolutional Middle Layers

使用3D卷积对4D tensor进行卷积,并进行reshape到3D tensor。卷积中间层在逐渐扩展的感受野中聚集体素特征,为形状描述添加更多的信息。
在这里插入图片描述对于车辆检测而言,设计的卷积中间层如下:

  Conv3D(128, 64, 3,(2,1,1), (1,1,1))
  Conv3D(64, 64, 3, (1,1,1), (0,1,1))
  Conv3D(64, 64, 3, (2,1,1), (1,1,1))

4D稀疏张量经过上面的卷积中间层之后,输出变为64×2×400×352,经过reshape,变为128×400×352。所以输入RPN的feature map的大小就是128×400×352。

3.Region Proposal Network(RPN)

在这里插入图片描述
如图所示,网路的输入是通过 Convolutional Middle Layers出来的特征图,该网络包含三个全卷积层块(Block),每个块的第一层通过步长为2的卷积将特征图采样为一半,之后是三个步长为1的卷积层,每个卷积层都包含BN层和ReLU操作。将每一个块的输出都上采样到一个固定的尺寸并串联构造高分辨率的特征图。最后,该特征图通过两种2D卷积被输出到期望的学习目标:

  • 概率评分图(Probability Score Map )
  • 回归图(Regression Map)

概率图的2代表rpn的输入即特征图的每个点对应2种anchor,一个是0°的anchor,一个是90°的anchor。因此可推断出后面的14 = 7 (anchor框的七个特征)x 2。

虽然是在类似于BEV的视图上进行卷积,但是输出的回归量却是3D的。7个回归量是(Δx,Δy,Δz,Δl,Δw,Δh,Δθ)。

三、损失函数

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

四、Efficient Implementation

VFE可以并行的处理voxel,具体的方法图下图所示:
在这里插入图片描述

  1. 第一步是初始化一个tensor,储存为 K × T × 7 的feature buffer。K表示一个有存在的非空的体素的最大值,T表示的每个voxel中点的最大值。7就是每一个点编码的特征维度。
  2. 第二步是对于点云中的任意一个点去查找它所在的voxel是否初始化,如果已经初始化了那么就检查是否大于T个点,没有的话就插入进去,否则不要这个点。假如这个voxel没有被初始化,那么久需要初始化并把这个点加入进去。
  3. 建立了input buffer之后呢,采用GPU的并行计算对点级别和voxel级别的VFE计算,作者提到,在VFE中的concate之后,把没有点的特征再次设置为0。最后,使用存储的坐标缓冲区,我们将计算的稀疏体素结构重新组织到密集体素网格。

实验结果

主要针对KITTI数据集中的Car、Pedestrian和Cyclist进行测试,多模型效果对比如下所示:
在这里插入图片描述

总结

论文在kitti验证集上面的行车检测准确度当时非常的高(现在已经被刷下来了)。

通过划分体素格进行随机取点的办法来减少了很大一部分的计算量,但是这样做可能会损失了部分包含待检测物体的信息,(如果点很不凑巧刚好是T-1个不就尴尬了),从kitti测试集的结果来看也是,在行人这种小物体的检测上和在验证集上的检测结果就差别很大。

感觉看下来跟常见的图像检测方法差不多,就是对设定的anchor做概率预测与位置回归进行修正。

参考(感谢)
https://blog.youkuaiyun.com/weixin_40805392/article/details/99549300
https://blog.youkuaiyun.com/AdamShan/article/details/84837211
https://blog.youkuaiyun.com/qq_43269093/article/details/97892839

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值