当下流行的激光点云目标检测算法(SECOND、PointPillars、SA-SSD)原理分析对比。

一、SECOND(2018)(单阶段,point-based)

论文:https://www.mdpi.com/1424-8220/18/10/3337
Github:https://github.com/traveller59/second.pytorch

A、网络结构

SECOND 检测器,  主要有这三个核心部分:
(1) a voxelwise feature extractor;体素特征提取器
(2) a sparse convolutional middle layer;稀疏卷积中间层
(3) an RPN;Region Proposal Network,区域生成网络
 
检测器以一个原始点云作为输入,将其转换为体素特征和坐标,并应用两个VFE(体素特征编码)层和一个线性层。 然后,应用稀疏CNN。 最后,用一个RPN生成检测。

当下流行的激光点云目标检测算法(SECOND、PointPillars、SA-SSD)原理分析对比。_第1张图片

1、Point Cloud Grouping

 在这里,我们遵循[14]中描述的简单过程来获得点云数据的体素表示。 我们首先根据体素数的指定限制预先分配缓冲区;然后,w 迭代点云并将点分配给它们相关的体素,并保存体素坐标和每个体素的点数。 我们检查基于h的体素的存在 迭代过程中的灰分表。 如果与点相关的体素还不存在,我们在哈希表中设置相应的值;否则,我们将体素数增加一个。 我的  一旦体素数目达到指定的极限,迭代过程将停止。 最后,我们得到了所有体素,它们的坐标和每个体素的点数,用于实际的体素数。 f 或者在相关类中检测汽车和其他物体,我们根据[[3,1]×[0,70.4]m沿z×y×x轴的地面真相分布来裁剪点云。 为了上帝  在[[3,1]×[[20,20]×m处使用作物点。对于我们的较小模型,我们只使用[[3,1]×[0,52.8]m范围内的点来增加干扰 NCE速度。 裁剪区域需要根据体素大小进行轻微调整,以确保生成的特征映射的大小可以在后续网络中正确地下采样。 为了艾尔 任务,我们使用体素大小为vD=0.4×vH=0.2,vW=0.2m。每个空体素中用于汽车检测的最大点数设置为T=35,这是根据TH的分布选择的  在KITT I数据集中,每个体素的点数;行人和骑自行车者检测的相应最大值设置为T=45,因为行人和骑自行车者相对较小,因此  对于体素特征提取,需要更多的点。

2、Voxelwise Feature Extractor

 我们使用体素特征编码(V FE)层,如[14]所述,提取体素特征。 一个VFE层将相同体素中的所有点作为输入,并使用一个完全连接的网络(FCN)cons  采用线性层、批归一化(批规范)层和校正线性单元(ReLU)层提取点特征。 然后,它使用element wise max池来获得本地ag 每个体素的灰色特征。 最后,它将获得的特征平铺并将这些平铺特征和点状特征连接在一起。 我们使用VFE(cout)来表示一个VFE层,它被转换 均方根将输入特征转化为cout维数输出特征。 类似地,FCN(Cout)表示一个线性匹配规范-ReLU层,它将输入特征转换为cout维输出特征。 作为一个  整个体素特征提取器由几个VFE层和一个FCN层组成。

3、Sparse Convolutional Middle Extractor

Review of Sparse Convolutional Networks

参考文献。 [25]是第一篇引入空间稀疏卷积的论文。 在这种方法中,如果没有相关的输入点,则不计算输出点。 这种方法提供了计算上的好处 基于LiDAR的检测中的TS,因为KITTI中点云的分组步骤将生成5k-8k体素,稀疏度接近0.005。 作为正常稀疏卷积的替代,submanif  旧的卷积[27]限制输出位置是活动的,当且仅当相应的输入位置是活动的。 这避免了产生太多的活动位置,这可能导致d  由于大量的活动点,后续卷积层的速度降低。
 
Sparse Convolution Algorithm
 
让我们首先考虑二维密集卷积算法。 我们使用Wu,v,l,m表示滤波元素,Du,v,l表示图像元素,其中u和v是空间位置指数,l表示inp UT通道和m表示输出通道。 函数P(x,y)生成给定输出位置需要计算的输入位置。 因此,Yx,y,mi的卷积输出  由以下公式给出:
                      
 其中x和y是输出空间索引,uuu0和vv0表示核偏移量u和v坐标。 一种基于矩阵乘法(GEMM)的通用算法(也称为im2col-ba  可以使用SED算法[30])来收集构造矩阵D˜P(x,y),l所需的所有数据,然后执行GEMM本身:
                         
 其中W∗,l,m对应于Wuuu0,vv0,l,m,但以GEMM形式表示。 对于稀疏数据D0i,l和相关输出Y0j,m,直接计算算法可以写如下:
                             当下流行的激光点云目标检测算法(SECOND、PointPillars、SA-SSD)原理分析对比。_第2张图片
 其中P0(J)是获取输入索引I和滤波器偏移量的函数。 下标k是方程(1)中对应于uuu0和vvv0的1D核偏移量,下标icor  响应方程(1)中的u和v)。 基于GEMM的方程(3)的版本由以下公式给出:
                               
 稀疏数据的集合矩阵D˜0P0(J),l仍然包含许多不需要计算的零。 为了解决这个问题,我们不直接将方程(3)转化为方程(4),而是重新考虑  方程(3)如下:
                                  
 其中Rk,j,也称为Rule,是一个矩阵,它指定给核偏移k和输出索引j的输入索引i。 方程(5)中的内和不能通过GEMM计算,所以我们需要t  收集必要的输入来构造矩阵,执行GEMM,然后将数据分散回来。 在实践中,我们可以使用预先构造的数据直接从原始稀疏数据中收集数据 输入输出指标规则矩阵。 这增加了速度。 详细地,我们构造了一个规则矩阵表Rk,i,t=R[k,i,t],其维数为K×NIN2,其中K是核大小(表示为VO  休谟),NIN是输入特征的数量,t是输入/输出指数。 元素R[:,:,0]存储用于聚集的输入索引,元素R[:,1]存储用于散射的输出索引 泰林。 图2的顶部部分显示了我们提出的算法。
 
当下流行的激光点云目标检测算法(SECOND、PointPillars、SA-SSD)原理分析对比。_第3张图片
(稀疏卷积算法如上图所示,GPU规则生成算法如下图所示。 nin表示输入特征的数目,nout表示输出特征的数目。 N是t  他收集了许多特征。 规则是规则矩阵,其中规则[i,:,:]是卷积核中第一核矩阵对应的第i条规则。 有颜色的盒子,除了白色的印迪  具有稀疏数据的Cate点和白色框表示空点。)
 
Rule Generation Algorithm
 
当前实现[31]面临的主要性能挑战与规则生成算法相关。 通常使用基于CPU的哈希表规则生成算法 但这种算法速度慢,需要CPU和GPU之间的数据传输。 规则生成的一个更直接的方法是迭代输入点以找到与每个输入相关的输出  将点并将相应的索引存储到规则中。 在迭代过程中,需要一个表来检查每个输出位置的存在,以决定是否积累数据  全局输出索引计数器。 这是阻碍算法中并行计算使用的最大挑战。
 
在我们的例子中,我们设计了一种基于GPU的规则生成算法(算法1),它在GPU上运行得更快。 图1的底部部分显示了我们提出的算法。 首先,我们收集传感器20  在17个输入索引和相关的空间索引中,而不是输出索引(算法1中的第一个循环)。 在此阶段获得重复的输出位置。 然后我们执行一个uniq  对空间指标数据进行UE并行算法,得到输出指标及其相关的空间指标。 生成与稀疏数据具有相同空间维数的缓冲区fr  在下一步(算法1中的第二个循环)中查找表的先前结果)。 最后,我们对规则进行迭代,并使用存储的空间索引来获得每个输入索引的输出索引  (算法1中的第三个循环)。 表1显示了我们的实现和现有方法之间的性能比较。
 
                                  当下流行的激光点云目标检测算法(SECOND、PointPillars、SA-SSD)原理分析对比。_第4张图片
 
                              当下流行的激光点云目标检测算法(SECOND、PointPillars、SA-SSD)原理分析对比。_第5张图片
( 各种卷积实现的执行速度比较。 稀疏ConvNet是子流形卷积[27]的正式实现。 所有基准都是在GTX1080TiGPU上运行的  来自KITTI数据集的数据)
 
Sparse Convolutional Middle Extractor
 
 我们的中间提取器用于学习有关z轴的信息,并将稀疏的3D数据转换为二维BEV图像。 图3显示了中间提取器的结构。 它由两个阶段组成 稀疏卷积。 每个相位包含几个子流形卷积层和一个正常的稀疏卷积,在z轴上执行下采样。 后,z维度一直下降  将稀疏数据转换为密集特征映射。 然后,将数据简单地重塑为像图像一样的二维数据。
                                  当下流行的激光点云目标检测算法(SECOND、PointPillars、SA-SSD)原理分析对比。_第6张图片
( 我们提出的稀疏中间特征提取器的结构。 黄色框表示稀疏卷积,白色框表示子流形卷积,红色框表示稀疏-  密集层。 图的上部显示了稀疏数据的空间维度)
 

4、Region Proposal Network

       RPN[1]最近开始在许多检测框架中使用。 在本工作中,我们使用单镜头多盒检测器(SSD)样[32]体系结构来构建RPN体系结构。 输入到 RPN由稀疏卷积中间提取器的特征映射组成。 RPN体系结构由三个阶段组成。 每个阶段从一个下采样的卷积层开始,即I 其次是几个卷积层。 在每个卷积层之后,应用批规范和ReLU层。 然后,我们将每个阶段的输出采样到相同大小和COCA的特征映射  将这些特征映射表示为一个特征映射。 最后,将三个1×1卷积应用于类、回归偏移和方向的预测。

5、Anchors and Targets

        由于要检测的对象是近似固定大小的,我们使用基于KITTI训练中所有地面真相的大小和中心位置的方法确定的固定大小的锚 旋转为0度和90度。 对于汽车,我们使用尺寸为w=1.6×l=3.9h=1.56m的锚,以z=1.0m为中心。对于行人,我们使用尺寸为w的锚 =0.6×l=0.8×h=1.73m,对于骑自行车的人来说,锚的尺寸为w=0.6,l=1.76,h=1.73m;两者都以z为中心=0.6m。

        每个锚被分配一个分类目标的一个热向量,一个盒子回归目标的7向量和一个方向分类目标的一个热向量。 不同的班级有不同的thr  用于匹配和非匹配的Eshold。 对于汽车,锚被分配到地面真相对象使用交叉过度联合(IoU)阈值0.6,并被分配到背景(负)I 如果他们的爱我们小于0.45。 在训练过程中,IoUs在0.45到0.6之间的锚被忽略。 对于行人和骑自行车的人,我们使用不匹配阈值为0.35,m值为0.5  初始阈值。

        对于回归目标,我们使用以下框编码函数:

      当下流行的激光点云目标检测算法(SECOND、PointPillars、SA-SSD)原理分析对比。_第7张图片

 其中x、y和z分别是中心坐标;w、l和h分别是宽度、长度和高度;θ是围绕z轴的偏航旋转;下标t、a和g表示编码的val  分别是UE、锚和地面真相;da=p(La)2(WA)2是锚盒底部的对角线。

B、训练相关

1、loss

Sine-Error Loss for Angle Regression
 以往的角度回归方法,包括角点编码,直接编码和向量编码,通常表现出较差的性能。 角预测方法[8]不能确定方向 在一个物体上,不能用于行人检测,对于这个物体,BEV盒子几乎是正方形的。 矢量编码方法[9,19]保留冗余信息,导致检测困难  基于LiDAR的远距离物体。 Voxel Net[14]直接预测弧度偏移,但在0和π弧度之间存在一个对抗性的例子问题,因为这两个角度是共的  响应于同一个框,但当一个被错误识别为另一个时,会产生很大的损失。 我们的体系结构通过引入一个新的角度损失回归来解决这个问题:
                       
其中下标p表示预测值。 这种角度损失方法有两个优点:(1)它解决了0和π方向之间的对抗性例子问题;(2)它是自然的  根据角度偏移函数对IoU进行建模。 为了解决这个问题,即这个损失将具有相反方向的框视为相同的问题,我们在Outp中添加了一个简单的方向分类器 RPN的UT。 此方向分类器使用Softmax损失函数。 我们使用以下方法生成方向分类器目标:如果偏航围绕地面tr的z轴旋转 高于零,结果为正,否则为负。
 
Focal Loss for Classifification
 
我们的网络通常在KITT I点云中生成∼70k锚。 不幸的是,通常只有几个基本真理,每一个真理只产生4-6个积极。 这导致了一个极端  前景类和背景类之间的不平衡。 视网膜网的作者介绍[33]一种有效的单级损失,称为焦损耗,可以解决这一问题,因此,我们使用  我们建筑中的这种损失。 分类损失有以下几种形式:
                                         
其中pt是模型的估计概率和α,γ是焦损耗的参数。 我们在培训过程中使用α=0.25和γ=2。
 
Total Training Loss
 
  结合上面讨论的损失,我们可以得到多任务损失的最终形式如下
                                 
其中Lcls是分类损失,Lreggother是位置和维数的回归损失,Lreggθ是我们的新角度损失,Ldir是方向分类损失。 β1=1.0,β2=2.0,  β3=0.2是我们损失公式的常数系数。 我们使用相对较小的β3值来避免我们的网络难以识别对象的方向的情况。

2、数据增强

Sample Ground Truths from the Database
  我们在训练中遇到的主要问题是地面真相的存在太少,这大大限制了网络的收敛速度和最终性能。 来解决这个问题 莱姆,我们引入了一种数据增强方法。 首先,我们生成了一个数据库,其中包含所有地面真相的标签及其相关的点云数据(3D边界框内的点  来自训练数据集的基本真理。 然后,在训练过程中,我们从这个数据库中随机选择了几个地面真相,并通过concat将它们引入当前的训练点云中 诱惑。 使用这种方法,我们可以大大增加每个点云的地面真相数量,并模拟存在于不同环境中的对象。 为了避免身体上不可能的结果,我们  在采样地面真相后进行碰撞测试,并移除与其他物体碰撞的任何采样物体。
 
Object Noise
 为了考虑噪声,我们采用了VoxelNet[14]中使用的相同方法,其中每个地面真相及其点云被独立和随机地转换,而不是转换所有点cl 具有相同参数的OUD。 具体来说,我们使用了从均匀分布∆θ∈[π/2,π/2]中采样的随机旋转和从高斯分布中采样的随机线性变换  平均值为零,标准差为1.0。
 
Global Rotation and Scaling
我们将全局缩放和旋转应用于整个点云和所有地面真相框。 尺度噪声来自均匀分布[0.95,1.05],[π/4,π/4]用于 整体旋转噪音。
 

3、最优化

利用随机梯度下降(SGD)对所提出的第二检测器进行了训练)。 我们使用了一个Adam优化器运行在GTX1080Ti GPU上,每个小型舱总共有三点云。 所有模特都是 训练160个历元(200K迭代)。 初始学习率为0.0002,指数衰减因子为0.8,每15个时代衰减一次。 衰变重量为0.0001,β1值为0.9和 β2值为0.999。 用单个GTX1080TiGPU训练大型汽车检测网络需要19h,只需要9h就可以训练较小的模型。

4、Network Details

 我们建议使用两个网络:大网络和小网络。 位于摄像机视野外的点需要移除。

 对于汽车检测,第二层使用两个VFE层,即大网络的VFE(32)和VFE(128),小网络的VFE(32)和VFE(64),遵循线性(128)层。 因此,一角钱 大网络的输出稀疏张量为128×10×400×352,小网络为128×10、320×264。 然后,我们使用两阶段稀疏CNN进行特征提取和二值化 关于还原,如图3所示。 每个卷积层遵循批处理范数层和ReLU层。 所有稀疏卷积层都有64输出特征映射,内核大小为(3,1,1)内核  大小和步幅(2,1,1)。 中间块的输出尺寸为64×2×400×352为大网络。 一旦输出被重塑到128×400×352,RPN网络ca  应用。 图4显示了RPN的体系结构。 我们使用Conv2D(cout,k,s)表示Conv2D-舱口规范-ReLU层和DeConv2D(cout,k,s)表示DeConv2D-舱口规范-ReLU层,wh  其中cout是输出通道的数目,k是内核大小,s是步长。 因为所有层在所有维度上都有相同的大小,所以我们使用k和s的标量值。所有Conv2D层ha  有相同的填充,所有的DeConv2D层都有零填充。 在RPN的第一阶段,应用了三个Conv2D(128,3,1(2)层。 然后,五个Conv2D(128,3,1(2)层和五个Conv2D(256  分别在第二和第三阶段应用3、1(2)层。 在每个阶段,s只=第一卷积层的2;否则,s=1。 我们应用一个单一的DeConv2D(128,3,s)层f  或者每个阶段的最后一个卷积,三个阶段的s=1、2和4,依次进行。 对于行人和骑车人的检测,与汽车检测相比,唯一的区别是条纹  在RPN中,第一卷积层的De为1,而不是2。

                            当下流行的激光点云目标检测算法(SECOND、PointPillars、SA-SSD)原理分析对比。_第8张图片

(详细的RPN结构。 蓝色框表示卷积层,紫色框表示级联的层,天空蓝色框表示跨步-2下采样卷积层,和  棕色盒表示转置卷积层。)

 

 

二、PointPillars(2019,pixel-based,2D卷积)

论文:https://arxiv.org/abs/1812.05784

Github: https://github.com/nutonomy/second.pytorch

A、网络结构

当下流行的激光点云目标检测算法(SECOND、PointPillars、SA-SSD)原理分析对比。_第9张图片

(图2:该网络的主要组成部分是Pillar Featrue Net、Backbone和SSD检测头。网络首先将原始点云转换为堆叠柱张量和PIL 拉尔指数张量。然后用编码器使用堆叠的支柱来学习一组特征,这些特征可以分散到卷积神经网络的2D伪图像上。通过Backbone进一步提取特征。最后将特征输入SSD检测头,预测对象的三维检测框。)

 Point-Pillars接受点云作为输入,并估计面向汽车、行人和骑自行车的3D盒。 它由三个主要阶段组成(图2):(1)转换的特征编码器网络  稀疏伪图像的点云;(2)将伪图像处理为高级表示的二维卷积骨干;(3)检测和回归3D检测框的检测头SSD。

1、Pointcloud to Pseudo-Image

为了应用二维卷积结构,我们首先将点云转换为伪图像

我们用 I 表示点云中的一个点,坐标为x,y,z和反射率r。作为第一步,点云被离散为x-y平面上均匀间隔的网格,形成一组点云柱P:|P|=B。 请注意,不需要超参数来控制z维中的绑定。 然后用xc、yc、zc、xp和yp对每个支柱中的点进行增强,其中c下标表示与支柱中所有点的算术平均值的距离,p下标表示与支柱x,y中心的偏移量。 增强激光雷达点 l 现在是D=9维

 由于点云的稀疏性,这组柱子大多是空的,而非空柱一般都有很少的点。 例如,从HDL-64E Velodyne激光雷达中回收的点云(收录在KITTI数据集中),每0.162平方米,有6k-9k非空柱的稀疏度达到97%。 这种稀疏性是通过对每个样本(P)的非空柱数每个柱(N)的点数施加限制来利用的,以创建一个密集的尺寸张量(D,P,N)。 如果一个样本或支柱持有太多的数据来拟合这个张量,则数据被随机抽样。 相反,如果样本或支柱的数据太少,无法填充张量,则应用零填充。

当下流行的激光点云目标检测算法(SECOND、PointPillars、SA-SSD)原理分析对比。_第10张图片

(图3:定性分析KITTI结果。 我们展示了激光雷达点云(顶部)的鸟瞰图,以及投影到图像中的三维包围框,以便更清晰地可视化。 注意我们的方法只使用激光雷达。 我们展示了汽车(橙色)、自行车(红色)和行人(蓝色)的预测箱。 地面真相框显示为灰色。盒子的方向是用一条线连接底部中心到盒子的前面)

当下流行的激光点云目标检测算法(SECOND、PointPillars、SA-SSD)原理分析对比。_第11张图片

( 图4:KITTI的失败案例。 与图3相同的可视化设置,但侧重于几种常见的故障模式)

 接下来,我们使用PointNet的简化版本。其中,对于每个点,一个线性层被应用,然后是Batch-Norm[10]ReLU[19]来生成一个(C,P,N)大小的张量。 这之后是最大值  在通道上操作以创建大小的输出张量(C,P)。 请注意,线性层可以表示为跨越张量的1x1卷积,从而产生非常有效的计算。

 一旦编码,这些特征就会分散到原始的支柱位置,以创建一个大小为(C,H,W)的伪图像,其中H和W表示画布的高度和宽度。

2.、Backbone

 我们使用与[31]相似的骨干,结构如图2所示。 主干网有两个子网:一个自顶向下的网络,以越来越小的空间分辨率和a产生特征;第二个网络,执行自上而下功能的上采样和级联。 自顶向下的骨干可以用一系列的块块(S,L,F)来表征。 每个块工作在步长S(相对于原始输入伪图像测量)。 一个块有L 3x3 2D卷积层与F输出通道,每个跟随BatchNorm和一个ReLU。该层内的第一个卷积具有跨步\frac{S}{sin},以确保块在接收到跨步Sin的输入BLOB后在跨步S上工作。 块中的所有后续卷积都有步幅1。

 每个自上而下的块的最终特征通过上采样和级联组合如下。 首先,特征被放大,从最初的步长到最后的步长(Sin,Sout,FideSout(两者都再次测量WRT。 原始伪图像)使用带F最终特征的转置2D卷积。 接下来,将BatchNorm和ReLU应用于upsamped特性。 最终输出特征是来自不同步幅的所有特性的级联。

3、Detection Head

在本文中,我们使用SSD[18]设置来执行三维目标检测。 类似于SSD,我们使用2D交叉在联合(IoU)[4]上匹配先验框到地面真相。 球箱高度和高程不用于匹配;相反,给定2D匹配,高度和高程成为额外的回归目标。

B、训练方法

 在这一部分中,我们描述了我们的网络参数和我们优化的损失函数。

1、Network

 不是预先训练我们的网络,所有的权重都是随机初始化的,使用均匀的分布,就像在[8]中一样。

 编码器网络具有C=64输出特性。  除了第一个街区的步幅外,汽车和行人/骑自行车的骨干是相同的( 汽车的S=2,行人/骑自行车的S=1)。 这两个网络都由三个块组成,Block1(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特征。

2、loss

我们使用SECOND[28]中引入的相同的损失函数。 地面真值框和锚由(x,y,z,w,l,h,θ)定义。 地面真相与锚a之间的定位回归残差重新定义:

当下流行的激光点云目标检测算法(SECOND、PointPillars、SA-SSD)原理分析对比。_第12张图片

其中x^{gt}x^{a}分别代表地面真相和锚盒和。 总体定位损失为:

 由于角度定位损失不能区分翻转框,我们在离散化方向[28]Ldir上使用Softmax分类损失,使网络能够学习航向。

 对于物体分类损失,我们使用焦点损失[16]:

 其中pa是锚的类概率。 我们使用α=0.25和γ2的原始纸张设置。 因此总损失为:

其中Npos是正锚和βloc的数量=2,βcls=1,和βdir0.2。

为了优化损失函数,我们使用初始学习速率为2∗10^{^{-4}}, 每15次将学习速率衰减0.8倍,并训练160次。 我们使用2个单位的批处理大小作为验证集,4个单位作为我们的测试提交。

 

 

三、SA-SSD(2020)(单阶段,结合二阶段特征提取的优势)

https://blog.csdn.net/a_123456598/article/details/107143972

 

 

 

你可能感兴趣的:(深度学习)