基于八叉树的卷积神经网络的制作方法

文档序号:15934187发布日期:2018-11-14 02:07阅读:277来源:国知局

近年来,随着三维采集设备和建模工具的发展,三维模型和场景的数量和质量迅速增长。在很多形状分析和识别任务中,如何标识和分析各种三维形状的特征变得越来越重要。这些任务包括形状分类、形状检索和形状分割等。

目前,研究界和工业界已经提出了一些用于对三维形状进行表示和进行卷积神经网络处理的方案。然而,这些方案通常需要很多的存储空间和计算资源。



技术实现要素:

在一些实施例中,提供了一种设备。该设备包括存储器,被配置为存储用于表示三维形状的八叉树,八叉树的节点包括空节点和非空节点。空节点不包括三维形状并且为八叉树的叶节点,并且非空节点包括三维形状的至少一部分。该设备还包括处理单元,耦合至存储单元并且被配置为执行动作,动作包括:从存储器获取用于表示三维形状的八叉树;以及针对八叉树中具有与卷积神经网络的卷积层相关联的深度的节点,执行卷积层的卷积操作以获得卷积层的输出。

提供发明内容部分是为了简化的形式来介绍对概念的选择,其在下文的具体实施方式中将被进一步描述。发明内容部分无意标识要求保护的主题的关键特征或主要特征,也无意限制要求保护的主题的范围。

附图说明

图1示意性示出了能够实施本公开的多个实现的计算环境的框图;

图2示出了根据本公开的一个实现的卷积神经网络的示意图;

图3示意性示出了根据本公开的一个实现的用于表示卷积神经网络的四叉树;

图4示意性示出了根据本公开的一个实现的用于表示卷积神经网络的四叉树;

图5示出了根据本公开的一个实现的卷积神经网络的卷积操作的示意图;

图6示出了根据本公开的一个实现的卷积神经网络的下采样的示意图;

图7示出了根据本公开的一个实现的卷积神经网络的池化操作的示意图;

图8示出了根据本公开的一个实现的卷积神经网络的反池化操作的示意图;以及

图9示出了根据本公开的一个实现的用于训练或应用卷积神经网络的方法的流程图。

这些附图中,相同或相似参考符号用于表示相同或相似元素。

具体实施方式

现在将参照若干示例实现来论述本公开。应当理解,论述了这些实现仅是为了使得本领域普通技术人员能够更好地理解且因此实现本公开,而不是暗示对本主题的范围的任何限制。

如本文所使用的,术语“包括”及其变体要被解读为意味着“包括但不限于”的开放式术语。术语“基于”要被解读为“至少部分地基于”。术语“一个实现”和“一种实现”要被解读为“至少一个实现”。术语“另一个实现”要被解读为“至少一个其他实现”。术语“第一”、“第二”等等可以指代不同的或相同的对象。下文还可能包括其他明确的和隐含的定义。

在计算机视觉领域中,卷积神经网络已经成功地证明了其在提取图像和视频数据中的优势。然而,将针对规则数据结构(如图像)的卷积神经网络结构和训练方法应用于三维形状是有很大难度的。不同于在规则栅格上采样的图像和视频数据,三维形状利用三角网格或非规则采样的三维点云来表示。然而,由于这种表示为非稀疏表示,因而需要占据大量的存储空间。此外,不同于以二维图像存储的rgb数据,并不清楚在三维形状上定义何种类型的数据对卷积神经网络最佳。

目前,已经提出了一些用于对三维形状进行表示和进行卷积神经网络处理的方案。然而,这些方案通常需要很多的存储空间和计算资源。为此,需要提出一种至少部分解决这些问题的用于三维形状的卷积神经网络的方案。以下参考附图来说明本公开的基本原理和若干示例实现。

示例操作环境

以下参考附图来说明本公开的基本原理和若干示例实施例。图1示出了能够实施本公开的一个或多个实现的计算系统/服务器100的框图。应当理解,图1所示出的计算系统/服务器100仅仅是示例性的,而不应当构成对本公开所描述的实施例的功能和范围的任何限制。

如图1所示,计算系统/服务器100是通用计算设备的形式。计算系统/服务器100的组件可以包括但不限于一个或多个中央处理器或中央处理单元100、存储器120、一个或多个输入设备130、一个或多个输出设备140、存储装置150、一个或多个通信单元160和一个或多个图形处理单元170。处理单元100可以是实际或虚拟处理器并且能够根据存储器120中存储的程序来执行各种处理。在多处理系统中,多处理单元执行计算机可执行指令,以增加处理能力。

计算系统/服务器100通常包括多个计算机介质。这样的介质可以是计算系统/服务器100可访问的任何可以获得的介质,包括但不限于易失性和非易失性介质、可拆卸和不可拆卸介质。存储器120可以是易失性存储器(例如寄存器、高速缓存、随机访问存储器(ram))、非非易失性存储器(例如,只读存储器(rom)、电可擦除可编程只读存储器(eeprom)、闪存)或它们的某种组合。存储装置150可以是可拆卸或不可拆卸,并且可以包括机器可读介质,诸如闪存驱动、磁盘或者任何其他介质,其可以能够用于存储信息并且可以在计算系统/服务器100内被访问。

计算系统/服务器100可以进一步包括另外的可拆卸/不可拆卸、易失性/非易失性计算机系统存储介质。尽管未在图1中示出,可以提供用于从可拆卸、非易失性磁盘(例如“软盘”)进行读取或写入的磁盘驱动和用于从可拆卸、非易失性光盘进行读取或写入的光盘驱动。存储器120可以包括至少一个程序产品,具有(例如至少一个)程序模块集合,这些程序模块被配置为执行本文所描述的各种实现的功能。

具有(例如至少一个)程序模块的集合的程序/实用程序工具可以被存储在例如存储器120中。这样的程序模块可以包括但不限于操作系统、一个或多个应用程序、其他程序模块和操作数据。这些示例中的每个示例或特定组合可以包括联网环境的实现。程序模块可以执行根据本公开的多个实现的功能和/或方法。在一些实现中,这样的程序模块也可以存储在存储装置150中。

输入设备130可以是一个或多个各种输入设备。例如,输入设备130可以包括用户设备、诸如鼠标、键盘、追踪球等。通信单元160实现在通信介质上向另外的计算实体进行通信。附加地,计算系统/服务器100的组件的功能可以以单个计算集群或多个计算机器来实现,这些计算机器能够通过通信连接来通信。因此,计算系统/服务器100可以使用与一个或多个其他服务器、网络个人计算机(pc)或者另一个一般网络节点的逻辑连接来在联网环境中进行操作。例如但不限于,通信介质包括有线或无线联网技术。

计算系统/服务器100还可以根据需要与一个或多个外部设备(未示出)进行通信,外部设备诸如存储设备、显示设备等等,与一个或多个使得用户与计算系统/服务器100交互的设备进行通信,或者与使得计算系统/服务器100与一个或多个其他计算设备通信的任何设备(例如,网卡、调制解调器等)进行通信。这样的通信可以经由输入/输出(i/o)接口(未示出)来执行。

中央处理单元110可以通过加速总线(未示出)与图形处理单元170通信。图形处理单元170能够通过总线将数据传送至中央处理单元110并且通过总线从中央处理单元接收数据。图形处理单元170包括图形存储器180,用于存储与卷积神经网络相关联的数据。由于图形存储器180的存储空间比较有限,因此在利用图形处理单元170训练卷积神经网络时需要充分利用并节省存储空间。图形处理单元170还可以包括用于从图形存储器180读取数据和/或向图形存储器180写入数据并对这些数据进行处理的处理单元。图形处理单元170可以与中央处理单元110集成在一个板上,或者可以单独形成在各自的板上。

通常而言,图形处理单元170设计用于加速三维图形的实时显示。随着对图形处理能力的要求的逐渐增加,图形处理单元的性能变得越来越强,并且可编程性越来越高。现在,图形处理单元能够有效地执行很多其他与图形处理无关的任务。例如,图形处理单元具有非常强的并行计算能力,因而可以在神经网络模型中得到很好的应用,特别是应用在对神经网络模型的训练中。本文所描述的卷积神经网络模型可以至少部分地(或者全部)实现在图形处理单元170上,从而缓解对中央处理单元110的计算约束,并且充分利用图形处理单元170的并行处理能力。

卷积神经网络的示例架构

图2示出了根据本公开的一个实现的卷积神经网络的示例架构200。应当理解,图2所示的架构200仅是示例,本公开的实现也可以应用于其他卷积神经网络架构,本公开在此不受限制。

如图2所示,卷积神经网络的输入210为三维形状的八叉树表示。在一些实现中,每个叶节点可以存储该叶节点内的点的平均法向。三维形状的几何结构可以由具有离散法向场的八叉树很好地近似。以八叉树表示为基础,可以构建卷积神经网络模型。应当注意,法向信号和平均法向仅是表示三维形状的数据信号的示例,本公开也可以应用于其他任何适当形式的数据信号,本公开在此不受限制。

如图2所示,在输入210中示出了八叉树的结构。在一些实现中,可以将三维形状的其他类型的表示转换为八叉树表示,然后将其作为输入210提供给卷积神经网络。例如,在立方体212中,可以包含三维几何形状,例如飞机。立方体212对应于八叉树的根节点,即,深度为0。然后,可以将立方体212划分为八个节点,如立方体214所示,即深度为1。因此,每个节点对应于根节点的一个子节点。

由于三维几何形状并非遍布整个立体空间,因此,随着对三维空间的进一步划分,将有一些节点中不包含该三维形状。在这种情况下,将不再对这种空节点或空节点进行划分,而仅对非空节点或非空节点进行进一步划分。因此,空节点也是八叉树的叶节点。随着对包含三维形状的节点进行进一步划分,获得立方体216和218,其分别对应于深度2和3。随着对节点的进一步划分,可以获得深度为d的八叉树。在下文中将结合图3和图4进一步详细描述根据本公开的一些实现的基于八叉树的表示。

在接收到以八叉树表示的输入210之后,可以针对八叉树的节点从下到上进行卷积神经网络操作。如图2所示,神经网络的深度在虚线框260中示出。在示例架构200中,通过对输入210中深度为d的节点执行卷积操作而获得特征图220。特征图220示出了三个通道,然而应当理解也可以应用其他任何合适的通道数目,本公开在此不受限制。通过对特征图220执行池化操作而获得特征图230。然后,再依次重复进行一次或多次卷积和池化操作。例如,通过对深度为3的节点执行卷积操作可以获得特征图240,并且通过对特征图240执行池化操作而获得特征图250。特征图250可以被提供给其他神经网络层(例如,全连接层)以用于分类等各种目的。

由于三维形状的形状特性,八叉树中存在空节点作为叶节点,这使得在这种八叉树中能够省去很多节点。例如,深度为1的空节点将导致该空节点下的所有节点可以被省略。这大大降低了需要存储和操作的节点数据,从而节省了存储空间并提高计算效率。

数据结构

八叉树结构的常规实现缺乏对具体节点的有效的访问,因此,在频繁访问数据的卷积神经网络中使用这些实现是不适当的。为了更进一步提高八叉树的存取效率,在此提出了一种有效的八叉树存储方案,其支持对卷积神经网络的快速访问,并且支持与八叉树表示集成的常规卷积神经网络操作。

在图2所示的架构中,八叉树的最大深度被表示为d。在一些实施例中,可以根据散乱键值(shuffledkey)方法来对八叉树的每个节点分配键或索引。八叉树的每个节点具有8个子节点,因此可以使用从0到7的三位二进制码来对子节点进行编码。换言之,二进制码可以对由每个子节点所覆盖的子区域进行编码。例如,如果x位是1,则子节点覆盖沿x轴方向的节点。否则,子节点覆盖沿与x轴方向相反的方向的节点。此外,还可以类似地设置y位和z位。

在八叉树的第l层,节点的整数坐标(x,y,z)可以由3个l位的数据来表示,即x=(x1x2…xl),y=(y1y2…yl),z=(z1z2…zl),xi,yi,zi∈{0,1}。节点o的散乱键值key(o)被定义为:

key(o):=x1y1z1x2y2z2...xlyldl(1)

其中l表示八叉树中节点o的深度。因此,深度l的节点的散乱键值具有3l位。

每个八叉树节点可以由散乱键值来表示。在一些实现中,深度l的所有散乱键值可以从最小到最大排序,并且这一排序后的数组被定义为sl。应当注意,这种排序方式仅是示例,可以使用其他任何适当的排序方式,本公开在此不受限制。例如,可以按照从最大到最小的方式进行排序。

节点按照散乱键值的大小排序之后,属于同一个父节点的八个子节点被连续存放,属于同一个子树的所有子节点也被连续存放。这一性质对于以下所介绍的池化操作非常有用。

如上所述,由于三维形状的性质,有些八叉树节点是空的,即,不包含三维形状的任何一部分。为记忆非空节点在sl中的位置,将整数标签分配给这些非空节点。标签可以从1开始,并且在下一节点非空的情况下,标签递增。对于空节点,可以将其标签设置为预定值,例如0。这些标签可以被组织成一个向量或数组,可以称为标签向量ll。当数据从下向上流动(即下采样)时,可以使用标签向量。

在一些实现中,所有sl(l=0,1,…,d)可以被合并为一个连续的数组,称为键值向量s。相应地,所有ll(l=0,1,…,d)可以被合并为另一连续的数组,称为标签向量l。此外,可以将每个深度的第一节点的索引存储到数组j中,从而可以立即访问s中深度为l的第r个非空节点o。最初,法向信号与深度d中的八叉树节点耦合,并且被存储在一个连续的数组td中。tl(l=0,1,…,d-1)中的数据是在神经网络中动态计算出来的,也被合并为一个连续数组,称为数据向量t。例如,在步幅为1的卷积层中,经过卷积计算之后的数据被存储在该层对应的深度的节点中,以用于后续处理,例如池化操作。注意,数组sl,ll和tl具有相同的长度并且共享相同的索引。给定一个节点的散乱键值,可以搜索数组sl以获得对应的索引,其中存储在ll和tl中的信息可以被直接地获取。这四个向量(s、l、j、t)可以用于表示八叉树的数据结构。

在一些实现中,不同三维形状具有不同的八叉树结构,为了支持具有批次输入的卷积神经网络的有效训练或推断,一个批次中所有三维形状的八叉树可以被合并成一个超八叉树。例如,一个批次内的八叉树的所有sl、ll和tl可以连接成超八叉树的向量超八叉树的向量可以如上所述进行组织,在此不再赘述。超八叉树可以用作卷积神经网络的输入,使能够有效地处理数据而不生成临时数组。

由于八叉树结构涉及三维空间的表示,因此比较难以直观地示出。因此,为了方便讨论,以下结合图3和图4的四叉树结构300和400来对以上所介绍的数据结构进行详细说明。应当理解,虽然以下详细介绍如何确定深度为2的四叉树(或二维分割)的表示,以下示例仅仅为了使得本领域技术人员更清楚地理解技术方案而并非限定本申请要求保护的范围。以下讨论可以很容易应用到根据本公开的实现的八叉树结构。如图3所示,四叉树结构300是深度为2的四叉树结构,其中黑点表示图形信息或数据,并且不包含黑点的方块为空节点,并且包含黑点的方块为非空节点。父节点由方块330示出,其索引为0,由s0表示。相应地,由于该节点包含图形数据,将其对应的标签赋值为1,由l0表示。

在四叉树的第一层(深度为1),将父节点330分割为四个象限,分别标记为0、1、2、3,如方块320所示。在图3中,将x轴设置为横向方向,并且将y轴设置为纵向方向。现在以节点2为例来解释如何确定第一层的节点的索引。第一层的节点的索引可以表示为x1y1。如上所述,如果x位是1,则子节点覆盖沿x轴正向(右侧)的象限,如果y位是0,则子节点覆盖沿y轴反向(下侧)的象限。因此,xy=10(2)=2(10)表示在右下角处的象限。由于在该象限中不包含图形数据,则对应的标签被赋值为0。同理,索引0、1、3分别表示左下角、左上角和右上角的象限,这在方块320中示出。因此,四叉树的第一层的这些索引可以由s1来表示,其相应的标签由l1来表示。

从方块320可以看出,在四叉树的第一层,象限1和2不包含图形,因而无需对其进行进一步分割。相反,象限0和3都包含图形,因而可以对其进行进一步分割。对方块320分割之后可以获得方块310,即四叉树的深度2所对应的层。方块310包括八个节点,其中节点0-3对应于方块320中的节点0,并且节点12-15对应于方块320中的节点3。

现在以节点13为例来解释如何确定第二层的节点的索引。第二层的节点的索引可以表示为x1y1x2y2,其中对于节点13而言,如上所述x1y1=11(2)。由于节点13覆盖沿x轴方向在左侧并且沿y轴方向在上侧的象限,因此x2y2=01(2)。因此,节点13的索引为1101(2)=13(10)。

图4进一步示出了图3的四叉树的层级结构400和相关数据表示。如图4所示,在每个节点中示出了相应的索引,例如在根节点示出了其索引为0。

如上所述,可以将s0、s1和s2合并成一个一维向量或数组s以表示四叉树的索引。例如,可以将s表示为“0,1,2,3,12,13,14,15,0,1,2,3,0”,如图4所示。在四叉树的每一层,第一个象限或节点由该层的索引0所表示,如图3所示。相应地,l0、l1和l2也可以合并成一个一维向量或数组l,由“1,0,2,3,0,4,0,5,1,0,0,2,1”所表示。因此,在向量s中,四叉树的三层的第一节点的索引在s中的位置分别为“12,8,0”,即在s中分别处于第13个位置,第9个位置和第1个位置。这一位置信息由j来表示。与索引s相对应,还可以存储节点的相关形状数据作为与s具有相同维度的向量t。例如,该形状数据可以是如上所述的相应节点内的点的平均法向。

以上仅介绍了一种示例合并方式,应当理解,还可以采用其他合并方式,本公开在此不受限制。例如,可以将s0、s1和s2合并成“0,0,1,2,3,0,1,2,3,12,13,14,15”,相应地,l和j分别为“1,1,0,0,2,1,0,2,3,0,4,0,5”和“0,1,5”。

卷积神经网络的操作

卷积神经网络中最基本的操作是卷积和池化。对于图像处理,这些操作对所有区域进行处理,因为每个像素均包含颜色信息,并且信息需要经由这些操作被传播到其他区域。然而,对于三维形状而言,几何信息仅存在于有限的区域中。将信息传播至空的区域是没有必要的,并且占用很多的计算资源。根据本公开的一些实现,将信息传播仅限制在八叉树中,并且相应地进行卷积和池化操作。换言之,在存在八叉树节点的地方执行卷积神经网络的操作。此外,还在八叉树结构上扩展了反卷积和反池化的操作。

为了将卷积操作应用至八叉树的一个节点,需要确定相同深度的相邻节点。为了有效地进行计算,可以将卷积操作符写为如下展开形式:

其中oijk表示o的相邻节点,t(·)表示在oijk上相关联的特征向量,t(n)(·)表示特征向量的第n通道,是卷积操作的权重。如果oijk在八叉树中不存在,则t(oijk)被设置为零向量。在这种形式下,卷积操作被转换为矩阵运算,这些线性代数运算能够在图形计算单元上有效地实现。

如果卷积操作的卷积核(也称滤波器)的大小为k,则卷积操作要求访问每个八叉树节点的k3-1个相邻节点。为了获得相邻的节点,从上到下遍历八叉树不是足够有效的选择。如果卷积操作的步幅(stride)为1,则卷积操作应用于八叉树的当前层中的所有节点。常规地,对于每个节点,需要执行k3-1次查询。然而,相同父节点下的8个子节点的邻居高度重叠。因此,相同父节点下的8个子节点的邻居总共只有(k+1)3个节点(包含这8个子节点自身)。因此,邻居搜索可以通过仅搜索8个子节点的(k+1)3-8个邻居节点而进行加速。例如,如果k=3,则这一优化可以将搜索操作加速大于两倍。

图5示出了根据本公开的一些实现的卷积操作500的示例。在图5所示的实现中,卷积核的大小为3,然而,应当理解这仅是示例,本公开在此不受限制。

图5示出了具有相同父节点的8个子节点510,其中与每个子节点相邻的27个节点(包括该节点自身)分别由八个立方体520中的相应的一个立方体表示。例如,与节点511相邻的27个节点(包括节点511自身)由立方体521表示,并且与节点513相邻的27个节点(包括节点513自身)由立方体523表示。这些立方体存在大量的重合,实际上仅包括(k+1)3=64个节点(包含节点510本身),由立方体530表示。如果按照常规方法从上到下遍历八叉树,则需要执行8×k3=216次查询。而根据图5所示的方法,仅需64次,这大大减小了查询次数。

如果步幅为2,对于相同父节点的8个子节点,卷积可以应用于第一个子节点而忽略其他7个节点,这等价于以2的因子对特征图的分辨率进行下采样。对于步幅为2r(r>1)的卷积操作,该操作可以应用于属于高度r的每个子树的第一个节点,然后,特征图将以2r的因子进行下采样。由于八叉树的特殊层级结构,卷积的步幅被限制为2的整数次幂。

在以大于1的步幅执行卷积操作时,发生下采样,并且形状数据数组t的长度变短。数据在八叉树中从下向上流动,并且存储在ll中的标签信息可以用于获得对应性。图6示出了这样的一个四叉树的示例600。数组t2的最初长度为8,当发生下采样时,数组的长度变为2。然而,在四叉树的深度为1的情况下,存在4个节点,因此数组t1的长度应当为4。将数组l1中的信息与下采样的数组t(1)相结合,可以很容易地获得更新后的数组t1。如图6所示,例如,对于深度为2的节点“1,0,2,3”(由虚线框610示出),由于在l1中与“1,0,2,3”相关联的父节点的标签为1和0,经下采样的数据620对应于l1中的标签1。因此,数据620用于更新与l1中的标签1相对应的数据630。

在一些实现中,如图2所示,卷积神经网络可以包括一个或多个池化层。池化层的主要功能是逐渐地缩小表示的空间尺寸。池化层在特征图的每个通道上独立操作,并且相应地减小其空间尺寸。池化层可以具有多种形式,例如最大池化层或平均池化层。

图7示出了根据本公开的一些实现的池化操作700的示意图。常见的最大池化层是以步幅2来应用尺寸为2的滤波器。在八叉树表示中,最大池化操作等价于将具有相同父节点的8个节点的数据求最大值。根据本公开的一些实现,相同父节点下的8个节点被连续存储,因此,在八叉树上应用最大池化操作约化为从数组中的8个连续元素中选择最大元素。如图7所示,具有相同父节点的8个节点中的最大数据为9,从而选择该最大元素,以将该数据传送给父节点。这一操作可以在图形处理单元上快速实现。因此,特征图的分辨率会根据2的因子被下采样,并且父节点的信息可以用于指导进一步的操作。

图6也示出了在最大池化的情况下如何对数据进行操作。例如,深度为2的节点“1,0,2,3”所对应的数据为“5,0,2,1”。因此,在对这些节点进行最大池化操作之后所获得的数值为5,如620所示。由于l1中与“1,0,2,3”相关联的父节点的标签为1和0,因此经下采样的数据620对应于l1中的标签1,即可以将5赋值给数据630。

如果池化操作涉及其他尺寸的滤波器和/或其他步幅,则可以类似于上述卷积操作来寻找相关联的节点。例如,如果最大池化层以步幅4来应用尺寸为4的滤波器,则等价于从一个节点的64个孙节点的元素中选择最大元素。

在一些实现中,卷积神经网络还可以包括反池化层,其是池化层的逆操作并且为上采样操作。反池化层可以用于卷积神经网络的可视化和图像分割。反池化操作通常伴随着池化操作出现。在应用最大池化操作之后,每个池化区域内的最大值的位置可以被记录在一组开关变量中。对应的最大反池化操作将利用这些开关变量来将当前特征图中的信号放置在上采样的特征图的适当位置处。

图8示出了根据本公开的一些实现的反池化操作800的示意图,其与图7所示的池化操作相对应。在图7中应用最大池化操作之后,最大值的位置被记录下来,因此在图8中应用最大反池化操作时,将利用这一位置信息将当前特征图中的信号(在该示例中为5)放置在上采样的特征图的适当位置处。

在一些实现中,卷积神经网络还可以包括反卷积层,其是卷积层的逆操作,即将卷积层的前向计算(正向的卷积计算)和后向计算(反传卷积计算的梯度)颠倒过来。反卷积操作的前向计算函数直接使用卷积的后向计算函数,其后向计算函数直接使用卷积的前向计算函数。

应当注意,以上结合在上一节所介绍的数据结构对卷积神经网络的操作进行了详细介绍。然而,应当理解,这些操作也可以结合其他数据结构应用于由图2所示的输入210所表示的八叉树。

示例训练过程

图9示出了根据本公开的一个实现的用于训练卷积神经网络的方法900的流程图。该方法可以由图1所示的图形处理单元170所执行。

在920,获取用于表示三维形状的八叉树。如上所述,八叉树的节点包括空节点和非空节点,空节点不包括三维形状并且为八叉树的叶节点,并且非空节点包括三维形状的至少一部分。在一些实现中,三维形状的八叉树表示可以存储在图形处理单元170的图形存储器中。

在一些实现中,该八叉树可以由以下数据中的至少一项来表示:八叉树的节点的索引;八叉树的节点的标签,标签至少指示节点为空节点还是非空节点;八叉树的节点的形状数据,形状数据至少部分指示三维形状在节点所表示的节点中的形状;以及八叉树的层次结构。在一些实现中,索引、标签、形状数据和层次结构中的至少一个被定义为一维向量。例如,索引、标签、形状数据和层次结构可以分别由上文所介绍的向量s、l、t和j实现。

在一些实现中,可以通过将所接收的数据信号转换为用于表示三维形状的八叉树。例如,首先接收表示三维形状的数据信号,并且响应于接收到该数据信号,确定用于表示三维形状的八叉树。

在940,针对八叉树中具有与卷积神经网络的卷积层相关联的深度的节点,执行该卷积层的卷积操作以获得卷积层的输出。执行卷积操作可以例如通过将卷积层的参数与相关联的数据进行运算而获得,例如,如等式(2)所示。在一些实现中,可以从具有与卷积层相关联的深度的节点,确定具有相同父节点的八个节点。接着,基于八叉树,确定八个节点的节点邻域,节点邻域包括与八个节点中的至少一个相邻的节点。然后,在节点邻域上执行针对八个节点的卷积层的操作。通过这种方式可以大大简化卷积运算所需要的搜索操作,非常方便地从图形存储器180读取数据。

在一些实现中,卷积神经网络还包括池化层。方法900还包括从具有与池化层相关联的深度的节点,确定具有相同父节点的八个节点。然后,对八个节点的形状数据执行下采样操作。池化层可以是最大池化层或平均池化层。例如,如图7所示,在最大池化层的一个实现中,可以确定具有相同父节点的八个节点,然后选择其中形状数据具有最大值的节点。

在一些实现中,卷积神经网络包括反池化层。方法900还包括从具有与反池化层相关联的深度的节点,确定具有相同父节点的八个节点。然后,对八个节点的形状数据执行上采样操作。例如,反池化操作可以伴随着池化操作出现。在应用最大池化操作之后,每个池化区域内的最大值的位置可以被记录下来。对应的最大反池化操作将当前特征图中的信号放置在上采样的特征图的适当位置处。

在一些实现中,卷积神经网络包括反卷积层。方法900还包括从具有与反卷积层相关联的深度的节点,确定具有相同父节点的八个节点。接着,基于八叉树,确定八个节点的节点邻域,节点邻域包括与八个节点中的至少一个相邻的节点。然后,在节点邻域上执行针对八个节点的反卷积层的操作。

例如,在分类应用中,可以将通过卷积神经网络所获得的结果与真相(groundtruth)进行比较。然后,将损失函数的梯度反向传播,以更新卷积神经网络的参数。由于卷积神经网络在训练过程中需要处理大量的数据,因此方法900特别有利于卷积神经网络的训练过程。训练过程可以将训练数据分批进行,因而也特别适用于并行处理,因而特别适合由图形处理单元执行。然而,应当注意,该方法900也可以适用于使用该卷积神经网络模型进行判别等的过程。

卷积神经网络的相关应用

近些年来,卷积神经网络的网络架构的演进非常迅速。对于完成很多任务,更深更宽的网络已经呈现出强大的优势。三维卷积神经网络可以使用不同的网络结构来加强其功能。在这里,为了能够更清楚地说明根据本公开的一些实现的基于八叉树的表示的优势,使用较为简单的神经网络进行介绍。然而,应当理解,根据本公开的实现的基于八叉树的表示可以应用于各种卷积神经网络架构,本公开在此不受限制。

基于八叉树的卷积神经网络的设计包括在八叉树数据结构上从下到上重复地应用卷积和池化操作。另外,可以使用激活函数,例如修正线性单元(relu)之类的非线性激活函数来激活输出。还可以使用批量归一化(bn)来减少内部协方差偏移。操作序列“卷积+bn+relu+池化”是该卷积神经网络的基本单元。如果卷积应用于l深度的节点,则该基本单元可以由ul表示。ul的特征图的通道数可以被设置为2max(2,9-l),其中max为最大值函数,并且卷积核的尺寸可以设置为例如3。因此,这一卷积神经网络可以由以下形式来定义:

输入→ud→ud-1→…→u2

并且为了方便起见,称之为o-cnn(d)。

由于特征图仅与节点相关联,其存储空间在对应的深度与节点的数目呈线性关系。完全体素(fullvoxel)表示占用空间为大约而八叉树结构仅占用空间其中n是分辨率数目。因此,根据本公开的一些实现的八叉树表示可以显著降低存储空间,非常适用于存储空间相对较小的图形处理单元。

在一些实现中,o-cnn可以应用于形状分析,例如,对象分类、形状检索和形状分割等。对于对象分类,可以在o-cnn(d)之后添加两个全连接(fc)层、软最大化(softmax)层和两个舍弃(dropout)层,即:

o-cnn(d)→dropout→fc(128)→dropout→

fc(nc)→softmax→输出,

其中128表示fc中的神经元的数目,nc表示分类类别的数目,并且引入舍弃层用于防止过拟合问题。对于形状检索,可以使用来自以上对象分类的输出作为搜索最相近形状的关键字。

对于形状分割,可以将反卷积网络与o-cnn(d)级联以获得对于每个叶节点上的分段标签。这里反卷积网络是o-cnn(d)的镜像,其中反卷积和反池化操作取代卷积和池化操作。将“反池化+反卷积+bn+relu”作为基本单元,并且如果反池化应用于l深度的节点,则将其表示为dul。反卷积网络d-o-cnn(d)的形式可以是:du2→du3→…→dud-1。

经测试,对于卷积神经网络的以上三种应用,存储效率和计算效率都得到显著地提高。相应地,可以显著地增加八叉树表示的深度,从而进一步提高神经网络模型的精度。

本文中以上描述的功能可以至少部分地由一个或多个硬件逻辑部件来执行。例如,非限制性地,可以使用的示范类型的硬件逻辑部件包括:现场可编程门阵列(fpga)、专用集成电路(asic)、专用标准产品(assp)、片上系统(soc)、复杂可编程逻辑设备(cpld)等等。

用于实施本公开的方法的程序代码可以采用一个或多个编程语言的任何组合来编写。这些程序代码可以提供给通用计算机、专用计算机或其他可编程数据处理装置的处理器或控制器,使得程序代码当由处理器或控制器执行时使流程图和/或框图中所规定的功能/操作被实施。程序代码可以完全在机器上执行、部分地在机器上执行,作为独立软件包部分地在机器上执行且部分地在远程机器上执行或完全在远程机器或服务器上执行。

在本公开的上下文中,机器可读介质可以是有形的介质,其可以包含或存储以供指令执行系统、装置或设备使用或与指令执行系统、装置或设备结合地使用的程序。机器可读介质可以是机器可读信号介质或机器可读储存介质。机器可读介质可以包括但不限于电子的、磁性的、光学的、电磁的、红外的、或半导体系统、装置或设备,或者上述内容的任何合适组合。机器可读存储介质的更具体示例会包括基于一个或多个线的电气连接、便携式计算机盘、硬盘、随机存取存储器(ram)、只读存储器(rom)、可擦除可编程只读存储器(eprom或快闪存储器)、光纤、便捷式紧凑盘只读存储器(cd-rom)、光学储存设备、磁储存设备、或上述内容的任何合适组合。

此外,虽然采用特定次序描绘了各操作,但是这不应当理解为要求这些操作以所示出的特定次序或以顺序次序执行来执行。在一定环境下,多任务和并行处理可能是有利的。同样地,虽然在上面论述中包含了若干具体实现细节,但是这些不应当被解释为对本公开的范围的限制。在单独的实施例的上下文中描述的某些特征还可以组合地实现在单个实施例中。相反地,在单个实施例的上下文中描述的各种特征也可以单独地或以任何合适的子组合的方式实现在多个实施例中。

示例实现

以下列出了本公开的一些示例实施例。

根据一些实施例,提供了一种设备。该设备包括:存储器,被配置为存储用于表示三维形状的八叉树,八叉树的节点包括空节点和非空节点,空节点不包括三维形状并且为八叉树的叶节点,并且非空节点表示包括三维形状的至少一部分;以及处理单元,耦合至存储单元并且被配置为执行动作,动作包括:从存储器获取用于表示三维形状的八叉树;以及针对八叉树中具有与卷积神经网络的卷积层相关联的深度的节点,执行卷积层的卷积操作以获得卷积层的输出。

在一些实施例中,获取用于表示三维形状的八叉树包括基于对三维形状的空间分割来获取以下至少一项:八叉树的节点的索引;八叉树的节点的标签,标签至少指示节点为空节点还是非空节点;八叉树的节点的形状数据,形状数据至少部分指示三维形状在节点中的形状;以及八叉树的层次结构。

在一些实施例中,获取用于表示三维形状的八叉树包括:接收表示三维形状的数据信号;以及响应于接收到数据信号,确定用于表示三维形状的八叉树。

在一些实施例中,执行卷积层的卷积操作包括:从具有与卷积层相关联的深度的节点,确定具有相同父节点的八个节点;基于八叉树,确定八个节点的节点邻域,节点邻域包括与八个节点中的至少一个相邻的节点;以及在节点邻域上执行针对八个节点的卷积层的操作。

在一些实施例中,卷积神经网络包括池化层,并且动作还包括:从具有与池化层相关联的深度的节点,确定具有相同父节点的八个节点;以及对八个节点的形状数据执行下采样操作。

在一些实施例中,卷积神经网络包括反池化层,并且动作还包括:从具有与反池化层相关联的深度的节点,确定具有相同父节点的八个节点;以及对八个节点的形状数据执行上采样操作。

在一些实施例中,卷积神经网络包括反卷积层,并且动作还包括:从具有与反卷积层相关联的深度的节点,确定具有相同父节点的八个节点;基于八叉树,确定八个节点的节点邻域,节点邻域包括与八个节点中的至少一个相邻的节点;以及在节点邻域上执行针对八个节点的反卷积层的操作。

在一些实施例中,索引、标签、形状数据和层次结构中的至少一个被定义为连续向量。

在一些实施例中,设备是图形处理单元(gpu)。

根据一些实施例,提供了一种计算机实现的方法。该方法包括:获取用于表示三维形状的八叉树,八叉树的节点包括空节点和非空节点,空节点不包括三维形状并且为八叉树的叶节点,并且非空节点包括三维形状的至少一部分;以及针对八叉树中具有与卷积神经网络的卷积层相关联的深度的节点,执行卷积层的卷积操作以获得卷积层的输出。

在一些实施例中,获取用于表示三维形状的八叉树包括基于对三维形状的空间分割来获取以下至少一项:八叉树的节点的索引;八叉树的节点的标签,标签至少指示节点为空节点还是非空节点;八叉树的节点的形状数据,形状数据至少部分指示三维形状在节点中的形状;以及八叉树的层次结构。

在一些实施例中,获取用于表示三维形状的八叉树包括:接收指示三维形状的数据信号;以及响应于接收到数据信号,确定用于表示三维形状的八叉树。

在一些实施例中,执行卷积层的卷积操作包括:从具有与卷积层相关联的深度的节点,确定具有相同父节点的八个节点;基于八叉树,确定八个节点的节点邻域,节点邻域包括与八个节点中的至少一个相邻的节点;以及在节点邻域上执行针对八个节点的卷积层的操作。

在一些实施例中,卷积神经网络包括池化层,并且方法还包括:从具有与池化层相关联的深度的节点,确定具有相同父节点的八个节点;以及对八个节点的形状数据执行下采样操作。

在一些实施例中,卷积神经网络包括反池化层,并且方法还包括:从具有与反池化层相关联的深度的节点,确定具有相同父节点的八个节点;以及对八个节点的形状数据执行上采样操作。

在一些实施例中,卷积神经网络包括反卷积层,并且方法还包括:从具有与反卷积层相关联的深度的节点,确定具有相同父节点的八个节点;基于八叉树,确定八个节点的节点邻域,节点邻域包括与八个节点中的至少一个相邻的节点;以及在节点邻域上执行针对八个节点的反卷积层的操作。

在一些实施例中,索引、标签、形状数据和层次结构中的至少一个被定义为连续向量。

在一些实施例中,执行卷积层的卷积操作包括在图形处理单元(gpu)处执行卷积层的卷积操作。

根据一些实施例,提供了一种计算机程序产品。该计算机程序产品包括有形地存储在计算机可读介质上的指令,指令在被机器执行时使机器执行方法,方法包括:获取用于表示三维形状的八叉树,八叉树的节点包括空节点和非空节点,空节点不包括三维形状并且为八叉树的叶节点,并且非空节点包括三维形状的至少一部分;以及针对八叉树中具有与卷积神经网络的卷积层相关联的深度的节点,执行卷积层的卷积操作以获得卷积层的输出。

在一些实施例中,获取用于表示三维形状的八叉树包括基于对三维形状的空间分割来获取以下至少一项:八叉树的节点的索引;八叉树的节点的标签,标签至少指示节点为空节点还是非空节点;八叉树的节点的形状数据,形状数据至少部分指示三维形状在节点中的形状;以及八叉树的层次结构。

在一些实施例中,获取用于表示三维形状的八叉树包括:接收指示三维形状的数据信号;以及响应于接收到数据信号,确定用于表示三维形状的八叉树。

在一些实施例中,执行卷积层的卷积操作包括:从具有与卷积层相关联的深度的节点,确定具有相同父节点的八个节点;基于八叉树,确定八个节点的节点邻域,节点邻域包括与八个节点中的至少一个相邻的节点;以及在节点邻域上执行针对八个节点的卷积层的操作。

在一些实施例中,卷积神经网络包括池化层,并且方法还包括:从具有与池化层相关联的深度的节点,确定具有相同父节点的八个节点;以及对八个节点的形状数据执行下采样操作。

在一些实施例中,卷积神经网络包括反池化层,并且方法还包括:从具有与反池化层相关联的深度的节点,确定具有相同父节点的八个节点;以及对八个节点的形状数据执行上采样操作。

在一些实施例中,卷积神经网络包括反卷积层,并且方法还包括:从具有与反卷积层相关联的深度的节点,确定具有相同父节点的八个节点;基于八叉树,确定八个节点的节点邻域,节点邻域包括与八个节点中的至少一个相邻的节点;以及在节点邻域上执行针对八个节点的反卷积层的操作。

在一些实施例中,索引、标签、形状数据和层次结构中的至少一个被定义为连续向量。

尽管已经采用特定于结构特征和/或方法逻辑动作的语言描述了本主题,但是应当理解所附权利要求书中所限定的主题未必局限于上面描述的特定特征或动作。相反,上面所描述的特定特征和动作仅仅是实现权利要求书的示例形式。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1