Sparse-to-dense 3D Object Detector for Point Cloud(KITTI,Tencent Youtu,港中文,2019.7.22)

Sparse-to-dense 3D Object Detector for Point Cloud(KITTI,Tencent Youtu,港中文,2019.7.22)

是基于点云的二阶段检测网络。KITTI上性能第一,10FPS

目前主流的点云检测网络可以分为3类,Mutil_view,voxel,point-based,

Mutil_view:涉及到如何融合多元信息的问题,无论是将点云投影到3D(MV3D)还是直接处理融合的特征(AVOD), 都有问题:对行人等小目标不work

Voxel:体素化网络(voxelnet),不可避免的有信息丢失问题,削弱了局部信息的质量

Point_based:(PointRCNN)性能更好,但是感受野不可控,计算量大


论文贡献:

  1. 提出基于球形的anchor,不预测朝向,减少计算量的同时提高了召回率。
  2. 提出pointspool layer,融合voxel的方法将点云的稀疏特征转化为方便CNN处理的密集特征。
  3. 提出扩增的Iou预测分支,在NMS时以预测的IOU得分乘以分类得分得到的值作为NMS标准,而不只是分类的得分
  4. 目前主流方法的集大成者,在区域提议阶段使用point-based结构,在特征处理时(pointspool layer)使用voxelnet的VFE结构。

网络结构:

在这里插入图片描述
三部分:

1. 区域提议模块(Proposal Generation Module,PGM)

2. 提议特征生成(Proposal Feature Generation)

3. 目标框预测(Box Prediction Network)

区域提议模块(PGM):

球形anchor:

三维目标朝向可能是任何方向,因此采用球形anchor来给每个点分配anchor,对不同目标采用特定的球形半径。每个球形anchor对应一个预设好尺寸的参考目标框,用于提议生成。由于不预设参考框的朝向而是直接预测,球形锚的数量与预先定义的参考框可能方向的数量不成正比,使得锚的数量减少约50%。

为进一步减少anchor数目,使用3维语义分割网络来得到点的类别得分语义特征。以anchor中心点的得分作为该anchor的得分,将anchor投影到BEV中计算IOU,然后进行NMS操作,这样anchor的数目减少到了500个左右。

提议生成网络:

其实就是pointnet

网络输入:归一化的anchor坐标(x,y,z)(对anchor内的每一个点而言)和语义特征

输出:分类得分,回归偏移,朝向

语义分割网络和point net如图:
在这里插入图片描述
得到中心点坐偏移,加上原来的坐标和预设的anchor尺寸,得到准确的提议框。朝向信息同voxelnet,角度等分为12份

最后通过分类得分和BEV IOU对anchor做nms,得到300/100个左右的提议框用用于train/tets

IOU 计算:球形anchor不好分配正负样本,因此计算点云数目的交并比而不是面积交并比

提议特征生成:

目标:为每个提议根据语义特征和坐标信息,生成特征向量

最简单的方法就是,对每个提议直接用pointnet++处理得到特征向量。但是速度慢。本文使用pointspool(即voxel layer):

  1. 随机选择提议框内的N个点,取归一化坐标(减去中心点坐标,然后旋转!)和语义特征作为输入
  2. 对proposal做体素分割,然后使用VFE layer对每个体素做特征提取,最后送入目标框回归层

相比原来的VFE layer,pointspool层可以传播特征,使得端到端的训练成为可能。pointspool层相比于point net++,基本维持了精度不变,速度大幅提升
在这里插入图片描述

目标框预测(Box Prediction Network):

有两个分支:目标框估计分支和IOU估计分支

目标框估计分支:

两个FC层做特征提取,还有两个FC层分别做分类和回归。直接回归尺寸(tl,tw,th)和偏移(tx,ty,tz)。朝向预测与voxelnet相同

IOU预测分支:

预测目标框和GT之间的IOU,然后将IOU乘以分类得分,作为NMS的指标。精度提升很高:
在这里插入图片描述

损失函数

分为两部分:提议生成损失loss prop 和目标框预测损失loss box

loss prop:

C:\Users\Mr.Duke\AppData\Roaming\Typora\typora-user-images\1569753236246.png
其中,定位损失L_loc和朝向损失L_ang:
在这里插入图片描述
在这里插入图片描述

loss box:

除了与loss prop 相同的部分外,多了两项:3D IoU loss 和 corner loss

  • 3D IoU loss:把提议和对应GT框的IOU作为GT,使用smooth L1

  • Corner loss:计算8个角点与对应GT框的距离:

在这里插入图片描述

实验结果:

STD的精度是目前最高,对比之前的最强模型UberATG-MMF,在hard难度下的精度提升很高。

不过仔细观察可以发现,在行人检测任务中STD的性能与F-pointnet和AVOD-FPN没有明显差距,不如car和cyclist任务中的优势明显,可见行人检测是3D立体检测任务中最难的地方。

论文中说对小目标点云更加稀疏,相比RGB检出难度更大

在这里插入图片描述

消融实验:

  1. 首先是球形anchor相对矩形anchor的优越性:

    在这里插入图片描述

    没有朝向,所以anchor数量减少,计算量减少,同时尽可能多的覆盖了ground truth的 区域(感受野大),召回率高

  2. 特征向量的有效性:

    语义特征和归一化的坐标作为特征,效果最好:

在这里插入图片描述

  1. IOU预测分支的有效性:

    在NMS,soft-nms和3D IOU引导的NMS三者的比较中,3D IOU引导的NMS效果最好:

    在这里插入图片描述

    此外还将IOU直接作为NMS的标准做了实验,效果不如结合了分类得分和IOU的NMS:
    在这里插入图片描述

推理时间:

80ms,在所有point-based 和 multi-view 方法中是最快的(没有提到voxel,应该还是voxel方法最快)

其中point net++(backbone) 用了54ms,提议生成模块(pointnet,nms)用了10ms,pointspool layer用了6ms,二阶段的两个分支用了10ms。

个人观点:

由推理时间可见,提出的pointspool layer非常之高效,应该是使用了体素网络的VFE层的原因。

此外,backbone太重,说明在点云检测任务中,目前没有一个较轻且足够高效的网络,类似于二维检测任务中的resnet,毕竟3D检测不如二维检测成熟,这也是下一步需要努力改进的方向:即 如何改进STD的backbone使得速度进一步提升?

考虑将分类得分作为标准的NMS和将IOU作为标准的NMS:

在这里插入图片描述
在这里插入图片描述
两个标准并没有直接关联,但事实上性能是差不多的??说明两者的分布非常相近,那么把IOU 乘以分类得分作为标准,得到的提升应该也不会太大,事实确实如此:
在这里插入图片描述
(又或者,本来精度逼近90,由于边际效应,想要大幅提升已经基本不可能了?)

欢迎交流!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值