【3D目标检测】VoxelNet: End-to-End Learning for Point Cloud Based 3D Object Detection论文综述(2017)

1、 为什么要做这个研究(理论走向和目前缺陷) ?
这时的基于3D CNN来做的3D目标检测体素化之后全都是手工设计特征表达,即体素网格中的点一般选取最高点z值、网格中数目等作为该体素网格表达,手工设计的特征表达往往有各种局限,没办法发挥数据本身的潜力。
2、 他们怎么做这个研究 (方法,尤其是与之前不同之处) ?
VoxelNet是第一个采用学习的方式(pointnet)来进行体素网格中特征表达的网络,有效提升了每个体素网格中的特征表现力。实现过程中还有一些针对稀疏点云数据的trick,比如采用hash实现点与网格的对应,但是没有点的体素网格(占比90%)不在hash中初始化,可有效减少内存占用。
3、 发现了什么(总结结果,补充和理论的关系)?
总体感觉没啥新东西,但是这种设计思路很值得借鉴。

摘要:提出一个单阶段端到端3D目标检测网络,即VoxelNet。避免了手工设计特征表示,即采用Pointnet(本文中称之为VFE层,本质就是PointNet.)处理每个点云网格里的点来提取特征,而以前是手工设计每个点云网格里的特征表示,比如取每个网格里的点的最高点、网格里点的数目等等。

1、 引言
根据点云无序特点,为了将其变得如图像一样有序,便于使用CNN或3D CNN,以前很多人将点云投影在鸟瞰图/前视图视角,而每个网格中的元素值是手工设计的,手工设计的特征表示往往具有信息瓶颈。本文最大亮点就是把手工设计这一步改为机器自己学习,即采用PointNet提取网格元素值。
1.1、 相关研究(略)
1.2、 本文贡献

1) 提出的VoxelNet可以不用手工设计点云网格中的特征设计,而采用pointnet自学习的方式提高特征表现力。
2) 展示了一种VoxelNet的高效实现,就是在寻找点云与网格对应关系时采用hash方法。另外所谓的高效并行处理就是把没有点的网格置零来参加并行计算。这好像并不能节约计算量,0也要参加计算啊!

2、 VoxelNet
VoxelNet由三部分组成1)特征学习网络2)中间卷积层3)RPN网络。
【3D目标检测】VoxelNet: End-to-End Learning for Point Cloud Based 3D Object Detection论文综述(2017)

2.1.1 特征学习层
体素划分:将点云划分成3D体素网格
分组:每个网格中的点为一组。
随机采样:每个网格中的点最多取T个,以节约计算量。
堆叠体素特征编码:如上图所示,即在每个体素网格中多次采用PointNet。

每个网格中的点原始表示为一个7维向量:
【3D目标检测】VoxelNet: End-to-End Learning for Point Cloud Based 3D Object Detection论文综述(2017)

其中r为反射率,v表示体素网格里的点的均值。

大概90%左右的体素网格中是没有的点的,hash时不考虑这些空网格,可以大大减少内存占用,这是本文所指的对稀疏点云高效处理的关键一步。

2.1.2 中间卷积层
就是普通的3D卷积。

2.1.3 RPN网络
输入给RPN网络的是中间卷积层提供的特征图,RPN网络架构图如下图所示:

【3D目标检测】VoxelNet: End-to-End Learning for Point Cloud Based 3D Object Detection论文综述(2017)

2.2 损失函数
要回归的3Dbox用如下7维向量表示:
【3D目标检测】VoxelNet: End-to-End Learning for Point Cloud Based 3D Object Detection论文综述(2017)

分别代表中心点坐标,长宽高,以及航向角(沿Z轴的旋转角)。
还是基于Anchor那一套做的,回归目标:
【3D目标检测】VoxelNet: End-to-End Learning for Point Cloud Based 3D Object Detection论文综述(2017)

损失函数:
【3D目标检测】VoxelNet: End-to-End Learning for Point Cloud Based 3D Object Detection论文综述(2017)

2.3 高效实现
主要做了如下几点处理:
1) 由于有些网格中的点很多,故每个网格最多只随机取T=35个点参与pointnet计算。
2) 点需要利用hash表找到自己对应的网格。由于很多90%的网格中没点,这些网格是不录入hash表中的,大大节约内存占用。
3) 由于后面还是要用到3D CNN,而3D CNN只支持密集卷积才能并行计算,故那些没有点的网格用0来填充。

3 训练细节
3.1 网络细节

车辆检测:选取点云(z, x, y)范围[−3, 1] × [−40, 40] × [0, 70.4],提升网格大小长宽高是0.4m,0.2m和0.2m,只用了一个anchor,长宽高分别为3.9m,1.6m和1.56m. iou>0.6为正例anchor,<0.45为负例anchor,中间的忽略。
行人和自行车检测:选取点云(z, x, y)范围[−3, 1] × [−20, 40] × [0, 48],沿用车辆检测所分的体素网格,只用了一个anchor,行人长宽高分别为0.8m,0.6m和1.73m。自行车anchor长宽高1.76m, 0.6m和1.73m. iou>0.5为正例anchor, <0.35为负例anchor,中间的忽略。

3.2 数据增强
1)gt 3D box里的点随机偏移一定距离以及沿着Z轴旋转一定角度。
2)对GT box以及点云中所有的点进行进行随机缩放,缩放比例[0.95, 1.05],主要是为提高模型对不同尺度目标的鲁棒性。

4 实验
将kitti的训练集7481个样本分出3769个样本作为验证集。
还提出一个手工设计每个体素网格中特征表达(类似MV3D特征表达的方式)的模型作为baseline,并且用普通的卷积取代VFE层。

4.1 效果
在kitti验证集效果
【3D目标检测】VoxelNet: End-to-End Learning for Point Cloud Based 3D Object Detection论文综述(2017)

在kitti测试集效果:

【3D目标检测】VoxelNet: End-to-End Learning for Point Cloud Based 3D Object Detection论文综述(2017)

5 结论
VoxelNet是第一个采用不采用手工设计的特征表达处理体素网格中点云数据的3D目标检测网络。