【3D 目标检测】PointPillars 论文和代码解析

date
Dec 23, 2021
Last edited time
Mar 27, 2023 09:03 AM
status
Published
slug
PointPillars论文和代码解析
tags
DL
CV
3D
summary
转载
type
Post
origin
Field
Plat
【3D目标检测】PointPillars论文和代码解析
前面的相关文章中,我们简单解析了自2017年来相关的 3D视觉/点云 算法。 本文要解析的模型叫做PointPillars,是2019年出自工业界的一篇Paper。 该模型最主要的特点是检测 速度和精度的平衡。该模型的平均检测速度达到了62Hz,最快速度达到了105Hz,确实遥遥领先了其他的模型。这里我们引入CIA-SSD模型中的 精度-速度图 ,具体对比如下所示。 可以看出,截止CIA-SSD论文发表前,PointPillars的检测速度都是遥遥领先的,而且精度也不低。 现有的一些研究喜欢将 不规则、稀疏 的点云数据按照以下两种方式进行处理,然后引入RPN层进行3D Bbox Proposal,这两种方法为: (1)将点云数据划纳入一个个 体素(Voxel)中,构成规则的、密集分布的 体素集。 常见的有VoxelNet和SECOND,这在之前的文章中已经解析过了; (2)从 俯视角度将点云数据进行处理,获得一个个 伪图片 的数据。常见的模型有MV3D和AVOD,这也说过了。 本文采用了一种不同于上述两种思路的点云建模方法。从模型的名称PointPillars可以看出,该方法将Point转化成一个个的Pillar(柱体),从而构成了 伪图片 的数据。 然后对伪图片数据进行BBox Proposal就很简单了,作者采用了SSD的网络结构进行了Proposal。 本文的论文地址为: 代码地址为: 前面说到本文的一大亮点是将点云划分为一个个的Pillar,从而构成了 伪图片 的数据。 如何构成这个伪图片呢?作者在论文中是给出了这样的图,如下。 具体实现步骤如下: 按照点云数据所在的X,Y轴(不考虑Z轴)将点云数据划分为 一个个的网格,凡是落入到一个网格的点云数据被视为其处在 一个pillar 里,或者理解为它们构成了一个Pillar。 每个点云用一个 维的向量表示,分别为 。其中 为该点云的真实坐标信息(三维)和反射强度; 为该点云所处Pillar中所有点的几何中心; 为 , ,反应了点与几何中心的 相对位置 。 假设每个样本中有 个非空的pillars,每个pillar中有
【3D目标检测】PointPillars论文和代码解析

1 前言

前面的相关文章中,我们简单解析了自 2017 年来相关的 3D 视觉 / 点云算法。
本文要解析的模型叫做 PointPillars,是 2019 年出自工业界的一篇 Paper。
该模型最主要的特点是检测速度和精度的平衡。该模型的平均检测速度达到了 62Hz,最快速度达到了 105Hz,确实遥遥领先了其他的模型。这里我们引入 CIA-SSD 模型中的精度 - 速度图,具体对比如下所示。
notion image
可以看出,截止 CIA-SSD 论文发表前,PointPillars 的检测速度都是遥遥领先的,而且精度也不低。
现有的一些研究喜欢将不规则、稀疏的点云数据按照以下两种方式进行处理,然后引入 RPN 层进行 3D Bbox Proposal,这两种方法为:
(1)将点云数据划纳入一个个体素(Voxel)中,构成规则的、密集分布的体素集。常见的有 VoxelNet 和 SECOND,这在之前的文章中已经解析过了;
(2)从俯视角度将点云数据进行处理,获得一个个伪图片的数据。常见的模型有 MV3D 和 AVOD,这也说过了。
本文采用了一种不同于上述两种思路的点云建模方法。从模型的名称 PointPillars 可以看出,该方法将 Point 转化成一个个的 Pillar(柱体),从而构成了伪图片的数据。
然后对伪图片数据进行 BBox Proposal 就很简单了,作者采用了 SSD 的网络结构进行了 Proposal。
本文的论文地址为:
代码地址为:

2 数据处理和网络结构

前面说到本文的一大亮点是将点云划分为一个个的 Pillar,从而构成了伪图片的数据。
如何构成这个伪图片呢?作者在论文中是给出了这样的图,如下。
notion image
具体实现步骤如下:
按照点云数据所在的 X,Y 轴(不考虑 Z 轴)将点云数据划分为一个个的网格,凡是落入到一个网格的点云数据被视为其处在一个 pillar 里,或者理解为它们构成了一个 Pillar。
每个点云用一个 维的向量表示,分别为 。其中 为该点云的真实坐标信息(三维)和反射强度; 为该点云所处 Pillar 中所有点的几何中心; ,反应了点与几何中心的相对位置。假设每个样本中有 个非空的 pillars,每个 pillar 中有 个点云数据,那么这个样本就可以用一个 张量表示。那么可能就有人问了,怎么保证每个 pillar 中有 个点云数据呢?如果每个 pillar 中的点云数据数据超过 个,那么我们就随机采样至 个;如果每个 pillar 中的点云数据数据少于 个,少于的部分我们就填充为 0;
这样的话,作者很容易就实现了点云数据的张量化,具体过程如下。
notion image
实现张量化后,作者利用简化版本的 PointNet 对张量化的点云数据进行处理和特征提取
特征提取可以理解为对点云的维度进行处理,原来的点云维度为 , 处理后的维度为 , 那么我们就获得了一个 的张量。接着,我们按照 Pillar 所在维度进行 Max Pooling 操作,即获得了 维度的特征图。为了获得伪图片特征,作者将 转化为 ,即 。那么我们就获得了形如 的伪图片了。具体过程如下:
notion image
至此,有关 PointPillars 中的点云数据的伪图片化就结束了。接下来我们简单聊聊 PointPillars 的网络结构,具体如下:
notion image
伪图片作者 2D CNN 的输入,用来进一步提取图片特征。
从图中可以看出,该 2D CNN 采用了两个网络。其中一个网络不断缩小特征图的分辨率,同时提升特征图的维度,因此获得了三个不同分辨率的特征图。
另一个网络对三个特征图进行上采样至相同大小,然后进行 concatenation。
之所以选择这样架构,是因为不同分辨率的特征图负责不同大小物体的检测。比如分辨率大的特征图往往感受野较小,适合捕捉小物体(在 KITTI 中就是行人)。
至此,PointPillars 的网络结构就讲解完毕了,很简单有木有?

3 损失函数

PointPillars 的损失函数也是一样的简单哈。作者采用了 SECOND 中类似的损失函数,每个 3D BBox 用一个 7 维的向量表示,分别为 。其中 为中心, 为尺寸数据, 为方向角。
那么检测框回归任务中要学习的参数为这 7 个变量的偏移量
作者采用了 Smooth L1 损失函数进行训练
和 SECOND 中相同,为了避免方向判别错误,作者引入了个 Softmax 损失学习物体的方向。该损失记做
有关分类损失,作者仍然采用了 Focal Loss,定义如下:
总函数定义如下:
至此,有关 PointPillars 的初步解析就完成了。

4 总结

PointPillars 是一款能够平衡检测速度和检测精度的 3D 检测模型。最近我也正在看这个模型的代码,上手玩玩这个模型,希望最后的结果能够惊艳到我(微笑)。如果文章解析部分有理解不到位的地方,欢迎各位批评指正!
 

© Lazurite 2021 - 2024