面向压缩卷积神经网络的并行卷积运算方法及装置与流程

文档序号:11729303阅读:189来源:国知局
面向压缩卷积神经网络的并行卷积运算方法及装置与流程

本发明涉及数字信号处理以及专用硬件加速器领域,具体地,涉及面向压缩卷积神经网络的并行卷积运算方法及装置。



背景技术:

近年来,卷积神经网络(convolutionalneuralnetwork,cnn)在深度学习中取得了重大的进展。最著名的是在2012年alexkrizhevsky等人提出了一个经典的cnn计算结构alexnet,在图像分类和识别中获得了巨大成功。如图1所示,alexnet的输入为一个3通道的227×227图片数据,其整个处理过程总共包括8层运算,前五层为卷积层,后三层为全连接层,其中第一层卷积采用3×11×11宽度的卷积核,卷积核个数为96,第二层卷积采用96×5×5宽度的卷积核,卷积核个数为256,余下三层卷积都采用不同通道数的3×3宽度卷积核。alexnet的总参数量超过了8mb,并且单通道卷积核大小不一致,运算复杂,不适合在存储器和计算资源受限的平台上实现。在alexnet取得成功后,研究人员又提出了其他的更为完善和优化的方法,其中最著名结构有zfnet[2013年],vggnet[2014年],googlenet[2015年]和squeezenet(压缩卷积神经网络)[2016年]等,它们从性能和资源使用率等不同的方面进行优化,不同的cnn结构具有不同的卷积层数、通道维度、卷积核大小、以及每一层卷积核个数等。其中squeezenet主要是为了降低cnn模型的参数数量而设计的,它将整个网络封装成多级fire模块,如图2所示,fire模块是它的核心构件,将原来alexnet简单的一层卷积变成两层:压缩层(squeeze)和扩展层(expand),并各自带上relu激活层。在squeeze层里全是1×1的卷积核;在expand层里面有数量相等的1×1和3×3的卷积核,expand层之后将1×1和3×3的卷积输出特征图(featuremaps)在通道维度拼接起来。squeezenet通过将部分3×3卷积替换成1×1的卷积核,将卷积核参数缩小至2mb,相对于alexnet,其性能并没有明显下降,使得squeezenet能够在fpga和dsp等存储资源受限的设备上高效运行。

卷积运算是cnn计算结构中最为关键的运算,其运算量占据整个网络的90%以上。卷积运算公式为其中1≤i≤nout,分别表示第i个输出和第j个输入的featuremap,gij表示卷积核,表示卷积运算,bi表示偏移量,nout表示输出featuremap的通道数,nin表示输入featuremap的通道数。图4显示一个单通道3×3卷积核与一个单通道7×7输入featuremap的卷积操作示意图,卷积运算相当于卷积核在二维的featuremap上从左至右,从上至下的划窗操作,窗口内的数据与卷积核进行乘累加操作。多通道的输入featuremap和卷积核进行卷积运算可以拆分成多个图3所示的单通道卷积运算。针对这种划窗操作,作者bernardbosi和guybois提出了一种通过移位寄存器链来实现卷积运算(参考文献:bernardbosi和guybois的“reconfigurablepipelined2-dconvolversforfastdigitalsignalprocessing”),如图4所示,其通过一条卷积参数移位寄存器链和一条卷积数据移位寄存器链分别将卷积参数和卷积数据(输入特征图)串行地输入到对应的移位寄存器链当中,其中卷积参数移位寄存器链的长度等于单通道卷积核数据的个数9;卷积数据移位寄存器链分成三层,第一层移位寄存器链长度等于卷积核宽度3,第二和第三层移位寄存器链长度等于输入卷积数据宽度l(l=68),因此卷积数据移位寄存器链的总长度为2l+3,其一次性最大能够支持宽度为68的featuremap数据输入进行卷积运算。移位寄存器链每个时钟周期输入一个数据,开始先通过输入端口(inputport)串行输入9个卷积核参数至卷积参数移位寄存器链中,然后将输入featuremap数据串行地输入到卷积数据移位寄存器链中,当输入数据填满卷积数据移位寄存器链时,每一层卷积数据移位寄存器链中的最后三个寄存器的输出组成一个3×3数据矩阵,它们分别与9个卷积核数据对应相乘并累加,得到输出featuremap的第一个数据或者中间数据。这个结构最大的优点是当填满卷积数据移位寄存器链之后,每一个时钟周期输出一个输出featuremap的数据,并对输入数据带宽要求不高,适合在资源受限的平台上应用。其缺点是如果输入数据移位寄存器链过长,会导致填充时间加长,但是可以通过将输入featuremap分块计算,减少输入卷积数据移位寄存器链的长度。

另外,cnn的每一层有多个卷积核,并且共享同一输入featuremaps,可同时加载多个卷积核同时展开卷积运算。传统的方法是利用多个单独的卷积运算单元(包括3×3卷积运算单元、1×1卷积运算单元)并行执行卷积运算,每个卷积运算单元需要加载同一组输入featuremap的数据,可能造成输入数据带宽瓶颈或者数据的重复输入,降低系统的效率。



技术实现要素:

针对现有技术中的缺陷,本发明的目的是提供一种面向压缩卷积神经网络的并行卷积运算方法及装置。

根据本发明提供的面向压缩卷积神经网络的并行卷积运算方法,包括如下步骤:

构建面向压缩卷积神经网络的并行卷积运算装置,根据输入控制信号卷积数据移位链长度选择、累加偏移量使能以及卷积计算使能决定所采用的操作方式。

优选地,在没有使能1×1卷积计算功能和增加偏移量功能时,从卷积参数存储器读取3×3卷积核的9个参数,串行地写入到卷积参数移位寄存器链中,3×3卷积计算单元读取卷积数据移位链输出的3×3矩阵窗口数据和卷积参数移位寄存器的值进行3×3卷积运算,并将卷积结果输出到外部存储器当中。

优选地,在没有使能1×1卷积计算功能、有使能增加偏移量功能时,从卷积参数存储器读取3×3卷积核的9个参数和3×3卷积计算偏移量,串行地写入到卷积参数移位寄存器链和3×3卷积计算偏移量寄存器中,3×3卷积计算单元读取卷积数据移位链输出的3×3矩阵窗口数据和卷积参数移位寄存器的值进行3×3卷积运算,并将卷积结果累加上偏移量,然后输出到外部存储器当中。

优选地,在有使能1×1卷积计算功能、没有使能累加偏移量功能时,从卷积参数存储器中读取3×3卷积核的9个参数和1×1卷积核的1个参数,串行地写入到卷积参数移位寄存器链和1×1卷积参数寄存器中,3×3卷积计算单元读取卷积数据移位链输出的3×3矩阵窗口数据和卷积参数移位寄存器的值进行3×3卷积运算,并将卷积结果输出到外部存储器当中;1×1卷积计算单元读取卷积数据移位链输出的3×3矩阵窗口数据的中间数据和1×1卷积参数寄存器的值进行1×1卷积运算,并将卷积结果输出到外部存储器当中。

优选地,在有使能1×1卷积计算功能和累加偏移量功能时,从卷积参数存储器中读取3×3卷积核的9个参数、1个3×3卷积计算偏移量、1个1×1卷积核的参数和1个1×1卷积计算偏移量,串行地写入到卷积参数移位寄存器链、3×3卷积计算偏移量寄存器、1×1卷积参数寄存器、以及1×1卷积计算偏移量寄存器中,3×3卷积计算单元读取卷积数据移位链输出的3×3矩阵窗口数据和卷积参数移位寄存器的值进行3×3卷积运算,并将卷积结果累加上偏移量,然后输出到外部存储器当中;1×1卷积计算单元读取卷积数据移位链输出的3×3矩阵窗口数据的中间数据和1×1卷积参数寄存器的值进行1×1卷积运算,并将卷积结果累加上偏移量,然后输出到外部存储器当中。

根据本发明提供的面向压缩卷积神经网络的并行卷积运算装置,包括:基于移位寄存器链的3×3卷积计算模块,所述3×3卷积计算模块中设置有3×3卷积计算偏移量寄存器、1×1卷积计算参数寄存器、1×1卷积计算偏移量寄存器;所述3×3卷积计算偏移量寄存器、1×1卷积计算参数寄存器、1×1卷积计算偏移量寄存器与原有的3×3卷积参数移位寄存器串联;且3×3卷积计算偏移量、1×1卷积计算参数以及1×1卷积计算偏移量统一存放在卷积参数存储器中。

优选地,所述基于移位寄存器链的3×3卷积计算模块还包括:1×1卷积计算单元,所述1×1卷积计算单元中的乘法器的两个输入端分别与1×1卷积计算参数寄存器和卷积数据移位链输出的3×3矩阵窗口的中间数据相连。

与现有技术相比,本发明具有如下的有益效果:

1、本发明针对压缩卷积神经网络中expand层需要计算相同数量的3×3和1×1卷积运算,提供一种并行执行3×3和1×1卷积运算的方法及装置,减少了对输入数据的重复读取,提高卷积运算性能和功能单元利用率,并降低计算功耗。

2、本发明中的方法简单,执行效率高,能够有效加快压缩神经网络算法中卷积运算;本发明中的装置包括输入卷积数据移位链、输入卷积参数移位链、3×3卷积运算单元和1×1卷积运算单元,可通过简单的硬件单元扩展和复制同时输出多个特征图,具有性能好、功耗低、功能单元利用率高、处理速率快的优点。

附图说明

通过阅读参照以下附图对非限制性实施例所作的详细描述,本发明的其它特征、目的和优点将会变得更明显:

图1为alexnet结构示意图;

图2为squeezenet中fire模块结构示意图;

图3为3×3卷积示意图;

图4为基于移位寄存器链的3×3卷积运算硬件结构示意图;

图5为本发明的并行3×3和1×1并行卷积运算结构示意图。

具体实施方式

下面结合具体实施例对本发明进行详细说明。以下实施例将有助于本领域的技术人员进一步理解本发明,但不以任何形式限制本发明。应当指出的是,对本领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干变化和改进。这些都属于本发明的保护范围。

根据本发明提供的面向压缩卷积神经网络的并行卷积运算装置,包括:基于移位寄存器链的3×3卷积计算模块,所述3×3卷积计算模块中设置有3×3卷积计算偏移量寄存器、1×1卷积计算参数寄存器、1×1卷积计算偏移量寄存器;所述3×3卷积计算偏移量寄存器、1×1卷积计算参数寄存器、1×1卷积计算偏移量寄存器与原有的3×3卷积参数移位寄存器串联;且3×3卷积计算偏移量、1×1卷积计算参数以及1×1卷积计算偏移量统一存放在卷积参数存储器中。

所述基于移位寄存器链的3×3卷积计算模块还包括:1×1卷积计算单元,所述1×1卷积计算单元中的乘法器的两个输入端分别与1×1卷积计算参数寄存器和卷积数据移位链输出的3×3矩阵窗口的中间数据相连。

以下结合附图和具体实施例对本发明作进一步详细说明。

图1显示了alexnet数据流图,其输入为一个3通道的227×227图片数据,整个处理过程总共包括8层运算,前五层为卷积层,后三层为全连接层,其中第一层卷积采用3×11×11宽度的卷积核,卷积核个数为96,第二层卷积采用96×5×5宽度的卷积核,卷积核个数为256,第三层卷积采用128×3×3宽度卷积核,卷积核个数为384;第四层卷积采用192×3×3卷积核,卷积核个数为384;第五层卷积采用192×3×3卷积核,卷积核个数为128。最后两层全连接层采用2048×2048个参数,最后一层全连接层采用1000×2048个参数。alexnet对参数需求较大,并且卷积核宽度大小不一致,需要多种卷积计算单元,不适合在资源受限的平台上执行。

图2是squeezenet中fire模块结构。fire模块是squeezenet的核心构件,其将原来alexnet简单的一层卷积变成两层:压缩层(squeeze)和扩展层(expand),并各自带上relu激活层。在squeeze层里全是1×1的卷积核;在expand层里面有数量相等的1×1和3×3的卷积核,expand层之后将1×1和3×3的卷积输出特征图(featuremaps)在通道维度拼接起来。squeezenet通过将部分3×3卷积替换成1×1的卷积核,将卷积核参数缩小至2mb。本发明能够同时并行地执行expand层的一个3×3卷积运算和1×1卷积运算,加快卷积运算速度,减少输入数据的重复读取。

卷积运算公式为其中1≤i≤nout,分别表示第i个输出和第j个输入的featuremap,gi,j表示卷积核,表示卷积运算,bi表示偏移量,nout表示输出featuremap的通道数,nin表示输入featuremap的通道数。

图3是单通道数据的卷积示意图,卷积运算相当于卷积核在二维的featuremap上从左至右,从上至下的划窗操作,窗口内的数据与卷积核进行乘累加操作。多通道的输入featuremap进行卷积运算可以拆分成多个单通道卷积运算。

图4是由bernardbosi和guybois提出了一种通过移位寄存器链来实现卷积运算,其通过一条卷积参数移位寄存器链和一条卷积数据移位寄存器链分别将卷积参数和卷积数据(输入特征图)串行地输入到对应的移位寄存器链当中,其中卷积参数移位寄存器链的长度等于单通道卷积核数据的个数9;卷积数据移位寄存器链分成三层,第一层移位寄存器链长度等于卷积核宽度3,第二和第三层移位寄存器链长度等于输入卷积数据宽度l(l=68),因此卷积数据移位寄存器链的总长度为2l+3,其一次性最大能够支持宽度为68的featuremap数据输入进行卷积运算。移位寄存器链每个时钟周期输入一个数据,开始先通过输入端口(inputport)串行输入9个卷积核参数至卷积参数移位寄存器链中,然后将输入featuremap数据串行地输入到卷积数据移位寄存器链中,当输入数据填满卷积数据移位寄存器链时,每一层卷积数据移位寄存器链中的最后三个寄存器的值组成一个3×3数据矩阵,它们分别与9个卷积核数据对应相乘并累加,得到输出featuremap的第一个数据或者中间数据。这个结构最大的优点是当填满卷积数据移位寄存器链之后,每一个时钟周期输出一个输出featuremap的数据,并对输入数据带宽要求不高,适合在资源受限的平台上应用。针对squeezenet中fire模块内的expand层,需要单独设置支持1×1和3×3的卷积计算单元,expand层内所有的卷积核共享一组输入数据,这会造成对输入featuremap数据的重复读写,同时降低了功能单元的效率。

图5是本发明的支持3×3和1×1并行卷积运算的结构示意图,其包括卷积数据移位链,卷积参数移位链,3×3卷积计算单元,1×1卷积计算单元,其中卷积数据移位链输出一个3×3的数据矩阵卷积参数移位链包括9个3×3卷积参数寄存器(w11~w33)、1个3×3卷积偏移量寄存器(bias3x3),1个1×1卷积参数寄存器(w1),以及一个1×1卷积偏移量寄存器(bias1x1)。其运行模式有外部输入控制信号卷积数据移位链长度选择(mux_sel)、累加偏移量使能(addbias_en)、以及1×1卷积计算使能(conv1x1_en)决定,其中mux_sel根据输入featuremap数据的宽度控制卷积数据移位链的长度;3×3卷积计算单元和1×1卷积计算单元根据addbias_en以及conv1x1_en进行不同的操作:

1)在没有使能1×1卷积计算功能和增加偏移量功能时,从卷积参数存储器读取3×3卷积核的9个参数,串行地写入到卷积参数移位寄存器链中,3×3卷积计算单元读取卷积数据移位链输出的3×3矩阵窗口数据和卷积参数移位寄存器的值进行3×3卷积运算,并将卷积结果输出到外部存储器当中;

2)在没有使能1×1卷积计算功能、使能增加偏移量功能时,从卷积参数存储器读取3×3卷积核的9个参数和3×3卷积计算偏移量,串行地写入到卷积参数移位寄存器链和3×3卷积计算偏移量寄存器中,3×3卷积计算单元读取卷积数据移位链输出的3×3矩阵窗口数据和卷积参数移位寄存器的值进行3×3卷积运算,并将卷积结果累加上偏移量,然后输出到外部存储器当中;

3)在使能1×1卷积计算功能、没有使能累加偏移量功能时,从卷积参数存储器中读取3×3卷积核的9个参数和1×1卷积核的1个参数,串行地写入到卷积参数移位寄存器链和1×1卷积参数寄存器中,3×3卷积计算单元读取卷积数据移位链输出的3×3矩阵窗口数据和卷积参数移位寄存器的值进行3×3卷积运算,并将卷积结果输出到外部存储器当中;1×1卷积计算单元读取卷积数据移位链输出的3×3矩阵窗口数据的中间数据d22和1×1卷积参数寄存器的值进行1×1卷积运算,并将卷积结果输出到外部存储器当中;

4)在使能1×1卷积计算功能和累加偏移量功能时,从卷积参数存储器中读取3×3卷积核的9个参数、1个3×3卷积计算偏移量、1个1×1卷积核的参数和1个1×1卷积计算偏移量,串行地写入到卷积参数移位寄存器链、3×3卷积计算偏移量寄存器、1×1卷积参数寄存器、以及1×1卷积计算偏移量寄存器中,3×3卷积计算单元读取卷积数据移位链输出的3×3矩阵窗口数据和卷积参数移位寄存器的值进行3×3卷积运算,并将卷积结果累加上偏移量,然后输出到外部存储器当中;1×1卷积计算单元读取卷积数据移位链输出的3×3矩阵窗口数据的中间数据d22和1×1卷积参数寄存器的值进行1×1卷积运算,并将卷积结果累加上偏移量,然后输出到外部存储器当中。

以上对本发明的具体实施例进行了描述。需要理解的是,本发明并不局限于上述特定实施方式,本领域技术人员可以在权利要求的范围内做出各种变化或修改,这并不影响本发明的实质内容。在不冲突的情况下,本申请的实施例和实施例中的特征可以任意相互组合。

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