一种基于数据流模式的深度卷积神经网络推理加速方法
技术领域
本发明涉及一种深度学习领域,尤其涉及一种基于数据流模式的深度卷积神经网络推理加速方法。
背景技术
近年来,随着硬件算力的显著提升以及越来越多的数据可供使用,深度学习技术在图像、文本、语音和推荐系统等领域取得了显著的效果。一个深度卷积神经网络从构建到实际落地应用会经过训练和推理两个阶段,其中训练阶段需要大量的数据和算力的支持,一般是在服务器上完成的;推理一般是在特殊场景、有限算力的情况下进行的,可能是云端的数据中心,也可能是移动端上。
对推理任务,一般都对算力和时延提出了很高的要求,如果直接将在服务器上训练好的网络直接部署在推理端很可能会出现算力不足或是推理时间过长的问题,因此对训练好的网络进行优化就变得非常的必要。
传统基于帧模式的方式进行推理,对于典型的图像分类型的任务,需要输入一张完整的图片后才能进行推理,这种方式存在如下的几个问题:
1. 推理的时延大。在典型的实时应用场景中,如无人驾驶的目标检测,系统获得一帧帧的图像数据然后传输给计算单元进行推理得到目标检测的结果。在这种典型的帧模式下,整个处理的流程必须得到完成的一张图像后才能进行推理的流程,处理的延时同时包含图像帧间时延和网络推理的时延。
2. 更高的片上存储要求。传统的深度卷积神经网络中,后一个卷积层的计算是依赖于前一层的网络的输出,这样导致计算单元需要对前一层网络输出的数据进行缓存。这对移动端的计算单元的片上存储提出了更高的要求。
例如,一种在中国专利文献上公开的“一种应用于螺钉表面缺陷检测的深度卷积神经网络方法”,其公告号CN108960413A,通过深度卷积神经网络对螺钉表面图像进行训练,建立应用于螺钉表面缺陷检测的深度卷积神经网络模型。经过测试选出最优的深度卷积神经网络模型,利用彩色摄像机采集螺钉表面图片,由最优的深度卷积神经网络模型对螺钉表面图片进行检测。
该方案采用传统的帧模式的方式进行推理,推理延时大,片上储存要求更高。
目前已有的推理优化包括这几种解决方案:
算子优化:优化单算子的性能,包括算法的优化(对于同一个算子用更高效的算法去实现它)和微架构的优化(充分利用好微架构的内置加速器的能力去最大化算子的性能)。
图优化:主要通过子图变换和算子融合的方式来达到减少计算量或者其他系统开销,从而达到性能优化的目的。
模型压缩:主要对模型进行有损压缩的方式换取性能的提升,主要有模型量化、模型蒸馏和模型稀疏化。
部署优化:主要通过调整模型在部署时的资源分配和调度的参数来进一步优化性能。
但以上的方法或是方案均是基于传统的帧模式的推理,没有解决上述提到两个重要问题。
中科院自动所程健老师组提出了一种基于FPGA实现的块卷积的卷积神经网络推理优化方案(DOI: 10.23919/DATE.2018.8342188),其在牺牲一定精度的基础上,将卷积神经网络的层间的依赖进行解耦。后一层网络的每个block区域只依赖前一层网络的指定的block区域,与其它区域无关。这样实现了推理过程中从第一层到最后一个卷积层的横向并行计算,在一定程度上提高了计算效率并降低了推理流程的时延,同时降低了对计算单元FPGA的片上存储的要求。但该方案依旧存在如下的几个问题:
1. 时延问题未有效解决。还是基于传统的帧模式进行,推理的时延还是同时图像帧间时延和网络推理的时延。
2. 通用性差且精度降低。其将卷积神经网络的层间的依赖进行解耦,后一层网络的每个block区域只依赖前一层网络的指定的block区域。这样的处理只适合卷积网络的前面几层,不适应后面的卷积层。越是后面的卷积层采用这种方案会导致无法有效得到全局的特征导致精度的降低。
发明内容
本发明主要解决现有技术采用帧模式的方式进行推理,推理延时大,片上储存要求更高的问题;提供一种基于数据流模式的深度卷积神经网络推理加速方法。
本发明的上述技术问题主要是通过下述技术方案得以解决的:
一种基于数据流模式的深度卷积神经网络推理加速方法,包括以下步骤:
S1:以流模式获取图像数据;
S2:纵向对流模式数据进行前向计算,通过流模式建立卷积神经网络两层之间的前向推理计算,包括对卷积层的操作、对非线性层的操作和对池化层的操作;
S3:横向对流模式数据进行前向计算,当上一层的输出数据行数满足下一层的操作要求时,下一层同步进行对应操作,建立卷积神经网络多层之间的前向推理计算。
纵向对流模式数据进行前向计算,目的为通过流模式建立卷积神经网络两层之间高效的前向推理计算。横向对流模式数据进行前向计算,目的为通过流模式建立卷积神经网络多层之间高效的前向推理计算的同时降低网络推理中间数据的生成,从而大大降低了对计算单元片上存储的需求。基于数据流模式,对数据进行纵向解耦,对层间依赖进行横向解耦。推理的时延基本等于网络推理的时延,没有图像帧间时延。对所有的卷积层均适用,不会带来网络推理精度变低的问题。卷积层间需要存储的中间数据极低,不需要大量的中间数据需要存储。
作为优选,所述的流模式对图像帧数据以一行数据为最小数据输入单位输入到卷积神经网络中。如高度H,宽度W的图像帧数据,以H行数据输入到卷积神经网络中。
作为优选,所述的对卷积层的操作为:
当卷积核大小为K*K,步长为D的卷积层获取到前K行流模式数据后,立即将K行数据同卷积核进行卷积操作;
当获取前(K+D)行流模式数据后,立即将第D行至第(K+D)行数据同卷积核进行卷积操作;
以步长D依次对各行数据进行卷积操作,直到最后一行数据。
通过流模式建立卷积神经网络两层之间高效的前向推理计算。
作为优选,所述的对非线性层的操作为:
每获取一行流模式数据,立即进入非线性操作;对每个输入数据,当输入小于0时,输出为0;当输入大于0时,输出等于输入。
通过流模式建立卷积神经网络两层之间高效的前向推理计算。
作为优选,所述的对池化层的操作为:
当池化窗口大小为C*C,步长为D的池化层获取到前C行流模式数据后,立即将C行数据进行池化操作;
当获取前(C+D)行流模式数据后,立即将第D行至第(C+D)行数据进行池化操作;
以步长D依次对各行数据进行池化操作,直到最后一行数据。
通过流模式建立卷积神经网络两层之间高效的前向推理计算。
作为优选,在横向对流模式数据进行前向计算过程中:
当上一层计算层获得到流模式数据满足操作要求后,立即对该数据进行对应的计算操作;然后以相应的步长依次对各行数据进行对应的计算操作;
当上一层计算层输出的数据满足下一层计算层的操作要求后,立即对该输出数据进行对应的计算操作;然后以相应的步长依次对各行输出数据进行对应的计算操作;
依次对各计算层进行同步前向计算操作。
通过流模式建立卷积神经网络多层之间高效的前向推理计算的同时降低网络推理中间数据的生成,从而大大降低了对计算单元片上存储的需求。
作为优选,所述的计算层包括但不限于卷积层、池化层、非线性层和全连接层。多层基于流模式的卷积神经网络的前向计算同时适用于深度卷积神经网络中的靠前的层,中间的层,靠后的层。适用性非常的广泛。
本发明的有益效果是:
1. 基于数据流模式,对数据进行纵向解耦,对层间依赖进行横向解耦。推理的时延基本等于网络推理的时延,没有图像帧间时延,高实时性,低延时。
2. 对所有的卷积层均适用,不会带来网络推理精度变低的问题,通用性好。
3. 卷积层间需要存储的中间数据极低,不需要大量的中间数据需要存储,片上存储要求低。
附图说明
图1是采用传统卷积方式的示意图。
图2是采用本发明改进后的卷积方式的示意图。
图3是采用传统激活方式的示意图。
图4是采用本发明改进后的激活方式的示意图。
图5是采用传统的池化方式的示意图。
图6是采用本发明改进后的池化方式的示意图。
图7是传统推理过程示意图。
图8是优化后的推理过程示意图。
具体实施方式
下面通过实施例,并结合附图,对本发明的技术方案作进一步具体的说明。
实施例:
本实施例的一种基于数据流模式的深度卷积神经网络推理加速方法,包括以下步骤:
S1:以流模式获取图像数据。
流模式对图像帧数据以一行数据为最小数据输入单位输入到卷积神经网络中。如高度H,宽度W的图像帧数据,以H行数据输入到卷积神经网络中。
S2:纵向对流模式数据进行前向计算,通过流模式建立卷积神经网络两层之间的前向推理计算,包括对卷积层的操作、对非线性层的操作和对池化层的操作。
对卷积层的操作为:
以卷积Kernel(卷积核)的大小为K*K大小,步长为D为例。流模式输入高度H,宽度W的数据。
获取前K行数据后,马上将K行数据同K*K的卷积核进行卷积操作;在获取前K+D行数据后,马上将第D至K+D行数据同K*K的卷积核进行卷积操作;以此类推至最后一行数据。
如图1和图2所示,K为3,步长D为1,图1为传统的卷积方式,图2为本实施例的改进后的卷积方式。
在本实施例的卷积方式中,在获取前3行数据后,对前3行的数据同3*3的卷积核进行卷积操作;
如图2中,3*3的卷积核为
;以步长D为1,在获取前3行数据
后,先对前3行的数据分别将
和
进行卷积操作,获取前3行数据的输出
;
获得前4行的数据
后,将第2行至第4行的数据
和
同3*3的卷积核
进行卷积操作,获得2-4行的输出
。
以此类推,直至最后一行数据后输出结果。
传统的方式需要获取整张图后再进行推理,而本实施例的方案以行数据为最小数据输入输出单位进行推理。
对非线性层的操作为:
对于流模式输入高度H,宽度W的数据,每获取一行数据,马上进行非线性的操作。
如图3和图4所示,激活函数为ReLu,典型的ReLu激活函数,对每个输入数据,当输入小于0时,输出为零,当输入大于0时,输出等于输入。
对于输入的特征图或输入图像为
,本实施例的方案每获取一行后马上进行非线性操作,如,在获取第一行
后采用ReLu激活函数,获得第一行的输出
;以此类推获得直至获得最后一行的输出数据。
本实施例的激活方式与传统的激活方式的区别在于,在获取一行数据后马上进行非线性操作。
对池化层的操作:
例如池化窗口的大小为C*C,步长为D。流模式输入高度H,宽度W的数据。
在获取前C行数据后,马上将C行数据进行池化操作;在获取前C+D行数据后,马上将第D至C+D行数据进行池化操作;以此类推至最后一行数据。
如图5和图6所示,池化层为maxpooling。在本实施例中C为3,步长D为1。在获取前3行数据后,马上将3行数据进行池化操作;在获取前4行数据后,马上将第2至4行数据进行池化操作;直至最后一行数据。
在本实施例中,池化窗口的大小为3*3,以步长D为1;在获取前3行数据
后,先对前3行的数据分别将
和
进行maxpooling池化操作,获取前3行数据的输出
;
获得前4行的数据
后,将第2行至第4行的数据
和
同3*3的卷积核
进行maxpooling池化操作,获得2-4行的输出
。
以此类推,直至最后一行数据后输出结果。
S3:横向对流模式数据进行前向计算,当上一层的输出数据行数满足下一层的操作要求时,下一层同步进行对应操作。
目的为通过流模式建立卷积神经网络多层之间高效的前向推理计算的同时降低网络推理中间数据的生成,从而大大降低了对计算单元片上存储的需求。
深度卷积神经网络依次包括各类型的计算层结构;
在横向对流模式数据进行前向计算过程中:
当上一层计算层获得到流模式数据满足操作要求后,立即对该数据进行对应的计算操作;然后以相应的步长依次对各行数据进行对应的计算操作;
当上一层计算层输出的数据满足下一层计算层的操作要求后,立即对该输出数据进行对应的计算操作;然后以相应的步长依次对各行输出数据进行对应的计算操作;
依次对各计算层进行同步前向计算操作。
例如,典型的卷积神经网络中的三层结构卷积层-池化层-卷积层,流模式输入高度H,宽度W的数据。
第一层的卷积层的卷积核的大小为K1*K1,步长为D1。
第二层的池化层的窗口大小为C2*C2,步长为D2。
第三层的卷积层的卷积核的大小为K3*K3,步长为D3。
在获取高度H,宽度W的数据前K1行数据后,马上将K1行数据同K1*K1的卷积核进行卷积操作,在获取前K1+D1行数据后,马上将第D1至K+D1行数据同K1*K1的卷积核进行卷积操作。
在得到第一层的卷积层的前C2行数据后,马上将C2行数据进行池化操作;在获取前C2+D2行数据后,马上将第D2至C2+D2行数据进行池化操作。
在第二层的池化层K3行数据后,马上将K3行数据同K3*K3的卷积核进行卷积操作,在获取前K3+D3行数据后,马上将第D3至K3+D3行数据同K3*K3的卷积核进行卷积操作。
如图7和图8所示为特征图或输入图像经过conv,maxpooling和ReLu层推理过程。其中conv卷积核K=3,D=1;池化层maxpooling C=2,D=1。图7为传统的推理过程,图8为优化后的推理过程。
3*3的卷积核为
,macpooling池化窗口的尺寸为2*2,步长为1。
对于特征图或输入图像的数据,在获取前3行后,对马上前三行的数据,以3*3的尺寸
、
和
与卷积核进行卷积操作,获得前三行的输出
;
在前三行数据完成后,再对2-4行的数据以3*3的尺寸
、
和
进行卷积操作,获取第2-4行的输出
;以此类推获得第3-5行的卷积输出
,直至最后一行数据后输出结果。
卷积层后的池化层的池化窗口尺寸为2*2,在前一层卷积数据输出2行后,马上以池化串口的尺寸对卷积层输出的特征图数据
和
进行maxpooling池化操作,获得输出数据
。
同样的,在获取前一层输出的2-3行数据后,马上对其以池化窗口的尺寸
和
进行maxpooling池化操作,获得输出数据
;以此类推,直至最后一行数据后输出结果。
在池化层后的非线性层采用的激活函数为ReLu;在得到前一层输出的第一行数据后,马上进行非线性操作,输出
。
在获得第2行输出结果后,马上进行非线性操作,输出
,以此类推,直至最后一行数据后输出结果。
本实施例横向对流模式数据进行前向计算中,以流计算的方式,大大降低了多层卷积神经网络间的推理的流程。同时下一层的计算只需要少数几行数据就可以开始下一层的对应操作,可以极大的降低传统基于帧模式需要上一层完成计算完成才开始下一层的计算导致的大量的中间数据的存储的问题。
多层基于流模式的卷积神经网络的前向计算使用于所有类型的算层包括但不限于卷积层、池化层、非线性层和全连接层。同时适用于深度卷积神经网络中的靠前的层,中间的层,靠后的层。适用性非常的广泛。
本实施例的方案基于数据流模式,对数据进行纵向解耦,对层间依赖进行横向解耦。推理的时延基本等于网络推理的时延,没有图像帧间时延,高实时性,低延时。对所有的卷积层均适用,不会带来网络推理精度变低的问题,通用性好。卷积层间需要存储的中间数据极低,不需要大量的中间数据需要存储,片上存储要求低。
应理解,实施例仅用于说明本发明而不用于限制本发明的范围。此外应理解,在阅读了本发明讲授的内容之后,本领域技术人员可以对本发明作各种改动或修改,这些等价形式同样落于本申请所附权利要求书所限定的范围。