[0001]
本发明属于计算机视觉领域下的3d点云分割领域,更具体地,涉及一种基于查找表加速点云分割的方法。
背景技术:[0002]
在无人驾驶系统中,根据获取到的点云数据完成实时的分割,从而形成实时的决策是至关重要的。在过去几年中,关于如何在点云分割网络上完成模型压缩和加速模型推断取得了许多进展。比如假定分割网络中的各层网络参数彼此独立,利用控制变量的方法,探究某一层网络参数的设置对整体分割网络的性能影响,从而修剪分割网络中不重要的连接,减少网络层数。同时,将网络参数进行量化处理,将网络参数从浮点数转化为整型数,从而快速完成深度神经网络中卷积层,池化层,全连接层的运算。该类方法通过减少网络参数数量和提升网络运算速度来加快点云分割网络的分割过程。由于该方法对分割网络进行了修剪,减少了网络参数并且损失了网络参数的精度,该方法对网络性能以及分割准确率会有较大影响。
技术实现要素:[0003]
本发明为克服上述现有技术中的至少一个缺陷,提供一种基于查找表加速点云分割的方法,利用查找表提升点云网络分割的效率,大幅度减少点云分割花费的时间。
[0004]
为解决上述技术问题,本发明采用的技术方案是:一种基于查找表加速点云分割的方法,包括以下步骤:
[0005]
s1.点云数据归一化处理,得到尺寸归一化的点云;
[0006]
s2.搭建并训练点云分割网络pointnet,点云分割问题可以看作是对点云中每个点的分类问题;其中,网络的输入为n
×
3的点云数据,n为点云中包含的点的数量,每个点有三维坐标进行表示。网络输出为n
×
k,k为点云中每个点的分类标签;训练完毕后保存网络参数;
[0007]
s3.建立特征查找表;
[0008]
s4.对pointnet_seg_basic_cls部分进行微调,进一步提升分割网络的分割准确率;
[0009]
s5.对点云进行快速分割,通过特征查找表,获取点云中每个点的特征并将每个点的特征输入到微调后的pointnet_seg_basic_cls网络中获取该点的分类结果;综合每个点的分类情况,最后得到点云的分割结果。
[0010]
进一步的,所述的步骤s1具体包括:
[0011]
s11.利用重心平移实现点云平移归一化,首先依据公式计算点云的重心,然后将点云的每个点都跟随着重心移动,每个点平移后的坐标为p'
i
=p
i-p
center
;
[0012]
s12.利用主成分分析方法实现点云旋转归一化;
[0013]
s13.利用轴对齐包围盒实现点云尺寸归一化。
[0014]
进一步的,所述的步骤s12具体包括:
[0015]
s121.计算点云的3
×
3协方差矩阵,利用特征分解求解三个特征值,从大到小排列为λ1,λ2,λ3,并将对应的特征向量e1,e2,e3构成旋转矩阵r=(e1,e2,e3);
[0016]
s122.将点云的每个点投影到由e1,e2,e3构成的空间坐标系中,对点云的每个点进行投影操作为p
new
=r-1
p
i
=r
t
p
i
。
[0017]
进一步的,所述的步骤s13具体包括:
[0018]
s131.找到点云在x,y和z方向上最小和最大的两个点,分别是p
min
(x
min
,y
min
,z
min
)和p
max
(x
max
,y
max
,z
max
),用最大点减去最小的点得到的三个长度分量分别作为轴对齐包围盒的长宽高;
[0019]
s132.将点云每个点的三个分量分别除以包围盒的长宽高,得到尺寸归一化的点云,使点云的坐标都分布在[-1,1]区间内。
[0020]
进一步的,所述的步骤s2具体包括:
[0021]
s21.去掉pointnet分割网络point_seg中的两个t-net,仅保留最简单的pointnet_seg_basic网络结构;因为在点云归一化中提前将点云做了主成分分析对点云进行旋转归一化,点云表示具有旋转不变性,因此在点云分割网络中不再需要t-net结构,所以使用结构简单的pointnet_seg_basic作为点云分割网络,好处是节省计算量;
[0022]
s22.利用训练集训练pointnet_seg_basic网络,并且保存最好分割准确率的网络参数。
[0023]
进一步的,所述的步骤s22中,将网络参数分为两个部分,一是对点云每个点进行特征提取的参数记作pointnet_seg_basic_features_parameters,二是对每个点的特征进行分类的参数,记作pointnet_seg_basic_cls_parameters。
[0024]
进一步的,所述的步骤s3具体包括:
[0025]
s31.点云经过尺寸归一化后其输入将被固定在空间v中,v=[-1,1]3;将v划分为s3个不相交的相互独立的体素,每个体素的长度为δ=2/s,体积为8/s3;其中s是一个变量,可以根据需求选择不同的s值对空间v进行划分;
[0026]
s32.将从v中划分出的s3个体素编号,使用一个三维坐标(i,j,k)∈[0,s]3来标识每一个体素,其中(0,0,0)表示v中左下角的体素,(s,s,s)表示右上角的体素;
[0027]
s33.构建特征查找表t[i][j][k][f],其中i,j,k为体素编号,f表示编号为i,j,k的体素对应的特征向量。
[0028]
进一步的,所述的步骤s33具体包括:
[0029]
s331.构建特征提取网络,对pointnet_seg_basic点云分割网络进行拆分,分为pointnet_seg_basic_features和pointnet_seg_basic_cls两个部分,其中pointnet_seg_basic_features仅包含pointnet_seg_basic中的特征提取部分的网络结构,pointnet_seg_basic_cls仅包含对依据每个点的特征进行分类的网络结构;
[0030]
s332.将保存的pointnet_seg_basic_features_parameters恢复到pointnet_seg_basic_features网络结构的参数中;
[0031]
s333.为v中的每一个体素(i,j,k)生成一个三维坐标点,点的坐标为(i
×
δ,j
×
δ,k
×
δ);将该点通过pointnet_seg_basic_features网络结构,将得到该点的特征向量f;此
特征向量f作为编号为i,j,k的体素对应的特征向量;公式表达为:t[i][j][k][f]=pointnet_seg_basic_features(iδ,jδ,kδ);
[0032]
s334.将得到的特征查找表t[i][j][k][f]保存下来。
[0033]
进一步的,所述的步骤s4具体包括:
[0034]
s41.将特征查找表读入内存后,通过查找表查找点云每个点的特征向量;对于点云中的点(u,v,w),该点对应到v中体素的编号为从特征查找表t[i][j][k][f]中找出[i,j,k]对应的特征向量,作为该点(u,v,w)的特征向量;
[0035]
s42.将保存的pointnet_seg_basic_cls_parameters恢复到pointnet_seg_basic_cls网络结构的参数中;
[0036]
s43.利用归一化的点云训练数据对pointnet_seg_basic_cls中的参数进行微调;将pointnet_seg_basic网络的pointnet_seg_basic_features部分替换为特征查找表t[i][j][k][f],训练数据在特征查找表中查询到特征向量后,输入到pointnet_seg_basic_cls网络结构中,利用训练数据的ground truth作为监督信号,对pointnet_seg_basic_cls中的参数进行微调;
[0037]
s44.保存微调后的pointnet_seg_basic_cls中的参数到pointnet_seg_basic_cls_parameters中。
[0038]
进一步的,所述的步骤s5具体包括:
[0039]
s51.读取保存的特征查询表t[i][j][k][f]到内存中;
[0040]
s52.构建pointnet_seg_basic_cls网络结构,并读取微调后的pointnet_seg_basic_cls_parameters到pointnet_seg_basic_cls中;
[0041]
s53.对测试点云数据进行平移、旋转、尺寸归一化处理;
[0042]
s54.为测试点云的每个点从特征查询表中获取特征,将测试点云每个点的特征输入到pointnet_seg_basic_cls网络中获取该点的分类结果;综合每个点的分类结果最后得到测试点云的分割结果。
[0043]
在本发明中,开拓性的将查找表的思想应用到点云分割的问题上来,利用访问查找表代替了神经网络的前向计算,极大的加速了点云分割的过程。本发明创新性的将主成分分析应用于点云分割处理上,让分割网络可以摆脱对空间变换网络模块的依赖,使点云分割网络具有旋转不变性的同时减少了计算量。
[0044]
与现有技术相比,有益效果是:
[0045]
1.本发明使用特征查询表巧妙地代替了点云分割网络中特征提取的网络结构,点云的特征提取时间完全取决于内存访问时间,计算量大幅减少,仅仅只需要对查询表索引的计算。与其他加速点云分割的技术仍然需要复杂的网络计算相比,本发明更大幅度的提升了点云分割的速度。在使用intel xeon e5-2673v4 cpu的条件下,使用现有较快的点云分割网络pointnet(除去t-net),对具有50万个点的点云进行分割需要平均240秒,而使用本发明提供的分割技术仅需要5.8s秒,在速度上加快了约40倍。
[0046]
2.本发明使用特征查询表代替了点云分割网络中特征提取的网络结构,省去了点云分割网络中特征提取部分的计算量,极大精简了网络结构,大幅缩小了点云分类需要占用的计算资源,可以摆脱深度点云分割网络对gpu的依赖。该方法可以应用在计算能力有限
的移动终端或者嵌入式设备上,从而实现移动端或者嵌入式设备实时的点云分割。
[0047]
3.本发明在构造出特征查询表之后,对分割网络进行了微调,使得本方法在分割速度比现有点云分割网络快40倍的情况下,分割准确率与pointnet(除去t-net)分割准确率基本一致。本发明在大幅加速点云分割网络的同时,并没有出现其他加速方法中分割准确率下滑严重的情况。
附图说明
[0048]
图1是本发明方法整体流程示意图。
[0049]
图2是本发明中查找表以及分割网络的流程示意图。
[0050]
图3是本发明点云归一化处理示意图。
[0051]
图4是本发明网络结构示意图。
[0052]
图5是本发明特征查询表结构示意图。
[0053]
图6是本发明网络特征提取示意图。
[0054]
图7是本发明点云分割结构示意图。
具体实施方式
[0055]
附图仅用于示例性说明,不能理解为对本发明的限制;为了更好说明本实施例,附图某些部件会有省略、放大或缩小,并不代表实际产品的尺寸;对于本领域技术人员来说,附图中某些公知结构及其说明可能省略是可以理解的。附图中描述位置关系仅用于示例性说明,不能理解为对本发明的限制。
[0056]
如图1、图2所示,一种基于查找表加速点云分割的方法,具体包括以下步骤:
[0057]
步骤1:如图3所示,对点云数据归一化处理,图3中左图为未归一化点云,右图是已归一化点云。归一化的步骤如下:
[0058]
s11.利用重心平移实现点云平移归一化,首先依据公式计算点云的重心,然后将点云的每个点都跟随着重心移动,每个点平移后的坐标为p'
i
=p
i-p
center
;
[0059]
s12.利用主成分分析方法实现点云旋转归一化;
[0060]
s121.计算点云的3
×
3协方差矩阵,利用特征分解求解三个特征值,从大到小排列为λ1,λ2,λ3,并将对应的特征向量e1,e2,e3构成旋转矩阵r=(e1,e2,e3);
[0061]
s122.将点云的每个点投影到由e1,e2,e3构成的空间坐标系中,对点云的每个点进行投影操作为p
new
=r-1
p
i
=r
t
p
i
;
[0062]
s13.利用轴对齐包围盒实现点云尺寸归一化;
[0063]
s131.找到点云在x,y和z方向上最小和最大的两个点,分别是p
min
(x
min
,y
min
,z
min
)和p
max
(x
max
,y
max
,z
max
),用最大点减去最小的点得到的三个长度分量分别作为轴对齐包围盒的长宽高;
[0064]
s132.将点云每个点的三个分量分别除以包围盒的长宽高,得到尺寸归一化的点云,使点云的坐标都分布在[-1,1]区间内。
[0065]
步骤2:按照如图4所示的网络结构图,搭建并训练点云分割网络;具体包括以下步骤:
[0066]
s21.搭建并训练点云分割网络。点云分割问题可以看作是对点云中每个点的分类问题。因此网络的输入应为n
×
3的点云数据,n为点云中包含的点的数量,网络输出为n
×
k,k为点云中每个点的分类标签。训练完毕后保存网络参数。
[0067]
s22.去掉pointnet分割网络中的两个t-net,仅保留最简单的pointnet_seg_basic网络结构。因为在点云归一化中提前将点云做了主成分分析来对点云进行旋转归一化,使点云网络具有旋转不变性,因此在点云分割网络中不再需要t-net结构,所以使用结构简单的pointnet_seg_basic(如图4所示)作为点云分割网络。
[0068]
s23.利用训练集训练pointnet_seg_basic,并且保存最好分割准确率的网络参数,并将网络参数分为两个部分,一是对点云每个点进行特征提取的参数记作pointnet_seg_basic_features_parameters,二是用于对每个点的特征进行分类的参数,记作pointnet_seg_basic_cls_parameters。
[0069]
步骤3:建立如图5所示的特征查找表,图5中每一个小格子代表一个体素,体素中记录的是该体素对应的特征向量。详细步骤如下:
[0070]
s31.点云经过尺寸归一化后其输入将被固定在空间v中,v=[-1,1]3;将v划分为s3个不相交的相互独立的体素,每个体素的长度为δ=2/s,体积为8/s3;其中s是一个变量,可以根据需求选择不同的s值对空间v进行划分;
[0071]
s32.将从v中划分出的s3个体素编号,使用一个三维坐标(i,j,k)∈[0,s]3来标识每一个体素,其中(0,0,0)表示v中左下角的体素,(s,s,s)表示右上角的体素;
[0072]
s33.构建特征查找表t[i][j][k][f],其中i,j,k为体素编号,f表示编号为i,j,k的体素对应的特征向量;具体包括:
[0073]
s331.构建特征提取网络,对pointnet_seg_basic点云分割网络进行拆分,分为pointnet_seg_basic_features和pointnet_seg_basic_cls两个部分,其中pointnet_seg_basic_features仅包含pointnet_seg_basic中的特征提取部分的网络结构,pointnet_seg_basic_cls仅包含对依据每个点的特征进行分类的网络结构;
[0074]
s332.将保存的pointnet_seg_basic_features_parameters恢复到pointnet_seg_basic_features网络结构的参数中;
[0075]
s333.为v中的每一个体素(i,j,k)生成一个三维坐标点,点的坐标为(i
×
δ,j
×
δ,k
×
δ);将该点通过pointnet_seg_basic_features网络结构,将得到该点的特征向量f;此特征向量f作为编号为i,j,k的体素对应的特征向量;公式表达为:t[i][j][k][f]=pointnet_seg_basic_features(iδ,jδ,kδ);
[0076]
s334.将得到的特征查找表t[i][j][k][f]保存下来。
[0077]
步骤4:对pointnet_seg_basic_cls部分进行微调,从而避免分割网络的分割准确率下滑;具体包括:
[0078]
s41.将特征查找表读入内存后,通过查找表查找点云每个点的特征向量,对于点云中的点(u,v,w),该点对应到v中体素的编号为从特征查找表t[i][j][k][f]中找出[i,j,k]对应的特征向量,作为该点的特征向量;
[0079]
s42.将保存的pointnet_seg_basic_cls_parameters恢复到pointnet_seg_basic_cls网络结构的参数中;
[0080]
s43.利用归一化的点云训练数据对pointnet_seg_basic_cls中的参数进行微调;如图6的黑色箭所示将pointnet_seg_basic网络的pointnet_seg_basic_features部分提取64维,128维,256维,512维,1024维,2048维特征向量的操作替换为64维,128维,256维,512维,1024维,2048维的特征查找表,训练数据在各个特征查找表中查询到特征向量后,将所有的特征向量衔接在一起,输入到pointnet_seg_basic_cls网络中,利用训练数据的ground truth作为监督信号,对pointnet_seg_basic_cls中的参数微调;
[0081]
s44.保存微调后的pointnet_seg_basic_cls中的参数到pointnet_seg_basic_cls_parameters中。
[0082]
步骤5:如图7所示,对点云进行快速分割;具体包括:
[0083]
s51.读取各个维度的特征查询表t[i][j][k][f]到内存中
[0084]
s52.构建pointnet_seg_basic_cls网络结构,并读取微调后的pointnet_seg_basic_cls_parameters到pointnet_seg_basic_cls中
[0085]
s53.对测试点云数据进行归一化处理
[0086]
s54.为测试点云的每个点从各个维度的特征查询表中获取不同维度的特征向量后,将特征向量全部衔接在一起输入到pointnet_seg_basic_cls网络中获取该点的分类结果。综合每个点的分类结果最后得到测试点云的分割结果。
[0087]
尽管上面已经示出和描述了本发明的实施例,可以理解的是,上述实施例是示例性的,不能理解为对本发明的限制,本领域的普通技术人员在本发明的范围内可以对上述实施例进行变化、修改、替换和变型。
[0088]
显然,本发明的上述实施例仅仅是为清楚地说明本发明所作的举例,而并非是对本发明的实施方式的限定。对于所属领域的普通技术人员来说,在上述说明的基础上还可以做出其它不同形式的变化或变动。这里无需也无法对所有的实施方式予以穷举。凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明权利要求的保护范围之内。