【PointPillars:工业界中一种三维点云检测对象的快速编码方法】

PointPillars:工业界中一种三维点云检测对象的快速编码方法

前言

在3D点云的目标检测中,一般有以下几种处理:
(1 : 3D卷积。缺点比较明显:计算量较大,导致网络的推理速度较慢。
(2 : 投影到前视图或者鸟瞰图,转化为二维的问题。 虽然时间较快,但是点云的稀疏性让卷积网络效率低,不实用。
(3 : 直接对点云进行特征提取(得益于Point)。像VoxelNet直接对点云进行操作,用体素去容纳一系列的点云数据,提取特征。再用3D卷积去转化张量,用RPN回归最终的对象。
PointPillars就是对VoxelNet的改进,因为三维卷积太过于耗时,所以重新提出了一个适合点云的编码器。学习点云的柱子(pillar)上的特性,从而为对象预测面向3D的框。速度比较快,精度较高。

优势

PointPillars有几个优点。

  1. 通过学习特征,而不是依赖于固定的编码器,点柱可以利用点云所表示的完整信息。
  2. 通过在柱子而不是体素上操作,就不需要手动调整垂直方向的bin。
  3. 支柱是高效的,因为所有的关键操作都可以制定出来作为二维卷积,在GPU上计算非常有效。

算法分析

PointPillars直接以点云为输入,能够预测有方向的3D边框。主要分为三部分:

  1. Pillars Feature Net
  2. Backbone(2D CNN)
  3. Detection Head(SSD)

【PointPillars:工业界中一种三维点云检测对象的快速编码方法】

Pillars Feature Net

论文提出了一个新的概念pillar。我们知道点云中的每个点都可以这样表示:

l = (x, y, z, r). r表示反射率

  1. 作为第一步,点云被离散成x-y平面上的一个均匀间隔的网格,在网格上创建pillar。值得注意的是不需要一个超参数来控制z维度,其实就相当于一个高度不限的体素。

    另外再增加参数增强每个点的特征。

    l θ = ( x , y , z , r , x c , y c , z c , x p , y p ) l_{\theta} = (x,y,z,r,x_{c},y_{c},z_{c},x_{p},y_{p}) lθ​=(x,y,z,r,xc​,yc​,zc​,xp​,yp​)
    c下标表示到柱中所有点的算术平均值的距离,p下标表示距离柱x、y中心的偏移量。增强的激光雷达点l现在是D=9维.

  2. 由于点云是稀疏的,所以对每个样本的非空支柱数(P=H*W)和每个支柱中的点数(N)施加限制,来创建大小为(D,P,N)的张量张量。如柱状体中的数据太多,则进行随机采样,如数据太少,则用0进行填充。

  3. 对张量化的点云提取特征,(即对每个点都运用线性层+BN层+ReLU层),来生成一个(C,P,N)的张量,再对于通道上使用最大池化操作,输出一个(C,P)的张量。

  4. 将张量化为C,H,W)的伪图像。

Backbone(2D CNN)

【PointPillars:工业界中一种三维点云检测对象的快速编码方法】
骨干网络包括两个分支。一个是自上而下的网络,生成分辨率越来越小的特征。第二个反卷积做上采样拼接将不同尺度特征信息融合,最后生成(6C,H/2, W/2)的张量。

Detection Head(SSD)

使用SSD的头执行3D目标检测,通过先验框和真实框的2DIoU来分配标签。

Loss Function

【PointPillars:工业界中一种三维点云检测对象的快速编码方法】
上式为回归损失,其中含gt上标代表真实框,含a上标代表先验框。

分类损失采用Focal loss

L c l s = − α ( 1 − P α ) γ l o g P α L_{cls} = -\alpha(1-P^{\alpha})^{\gamma }logP^{\alpha} Lcls​=−α(1−Pα)γlogPα
其中 α = 0.25 , γ = 2 \alpha = 0.25, \gamma=2 α=0.25,γ=2

还有个方向损失: l d i r l_{dir} ldir​.----在离散方向使用一个softmax分类损失,学习航向角。

.注意:回归损失中虽然有角度的损失,但是不能区分+— π \pi π,也就是识别朝向的问题,所以需要 l d i r l_{dir} ldir​。

故总的损失为:
【PointPillars:工业界中一种三维点云检测对象的快速编码方法】

参考:
PointPillars 学习笔记
三维目标检测论文阅读
PointPillar:利用伪图像高效实现3D目标检测
论文阅读|点云3D目标检测之PointPillars
论文+代码阅读PointPillars

上一篇:SQL去重distinct方法解析


下一篇:如何从MySQL中的字段中仅选择第一个不同的匹配?