PointPillars 学习笔记

《PointPillars: Fast Encoders for Object Detection from PointClouds》 CVPR2019

用于点云目标检测的快速编码器

文章目录

  • 前言
  • 一、Key Points
  • 二、网络架构
    • 1. Pillar Feature Network
    • 2. Backbone
    • 3. DetectionHead
    • 4. 实验细节
    • 5. Loss
  • 三、Fast 的原因
  • 四、总结


前言

首先说应用深度学习在点云上做object detection的两个思路, 一个是3D卷积,VoxelNet是第一个end to end的网络, 后来SECOND对此作了改进, 但是仍然3D卷积的瓶颈依旧明显; 另一个是投影到BEV (Bird’s Eye View)像图像做二维卷积, 第二种方法虽然时间更快, 但是点云的稀疏性让卷积的不实用,效率很低,所就用了 Fast Encoder, 简单来说就是对点云密度比较高的地方进行卷积,速度提升还是很明显的。

一、Key Points

  1. 提出一种新的encoding points的方式: Pillar
  2. fast: 62Hz ,faster version-- 105 Hz, 超过SECOND三倍。但是105Hz这样的运行时间可能会被认为是过度的,因为激光雷达的工作频率通常是20Hz。
  3. 对于模型能达到的速度和真实自动驾驶场景能达到的速度做了一些讨论

二、网络架构

PointPillars 学习笔记_第1张图片

图2.网络概述。该网络的主要组件是支柱特征网络,骨干网和SSD检测头。有关详细信息,请参阅第2节。原始点云被转换为堆叠柱张量和柱索引张量。编码器使用堆叠的柱来学习一组可以分散回到卷积神经网络的2D伪图像的特征。检测头使用骨干的特征来预测物体的3D边界框。注意:这里我们展示了汽车网络的主干尺寸。

1. Pillar Feature Network

对于识别Car而言, 识别范围为 前后左右上下[(0, 70.4), (-40, 40), (-3, 1)], 将点云投影到二维栅格中, 每个Pillar (栅格柱子) 的大小为 0.16*0.16, 可以理解为图像里的一个像素, 那么伪图像的尺寸就是 440x500。 Pillar中的每个点特征D长度9, D=[x, y, z, r, x_c, y_c, z_c, x_p, y_p], 其中r代表intensity/reflection, [x_c, y_c, z_c] 代表一个Pillar中所有点的质心坐标, [ x_p, y_p] 代表质心和Pillar几何中心的偏移。其中c下标表示到支柱中所有点的算术平均值的距离,p下标表示到支柱中心的偏移量。

因为~97% (1 - (6k/9k)/(440x500) ≈ 97%)的Pillar都很稀疏, 所以需要筛选出稠密(dense)的Pillar做卷积, 如上图所示, 选出的 Stacked Pillars的尺度为(D, P, N) 分别代表特征长度D=9, 非空Pillar的个数P=2847(假设),N为每个pillar的采样点数(设定值),N=100(假设),每个柱子中点多于N的进行采样,少于N的进行填充0。这里用了一个简单的PointNet,之后接了一个BN和一个ReLU得到尺度为(C, P, N) 的Tensor, 这里特征C的长度为64,然后经过max操作得到尺寸为(C, P)的Tensor,一旦编码,特征被分散回原来的支柱位置,以创建一个大小(C,H,W)的伪图像, 因为反投影的Pillar个数只有2847, 剩下的将被填充为0。至此,我们就用一个(C,H,W)的tensor完成了点云数据的表达。

2. Backbone

分为2部分

  • top-down network产生空间分辨率逐步降低的feature map
  • second network做upsample和concatenation,精细化feature.

3. DetectionHead

用的ssd,高度z是单独回归的。基于SSD的目标检测头进行bbox回归。

在本文中,我们使用单光探测器(SSD)[18]设置来执行三维目标检测。与SSD类似,我们使用联合上的2D交集(IoU)将先验框与地面真值相匹配[4]。边界框高度和高程不用于匹配;而是给定二维匹配,高度和高程将成为其他回归目标。

4. 实验细节

与预先训练我们的网络不同,所有权重都是按照[8]中的统一分布随机初始化的。编码器网络具有C=64输出功能。除第一个街区的跨步外,车辆和行人/自行车手靠背相同(S=2对于车辆,S=1用于行人/骑自行车者)。两个网络都由三个模块组成:块1(S、4、C)、Block2(2S、6、2C)和Block3(4S、6、4C)。每个块通过以下放大步骤向上采样:Up1(S、S、2C)、Up2(2S、S、2C)和UP3(4S、S、2C)。然后将Up1、Up2和Up3的特征连接在一起,为检测头创建6C特征。

5. Loss

3d box由(x,y,z,w,l,h,θ)确定. 类似于2d box由(x,y,w,h)确定,3d box多了一个z方向的数据,以及一个角度,用以预计3d box的朝向(绕z轴的角度).

loss由3部分组成:

  • 定位loss,衡量3d box画的准不准
  • 分类loss,衡量box内的物体类别判断准不准
  • direction loss.定位loss虽说已经考虑了角度,但是不能区分flipped box.即比如一个3d box内的车,朝着正南和朝着正北走,标出来的3d box都是一样的.

定位loss:

我们使用SECOND [28]中介绍的相同损失函数。 Ground truth boxes and anchors 由(x,y,z,w,l,h,θ)定义。ground truth and anchors 之间的定位回归残差由以下因素定义:
PointPillars 学习笔记_第2张图片

对象分类loss

我们使用focal loss [16],focal loss通过对不同样本的loss赋予不同的权重,该权重是一个与当前样本预测概率相关的值。
系数为(1-p)的变种,从而达到p越小,loss权重越大的目的,即放大hard example的loss,从而使得模型更好地适应难以分类的样本.
在这里插入图片描述
方向loss:

由softmax得到。

由于角度定位损失无法区分flipped boxes,我们在离散化方向上使用softmax分类损失[28],Ldir,这使网络能够学习航向。

作用: 由于localization loss不能区分box的 +/- π, 所以加上direction loss。

总损失
PointPillars 学习笔记_第3张图片
这里提一句,Pointpillar 可以识别朝向,也就是会做是否旋转180°的处理。

三、Fast 的原因

使用了 pillar的方式,一个(x, y) location只有一个pillar, 而不是many voxels, 元素便少了,自然速度就快了。

四、总结

SECOND的loss、data augmentation还是比较经典。虽然速度快但是也有缺点,首先网络的输入只是部分"稠密"的Pillar这必将略微降低识别效果; 另外因为网络中训练不同种类时使用的卷积stride和Anchor的尺寸不一样, 导致多分类的效果不理想。

参考(感谢)
https://zhuanlan.zhihu.com/p/102994173
https://zhuanlan.zhihu.com/p/107975261
https://www.cnblogs.com/sdu20112013/p/12455629.html

你可能感兴趣的:(无人驾驶,计算机视觉)