文章目录[隐藏]
PointPillars: Fast Encoders for Object Detection from Point Clouds 用于点云目标检测的快速编码器
一些网站
论文的github https://github.com/nutonomy/second.pytorch
论文地址:https://arxiv.org/pdf/1812.05784.pdf
一个演示视频 :youtube.com/watch?v=sOLCgRkWlWQ
参考了 https://www.i4k.xyz/article/wjinjie/119962121
PointPillars — 3D point clouds bounding box detection and tracking 作者还有其他系列 挺好的https://becominghuman.ai/pointpillars-3d-point-clouds-bounding-box-detection-and-tracking-pointnet-pointnet-lasernet-67e26116de5a
摘要
论文核心考虑的问题:将点云编码成适合于后面处理(pipeline)的格式的问题。
现行的主要有两种类型的编码器:
固定编码器往往速度快,准确性较低
而从数据中学习的编码器更准确,但速度较慢
因此这篇论文中,作者提出了一种新的编码器PointPillars,它可以让pointnet来训练这种新的点云表达形式垂直柱((pillars)。这种编码特征可以用于任何标准的2D卷积检测架构。同时,作者也提出一种卷积网络
引言
一般来说,雷达产生的图像例如点云通过一系列的流程化操作例如背景分割,随后进行聚类和分类来进行物体的识别。
作者认为二维图像和3D图像的两个重要区别
- 点云是稀疏表示,而图像是稠密的
- 点云是 3D 的,而图像是 2D 的。
因此传统的2D图像卷积方法不能用于3D图像
现有的一些方法比如bird’s view,voxel方法都有一定的局限性,因此作者提出PointPillars:一种在3D中进行目标检测的方法,该方法只需2D卷积层即可实现端到端的学习。PointPillars使用一种新的编码器来学习点云支柱(垂直支柱)上的特征,从而预测面向3D的对象框。这种方法有几个优点。首先,通过学习特性而不是依赖固定编码器,PointPillars可以利用点云表示的全部信息。此外,通过对柱体而不是体素进行操作,无需手动调整垂直方向的分块。最后,支柱是高效的,因为所有关键操作都可以表示为2D卷积,这在GPU上计算起来非常高效。学习功能的另一个好处是,使用不同的点云配置无需手动调整PointPillars。例如,它可以很容易地结合多个激光雷达扫描,甚至雷达点云。
PointPillars网络结构
总体的网络结构如图
输入为点云 其中有三个主要阶段
(1)将点云转换为稀疏伪图像的特征编码器网络;(特征网络)
(2) 二维卷积主干,用于将伪图像处理为高级表示(2D CNN)
(3)其检测并回归3D框。(SSD)
点云到伪图像Pointcloud to Pseudo-Image
第一步,首先尖厉x-y平面上的等间隔间距,创建柱P,|P|=B
将柱内每个点特征维度进行扩充,用xc,yc,zc表示该点到支柱中所有点算术平均点值点的距离,xp,yp表示该点到支柱中心的偏移量
由此,我们得到D(x,y,z,r,xc,yc,zc,xp,yp)为9维的特征向量
由于点云的稀疏性,绝大多数支柱是空的,通过对每个样本的非空柱数(P)和每个柱的点数(N)施加限制来利用这种稀疏性,以创建大小为(D;P;N)的稠密张量。
假设每个样本中有 P 个非空的 pillars,每个 pillar 中有 N 个点云数据,那么这个样本就可以用一个 (D, P, N) 的张量表示。但是,如何保证每个 Pillar 中恰好有 N 个点云数据呢?
如果每个pillar中的点云数据数据超过 N 个,那么我们就随机采样至 N 个;如果每个pillar 中的点云数据数据少于 N 个,少于的部分我们就填充为0;于是,就很容易将点云转换成 (D, P, N) 张量格式的堆积 Pillars。
得到堆积 Pillars 后,作者利用简化版本的 PointNet 对张量化的点云数据进行处理和特征提取。(使用点网的简化版本,其中,对于每个点,应用线性层 linear layer ,然后是BatchNorm和ReLU,以生成(C;P;N)大小的张量。然后在通道上执行max操作,以创建大小为(C;P)的输出张量。)特征提取可以理解为对点云的维度进行处理,原来的点云维度为 D=9 ,处理后的维度为 C , 那么我们就获得了一个 (C, P, N) 的张量。
接着,按照 Pillar 所在维度进行 Max Pooling 操作,即获得了 (C, P) 维度的特征图。
为了获得伪图片特征,作者将 P 转化为(W, H)。因此最终就获得了形如(C, H, W) 的伪图片了。具体过程如下:
这张图要仔细看一看 样本 sample应该是一个样本的所有点云,利用样本的特性对每个点云进行特征提取,最后利用maxpooling归一,整个样本生成伪图像
Backbone主干网络
主干网络使用了和voxelnet类似的主干网络。主干网络有两个子网络构成:
一个自上而下的网络以越来越小的空间分辨率生成特征,另一个网络执行自上而下特征的上采样和串联。
自顶向下主干可以由一系列块(S、L、F)来表征。每个块以步长S运行(相对于原始输入伪图像测量)。自上而下的主干可以用一系列块 Block(S, L, F) 来表征。每个块以步幅 S(相对于原始输入伪图像测量)运行。一个块有 L 个 3x3 2D 卷积层和 F 个输出通道,每个通道后面跟着 BatchNorm 和一个 ReLU。层内的第一个卷积具有步幅 S / S i n S/S_{in} S/Sin 以确保块在收到步幅 S i n S_{in} Sin 的输入后以步幅 S 运行。一个块中的所有后续卷积的步长为 1。
每个自顶向下块的最终特征通过上采样和级联进行组合,步骤如下所示:
- 首先,使用具有 F 个最终特征的转置 2D 卷积对特征进行上采样,Up( S i n S_{in} Sin, S o u t S_{out} Sout, F) 从初始步幅 S i n S_{in} Sin 到最终步幅 S o u t S_{out} Sout(均再次测量原始伪图像)
- 接下来,将 BatchNorm 和 ReLU 应用于上采样的特征。
- 最终输出特征是源自不同步幅的所有特征的串联。
Detection Head探测头
使用简化的SSD来进行三维对象的检测。
与SSD类似,我们使用联合上的2D相交(IoU)将先验框与地面真值来进行训练。
实现的细节
网络
与使用预训练模型来训练我们的网络不同,所有权重都是使用均匀分布随机初始化的,
损失函数
使用和Second相同损失函数。地面真值框和锚由(x;y;z;w;l;h;θ)定义。地面真值和锚之间的定位回归残差定义如下:
由于角度定位损失无法区分翻转的盒子,我们在离散化方向上使用softmax分类损失[28],Ldir,这使网络能够学习航向。
对于目标分类损失,我们使用focal Loss
式中,pa是锚的类概率。我们使用α=0:25和γ=2的原始纸张设置。因此,总损失为:
L = 1
式中,N pos为正锚数量,βloc=2,βcls=1,βdir=0:2。
为了优化损失函数,使用初始学习率为2*10-4的Adam优化器
补充 这张图可以更好地理解
特征编码器(支柱特征网)
将点云转换为稀疏伪图像。首先,在x-y坐标中将点云划分为网格,创建一组柱。云中的每个点是一个4维向量(x、y、z、反射率),将转换为一个9维向量,其中包含以下解释的附加信息:Xc、Yc、Zc=该点在每个维度中所属的柱c的算术平均值的距离。
Xp,Yp=x-y坐标系中点与支柱中心的距离。
因此,一个点现在包含信息D=[x,y,z,r,Xc,Yc,Zc,Xp,Yp]。
从柱到稠密张量(堆叠柱)
由于点云的稀疏性,支柱集大部分是空的,而非空支柱中通常只有很少的点。通过对每个样本的非空柱数(P)和每个柱的点数(N)施加限制,可以利用这种稀疏性来创建大小为(D,P,N)的稠密张量。如果样本或支柱中包含的数据太多,无法拟合此张量,则会随机采样数据。相反,如果样本或支柱的数据太少,无法填充张量,则会应用零填充。请注意,D=[x,y,z,r,Xc,Yc,Zc,Xp,Yp],如前一节所述。
从叠层柱到学习特征,点柱中使用的特征提取管道。
从点云类型的数据中提取特征时,我们都会使用PointNet。
PointNet基本上应用于每个点,一个线性层,后跟BatchNorm和ReLU,以生成高级特征,在本例中为维度(C、P、N)。然后是一个max pool操作,该操作将此(C,P,N)维张量转换为(C,P)维张量。
从学习的特征生成伪图像
生成的(C,P)张量使用每个点的柱索引转换回其原始柱。最初,点被转换成D维向量,现在它包含C维向量,这是从点网获得的特征。
主干网络部分
主干由连续的三维卷积层组成,用于从不同尺度的变换输入中学习特征。RPN的输入是要素网络提供的要素地图。该网络的架构如上图所示。该网络有三个完全卷积层块。每个块的第一层通过步幅大小为2的卷积将特征映射下采样一半,然后是步幅1的卷积序列(×q表示滤波器的q应用)。在每个卷积层之后,应用BN和ReLU操作。然后,我们将每个块的输出向上采样到一个固定的大小,并连接起来以构建高分辨率特征映射。
ConvMD(cin,cout,k,s,p)表示M维卷积算子,其中cin和cout是输入和输出通道的数量,k,s和p分别是对应于内核大小、步幅大小和填充大小的M维向量。当M维的大小相同时,我们使用标量来表示大小,例如k表示k=(k,k,k)。
版权声明:本文为CSDN博主「阮扬才」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_43823175/article/details/121707618
暂无评论