神经网络模型的运行方法、可读介质和电子设备与流程

文档序号:32601701发布日期:2022-12-17 16:20阅读:30来源:国知局
神经网络模型的运行方法、可读介质和电子设备与流程

1.本技术涉及人工智能领域,特别涉及一种神经网络模型的运行方法、可读介质和电子设备。


背景技术:

2.随着人工智能(artificial intelligence,ai)的迅速发展,卷积神经网络模型在人工智能领域的应用越来越广泛。在卷积神经网络的计算过程中,是将待计算的数据全部输入到卷积层,然后逐层进行计算。由于现有的卷积神经网络的通道数越来越多,如果同时输入全部数据通道,会导致数据量较大,整个卷积计算过程需要消耗大量的存储和计算资源。
3.由于硬件设备(例如计算机装置)的计算能力有限,在神经网络的计算过程中,如果输入的待计算的数据较多,而且每一层卷积层的权值通道较多,会产生很多的中间结果,导致对硬件设备的要求过高。对于一些性能不够高的硬件设备来说,过多的输入数据和生成的中间数据可能会造成数据溢出,导致计算出现错误。


技术实现要素:

4.有鉴于此,本技术实施例提供了神经网络模型的运行方法、可读介质和电子设备。
5.第一方面,本技术实施例提供了一种神经网络模型的运行方法,应用于电子设备,神经网络模型包括多个计算层,该方法包括:根据输入数据张量的大小以及每层计算层的模型参数,预测输入数据张量对应的计算结果张量的大小;根据计算结果张量的大小,确定多个子结果张量的大小;基于每个子结果张量的大小以及每层计算层的模型参数,确定每个子结果张量在输入数据张量中对应的数据块的范围;根据每层计算层的模型参数对每个数据块进行计算,得到每个数据块对应的子结果张量;根据每个数据块对应的子结果张量,确定输入数据张量对应的计算结果张量。
6.通过本技术实施例提供的方法,电子设备每次只用对输入数据中部分数据进行计算,不会一次性产生较多中间数据,减少了运行神经网络模型过程中对内存的占用。电子设备不用将模型发送到其他计算设备上运行,减少了网络资源的占用,也减少了将模型发送到其他计算设备所带来的时延。并且,神经网络模型就可以部署在本地设备上运行,在进行完所有卷积层的计算之后,将最终结果再写入到外部存储器中,减少了访问外部存储器的次数。将输入数据拆分为多个数据块,还可以将不同数据块交由处理器的不同计算引擎进行计算,不同计算引擎可以同步运行,提高了运行效率。
7.在上述第一方面的一种可能实现中,计算层为卷积层或者反卷积层,卷积层用于对输入数据张量进行卷积操作,反卷积层用于对输入数据张量进行反卷积操作;模型参数包括卷积操作或反卷积操作的步长、卷积核大小以及填充块数量。
8.在上述第一方面的一种可能实现中,基于每个子结果张量的大小以及每层计算层的模型参数,确定每个子结果张量在输入数据张量中对应的数据块的范围,包括:根据每个
子结果张量的大小以及每层计算层的模型参数,确定每个数据块的大小;根据每个子结果张量的大小以及每层计算层的模型参数,确定相邻数据块之间重叠区域的大小;根据每个数据块的大小以及相邻数据块之间重叠区域的大小,确定每个子结果张量在输入数据张量中对应的数据块的范围。
9.在上述第一方面的一种可能实现中,根据每个子结果张量的大小以及每层计算层的模型参数,确定相邻数据块之间重叠区域的大小,包括:根据每个子结果张量在不同维度方向上的前一个子结果张量的大小以及每层计算层的模型参数,确定当前子结果张量对应的数据块与在不同维度方向上的前一子结果张量对应的数据块之间的重叠区域的大小。
10.在上述第一方面的一种可能实现中,计算层共有m层,根据每个子结果张量的大小以及每层计算层的模型参数,确定相邻数据块之间重叠区域的大小,还包括:根据每个子结果张量的大小以及第m层计算层的模型参数,确定相邻数据块在对应于第m层计算层的输入数据张量中重叠区域的大小;将第m层计算层的输入数据张量作为第m-1层计算层的输出数据,并确定相邻数据块在对应于第m-1层计算层的输入数据张量中重叠区域的大小,直到确定相邻数据块在对应于第一层计算层的输入数据张量中重叠区域的大小。
11.在上述第一方面的一种可能实现中,根据每层计算层的模型参数对每个数据块进行计算,得到每个数据块对应的子结果张量,包括:将多个数据块分别发送给不同计算引擎,不同计算引擎分别对接收到数据块根据每层计算层的模型参数进行计算,得到每个数据块对应的子结果张量。
12.在上述第一方面的一种可能实现中,计算引擎为电子设备处理器的计算引擎,或者计算引擎为其他电子设备处理器的计算引擎。
13.第二方面,本技术实施例提供了一种可读介质,该可读介质中包含有指令,当指令被电子设备的处理器执行时使电子设备实现上述第一方面及上述第一方面的各种可能实现提供的任意一种神经网络模型的运行方法。
14.第三方面,本技术实施例提供了一种电子设备,该电子设备包括:存储器,用于存储由电子设备的一个或多个处理器执行的指令;以及处理器,是电子设备的处理器之一,用于运行指令以使电子设备实现上述第一方面及上述第一方面的各种可能实现提供的任意一种神经网络模型的运行方法。
15.第四方面,本技术实施例提供了一种计算机程序产品,计算机程序产品包括指令,该指令被电子设备执行时使电子设备实现上述第一方面及上述第一方面的各种可能实现提供的任一种神经网络模型的运行方法。
附图说明
16.图1根据本技术的一些实施例,示出了一种卷积神经网络的架构示意图;
17.图2根据本技术的一些实施例,示出了一种卷积操作的计算过程的示意图;
18.图3根据本技术的一些实施例,示出了一种反卷积操作的计算过程的示意图;
19.图4根据本技术的一些实施例,示出了一种部署卷积神经网络的示意图;
20.图5根据本技术的一些实施例,示出了一种卷积计算中重叠区域的示意图;
21.图6根据本技术的一些实施例,示出了一种数据块划分方法的示意图;
22.图7根据本技术的一些实施例,示出了一种神经网络模型的运行方法的流程示意
图;
23.图8a-图8c根据本技术的一些实施例,示出了一种三层卷积层的计算过程的示意图;
24.图9a-图9c根据本技术的一些实施例,示出了一种计算数据块起始位置的示意图;
25.图10根据本技术的一些实施例,示出了一种神经网络模型的运行装置的架构示意图;
26.图11根据本技术的一些实施例,示出了一种电子设备的结构示意图。
具体实施方式
27.本技术的说明性实施例包括但不限于神经网络模型的运行方法、可读介质和电子设备。
28.为了便于理解,首先介绍本技术实施例涉及的术语。
29.卷积神经网络(convolutional neuron network,cnn)是一种带有卷积结构的深度神经网络,是一种深度学习(deep learning)架构,深度学习架构是指通过机器学习的算法,在不同的抽象层级上进行多个层次的学习。作为一种深度学习架构,cnn是一种前馈(feed-forward)人工神经网络,可以应用于图像处理、自然语言处理以及计算机视觉。
30.下面以cnn应用于图像处理为例对cnn的结构进行举例说明。
31.图1根据本技术的一些实施例,示出了一种cnn模型的结构示意图。如图1所示,cnn模型可以包括输入层,卷积层,池化层,全连接层以及输出层,其中池化层为可选的。
32.输入层用于对输入图像进行预处理,例如归一化操作、去均值操作、主成分分析(principal component analysis,pca)降维操作。
33.卷积层可以包括多层卷积计算,如图1所示卷积层可以包括如示例的3层卷积层,例如conv1,conv2以及conv3。卷积层可以包括很多个卷积算子,卷积算子也称为卷积核(kernel),相当于一个从输入图像中提取特定信息的过滤器。卷积核本质上是一个权重矩阵,其权重矩阵的纵深维度(depth dimension)和输入图像的纵深维度是相同的,权重矩阵中的权重值在实际应用中需要经过大量的训练得到,通过训练得到的权重值形成的各个权重矩阵可以从输入图像中提取信息,从而帮助卷积神经网络进行正确的预测。
34.卷积层的计算过程为卷积核与输入图像中卷积核大小(kernel size)的数据进行卷积运算,每计算完一个kernel size的数据后,就往后移动一个步长(stride),计算下一个kernel size的数据,直到计算完全部数据,最终得到的结果即为该层卷积层的特征图(feature map)。应理解,在卷积操作中,每层卷积层计算得到feature map都会越来越小,为了保证feature map的大小,并且为了增加图像边缘的像素点在卷积层中被使用的次数,会在输入图像的边缘加入填充(padding)。
35.池化层用于减少卷积神经网络的计算量,池化层在图1中未示出。在图像处理过程中,池化层的目的就是减少图像的空间大小。在卷积层之后可以周期性地引入池化层,具体可以是一层卷积层后面跟一层池化层,也可以是多层卷积层后面接一层或多层池化层。池化层可以包括平均池化算子和/或最大池化算子,以用于对输入图像进行采样得到较小尺寸的图像。平均池化算子可以在特定范围内对图像中的像素值进行计算产生平均值。最大池化算子可以在特定范围内取该范围内值最大的像素作为最大池化的结果。
36.全连接层用于整合卷积层或者池化层中具有类别区分性的局部信息,生成最终的输出信息(所需要的类信息或别的相关信息)。全连接层可以包括多层结构,每层全连接层的参数可以根据具体的任务类型的相关训练数据进行预先训练得到,例如该任务类型可以包括图像识别,图像分类,图像超分辨率重建等等。
37.输出层使用激活函数将神经元的输入映射到输出端。同时,输出层还具有类似分类交叉熵的损失函数,具体用于计算预测误差,一旦整个卷积神经网络的前向传播完成,反向传播就会开始更新前面提到的各层的权重值以及偏差,以减少卷积神经网络的损失及卷积神经网络通过输出层输出的结果和理想结果之间的误差。
38.需要说明的是,如图1所示的卷积神经网络仅作为一种卷积神经网络的示例,在具体的应用中,卷积神经网络还可以以其他网络模型的形式存在。
39.在一些实施例中,神经网络模型还包括反卷积神经网络,反卷积神经网络包括反池化层,矫正层和反卷积层(deconvolution)。其中,反池化层对应cnn中的池化层,矫正层对应cnn中激活函数,反卷积层对应cnn中的卷积层,反卷积也可称为转置卷积。
40.卷积层和反卷积层可统称为计算层,卷积层进行卷积操作,反卷积层进行反卷积操作。下面结合图像举例说明卷积操作和反卷积操作的计算过程。其中,图2和图3中kernel size均为3*3,图2以输入图像为4*4的二维矩阵,图3以输入图像为2*2的二维矩阵为例进行举例说明。应理解,输入图像为二维,kernel也应该为二维。
41.如图2所示,卷积操作中输入的输入图像为4*4,kernel size为3*3,stride为1时,如图2中(a)所示卷积核将先和输入图像中前3*3个单位的数据进行卷积,得到计算结果1。然后,如图2中的(b)所示,根据stride等于1,向右移动一个单位,计算后3*3个单位的数据,得到计算结果2。以此类推,如图2中的(c)和图2中的(d)所示,得到计算结果3和计算结果4。最终,计算结果1-计算结果4即为该层卷积层输出的feature map。
42.如图3所示,反卷积操作中输入图像为2*2,kernel size为3*3,stride为1,并在输入图像四周各填充了两行padding。参考图2所示的卷积过程,最终会得到输出的feature map为4*4的大小。
43.在一些实施例中,在输入层,如果输入图像是灰度图片,那就只会得到一个feature map,如果是彩色图片,会有红绿蓝3个通道的feature map,即三维矩阵。
44.也即是说,卷积操作之后,输出的feature map通常会小于输入图像,而反卷积操作之后,输出的feature map通常会大于输入图像。应理解,上述图2和图3是以卷积操作没有填充padding,反卷积操作填充了padding为例进行说明,在卷积操作中也可以对输入图像进行padding,本技术对此不作具体限定。
45.由此可见,计算层的计算过程中,无论是卷积操作还是反卷积操作,都是将待计算的数据全部输入到计算层,然后进行计算。通常计算层输入的数据量都较大,举例来说,如果输入数据张量为[1,1024,512,3],那么输入数据占用的内存大小都至少需要1*1024*512*3字节(byte),即1.5兆字节(mb),输入数据在计算层的计算中还会产生大量中间计算结果。如果将输入数据全部输入到终端设备上运行,会导致数据量较大,卷积计算过程会需要占用终端设备大量内存,对于一些性能不够高的硬件设备来说,过多的输入数据和生成的中间数据可能会造成数据溢出,导致计算出现错误。
[0046]
在一些实施例中,当电子设备100为内存较小的终端设备101时,终端设备101也可
以将神经网络模型部署到云服务器或者边缘设备上执行,以减少对终端设备内存的占用。如图4所示,终端设备101可以将神经网络模型的运行交由云服务器200进行,或者发送给边缘计算设备300进行,云服务器200和/或边缘计算设备300得到神经网络模型的运行结果之后,再将运行结果返回给终端设备101。
[0047]
其中,云服务器200是云计算模式下利用基础资源向用户提供云服务的实体,拥有大量基础资源(包括计算资源、存储资源和网络资源)。边缘计算设备300是指边缘环境中的一个边缘计算设备或运行在一个或者多个边缘计算设备上的软件系统。边缘计算设备300地理位置上距离终端设备101较近,比如位于道路两侧的边缘计算一体机,区县级别的边缘服务器。
[0048]
但是,终端设备101将神经网络模型的输入数据发送到云服务器200上进行运行,会花费较长发送时间,占用较多网络资源。如果是发送到边缘计算设备300上进行运行,边缘服务器300的内存通常也不足以支持较大数据量的卷积操作和池化操作。
[0049]
在另一些实施例中,当运行神经网络模型的计算设备的内存不够时,还可以将输入数据以及中间计算结果等存储在外部存储器中。在运行神经网络模型时,将上述数据分片读取到内存中,例如,将彩色图像红绿蓝3个通道输入分片进行读取,计算完一个通道的数据,得到对应的feature map之后,就将feature map写入到外部存储器中,然后再读取下一个通道的数据并进行计算。但是,如果计算层的层数较多,例如,具有多层卷积层,那么就需要频繁访问外部存储器,会过多占用总线带宽,影响设备其他应用的正常运行。并且,如果一个通道的数据量就较大时,上述方法在运行神经网络模型时,仍会占用较大内存。
[0050]
为了解决神经网络模型运行会占用较多内存的问题,本技术提供了一种神经网络模型的运行方法,应用于具有多层计算层的神经网络模型,多层计算层可以是多层卷积层,也可以是多层反卷积层。该方法通过输入数据张量的大小和每层计算层的模型参数确定输出结果的大小,并根据输出结果张量的大小确定需要将输出结果张量在各个维度方向上划分为几块,即确定多个子结果张量的大小。然后确定出每个子结果张量在输入数据张量中对应的区域(数据块),进而电子设备100对各个数据块分别进行多层计算层的运算得到各个子结果张量,最终将各个子结果张量组合得到输出结果。其中,输入数据张量和输出结果张量为可以为一阶张量、二阶张量或多维张量。以下将输入数据张量和输出结果张量简称为输入数据和输出结果。
[0051]
这样,电子设备100每次只用对输入数据中部分数据进行计算,不会一次性产生较多中间数据,减少了运行神经网络模型过程中对内存的占用。电子设备100不用将模型发送到其他计算设备上运行,减少了网络资源的占用,也减少了将模型发送到其他计算设备所带来的时延。并且,神经网络模型就可以部署在本地设备上运行,在进行完所有卷积层的计算之后,将最终结果再写入到外部存储器中,减少了访问外部存储器的次数。将输入数据拆分为多个数据块,还可以将不同数据块交由处理器的不同计算引擎进行计算,不同计算引擎可以同步运行,提高了运行效率。
[0052]
可以理解,由于卷积核和输入数据中的数据进行计算时,每次参与计算的数据和之前参与过计算的数据是有重合的,如图2所示,图2中的(a)得到计算结果1时输入图像中参与计算的数据和图2中的(b)得到计算结果2时输入图像中参与计算的数据是有重合的。因此,本技术提供的神经网络模型的运行方法在确定每个子结果在输入数据中对应的数据
块时,可以根据各计算层的模型参数和第一个子结果的大小,确定出第一个子结果对应的数据块。然后再确定出各个子结果对应的数据块与不同维度方向上的前一个子结果对应的数据块的重叠区域,来得到各个子结果的数据块。具体地,该重叠区域可以根据在不同维度方向上前一数据块的输入大小、前一数据块在最后一层卷积层输出结果的大小和每一层卷积层的模型参数,先计算出不同维度方向中相邻数据块在最后一层卷积层的输入中存在的重叠区域,然后从最后一层卷积层依次向上确定出相邻数据块在第一层卷积层的输入(即输入数据)中重叠区域的大小,进而得到该子计算结果对应的数据块在输入数据中的超始位置。然后通过子结果的大小确定对应的数据块大小,再根据该子结果对应的数据块在输入数据中的起始位置以及数据块的大小,确定该子结果对应的数据块的范围。各子结果在输入数据中对应的数据块的确定方式将在下文进行描述,在此不做赘述。
[0053]
举例来说,如图5所示,计算结果为a30-a34五个数据,如果将a30-a32作为子结果1,a33-a34作为子结果2。那么根据子结果1以及第二层卷积层的模型参数,可以确定第二层卷积层中参与计算得到子结果1的数据应该为a20-a23,而根据子结果2以及第二层卷积层的模型参数,可以确定第二层卷积层中参与计算得到子结果2的数据应该为a23-a25,也即是说,存在重叠区域a23。
[0054]
根据a20-a23以及第一层卷积层的模型参数,可以确定输入数据中参与计算得到a20-a23的数据应该为a10-a15,而根据a23-a25以及第一层卷积层的模型参数,可以确定输入数据中参与计算得到a23-a25的数据应该为a14-a18,也即是说,存在重叠区域a14-a15。
[0055]
也即是说,对于将计算结果拆分为多个子结果,子结果对应的输入数据会存在重叠区域因此,为了避免有数据漏算的情况,需要对数据块之间重叠区域进行计算,并根据重叠区域确定下一个数据块的起始位置。
[0056]
同样地,对于二维的输入数据而言,为了确保对各个数据块进行卷积操作时不会有数据被漏算,需要根据计算结果的划分确定不同维度下相邻数据块之间的重叠区域。举例来说,如图6所示,输入数据为8*8的二维数据,输入数据要进行多层卷积计算。若根据计算结果的大小,电子设备100确定要将计算结果在高度方向(hight)和宽度方向(width)各分为2个子结果,即电子设备100将分别得到4个子结果,那么对应输入数据,电子设备100是分别对4个数据块进行计算,根据子结果1的大小可以根据每层模型参数确定对应的数据块1的范围,举例来说,数据块1的范围为如图6中(a)所示。
[0057]
电子设备100在确定子结果2对应的数据块2的区域时,将分别计算数据块2在高度方向和宽度方向两个维度上和前一数据块之间的重叠区域大小。其中,数据块2在宽度方向上的前一数据块为数据块1,根据数据块1的宽度、数据块1输出结果的宽度和每层卷积层模型参数在宽度上的数值可以确定数据块2在宽度方向上与数据块1的重叠区域大小。又因为数据块2在高度方向也为第一个数据块,则数据块2与数据块1在高度方向上的范围对应相同,则高度方向上数据块2与数据块1重叠区域大小为0。例如,当在宽度方向上数据块1和数据块2重叠区域大小为1时,则数据块2的区域范围如图6中(b)所示。
[0058]
电子设备100在确定子结果3对应的数据块3的区域时,数据块3在高度方向上的前一个数据块为数据块1,则根据数据块1的高度、数据块1输出结果的高度和每层卷积层模型参数在高度上的数值可以确定数据块3在高度方向上与数据块1的重叠区域大小。因为数据块3在宽度方向也为第一个数据块,则数据块3与数据块1在宽度方向上的范围相同。例如,
当在高度方向上数据块3和数据块1重叠区域大小为1时,则数据块3的区域范围为如图6中(c)所示。
[0059]
电子设备100在确定子结果4对应的数据块4的区域时,数据块4在高度方向上的前一个数据块为数据块2,则根据数据块2的高度、数据块2输出结果的高度和每层卷积层模型参数在高度上的数值可以确定数据块4在高度方向上与数据块1的重叠区域大小。数据块4在宽度方向上的前一个数据块为数据块3,则根据数据块3的宽度、数据块3输出结果的宽度和每层卷积层模型参数在宽度上的数值可以确定数据块4在宽度方向上与数据块3的重叠区域大小。例如,当在宽度方向上数据块4和数据块3重叠区域大小为1时,在高度方向上数据块4和数据块2重叠区域大小为1时,则数据块4的区域范围为如图6中(d)所示。
[0060]
本技术实施例中的电子设备100可以是手机、平板电脑、可穿戴设备、车载设备、笔记本电脑、vr/ar等虚拟现实设备、超级移动个人计算机(ultra-mobile personal computer,umpc)、上网本、个人数字助理(personal digital assistant,pda)或专门的照相机(例如单反相机、卡片式相机)等,本技术对该终端设备的具体类型不作任何限制。
[0061]
下面结合图7对本技术提供的神经网络模型的运行方法的流程进行详细说明,该方法应用于电子设备100,以电子设备100进行多层的卷积和/或反卷积操作进行说明,该方法具体包括:
[0062]
s710:根据输入数据大小和各计算层模型参数确定输出结果的大小。
[0063]
输入数据指电子设备100根据cnn输入层得到的预处理后的数据,即输入计算层的数据。其中,计算层可以是卷积层也可以是反卷积层,模型参数可以是卷积操作所需要的相关参数,也可以是反卷积操作所需要的相关参数,例如kernel size以及stride。在一些实施例中,输入数据还进行了填充padding的操作。
[0064]
电子设备100根据输入数据的大小和各个计算层的模型参数可以确定输入数据进行所有计算层计算后得到的输出结果的大小。
[0065]
下面对得到的输出结果的大小的计算过程进行详细介绍。输出结果在宽度方向上的计算过程具体可参考下述公式(1),width(t)为第t层输入数据宽度大小,outw(t)为第t层输入数据进行卷积操作后数据的宽度大小,kernel_sizew(t)为第t层卷积操作卷积核宽度方向上的大小,padw(t)为第t层宽度方向填充pad的数据大小,stridew(t)为第t层卷积操作步长。
[0066][0067]
应理解,本技术实施例中,均以宽度为例对计算过程进行说明,高度或深度的计算过程可参考宽度的计算方法,不再赘述。
[0068]
s720:根据输出结果的大小,确定多个子结果的大小。
[0069]
根据输出结果的大小,电子设备100将确定要将输出结果分为多少个子结果,进而确定数据块的个数,使得电子设备100分别对数据块进行计算能得到对应的子结果。例如,电子设备100获取到输出结果的大小为16*16的二维矩阵,电子设备100可以将输出结果按大小分为4个子结果,进而电子设备100将分别对4个子结果对应在输入数据中的数据块进行计算,分别得到这个4个子结果。
[0070]
应理解,电子设备100在划分子结果时,在同一维度方向上划分应当是相同的,例
如,对于二维输入数据,将输出结果在高度方向上划分为2块,在宽度方向上划分为3块,则同一行的子结果高度应当相同,同一列的子结果宽度应当相同。
[0071]
s730:根据子结果的大小,确定每个子结果在输入数据中对应的各个数据块的区域。
[0072]
电子设备100将根据每个子结果的大小确定每个数据块的大小,然后根据每个数据块的大小、对应的子结果的大小以及每层计算层的模型参数,确定数据块与不同维度方向上相邻数据块的重叠区域,然后根据通过不同维度方向上数据块与前一个数据块之间的重叠区域,确定子结果对应的数据块在输入数据中的起始位置,进而根据子结果对应的数据块在输入数据中的起始位置和数据块的大小,进而可以确定第二数据块的范围。
[0073]
具体包括:电子设备100将根据每个子结果的大小确定每个数据块的大小,然后确定每个数据块在不同维度方向上的前一数据块,根据不同维度方向上前一数据块的大小、前一数据块对应的子结果的大小和每一层卷积层的模型参数,计算出不同维度方向上该数据块与前一数据块在最后一层卷积层的输入中存在的重叠区域,然后从最后一层卷积层依次向上确定出相邻数据块在第一层卷积层的输入(即输入数据)中重叠区域的大小。通过不同维度方向下,数据块与前一个数据块之间的重叠区域,然后根据通过不同维度方向上数据块与前一个数据块之间的重叠区域,确定子结果对应的数据块在输入数据中的起始位置,进而可以确定每个数据块的范围。
[0074]
下面对电子设备100在计算层进行的是卷积操作时,数据块与不同维度方向上的前一数据块的重叠区域,以及数据块的起始位置的计算过程进行详细描述。
[0075]
下面以宽度方向上重叠部分overlapw(t)对重叠区域的计算进行举例说明,应理解,高度和深度等方向上的计算可以参考宽度方向的计算过程。相邻数据块在宽度方向上的重叠区域的大小overlapw(t)的具体计算过程可以参考下述公式(2),其中,1≤t≤t且t为正整数,t为卷积层的层数。ww(t)为前一数据块在第t层卷积层对应的输入数据的宽度大小,ww(t)的计算方式可以参考下述公式(3)。posw(t+1)为前一数据块在第t层卷积层后输出的计算结果与下一数据块在第t层卷积层后输出的计算结果没有重叠部分的大小,padw(t)为前一数据块在第t层卷积层中宽度方向上pad的数量。
[0076]
overlapw(t)=ww(t)-posw(t+1)
×
stridew(t)+padw(t)
ꢀꢀꢀꢀꢀꢀꢀꢀꢀ
(2)
[0077]ww
(t)=(outw(t)-1)
×
stridew(t)+kernel_sizew(t)-padw(t)
ꢀꢀꢀꢀꢀꢀꢀ
(3)
[0078]
根据overlapw(t)和前一数据块最后一个数据的位置lw(t)可以确定下一数据块在第t层卷积层中宽度方向对应的起始位置pw(t),具体可参考下述公式(4)。
[0079]
pw(t)=lw(t)-overlapw(t)
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
(4)
[0080]
根据outw(t-1)和overlapw(t)可以确定posw(t),其中,outw(t-1)等于ww(t),然后将posw(t)带入上述公式(2),以此类推,最终可以确定第一层卷积层中每个数据块的起始位置。
[0081]
在一些实施例中,当电子设备100除了对数据块进行卷积操作,还会对数据块进行池化操作,但是在池化操作中,会存在输入池化层的数据的大小不是kernel_size的整数倍时,池化层也会对剩余不足kernel_size的数据进行池化,即对输入数据进行取整(ceil)后运算。在上述情况下,根据公式(3)计算出来结果,还需要对应减掉因ceil产生的多余的数据。
[0082]
下面对电子设备100进行的是反卷积操作时,数据块与不同维度方向上的前一数据块的重叠区域,以及数据块的起始位置的计算过程进行详细描述。
[0083]
以数据块在宽度方向上与前一数据块的重叠区域大小的计算过程进行举例说明。根据当前数据块输出结果的大小和卷积核大小kernel_size
w’(t)确定输入反卷积操作的数据大小,其中,宽度方向上的计算过程具体可参考下述公式(5)。
[0084][0085]
上述公式(5)中w_intw(t)为输入该层反卷积操作的输入数据大小计算过程中的宽度方向上的中间值,stride_intw等于1,newpad
w’(t)是根据反卷积操作的宽度方向上kernel_size和实际的padding数量确定的。newpad
w’(t)的计算过程可参考下述公式(6)。
[0086]
newpad
w’(t)=kernel_size
w’(t)-pad
w’(t)-1
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
(6)
[0087]
然后参考公式(7)确定重复区域大小计算过程中的宽度方向上中间值overlap_intw(t),最终的重复区域大小还需要根据overlap_intw(t)进行计算才能确定。
[0088]
overlap_intw(t)=w_intw(t)-pos’(t)
×
stride_intw+newpad’(t)
ꢀꢀꢀꢀꢀꢀ
(7)
[0089]
对上述计算得到的w_intw(t)和overlap_intw(t)进行调整,得到实际输入反卷积操作的数据在宽度方向上的大小w
w’(t)和overlap
w’(t)。根据w_intw(t)调整得到w
w’(t)的过程可参考下述公式(8),根据overlap_intw(t)调整得到overlap
w’(t)的过程可参考下述公式(9),其中left初始等于0,stride
w’(t)为第t层反卷积操作的步长。
[0090][0091][0092]
其中,(w_intw(t)-left)//stride
w’(t)表示w_intw(t)-left的值除以stride
w’(t)并向下取整,stride
w’(t)!=0表示stride
w’(t)不等于0,(w_intw(t)-left)%stride
w’(t)表示w_intw(t)-left的值对stride
w’(t)求余。
[0093]
然后调整在宽度方向上中间参数remainw,remainw的计算过程可参考下述公式(10)。
[0094][0095]
根据中间参数remain调整得到新的left,调整后的left可参考下述公式(11),调整后的left用于下一层反卷积重复区域的计算。
[0096]
left(t-1)=remainw(t)-1+stride
w’(t)
×
(remainw(t)==0)
ꢀꢀꢀꢀꢀꢀ
(11)
[0097]
最后,参考公式(4)可以根据数据块和前一数据块在宽度方向上的重叠区域大小overlap
w’(t)确定该数据块的起始位置。
[0098]
并且,根据本技术提供的神经网络模型的运行方法,根据输入数据确定为多个数据块,对中间块的padding的计算也做了调整,其中,以宽度方向上为例,将数据块左侧的padding记为pad_l,数据右侧的padding记为pad_r。则pad_r的计算过程可参考下述公式(12),pad_l的计算过程可参考下述公式(13),其中,w
out’(t)为数据块在t层输出的计算结
果的宽度大小,w
pos’(t)为数据块在第t层卷积层对应的输入数据的宽度大小。
[0099]
pad_r=kernel_size
w’(t)-(w
out’(t)+pad_l-(w
pos’(t)-1)
×
stride
w’(t)) (12)
[0100][0101]
s740:分别计算各个数据块得到对应的子结果,将所有子结果组合得到输出结果。
[0102]
电子设备100根据各个计算层的模型参数对各个数据块进行计算,具体可以是根据模型参数对第一数据块进行卷积操作或者反卷积操作,进而得到对应的子结果。电子设备100将子结果进行组合后则可得到最终的计算结果。
[0103]
在一些实施例中,电子设备100还可以将各个数据块分别交由处理器的不同计算引擎进行计算,不同计算引擎可以同步运行,提高了运行效率。
[0104]
在一些实施例中,电子设备100对各个数据块进行计算得到最终计算结果之后,还包括对第一数据块进行池化操作。
[0105]
综上所述,根据本技术提供的神经网络模型的运行方法,电子设备100每次只用对输入数据中部分数据进行计算,不会一次性产生较多中间数据,减少了运行神经网络模型过程中对内存的占用。电子设备100不用将模型发送到其他计算设备上运行,减少了网络资源的占用,也减少了将模型发送到其他计算设备所带来的时延。并且,神经网络模型就可以部署在本地设备上运行,在进行完所有卷积层的计算之后,将最终结果再写入到外部存储器中,减少了访问外部存储器的次数。将输入数据拆分为多个数据块,还可以将不同数据块交由处理器的不同计算引擎进行计算,不同计算引擎可以同步运行,提高了运行效率。
[0106]
为了便于理解,下面对电子设备100进行的是卷积操作时,宽度方向上数据块的起始位置的计算过程进行举例说明。其中,以cnn具有三层卷积层(conv1,conv2以及conv3)为例进行说明。
[0107]
首先,输入数据为数据0-数据32,即输入数据width等于33,conv1的模型参数为stridew(1)=2,kernel_sizew(1)=3,conv2的模型参数为stridew(2)=1,kernel_sizew(2)=3,conv3的模型参数为stridew(3)=2,kernel_sizew(3)=3,左右两侧的padding为pad_l=pad_r=1根据公式(1)可以确定得到输入数据最终的输出结果为9个单位s30-s39,应理解,上述s30-s39仅用于说明,并不代表具体数值,此时电子设备100并未获取到输出结果的具体数值。
[0108]
电子设备100预设将把输出结果分为2个子结果,其中,子结果a为4个单位s30-s33,子结果b为5个单位s34-s39。
[0109]
下面先对子结果a对应的第一数据块的计算过程进行说明。
[0110]
如图8a所示,conv3的模型参数为stridew(3)=2,kernel_sizew(3)=3,左右两侧的padding为pad_l=pad_r=1,因为conv3输出结果为s30-s33,即输出结果大小为4个单位,则通过上述公式(3)可以直接确定第一数据块对应于conv3的输入数据中的s20-s27,conv3的输入数据的大小为8个单位。
[0111]
如图8b所示,conv3输入数据为conv2输出数据,conv2的模型参数为stridew(2)=1,kernel_sizew(2)=3,左右两侧的padding为pad_l=pad_r=1,因为conv2输出结果为
s20-s27,则通过上述公式(3)可以确定第一数据块对应于conv2的输入数据中的s10-s18,输入数据的大小为8个单位。
[0112]
如图8c所示,conv2输入数据为conv1输出数据,conv1的模型参数为stridew(1)=2,kernel_sizew(1)=3,左右两侧的padding为pad_l=pad_r=1,因为conv1输出结果为s10-s18,则通过上述公式(3)可以确定,第一数据块大小为18个单位,即数据0-数据17。
[0113]
根据上述计算结果,电子设备100将确定计算子结果b对应的第二数据块的起始位置。
[0114]
如图9a所示,根据第一数据块conv3输出结果为s30-s33,可确定输出结果的大小pos(4)=out(3)=4,根据公式(3)以及out(3)=4,stride(3)=2,kernel_size(3)=3,pad(3)=1可确定conv3输入数据的大小为w(3)=8。然后根据公式(2)并代入上述数值,又可确定overlap(3)=1。也即是说第二数据块对应于conv3的输入数据与第一数据块对应于conv3的输入数据有1个单位的重叠,根据公式(4)可以确定第二数据块对应于conv3的输入数据的起始位置较第一数据块对应于conv3的输入数据向前移动一个单位,则第二数据块对应于conv3的输入数据的起始位置为s27。
[0115]
如图9b所示,根据第一数据块conv2输出结果为s20-s27,第二数据块在conv3的起始位置为s27,可确定输出结果的大小pos(3)=7,out(2)=8,根据公式(3)以及out(2)=8,stride(2)=1,kernel_size(2)=3,pad(2)=1可确定conv2输入数据的大小为w(2)=9。然后根据公式(2)并代入上述数值,又可确定overlap(2)=3。也即是说,第二数据块对应于conv2的输入数据与第一数据块对应于conv2的输入数据有3个单位的重叠,根据公式(4)可以确定第二数据块对应于conv2的输入数据的起始位置较第一数据块对应于conv2的输入数据向前移动3个单位,则第二数据块在conv2的起始位置为s16。
[0116]
如图9c所示,根据第一数据块conv1输出结果为s10-s18,第二数据块在conv2的起始位置为s16,可确定输出结果的大小pos(2)=6,out(1)=9,根据公式(3)以及out(1)=9,stride(2)=2,kernel_size(2)=3,pad(2)=1可确定conv3输入数据的大小为w(1)=18。然后根据公式(2)并代入上述数值,又可确定overlap(1)=7。也即是说,第二数据块对应于conv1的输入数据与第一数据块对应于conv1的输入数据有3个单位的重叠,根据公式(4)可以确定第二数据块对应于conv2的输入数据的起始位置较第一数据块对应于conv1的输入数据向前移动3个单位,则第二数据块在conv1的起始位置为数据11。
[0117]
这样,电子设备100就可以根据第一数据块计算结果的大小,反向推导出输入数据中第二数据块的起始位置,使得电子设备100在计算完第一数据块之后,再计算第二数据块时,不会漏算第一数据块和第二数据块中间重叠部分的数据。进而,电子设备100每次只用对输入数据中部分数据进行计算,不会一次性产生较多中间数据,减少了运行cnn过程中对内存的占用。电子设备100不用将cnn发送到其他计算设备上运行,减少了网络资源的占用,也减少了将cnn发送到其他计算设备所带来的时延。
[0118]
并且,cnn就可以部署在本地设备上运行,在进行完所有卷积层的计算之后,将最终结果再写入到外部存储器中,减少了访问外部存储器的次数。将输入数据拆分为多个数据块,还可以将不同数据块交由处理器的不同计算引擎进行计算,不同计算引擎可以同步运行,提高了运行效率。
[0119]
为了解决神经网络模型运行会占用较多内存的问题,本技术提供了一种神经网络
模型的运行装置1000,包括预测单元1010、确定单元1020以及发送单元1030。
[0120]
预测单元1010根据输入数据张量的大小以及每层计算层的模型参数,预测输入数据张量对应的计算结果张量的大小;
[0121]
确定单元1020用于根据计算结果张量的大小,确定多个子结果张量的大小;确定单元1020还用于基于每个子结果张量的大小以及每层计算层的模型参数,确定每个子结果张量在输入数据张量中对应的数据块的范围;确定单元1020还用于根据每层计算层的模型参数对每个数据块进行计算,得到每个数据块对应的子结果张量;确定单元1020还用于根据每个数据块对应的子结果张量,确定输入数据张量对应的计算结果张量。
[0122]
在一些实施例中,计算层为卷积层或者反卷积层,卷积层用于对输入数据张量进行卷积操作,反卷积层用于对输入数据张量进行反卷积操作;模型参数包括卷积操作或反卷积操作的步长、卷积核大小以及填充块数量。
[0123]
在一些实施例中,确定单元1020还用于根据每个子结果张量的大小以及每层计算层的模型参数,确定每个数据块的大小;根据每个子结果张量的大小以及每层计算层的模型参数,确定相邻数据块之间重叠区域的大小;根据每个数据块的大小以及相邻数据块之间重叠区域的大小,确定每个子结果张量在输入数据张量中对应的数据块的范围。
[0124]
在一些实施例中,确定单元1020还用于根据每个子结果张量在不同维度方向上的前一个子结果张量的大小以及每层计算层的模型参数,确定当前子结果张量对应的数据块与在不同维度方向上的前一子结果张量对应的数据块之间的重叠区域的大小。
[0125]
在一些实施例中,计算层共有m层,确定单元1020还用于根据每个子结果张量的大小以及第m层计算层的模型参数,确定相邻数据块在对应于第m层计算层的输入数据张量中重叠区域的大小;将第m层计算层的输入数据张量作为第m-1层计算层的输出数据,并确定相邻数据块在对应于第m-1层计算层的输入数据张量中重叠区域的大小,直到确定相邻数据块在对应于第一层计算层的输入数据张量中重叠区域的大小。
[0126]
在一些实施例中,发送单元1030将多个数据块分别发送给不同计算引擎,不同计算引擎分别对接收到数据块根据每层计算层的模型参数进行计算,得到每个数据块对应的子结果张量。
[0127]
在一些实施例中,计算引擎为电子设备处理器的计算引擎,或者计算引擎为其他电子设备处理器的计算引擎。
[0128]
这样,神经网络模型的运行装置就可以根据第一数据块计算结果的大小,反向推导出输入数据中第二数据块的起始位置,神经网络模型的运行装置在计算完第一数据块之后,再计算第二数据块时,不会漏算第一数据块和第二数据块中间重叠部分的数据。进而,神经网络模型的运行装置每次只用对输入数据中部分数据进行计算,不会一次性产生较多中间数据,减少了运行cnn过程中对内存的占用。神经网络模型的运行装置不用将cnn发送到其他计算设备上运行,减少了网络资源的占用,也减少了将cnn发送到其他计算设备所带来的时延。并且,cnn就可以部署在本地设备上运行,在进行完所有卷积层的计算之后,将最终结果再写入到外部存储器中,减少了访问外部存储器的次数。将输入数据拆分为多个数据块,还可以将不同数据块交由处理器的不同计算引擎进行计算,不同计算引擎可以同步运行,提高了运行效率。
[0129]
进一步,图11根据本技术的一些实施例,示出了一种电子设备100的结构示意图。
如图11所示,电子设备100包括一个或多个处理器101a、npu 101b、系统内存102、非易失性存储器(non-volatile memory,nvm)103、通信接口104、输入/输出(i/o)设备105、以及用于耦接处理器101a、系统内存102、非易失性存储器103、通信接口104和输入/输出(i/o)设备105的系统控制逻辑106。其中:
[0130]
处理器101a可以包括一个或多个处理单元,例如,可以包括中央处理器cpu(central processing unit)、图像处理器gpu(graphics processing unit)、数字信号处理器dsp(digital signal processor)、微处理器mcu(micro-programmed control unit)、ai(artificial intelligence,人工智能)处理器或可编程逻辑器件fpga(field programmable gate array)的处理模块或处理电路可以包括一个或多个单核或多核处理器。
[0131]
神经网络处理器101b可以用于实现神经网络模型的推理以及运行本技术实施例提供的神经网络模型的运行方法对应的指令。神经网络处理器101b可以是独立的处理器,也可以集成于处理器101a内部。
[0132]
系统内存102是易失性存储器,例如随机存取存储器(random-access memory,ram),双倍数据率同步动态随机存取存储器(double data rate synchronous dynamic random access memory,ddr sdram)等。系统内存用于临时存储数据和/或指令,例如,在一些实施例中,系统内存102可以用于存储上述神经网络模型的相关指令、数据块的计算结果等。
[0133]
非易失性存储器103可以包括用于存储数据和/或指令的一个或多个有形的、非暂时性的计算机可读介质。在一些实施例中,非易失性存储器103可以包括闪存等任意合适的非易失性存储器和/或任意合适的非易失性存储设备,例如硬盘驱动器(hard disk drive,hdd)、光盘(compact disc,cd)、数字通用光盘(digital versatile disc,dvd)、固态硬盘(solid-state drive,ssd)等。在一些实施例中,非易失性存储器103也可以是可移动存储介质,例如安全数字(secure digital,sd)存储卡等。
[0134]
特别地,系统内存102和非易失性存储器103可以分别包括:指令107的临时副本和永久副本。指令107可以包括:由处理器101a和/或神经网络处理器101b中的至少一个执行时使电子设备100实现本技术各实施例提供的神经网络模型的运行方法。
[0135]
通信接口104可以包括收发器,用于为电子设备100提供有线或无线通信接口,进而通过一个或多个网络与任意其他合适的设备进行通信。在一些实施例中,通信接口104可以集成于电子设备100的其他组件,例如通信接口104可以集成于处理器101a中。在一些实施例中,电子设备100可以通过通信接口104和其他设备通信,例如,电子设备100可以通过通信接口104从其他电子设备获取待运行的神经网络模型。
[0136]
输入/输出(i/o)设备105可以包括输入设备如键盘、鼠标等,输出设备如显示器等,用户可以通过输入/输出(i/o)设备105与电子设备100进行交互。
[0137]
系统控制逻辑106可以包括任意合适的接口控制器,以电子设备100的其他模块提供任意合适的接口。例如在一些实施例中,系统控制逻辑106可以包括一个或多个存储器控制器,以提供连接到系统内存102和非易失性存储器103的接口。
[0138]
在一些实施例中,处理器101a中的至少一个可以与用于系统控制逻辑106的一个或多个控制器的逻辑封装在一起,以形成系统封装(system in package,sip)。在另一些实
施例中,处理器101a中的至少一个还可以与用于系统控制逻辑106的一个或多个控制器的逻辑集成在同一芯片上,以形成片上系统(system-on-chip,soc)。
[0139]
可以理解,电子设备100可以是能够运行神经网络模型的任意电子设备,包括但不限于手机、可穿戴设备(如智能手表等)、平板电脑、桌面型、膝上型、手持计算机、笔记本电脑、超级移动个人计算机(ultra-mobile personal computer,umpc)、上网本,以及蜂窝电话、个人数字助理(personal digital assistant,pda)、增强现实(augmented reality,ar)/虚拟现实(virtual reality,vr)设备等,本技术实施例不做限定。
[0140]
可以理解,图11所示的电子设备100的结构只是一种示例,在另一些实施例中,电子设备100可以包括比图示更多或更少的部件,或者组合某些部件,或者拆分某些部件,或者不同的部件布置。图示的部件可以以硬件,软件或软件和硬件的组合实现。
[0141]
本技术公开的机制的各实施例可以被实现在硬件、软件、固件或这些实现方法的组合中。本技术的实施例可实现为在可编程系统上执行的计算机程序或程序代码,该可编程系统包括至少一个处理器、存储系统(包括易失性和非易失性存储器和/或存储元件)、至少一个输入设备以及至少一个输出设备。
[0142]
可将程序代码应用于输入指令,以执行本技术描述的各功能并生成输出信息。可以按已知方式将输出信息应用于一个或多个输出设备。为了本技术的目的,处理系统包括具有诸如例如数字信号处理器(digital signal processor,dsp)、微控制器、专用集成电路(application specific integrated circuit,asic)或微处理器之类的处理器的任何系统。
[0143]
程序代码可以用高级程序化语言或面向对象的编程语言来实现,以便与处理系统通信。在需要时,也可用汇编语言或机器语言来实现程序代码。事实上,本技术中描述的机制不限于任何特定编程语言的范围。在任一情形下,该语言可以是编译语言或解释语言。
[0144]
在一些情况下,所公开的实施例可以以硬件、固件、软件或其任何组合来实现。所公开的实施例还可以被实现为由一个或多个暂时或非暂时性机器可读(例如,计算机可读)存储介质承载或存储在其上的指令,其可以由一个或多个处理器读取和执行。例如,指令可以通过网络或通过其他计算机可读介质分发。
[0145]
因此,机器可读介质可以包括用于以机器(例如,计算机)可读的形式存储或传输信息的任何机制,包括但不限于,软盘、光盘、光碟、只读存储器(cd-roms)、磁光盘、只读存储器(read only memory,rom)、随机存取存储器(random access memory,ram)、可擦除可编程只读存储器(erasable programmable read only memory,eprom)、电可擦除可编程只读存储器(electrically erasable programmable read-only memory,eeprom)、磁卡或光卡、闪存、或用于利用因特网以电、光、声或其他形式的传播信号来传输信息(例如,载波、红外信号数字信号等)的有形的机器可读存储器。
[0146]
因此,机器可读介质包括适合于以机器(例如计算机)可读的形式存储或传输电子指令或信息的任何类型的机器可读介质。
[0147]
在附图中,可以以特定布置和/或顺序示出一些结构或方法特征。然而,应该理解,可能不需要这样的特定布置和/或排序。而是,在一些实施例中,这些特征可以以不同于说明性附图中所示的方式和/或顺序来布置。另外,在特定图中包括结构或方法特征并不意味着暗示在所有实施例中都需要这样的特征,并且在一些实施例中,可以不包括这些特征或
者可以与其他特征组合。
[0148]
需要说明的是,本技术各设备实施例中提到的各单元/模块都是逻辑单元/模块,在物理上,一个逻辑单元/模块可以是一个物理单元/模块,也可以是一个物理单元/模块的一部分,还可以以多个物理单元/模块的组合实现,这些逻辑单元/模块本身的物理实现方式并不是最重要的,这些逻辑单元/模块所实现的功能的组合才是解决本技术所提出的技术问题的关键。此外,为了突出本技术的创新部分,本技术上述各设备实施例并没有将与解决本技术所提出的技术问题关系不太密切的单元/模块引入,这并不表明上述设备实施例并不存在其它的单元/模块。
[0149]
需要说明的是,在本专利的示例和说明书中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
[0150]
虽然通过参照本技术的某些优选实施例,已经对本技术进行了图示和描述,但本领域的普通技术人员应该明白,可以在形式上和细节上对其作各种改变,而不偏离本技术的精神和范围。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1