点云数据处理方法、装置、计算机设备及存储介质与流程

未命名 07-23 阅读:81 评论:0

1.本公开涉及点云处理技术领域,特别是涉及一种点云数据处理方法、装置、计算机设备和计算机可读存储介质。


背景技术:

2.在基于体素处理的点云深度学习网络模型的训练和应用中,一般需要对点云数据进行预处理(或称为前处理),然后才输入至深度学习网络并根据需求进行后续处理。一般来说,对点云数据的预处理包括滤除roi(region of interest,感兴趣区域)以外的点、点的乱序重排、以及点的体素化三个步骤。然而,由于点云数据的数据量非常庞大,对点云数据的预处理又需要多次遍历点云数据,因此造成了对处理器的巨大负担。如今,用户对点云数据的处理效率提出了越来越高的要求,而如何提高点云数据处理的效率,仍然是业界的研究热点和难点之一。


技术实现要素:

3.本公开提供了一种点云数据处理方法、装置、计算机设备和计算机可读存储介质。
4.根据本公开的一方面,提供了一种点云数据处理方法,包括:获取与目标区域对应的点云数据;将目标区域划分为多个子区域,其中,每个子区域与子点云数据对应,子点云数据为点云数据的子集,且每个子区域对应的子点云数据在点的数量上具有差异;确定多个子区域与多个处理核之间的对应关系,其中,每个处理核与多个子区域的子集对应,以使每个处理核对应的点的数量之间的差异小于预定阈值;基于对应关系,通过每个处理核对该处理核对应的点进行体素化处理以得到中间处理数据;以及将通过每个处理核得到的中间处理数据进行合并,以获得点云数据处理的结果。
5.根据本公开的另一方面,提供了一种点云数据处理装置,包括:点云数据获取模块,被配置为获取与目标区域对应的点云数据;目标区域划分模块,被配置为将目标区域划分为多个子区域,其中,每个子区域与子点云数据对应,子点云数据为点云数据的子集,且每个子区域对应的子点云数据在点的数量上具有差异;子区域分配模块,被配置为确定多个子区域与多个处理核之间的对应关系,其中,每个处理核与多个子区域的子集对应,以使每个处理核对应的点的数量之间的差异小于预定阈值;体素化处理模块,被配置为基于对应关系,通过每个处理核对该处理核对应的点进行体素化处理以得到中间处理数据;以及数据合并模块,被配置为将通过每个处理核得到的中间处理数据进行合并,以获得点云数据处理的结果。
6.根据本公开的另一方面,提供了一种计算机设备,包括:至少一个处理器;以及存储器,其上存储有计算机程序,计算机程序在被处理器执行时,使处理器执行本公开如上所提供的方法。
7.根据本公开的另一方面,提供了一种计算机可读存储介质,其上存储有计算机程序,计算机程序被处理器执行时,使处理器执行本公开如上所提供的方法。
8.根据本公开的一个或多个实施例,可以提高点云数据处理的效率。
9.根据在下文中所描述的实施例,本公开的这些和其它方面将是清楚明白的,并且将参考在下文中所描述的实施例而被阐明。
附图说明
10.附图示例性地示出了实施例并且构成说明书的一部分,与说明书的文字描述一起用于讲解实施例的示例性实施方式。所示出的实施例仅出于例示的目的,并不限制权利要求的范围。在所有附图中,相同的附图标记指代类似但不一定相同的要素。
11.图1是图示出根据示例性实施例的点云数据处理方法的流程图;图2是图示出根据示例性实施例的划分目标区域的示意图;图3是图示出根据另一示例性实施例的划分目标区域的示意图;图4是图示出根据示例性实施例的确定子区域与处理核的对应关系的过程的流程图;图5是图示出根据示例性实施例的子区域与处理核的对应关系的示意图;图6是图示出根据示例性实施例的合并经重排的点的示意图;图7是图示出根据示例性实施例的单个处理核对应的体素集合的示意图;图8是图示出根据示例性实施例的体素化处理过程的流程图;图9是图示出根据示例性实施例的合并中间处理数据过程的流程图;图10是图示出根据示例性实施例的点云数据处理装置的示意性框图;图11是图示出能够应用于示例性实施例的示例性计算机设备的框图。
具体实施方式
12.在本公开中,除非另有说明,否则使用术语“第一”、“第二”等来描述各种要素不意图限定这些要素的位置关系、时序关系或重要性关系,这种术语只是用于将一个元件与另一元件区分开。在一些示例中,第一要素和第二要素可以指向该要素的同一实例,而在某些情况下,基于上下文的描述,它们也可以指代不同实例。
13.在本公开中对各种所述示例的描述中所使用的术语只是为了描述特定示例的目的,而并非旨在进行限制。除非上下文另外明确地表明,如果不特意限定要素的数量,则该要素可以是一个也可以是多个。如本文使用的,术语“多个”意指两个或更多,并且术语“基于”应解释为“至少部分地基于”。此外,术语“和/或”以及
“……
中的至少一个”涵盖所列出的项目中的任何一个以及全部可能的组合方式。
14.在相关技术中,在基于体素处理的点云深度学习网络模型的训练和应用中,一般需要对点云数据进行预处理(或称为前处理),然后才输入至深度学习网络并根据需求进行后续处理。一般来说,对点云数据的预处理包括滤除roi(或称为目标区域)以外的点、点的乱序重排、以及点的体素化三个步骤。然而,由于点云数据的数据量非常庞大,对点云数据的预处理又需要多次遍历点云数据,因此造成了对处理器的巨大负担。如今,用户对点云数据的处理效率提出了越来越高的要求,而如何提高点云数据处理的效率,仍然是业界的研究热点和难点之一。
15.目前的点云数据预处理算法一般是针对gpu(graphics processing unit,图形处
理器)或cpu(central processing unit,中央处理器)进行开发的,这些算法的实现方式可能不适用于除gpu和cpu以外的其他硬件平台,比如专用人工智能推理芯片等。这就导致了算法无法直接在这些平台上进行高效的加速,或者需要对特定硬件平台进行算法适配。同时,目前的点云数据预处理流程也很繁琐,基于体素的点云数据预处理流程较多,各处理模块之间对功能进行了分割和封装,不利于预处理过程整体的加速。
16.目前的点云数据预处理方法是在单处理器上对大量点云数据进行单核串行处理来实现的。具体来说,利用单处理器的点云预处理方法一般是,先遍历所有点以过滤掉roi以外的点,然后生成一组随机数并以遍历的方式分配给roi以内的点,从而达到对这些点乱序重排的目的,最后再遍历一次roi以内的所有点以计算和存储这些点对应的体素的索引值。这样的方法对庞大数量的点至少进行了三次遍历,这对点云数据处理的效率产生了很大影响。并且,在对这些点乱序重排的环节中需要生成一组非常大的随机数,这对于很多计算硬件都非常不友好。因此,目前的点云数据预处理方法不能高效地进行点云数据处理。
17.为了提高点云数据处理的效率,本公开提供了一种点云数据处理方法。
18.下面结合附图详细描述本公开的示例性实施例。
19.图1是图示出根据示例性实施例的点云数据处理方法100的流程图。点云数据处理方法100包括步骤s110、s120、s130、s140、以及s150。点云数据处理方法100例如可以应用于自动驾驶汽车、无人机和智能交通等场景,实现对诸如激光雷达、毫米波雷达、四维成像雷达等传感器产生的点云数据的预处理,以用于基于体素的点云深度学习网络在后续的诸如目标检测、物体识别、场景分割、三维重建等任务。
20.参考图1,在步骤s110,获取与目标区域对应的点云数据。
21.在步骤s120,将目标区域划分为多个子区域。这些子区域中的每一个与子点云数据对应,子点云数据为点云数据的子集,且每个子区域对应的子点云数据在点的数量上具有差异。
22.在步骤s130,确定多个子区域与多个处理核之间的对应关系。这些处理核中的每一个与上述多个子区域的子集对应,以使每个处理核对应的点的数量之间的差异小于预定阈值。
23.在步骤s140,基于对应关系,通过每个处理核对该处理核对应的点进行体素化处理以得到中间处理数据。
24.在步骤s150,将通过每个处理核得到的中间处理数据进行合并,以获得点云数据处理的结果。
25.以下进一步描述根据本公开实施例的点云数据处理方法的各个方面。
26.在示例中,获取的点云数据可以是由激光雷达(lidar)、毫米波雷达、成像雷达等传感器生成的。以激光雷达为例,激光雷达可以通过激光束对物体进行扫描和测量,通过激光雷达获取的点云数据可以对应于一组不按照特定的顺序进行存储的点,点云数据可以包括扫描的每个点的三维坐标和诸如反射强度、信噪比的其他属性。这些点并非孤立的点,在网络模型中进行运算时,相邻的点可以形成多个有意义的集合。
27.在示例中,可以预先设定目标区域(或称为roi或感知区域)的范围用[x
min
, x
max
, y
min
, y
max
, z
min
, z
max
]表示。也就是说,目标区域可以是一个长为(x
max-x
min
)(用l表示),宽为(y
max-y
min
)(用w表示),高为(z
max-z
min
)(用h表示)的立方体区域。通过诸如激光雷达
(lidar)、毫米波雷达、成像雷达等传感器获取的点云数据可能包括对应于目标区域以外的点的数据,此时可以滤除这些目标区域以外的点,而只保留目标区域以内的点。可以例如通过判断点的位置是否在[x
min
, x
max
, y
min
, y
max
, z
min
, z
max
]的范围以外来确定每个点是否为目标区域以外的点。
[0028]
在示例中,目标区域可以被划分成多个长为l,宽为w,高为h的小立方体,这些小立方体可以被称作体素(voxel)。一般来说,目标区域的长、宽、高分别为体素的长、宽、高的整数倍,于是目标区域能够刚好被划分为整数个体素。通过将目标区域划分成多个体素,位于目标区域中的点于是可以被分配在这些体素中,同一个体素中的相邻的点可以作为集合来进行存储和运算。
[0029]
在示例中,点云数据对应的点可能在某些位置(比如较近的物体处)更为密集,而在某些位置(比如较远的物体处)更为稀疏,在某些位置(比如被遮挡的物体处)甚至可能没有点。于是可以理解,有的体素内的点可能较多,有的体素内的点可能较少,而有的体素内甚至可能没有点,这种内部没有点的体素即为空体素。
[0030]
在示例中,目标区域中的每个点的位置可以用三维坐标(x, y, z)来表示。于是可以通过公式id
x
=floor[(x-x
min
)/l],idy=floor[(y-y
min
)/w],idz=floor[(z-z
min
)/h]确定每一个点在哪一个体素中。在上述公式中,floor [(x-x
min
)/l]可以表示对[(x-x
min
)/l]向下取整,类似地,floor[(y-y
min
)/w]可以表示对[(y-y
min
)/w]向下取整,floor[(z-z
min
)/h]可以表示对[(z-z
min
)/h]向下取整。(id
x
, idy, idz)可以被称作该点所在的体素的索引,用于指示该体素在目标区域中的位置。对点进行体素化处理的过程可以包括确定每一个点在哪一个体素中,即,计算每一个点所在的体素的索引的过程。
[0031]
基于上述计算体素的索引的过程,在对点进行体素化处理的过程中,可以将无序和稀疏的点云数据转换为有序的、密集的体素数据,以便更方便地对点云数据进行分析和处理。
[0032]
在示例中,可以利用多个处理核来执行点云数据处理方法,于是上述体素化处理的过程可以分配给多个处理核来合作执行。可以将目标区域划分成多个子区域,再以子区域为单位将子区域中的点分配给这些处理核来分别进行体素化处理。
[0033]
图2是图示出根据示例性实施例的划分目标区域200的示意图。划分目标区域200的过程可以例如结合图1中的步骤s120。
[0034]
在示例中,如图2所示,目标区域200被划分为了四个子区域210、220、230以及240。
[0035]
在示例中,子区域210、220、230以及240可以分别包括获取到的点云数据对应的大量的点中的一部分,从而子区域210、220、230以及240能够对应有分别与这些点相应的子点云数据,子区域210、220、230以及240对应的子点云数据的总和可以恰好等于点云数据。子区域210、220、230以及240中的点的数量可能具有一定差异。
[0036]
可以假设有两个用于处理点云数据的处理核。为了使得每个处理核处理子点云数据的运算时间尽可能相近,可以使每个处理核对应的点的数量之间的差异小于预定阈值。例如在一些情况下,子区域210和240中的点的总数与子区域220和230中的点的总数之间的差异可以小于预定阈值,于是可以使子区域210和240对应于一个处理核,而使子区域220和230对应于另一个处理核。这样,每个处理核需要处理的子点云数据的数据量比较相近,所耗费的运算时间也就比较相近,避免了出现运算时间较短的处理核运算完成后有大量空闲
时间等待运算时间较长的处理核完成运算的情况,造成时间资源的浪费。
[0037]
可以理解的是,图2仅为一种示例,示出了一种将目标区域划分为具有不同体积的四个子区域的实施例。根据实际应用,也可以将目标区域划分为具有相同体积的多个子区域。
[0038]
在示例中,在多个处理核分别对与其对应的点进行体素化处理而得到对应于单个处理核的中间处理数据后,可以设定这些处理核中的一个处理核为主处理核,并将主处理核以外的其他处理核的中间处理数据输出给该主处理核进行合并,以获得点云数据处理的结果。
[0039]
在示例中,中间处理数据可以包括与某个处理核对应的全部或部分点所在的体素的索引的集合以及对应的体素数据。类似地,点云数据处理的结果可以包括目标区域中全部或部分点所在的体素的索引的集合以及对应的体素数据。
[0040]
根据本公开实施例的点云数据处理方法,通过将目标区域划分成多个子区域,再以子区域为单位将点分配给不同的处理核来分别进行体素化处理,在体素化处理过程中需要遍历的数据量大幅度减少,大大提升了点云数据处理的效率。通过在确定子区域与处理核之间的对应关系的过程中,使每个处理核对应的点的数量之间的差异小于预定阈值,能够使每个处理核需要处理的子点云数据的数据量比较平均,所耗费的运算时间比较相近,每个处理核需要处理的子点云数据的数据量相对原本的点云数据都大幅减少,同时也避免了出现某一个核处理明显滞后进而影响整体处理进度的情况。通过合并每个处理核得到的中间处理数据,得到的点云数据处理的结果不再是大量无序的孤立的点的数据,而是保留了原始点云数据的主要特征的,包含这些点之间的相互关系的数据,数据的复杂度和无序性大幅降低,更便于后续在各种学习网络中对点云数据处理的结果的计算和分析。
[0041]
根据一些实施例,在如图1所示的步骤s120中,可以将目标区域沿预定方向均等地划分为多个子区域,这些子区域的数量与处理核的数量之比可以为大于一的整数。
[0042]
图3是图示出根据另一示例性实施例的划分目标区域300的示意图。
[0043]
在示例中,如图3所示,目标区域300沿其长度方向m被均等地划分为了八个子区域310、320、330、340、350、360、370以及380。
[0044]
在示例中,子区域310、320、330、340、350、360、370以及380的长度可以是体素长度的整数倍,于是每个体素都能够完整地存在于某一个子区域中,避免了多个处理核同时处理同一个体素中的点,从而影响子点云数据处理的效率。在一些实施例中,越靠近目标中心的子区域,其中的点越密集,例如可能子区域340和350中的点的数量最多,子区域330和360中的点的数量较多,子区域320和370中的点的数量较少,子区域310和380中的点的数量最少。
[0045]
为了使每个处理核对应的点的数量之间的差异小于预定阈值,可以使更靠近目标区域的中心的子区域与更靠近目标区域的边缘的子区域对应于同一个处理核,例如可以使子区域340和380对应于同一个处理核,使子区域350和310对应于另一个处理核。
[0046]
可以理解的是,图3仅为一种示例,示出了一种将目标区域在长度方向上进行划分以获得子区域的实施例。根据实际应用,可以将目标区域在长、宽、高中的一个或多个方向进行划分以获得子区域。为了便于子点云数据的处理,这些子区域的长、宽、高可以分别为体素的长、宽、高的整数倍,例如子区域的宽可以为体素的宽的两倍或四倍。
[0047]
根据本公开的实施例,沿预定方向均等地划分目标区域以得到多个子区域的方式简单,且便于基于划分得到的子区域在目标区域中的位置,将这些子区域与多个处理核对应,以使得每个处理核需要处理的子点云数据的数据量比较平均,实现高效的点云数据处理。
[0048]
图4是图示出根据示例性实施例的确定子区域与处理核的对应关系的过程400的流程图。过程400包括步骤s410、s420、s430以及s440。过程400例如可以与图1的步骤s130相结合。
[0049]
根据一些实施例,多个子区域的数量与多个处理核的数量之比为二的整数倍。
[0050]
如图4所示,在步骤s410,可以分别将多个子区域和多个处理核顺序地编号。
[0051]
在步骤s420,可以生成用于多个子区域的第一序列。第一序列的长度可以与多个子区域的数量相同,且第一序列可以包括与多个子区域的编号相关联的多个第一元素,多个第一元素可以自多个子区域的编号中的居中编号起,朝向多个子区域的编号中的首尾编号顺序地排列。
[0052]
在步骤s430,可以生成用于多个处理核的第二序列。第二序列的长度可以与第一序列的长度相同,且第二序列可以包括与多个处理核的编号相关联的多个第二元素,在多个第二元素中,多个处理核的编号可以以镜面对称的方式排列。
[0053]
在步骤s440,可以基于第一序列和第二序列,确定多个子区域与多个处理核之间的对应关系。
[0054]
以下将结合图5进一步说明确定子区域与处理核的对应关系的过程。
[0055]
图5是图示出根据示例性实施例的子区域与处理核的对应关系的示意图。
[0056]
在示例中,可以如图3对目标区域在长度方向上进行均匀划分以获得八个子区域,并将这八个子区域(例如图3中的子区域310至380)在位置上按顺序分别赋予编号0至7。还可以假设处理核的数量为4,并将这四个处理核分别赋予编号0至3。
[0057]
在示例中,可以生成一个子区域编号序列520(即,上述第一序列),由于子区域的数量为8,于是可以将子区域编号序列520的长度也设置为8。对于如图3所示出的八个子区域,其中子区域编号为3的子区域340和子区域编号为4的子区域350是居中的子区域,其编号也是居中的编号,于是子区域编号序列520可以自子区域编号3或4起开始排列。如图5所示,例如可以将子区域编号3排在子区域编号序列520的第一位,将子区域编号4排在子区域编号序列520的第二位。接下来可以朝向子区域编号中的首尾编号,即0和7,顺序地排列。然后可以将子区域编号序列520的第三位设置为子区域编号2,并在其后依次设置子区域编号5、子区域编号1、子区域编号6、子区域编号0、以及子区域编号7。这样便可以得到一种可能的子区域编号序列520,即,3-4-2-5-1-6-0-7。
[0058]
然后可以生成用于多个处理核的第二序列,即,图5中的处理核编号序列510。可以将第二序列的长度也设置为8,第二序列中的元素可以是处理核的编号。可以将处理核的编号以镜面对称的方式进行排列。例如可以先将处理核编号0至处理核编号3顺序地排列,以占据处理核编号序列510的前四位,再基于镜面对称的方式将处理核编号序列510的后四位分别确定为处理核编号3至处理核编号0。于是可以得到一种可能的处理核编号序列510,即,0-1-2-3-3-2-1-0。
[0059]
于是基于确定的子区域编号序列520和处理核编号序列510,便可以确定如图3所
示出的子区域310至380与四个处理核之间的对应关系:处理核编号为0的处理核对应于子区域编号为3的子区域340以及子区域编号为7的子区域380;处理核编号为1的处理核对应于子区域编号为0的子区域310以及子区域编号为4的子区域350;处理核编号为2的处理核对应于子区域编号为2的子区域330以及子区域编号为6的子区域370;处理核编号为3的处理核对应于子区域编号为1的子区域320以及子区域编号为5的子区域360。
[0060]
可以看出,以这样的方式确定的对应关系,使得邻近的子区域被分配到了尽可能分散的处理核中。由于诸如激光雷达等传感器的扫描模式的特性,点在居中的位置或区域较为密集,在边缘的位置或区域较为稀疏,并且这种变化趋势是基本对称的。也就是说,子区域编号为3和4的子区域340和350中的点最密集且密度比较相近,子区域编号为2和5的子区域330和360中的点较密集且密度比较相近,子区域编号为1和6的子区域320和370中的点较稀疏且密度比较相近,子区域编号为0和7的子区域310和380中的点最稀疏且密度比较相近。这样,就能够使得每个处理核要处理的点的数量的差别很小。
[0061]
可以理解的是,图5仅为一种示例,示出了子区域数量为8,处理核数量为4的一种多个子区域与多个处理核之间的对应关系。根据实际应用,多个子区域与多个处理核之间的对应关系也可以与图5所示的不完全相同,并且处理核的数量可以大于或者小于4,子区域的数量可以大于或者小于8。但为了使得每个处理核要处理的点的数量的差别尽可能的小,可以将目标区域划分成尽可能多的子区域,于是每个子区域内的点的数量就会更少,不同的子区域中的点的数量差距也就能更小。
[0062]
根据本公开的实施例的确定多个子区域与多个处理核之间的对应关系,通过将邻近的子区域被分配到尽可能分散的处理核中,能够便于将目标区域中的大量的点平均分配到多个处理核中,于是每个处理核处理子点云数据的运算时间基本一致,避免了出现某一个核处理明显滞后进而影响整体处理进度的情况,提高了点云数据处理的效率。
[0063]
根据一些实施例,点云数据处理方法还可以包括在通过每个处理核对该处理核对应的点进行体素化处理之前,将该处理核对应的点以乱序的方式进行重排。
[0064]
在示例中,对点进行体素化处理的过程中可以预设存储和处理的体素的最大数量以及每个体素中点的最大数量以精简要处理的点云数据,这会涉及到对点的遍历和采样。为了在采样的过程中对各区域均匀采样,避免采集到的点集中在某一个或某一些特定区域,可以对每个处理核对应的点以乱序的方式进行重排。
[0065]
根据本公开的实施例,通过对每个处理核对应的点以乱序的方式进行重排,能够使得采样的过程中对各区域采样均匀,在精简要处理的点云数据过程中不影响数据的可靠性。
[0066]
根据一些实施例,将该处理核对应的点以乱序的方式进行重排可以包括:针对与该处理核相关联的每个子区域对应的点应用随机数,以将每个子区域对应的点以乱序的方式进行重排;以及将每个子区域对应的经重排的点进行合并。
[0067]
在传统的点云数据处理过程中,有时候会用一组随机数与目标区域中的大量的点对应,以对这些点进行重排。这意味着需要生成一组非常大的随机数。大规模的随机数的生成和存储对于很多计算硬件的性能会造成损耗,因此需要尽量避免使用过大的随机数。
[0068]
在示例中,可以对目标区域进行划分以得到非常多的尺寸非常小的子区域,于是每个子区域中的点的数量已经远小于目标区域中的点的总数。如果对每个子区域中的点利
用随机数进行重排,那么所需要的随机数的规模也就得以大大降低。对每个子区域中的点进行重排之后,可以在处理核中合并该处理核对应的多个子区域的重排后的点,于是得到单个处理核的重排后的点。在处理核中合并该处理核对应的多个子区域的重排后的点的过程可以是通过循环地依次读取并存储每个子区域中的一个点或多个点来实现的。
[0069]
在示例中,每个子区域可以对应一个存储空间,每个子区域中的点可以存储在该子区域对应的存储空间。因此在合并单个处理核对应的多个子区域的重排后的点时,可以构建一个新的存储空间,循环地依次读取并存储每个子区域对应的存储空间中存储的一个点或多个点。这样,构建的新的存储空间中存储的就是单个处理核的重排后的点。
[0070]
图6是图示出根据示例性实施例的合并经重排的点的示意图。
[0071]
在示例中,如图6所示,处理核640对应的多个子区域可以包括子区域610、620、630以及未示出的其他子区域。子区域610中可以存在点611、612、613、614以及未示出的其他多个点,子区域620中可以存在点621、622、623、624以及未示出的其他多个点,子区域630中可以存在点631、632、633、634以及未示出的其他多个点。这些点可以如图6所示的顺序分别被存储在子区域610、620、630对应的存储空间中,这些点在各自的存储空间的存储顺序可以是通过生成随机数并分配给点的方式确定的。
[0072]
在示例中,处理核640可以构建一个新的存储空间,以存储整个处理核640的重排后的点。可以循环地依次读取并存储子区域610、620、未示出的其他子区域以及子区域630对应的存储空间内的一个点。首先可以依次读取并存储子区域610、620、未示出的其他子区域以及子区域630对应的存储空间中存储的第一个点,即,点611、612、未示出的其他子区域中的第一个点以及点631。然后可以循环地再依次读取并存储子区域610、620、未示出的其他子区域以及子区域630对应的存储空间中存储的第二个点,即,点621、622、未示出的其他子区域中的第二个点以及点632。再依次读取并存储子区域610、620、未示出的其他子区域以及子区域630对应的存储空间中存储的第三个点,即,点623、623、未示出的其他子区域中的第三个点以及点633。以这样的规律对各子区域中的重排后的点进行合并,得到的处理核640的重排后的点中邻近的点来自不同的子区域,也就能够使得邻近的点的位置足够分散,有利于后续对点的采样。
[0073]
在示例中,子区域610、620、630以及未示出的其他子区域中的点的数量可能并不彼此相同,因此在循环地依次读取并存储每个子区域的点的过程中,可能会出现一些子区域的点已经读取和存储完毕,但另一些子区域的点还未全部读取和存储的情况。这时,可以仅对还未读取和存储完所有点的子区域循环地依次读取并存储这些子区域的点,直至所有子区域的所有点都已经被读取和存储。这样的处理方式对于前半部分的点的重排的可靠性没有影响,仅对后半部分的点的重排的可靠性有一定影响。通过将目标区域划分成尽可能多的子区域,使每个子区域中的点的数量差距尽可能小,便能够很大程度地解决这个问题。
[0074]
根据本公开的实施例,通过以子区域为单位对点应用随机数来实现点的重排,再合并每个子区域对应的经重排的点来得到最终的重排后的点,能够大幅减少需要用随机数进行乱序的点的数量,于是只需要生成多个较短的随机数,避免了对生成大规模随机数的需求,节省了计算资源,提高了点云数据处理的效率。
[0075]
根据一些实施例,通过每个处理核对该处理核对应的点进行体素化处理以得到中间处理数据,可以包括:基于该处理核对应的点,确定与点相关联的非空体素以及非空体素
的索引;以及确定非空体素中相应的点的数量;其中,中间处理数据包括用于存储非空体素的非空体素张量、非空体素的索引、以及非空体素中相应的点的数量。
[0076]
图7是图示出根据示例性实施例的单个处理核对应的体素集合700的示意图。体素集合700可以包括与某个处理核对应的点相关联的54个体素。
[0077]
在示例中,如图7所示,体素集合700中的每个体素都可以用一个立方体来表示,这些立方体中的数字可以表示相应的体素中的点的个数。这些体素中,有的体素中的数字大于0,例如体素701中的点的数量为8,这样的体素可以被称作非空体素。而另一些体素中的数字为0,例如体素702,这样的体素为空体素。由于点云数据的稀疏性,单个处理核对应的体素集合700中可能会有大量空体素,这些体素中不存在点,因此在处理点云数据时,可以不用设置用于存储与这些空体素相关的数据的空间。
[0078]
在示例中,对于每个处理核,在生成中间处理数据时,可以构建一个尺寸为nv*n
pmax
*nf的非空体素张量v来存储非空体素,其中,nv可以表示该处理核对应的子区域中的体素的总数,例如图7所示的处理核对应的子区域中的体素的总数为54。nf可以表示点的特征值个数,例如每个点的数据可以包括该点的三维位置信息和反射强度,那么nf的值为4。n
pmax
可以表示每个体素内存储点的个数的预定上限值,当某个体素内存储点的个数达到上限值,新增的点对于点云数据处理和计算的影响变得微乎其微,为了精简数据量,可以将超过上限值的点舍弃掉。基于同样的理由,还可以设定非空体素张量v存储的非空体素的数量的上限值,以进一步精简数据量。
[0079]
根据本公开的实施例的得到中间处理数据的过程,大量无序的孤立的点的数据被转换为了保留原始点云数据的主要特征的,包含点之间的相互关系的中间处理数据,数据的复杂度和无序性大幅降低,更便于后续在各种学习网络中对点云数据处理的结果的计算和分析。
[0080]
图8是图示出根据示例性实施例的体素化处理过程800的流程图。过程800可以包括步骤s801至s812。可以在多个处理核中的每一个处理核中实施过程800,下面以其中的一个处理核为例进行说明。
[0081]
参考图8,在步骤s801,可以对该处理核对应的点乱序重排。该过程可以例如结合图6所示出的点的乱序重排的过程。
[0082]
然后可以以遍历的方式从第一个点开始依次处理该处理核对应的每一个点。在步骤s802,可以确定当前点对应的体素的索引。体素的索引可以表示为(id
x
, idy, idz),用于指示该体素在目标区域中的位置。
[0083]
可以理解,不同的体素之间,索引彼此不同。因此,基于索引值可以执行步骤s803,判断该体素是否为新的体素。
[0084]
如果当前点对应的体素的索引是一个新的索引,就意味着该体素为新的体素,于是可以执行步骤s804,判断体素数量是否超标。可以预先设定非空体素张量v存储的非空体素的数量的第一上限值,该第一上限值可以与预定的非空体素的总数上限值与处理核的比值相关,例如可以将第一上限值设定为该比值的1.25倍。如果此时体素数量还未达到该第一上限值,那么可以执行步骤s805,更新体素数量,体素数量加一,并执行步骤s806,存储该体素的索引。
[0085]
接下来可以执行步骤s807,判断该体素的点的数量是否超标。可以预先设定每个
体素内存储点的数量的第二上限值n
pmax
,如果此时该体素对应的点的数量还未达到该第二上限值,那么可以执行步骤s808,存储当前点,并执行步骤s809,更新该体素的点数,该体素对应的点的数量加一。步骤s808可以是通过将当前点的诸如三维位置信息和反射强度等特征的数据存储在非空体素张量v中实现的。
[0086]
此时对当前点的处理已完成,可以执行步骤s810,判断是否对该处理核对应的所有点遍历完成。如果在步骤s804确定体素数量已达到或超过第一上限值,那么可以不再存储该新的体素,可以直接结束对当前点的处理,执行步骤s810。如果在步骤s807确定体素对应的点的数量已达到或超过第二上限值,那么可以不用在该体素中存储新的点,也可以直接执行步骤s810。
[0087]
在步骤s810,如果还未遍历完该处理核对应的所有点,可以接着执行步骤s811,处理下一个点,将该下一个点作为新的当前点,然后再对新的当前点执行步骤s802至s809。如果在步骤s810,该处理核对应的所有点都遍历完毕,那么可以执行步骤s812,输出中间处理数据。该中间处理数据可以包括上述非空体素张量v、非空体素的索引、以及非空体素中相应的点的数量。
[0088]
根据一些实施例,将通过每个处理核得到的中间处理数据进行合并,可以包括:将通过每个处理核得到的非空体素张量进行合并;以及将通过每个处理核得到的非空体素的索引进行合并。
[0089]
图9是图示出根据示例性实施例的合并中间处理数据过程900的流程图。过程900可以包括步骤s910至s950。过程900可以是在多个处理核中的一个处理核中实施的。
[0090]
参考图9,在步骤s910,可以输入多个处理核中的每一个处理核所生成的中间处理数据。这些处理核分别生成与其对应的中间处理数据的过程可以例如结合如图8所示出的过程。
[0091]
得到每个处理核的中间处理数据后,可以执行步骤s920,合并非零体素张量,以及合并非零体素的索引。在示例中,由于在中间处理数据中,多个处理核分别对应的非空体素张量中的非空体素的存储位置与这些非空体素在空间中的实际位置无关,非空体素的实际位置是由非空体素的索引来进行标记的,因此可以将通过每个处理核得到的非空体素张量以及非空体素的索引以直接拼接的方式进行合并,而不会影响数据的准确性。
[0092]
然后可以执行步骤s930,判断体素数量是否超标。可以预先设定合并后的非空体素张量存储的非空体素的数量的第三上限值(即,上述非空体素的总数上限值)。如果此时合并后的非空体素张量存储的非空体素的总数未超过该第三上限值,那么可以直接执行步骤s950,输出点云数据处理的结果。该点云数据处理的结果可以包括合并后的非空体素张量以及合并后的非空体素的索引,还可以包括这些非空体素中相应的点的数量。如果此时合并后的非空体素张量存储的非空体素的总数超过了第三上限值,那么可以先执行步骤s940,滤除超标的体素,再执行步骤s950。
[0093]
根据本公开的实施例合并中间处理数据的过程,能够简单高效地获得整体的点云数据处理的结果,这样获得的结果保持了原本的数据准确性,且便于后续对点云数据进一步的处理和运算。
[0094]
根据本公开的另一方面,还提供一种点云数据处理装置。
[0095]
图10是图示出根据示例性实施例的点云数据处理装置1000的示意性框图。
[0096]
如图10所示,点云数据处理装置1000包括:点云数据获取模块1010,被配置为获取与目标区域对应的点云数据;目标区域划分模块1020,被配置为将目标区域划分为多个子区域,其中,每个子区域与子点云数据对应,子点云数据为点云数据的子集,且每个子区域对应的子点云数据在点的数量上具有差异;子区域分配模块1030,被配置为确定多个子区域与多个处理核之间的对应关系,其中,每个处理核与多个子区域的子集对应,以使每个处理核对应的点的数量之间的差异小于预定阈值;体素化处理模块1040,被配置为基于对应关系,通过每个处理核对该处理核对应的点进行体素化处理以得到中间处理数据;以及数据合并模块1050,被配置为将通过每个处理核得到的中间处理数据进行合并,以获得点云数据处理的结果。
[0097]
根据本公开的实施例,通过将目标区域划分成多个子区域,再以子区域为单位将点分配给不同的处理核来分别进行体素化处理,在体素化处理过程中需要遍历的数据量大幅度减少,大大提升了点云数据处理的效率。通过在确定子区域与处理核之间的对应关系的过程中,使每个处理核对应的点的数量之间的差异小于预定阈值,能够使每个处理核需要处理的子点云数据的数据量比较平均,所耗费的运算时间比较相近,每个处理核需要处理的子点云数据的数据量相对原本的点云数据都大幅减少,同时也避免了出现某一个核处理明显滞后进而影响整体处理进度的情况。通过合并每个处理核得到的中间处理数据,得到的点云数据处理的结果不再是大量无序的孤立的点的数据,而是保留了原始点云数据的主要特征的,包含这些点之间的相互关系的数据,数据的复杂度和无序性大幅降低,更便于后续在各种学习网络中对点云数据处理的结果的计算和分析。
[0098]
应当理解,图10中所示装置1000的各个模块可以与参考图1描述的方法100中的各个步骤相对应。由此,上面针对方法100描述的操作、特征和优点同样适用于装置1000及其包括的模块。为了简洁起见,某些操作、特征和优点在此不再赘述。
[0099]
虽然上面参考特定模块讨论了特定功能,但是应当注意,本文讨论的各个模块的功能可以分为多个模块,和/或多个模块的至少一些功能可以组合成单个模块。本文讨论的特定模块执行动作包括该特定模块本身执行该动作,或者替换地该特定模块调用或以其他方式访问执行该动作(或结合该特定模块一起执行该动作)的另一个组件或模块。因此,执行动作的特定模块可以包括执行动作的该特定模块本身和/或该特定模块调用或以其他方式访问的、执行动作的另一模块。
[0100]
还应当理解,本文可以在软件或程序模块的一般上下文中描述各种技术。上面关于图10描述的各个模块可以在硬件中或在结合软件和/或固件的硬件中实现。例如,这些模块可以被实现为计算机程序代码/指令,该计算机程序代码/指令被配置为在一个或多个处理器中执行并存储在计算机可读存储介质中。可替换地,这些模块可以被实现为硬件逻辑/电路。例如,在一些实施例中,如图10所示的点云数据获取模块1010、目标区域划分模块1020、子区域分配模块1030、体素化处理模块1040以及数据合并模块1050中的一个或多个可以一起被实现在片上系统(system on chip, soc)中。soc可以包括集成电路芯片(其包括处理器(例如,中央处理单元(central processing unit, cpu)、微控制器、微处理器、数字信号处理器(digital signal processor, dsp)等)、存储器、一个或多个通信接口、和/或其他电路中的一个或多个部件),并且可以可选地执行所接收的程序代码和/或包括嵌入式固件以执行功能。
[0101]
根据本公开的一方面,提供了一种计算机设备,其包括存储器、处理器以及存储在存储器上的计算机程序。该处理器被配置为执行计算机程序以实现上文描述的任一方法实施例的步骤。
[0102]
根据本公开的一方面,提供了一种非暂态计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现上文描述的任一方法实施例的步骤。
[0103]
在下文中,结合图11描述这样的计算机设备和非暂态计算机可读存储介质的说明性示例。
[0104]
图11示出了可以被用来实施本文所描述的方法的计算机设备1100的示例配置。举例来说,上述点云数据处理装置可以全部或至少部分地由计算机设备1100或类似设备或系统实现。
[0105]
计算机设备1100可以是各种不同类型的设备。计算机设备1100的示例包括但不限于:台式计算机、服务器计算机、笔记本电脑或上网本计算机、移动设备(例如,平板电脑、蜂窝或其他无线电话(例如,智能电话)、记事本计算机、移动台)、可穿戴设备(例如,眼镜、手表)、娱乐设备(例如,娱乐器具、通信地耦合到显示设备的机顶盒、游戏机)、电视或其他显示设备、汽车计算机等等。
[0106]
计算机设备1100可以包括能够诸如通过系统总线1114或其他适当的连接彼此通信的至少一个处理器1102、存储器1104、(多个)通信接口1106、显示设备1108、其他输入/输出(i/o)设备1110以及一个或更多大容量存储设备1112。
[0107]
处理器1102可以是单个处理单元或多个处理单元,所有处理单元可以包括单个或多个计算单元或者多个核心。处理器1102可以被实施成一个或更多微处理器、微型计算机、微控制器、数字信号处理器、中央处理单元、状态机、逻辑电路和/或基于操作指令来操纵信号的任何设备。除了其他能力之外,处理器1102可以被配置成获取并且执行存储在存储器1104、大容量存储设备1112或者其他计算机可读介质中的计算机可读指令,诸如操作系统1116的程序代码、应用程序1118的程序代码、其他程序1120的程序代码等。
[0108]
存储器1104和大容量存储设备1112是用于存储指令的计算机可读存储介质的示例,指令由处理器1102执行来实施前面所描述的各种功能。举例来说,存储器1104一般可以包括易失性存储器和非易失性存储器二者(例如ram、rom等等)。此外,大容量存储设备1112一般可以包括硬盘驱动器、固态驱动器、可移除介质、包括外部和可移除驱动器、存储器卡、闪存、软盘、光盘(例如cd、dvd)、存储阵列、网络附属存储、存储区域网等等。存储器1104和大容量存储设备1112在本文中都可以被统称为存储器或计算机可读存储介质,并且可以是能够把计算机可读、处理器可执行程序指令存储为计算机程序代码的非暂态介质,计算机程序代码可以由处理器1102作为被配置成实施在本文的示例中所描述的操作和功能的特定机器来执行。
[0109]
多个程序可以存储在大容量存储设备1112上。这些程序包括操作系统1116、一个或多个应用程序1118、其他程序1120和程序数据1122,并且它们可以被加载到存储器1104以供执行。这样的应用程序或程序模块的示例可以包括例如用于实现方法100和/或本文描述的另外的实施例的计算机程序逻辑(例如,计算机程序代码或指令)。
[0110]
虽然在图11中被图示成存储在计算机设备1100的存储器1104中,但是模块1116、1118、1120和1122或者其部分可以使用可由计算机设备1100访问的任何形式的计算机可读
介质来实施。如本文所使用的,“计算机可读介质”至少包括两种类型的计算机可读介质,也就是计算机可读存储介质和通信介质。
[0111]
计算机可读存储介质包括通过用于存储信息的任何方法或技术实施的易失性和非易失性、可移除和不可移除介质,信息诸如是计算机可读指令、数据结构、程序模块或者其他数据。计算机可读存储介质包括而不限于ram、rom、eeprom、闪存或其他存储器技术,cd-rom、数字通用盘(dvd)、或其他光学存储装置,磁盒、磁带、磁盘存储装置或其他磁性存储设备,或者可以被用来存储信息以供计算机设备访问的任何其他非传送介质。与此相对,通信介质可以在诸如载波或其他传送机制之类的已调制数据信号中具体实现计算机可读指令、数据结构、程序模块或其他数据。本文所定义的计算机可读存储介质不包括通信介质。
[0112]
一个或更多通信接口1106用于诸如通过网络、直接连接等等与其他设备交换数据。这样的通信接口可以是以下各项中的一个或多个:任何类型的网络接口(例如,网络接口卡(nic))、有线或无线(诸如ieee 802.11无线lan(wlan))无线接口、全球微波接入互操作(wi-max)接口、以太网接口、通用串行总线(usb)接口、蜂窝网络接口、bluetooth
tm
接口、近场通信(nfc)接口等。通信接口1106可以促进在多种网络和协议类型内的通信,其中包括有线网络(例如lan、电缆等等)和无线网络(例如wlan、蜂窝、卫星等等)、因特网等等。通信接口1106还可以提供与诸如存储阵列、网络附属存储、存储区域网等等中的外部存储装置(未示出)的通信。
[0113]
在一些示例中,可以包括诸如监视器之类的显示设备1108,以用于向用户显示信息和图像。其他i/o设备1110可以是接收来自用户的各种输入并且向用户提供各种输出的设备,并且可以包括触摸输入设备、手势输入设备、摄影机、键盘、遥控器、鼠标、打印机、音频输入/输出设备等等。
[0114]
本文描述的技术可以由计算机设备1100的这些各种配置来支持,并且不限于本文所描述的技术的具体示例。例如,该功能还可以通过使用分布式系统在“云”上全部或部分地实现。云包括和/或代表用于资源的平台。平台抽象云的硬件(例如,服务器)和软件资源的底层功能。资源可以包括在远离计算机设备1100的服务器上执行计算处理时可以使用的应用和/或数据。资源还可以包括通过因特网和/或通过诸如蜂窝或wi-fi网络的订户网络提供的服务。平台可以抽象资源和功能以将计算机设备1100与其他计算机设备连接。因此,本文描述的功能的实现可以分布在整个云内。例如,功能可以部分地在计算机设备1100上以及部分地通过抽象云的功能的平台来实现。
[0115]
虽然在附图和前面的描述中已经详细地说明和描述了本公开,但是这样的说明和描述应当被认为是说明性的和示意性的,而非限制性的;本公开不限于所公开的实施例。通过研究附图、公开内容和所附的权利要求书,本领域技术人员在实践所要求保护的主题时,能够理解和实现对于所公开的实施例的变型。在权利要求书中,词语“包括”不排除未列出的其他元件或步骤,不定冠词“一”或“一个”不排除多个,术语“多个”是指两个或两个以上,并且术语“基于”应解释为“至少部分地基于”。在相互不同的从属权利要求中记载了某些措施的仅有事实并不表明这些措施的组合不能用来获益。

技术特征:
1.一种点云数据处理方法,包括:获取与目标区域对应的点云数据;将所述目标区域划分为多个子区域,其中,每个子区域与子点云数据对应,所述子点云数据为所述点云数据的子集,且每个子区域对应的子点云数据在点的数量上具有差异;确定所述多个子区域与多个处理核之间的对应关系,其中,每个处理核与所述多个子区域的子集对应,以使每个处理核对应的点的数量之间的差异小于预定阈值;基于所述对应关系,通过每个处理核对该处理核对应的点进行体素化处理以得到中间处理数据;以及将通过每个处理核得到的中间处理数据进行合并,以获得所述点云数据处理的结果。2.根据权利要求1所述的方法,其中,所述将所述目标区域划分为多个子区域,包括:将所述目标区域沿预定方向均等地划分为所述多个子区域,其中,所述多个子区域的数量与所述多个处理核的数量之比为大于一的整数。3.根据权利要求2所述的方法,其中,所述多个子区域的数量与所述多个处理核的数量之比为二的整数倍,所述确定所述多个子区域与多个处理核之间的对应关系,包括:分别将所述多个子区域和所述多个处理核顺序地编号;生成用于所述多个子区域的第一序列,其中,所述第一序列的长度与所述多个子区域的数量相同,且所述第一序列包括与所述多个子区域的编号相关联的多个第一元素,所述多个第一元素自所述多个子区域的编号中的居中编号起,朝向所述多个子区域的编号中的首尾编号顺序地排列;生成用于所述多个处理核的第二序列,其中,所述第二序列的长度与所述第一序列的长度相同,且所述第二序列包括与所述多个处理核的编号相关联的多个第二元素,在所述多个第二元素中,所述多个处理核的编号以镜面对称的方式排列;以及基于所述第一序列和所述第二序列,确定所述多个子区域与所述多个处理核之间的所述对应关系。4.根据权利要求1至3中任一项所述的方法,还包括:在通过每个处理核对该处理核对应的点进行体素化处理之前,将该处理核对应的点以乱序的方式进行重排。5.根据权利要求4所述的方法,其中,所述将该处理核对应的点以乱序的方式进行重排,包括:针对与该处理核相关联的每个子区域对应的点应用随机数,以将每个子区域对应的点以乱序的方式进行重排;以及将每个子区域对应的经重排的点进行合并。6.根据权利要求1至3中任一项所述的方法,其中,所述通过每个处理核对该处理核对应的点进行体素化处理以得到中间处理数据,包括:基于该处理核对应的点,确定与所述点相关联的非空体素以及所述非空体素的索引;以及确定所述非空体素中相应的点的数量;其中,所述中间处理数据包括用于存储所述非空体素的非空体素张量、所述非空体素的索引、以及所述非空体素中相应的点的数量。
7.根据权利要求6所述的方法,其中,所述将通过每个处理核得到的中间处理数据进行合并,包括:将通过每个处理核得到的所述非空体素张量进行合并;以及将通过每个处理核得到的所述非空体素的索引进行合并。8.一种点云数据处理装置,包括:点云数据获取模块,被配置为获取与目标区域对应的点云数据;目标区域划分模块,被配置为将所述目标区域划分为多个子区域,其中,每个子区域与子点云数据对应,所述子点云数据为所述点云数据的子集,且每个子区域对应的子点云数据在点的数量上具有差异;子区域分配模块,被配置为确定所述多个子区域与多个处理核之间的对应关系,其中,每个处理核与所述多个子区域的子集对应,以使每个处理核对应的点的数量之间的差异小于预定阈值;体素化处理模块,被配置为基于所述对应关系,通过每个处理核对该处理核对应的点进行体素化处理以得到中间处理数据;以及数据合并模块,被配置为将通过每个处理核得到的中间处理数据进行合并,以获得所述点云数据处理的结果。9.一种计算机设备,包括:至少一个处理器;以及存储器,其上存储有计算机程序,其中,所述计算机程序在被所述处理器执行时,使所述处理器执行权利要求1-7中任一项所述方法。10.一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时,使所述处理器执行权利要求1-7中任一项所述方法。

技术总结
本公开提供了一种点云数据处理方法、装置、计算机设备及计算机可读存储介质。实现方案为:获取与目标区域对应的点云数据;将目标区域划分为多个子区域,其中,每个子区域与子点云数据对应,子点云数据为点云数据的子集,且每个子区域对应的子点云数据在点的数量上具有差异;确定多个子区域与多个处理核之间的对应关系,其中,每个处理核与多个子区域的子集对应,以使每个处理核对应的点的数量之间的差异小于预定阈值;基于对应关系,通过每个处理核对该处理核对应的点进行体素化处理以得到中间处理数据;以及将通过每个处理核得到的中间处理数据进行合并,以获得点云数据处理的结果。结果。结果。


技术研发人员:王颖辉 翟慎文 秦明岩 吴德文 吴青松 张磊
受保护的技术使用者:瀚博半导体(上海)有限公司
技术研发日:2023.06.16
技术公布日:2023/7/22
版权声明

本文仅代表作者观点,不代表航家之家立场。
本文系作者授权航家号发表,未经原创作者书面授权,任何单位或个人不得引用、复制、转载、摘编、链接或以其他任何方式复制发表。任何单位或个人在获得书面授权使用航空之家内容时,须注明作者及来源 “航空之家”。如非法使用航空之家的部分或全部内容的,航空之家将依法追究其法律责任。(航空之家官方QQ:2926969996)

航空之家 https://www.aerohome.com.cn/

飞机超市 https://mall.aerohome.com.cn/

航空资讯 https://news.aerohome.com.cn/

分享:

扫一扫在手机阅读、分享本文

相关推荐