基于语音特征复用的关键词唤醒CNN的存储和计算压缩方法与流程

文档序号:21279330发布日期:2020-06-26 23:29阅读:205来源:国知局
基于语音特征复用的关键词唤醒CNN的存储和计算压缩方法与流程

本发明涉及低功耗电路设计,尤其是低功耗的关键词唤醒电路的存储和计算压缩设计,具体涉及基于语音特征复用的关键词唤醒cnn的存储和计算压缩方法,属于计算、推算或计数的技术领域。



背景技术:

关键词唤醒技术,是语音识别技术的一个重要分支,通常作为语音识别的入口而存在,主要用于叫醒机器。关键词唤醒技术与通用语音识别技术的不同之处在于,它只需识别语音信号中是否包含某一个或某些特定词汇,而并非需要完整识别整段语音信号的语义;并且它扮演的是设备开关的角色,必须常开状态,因此,其功耗就显得极为重要。设计出资源占用小、功耗低的关键词唤醒电路非常有必要。

端到端神经网络关键词唤醒系统是一种新型的关键词唤醒系统,语音信号到输出结果的识别过程就是一个神经网络的正向推理过程,通常采用卷积神经网络(cnn,convolutionalneuralnetwork)实现。由此,神经网络电路的低功耗设计很必要。通常在神经网络处理器的设计中,由于并行的计算量巨大,需调用的参数及中间数据也随之剧增,这通常会导致处理器频繁地访问存储模块,使得访存功耗成为神经网络处理器功耗的主要来源之一。所以,在很多的设计中,通常会重点研究分析神经网络的并行计算特点,研究如何通过合理的数据复用来减少访问存储次数,以降低神经网络处理器的功耗进而提升其能效,常见的数据复用模式有输入数据复用和存储复用两种。

本发明基于卷积神经网络的并行计算特点,通过语音特征数据流复用的方式来减少访问存储次数,同时降低了神经网络计算量,从而降低了神经网络电路的功耗,使得神经网络在常开状态下保持极低的功耗运行状态并完成关键词唤醒功能,提升了电路的能量效率。



技术实现要素:

本发明的发明目的是针对上述背景技术中的不足,提供了基于语音特征复用的关键词唤醒cnn的存储和计算压缩方法,适用于卷积神经网络及其变形,例如深度可分离卷积神经网络(dscnn,deepseparableconvolutionalneuralnetwork),通过压缩存储和计算量来有效降低电路的功耗。

本发明为实现上述发明目的采用如下技术方案:

本发明重点研究了语音应用中的关键词识别电路中的神经网络的计算特点,专门针对于卷积计算在语音处理中的特点,使用了语音特征数据流复用的方式,显著降低了存储量和计算次数。此处的卷积计算包含传统的卷积神经网络及其变形,例如通道可分离卷积神经网络(dscnn),双方共同的特点是卷积核的尺寸小于输入数据的尺寸,每一次卷积运算仅计算一部分输入数据,整体输入数据需要若干次卷积计算才能完成。

根据关键词唤醒语音特征数据的输入特点,通常相邻两组语音数据的输入特征只更新其中一帧特征值,而卷积神经网络的每一次卷积运算仅涉及一部分输入数据,在若干次卷积运算中存在对相同的输入数据做的重复运算,而实际卷积的输出结果只更新与最新输入帧有关的数据,其余卷积结果与上一轮的卷积结果完全一致,只是数据顺序不同。这个特点导致按照常规方法做的卷积运算会存在冗余的存储和重复的计算。为减少重复的存储和计算,本发明做了如下的优化:(1)对输入层,只对与当前最新帧有关的数据进行存储;(2)对卷积运算后的中间数据,每一层只需存储与下一层卷积核的大小相当的存储量,每一层中间数据的存储数量与下一层卷积核的大小相关,以此减少了大量的存储器资源;(3)此外,卷积运算只进行与当前更新帧的数据有关的计算,避免了重复的计算过程,也节省了大量的计算周期。本发明的帧复用计算方式减少了卷积计算量,并降低了中间数据的存储规模,从而大幅度降低了电路功耗。

基于语音特征复用的关键词唤醒卷积神经网络电路的存储和计算压缩方法,包含如下5点。

(1)将输入数据存储的行数压缩为输入层卷积核第一维n的尺寸,其中,n为≥m的整数。

(2)剔除掉重复的计算的过程,根据卷积步长的不同,分别有如下两种情况:

第一种情况是输入数据更新的行数与卷积步长相等(m=s);每一次新的输入数据到来时,神经网络输入层用新的输入数据替换最早的那部分输入数据,同时调整输入数据的取址顺序,使其按照输入数据到来先后的顺序依次与对应的卷积核做运算;运算的结果存入神经网络的中间数据存储器,使其更新相应的数据。

神经网络的其它卷积层的计算模式与输入层的计算相同,只对更新的数据进行对应的运算。

存储的压缩如下:卷积层或通道可分离卷积层的中间数据存储被压缩为该层卷积核第一维的尺寸。

第二种情况是输入数据更新的行数与卷积步长不相等(m≠s),通常s>m,取s为m的整数倍,由于每隔s/m-1帧输入特征值才会出现计算重复,则需对下一个重复数据之间的中间运算结果进行存储保留,即保留s/m帧数据的卷积运算的中间结果,同时只计算与这s/m行输出相关的卷积运算。此处应避免设置s<m的情况,以防止出现输入数据被漏掉的情况,会造成识别结果出错。额外的,如果s/m不为整数,虽然不会出现输入数据被漏掉的情况,为了能正确的识别出结果,除了对中间数据需要成倍存储外,还应加大输入数据的存储维度,这样会严重增加资源消耗,故而也不推荐这种设置。

存储的压缩如下:输入层的数据存储被压缩为本层卷积核第一维的尺寸,而卷积层或通道可分离卷积层的中间数据存储为本层卷积核第一维的尺寸乘以(s/m)倍。

(3)数据复用操作方法如下:每一帧数据到来时更新的m行数据替换掉原数据存储器中最旧的那m行数据;在卷积操作时,如果m=s,依次将数据取址顺序循环下移m位,使之与卷积核的每一行权重相对应进行正确的乘累加操作,运算结果存入中间数据存储器;如果m≠s,依次将数据取址顺序循环下移m位,使之与卷积核的每一行权重相对应进行正确的乘累加操作,每一次运算结果依次存入第1到第s/m块中间数据存储器。

(4)池化层的计算和存储的压缩方法与上述卷积层的存储和计算压缩方法相同。

(5)全连接层的计算需涵盖所有输入数据,因此不存在类似卷积层的数据复用模式,实际计算时需对全连接层的计算保留全部结果。

本发明采用上述技术方案,具有以下有益效果:

(1)本发明所使用的数据映射方法根据语音特征数据的输入特点,消除了对关键词唤醒的卷积神经网络中存在的重复计算数据,而节省了重复计算的功耗和计算量,同时减小了数据存储量。

(2)本发明的神经网络电路对重复的计算和存储进行削减,使得整体神经网络电路的功耗和面积得到明显降低,也降低了电路的复杂度。

附图说明

图1是卷积神经网络的卷积运算示意图。

图2是关键词识别系统数据流过程示意图。

图3是步长为1的卷积计算的语音特征流复用模式的示意图。

图4是步长为2的卷积计算的语音特征流复用模式的示意图。

图5是步长为1的卷积计算的数据复用操作方法的示意图。

图6是步长为2的卷积计算的数据复用操作方法的示意图。

图7是本发明存储的输入数据或中间数据压缩情况及其更新情况的示意图。

图8是对图7所示的神经网络结构在压缩前后计算量和存储量的对比结果。

具体实施方式

下面结合附图对本发明作进一步说明,本发明适用于卷积神经网络及其变形,例如深度可分离卷积神经网络(dscnn),下面以一个具体网络(cnn+dscnn)为例来介绍具体实施方式,本发明的应用不限于此种结构的神经网络电路。

卷积神经网络的卷积运算过程如图1所示。每一层卷积层通常有多个卷积核,卷积核在同一输入数据平面上逐步移动,提取的不同位置的特征,形成许多不同的特征映射,最终构成三维阵列特征映射。对输入为语音数据来讲,卷积核通常为三维n*p*c(n、p和c均为≥1的整数)数据,其中,第一维n和第二维p是产生一个输出点数据所需的运算,第三维c为通道数。对输入为图像数据来讲,由于彩色图像有r(红色)、g(绿色)、b(蓝色)三层(甚至更多层)数据,其卷积核比语音应用多了第四维q(q为≥1的整数)。语音数据可看作是q=1的特例。

图2为关键词识别电路中的数据处理过程。输入的语音序列每t(t为正整数,常取20到40)毫秒的数据作为一帧,帧与帧之间重叠v毫秒,v为<t的正整数,图中以32毫秒一帧、重叠16毫秒为例。一个单词的长度大约在300毫秒—1秒之间,神经网络一次计算的输入数据要覆盖整个单词范围,总共m帧,图中以m=30为例。即,神经网络的一次计算的输入数据量为m帧的特征向量,计算输出一次识别结果,即识别为关键词和填充词(filler)的概率。由于语音信号是连续输入的一段长音频,不确定关键词出现的起始位置,为了保证某一次的神经网络输入数据能覆盖了整个关键词的长度,通常使两次神经网络的输入数据只更新一帧的特征值。语音信号首先经过特征提取后得到一个特征向量的序列,每个特征向量为k维,这个k维的特征向量对应于一帧语音片段。神经网络第一次计算时,输入数据input1为1-m共m帧特征向量,第二次计算与第一次计算在时间上相隔帧与帧的步进长度,即v毫秒,在数据上只更新m(m为大于等于1的整数)帧特征向量,反映到第二次输入数据input2则只更新m行,input2为(1+m)-(m+m)帧的特征向量,且在顺序上每一帧均向前移动m个位置。

由此可以发现神经网络两次输入数据间有着大量相同的数据,m行特征向量中,只有m行是不同的,其他m-m行特征向量是相同的,只是顺序上向前移动。因此,本发明利用这个特性,进行语音特征流的复用,在硬件实现中省略了大量的重复计算。其中,卷积步长与输入数据更新的行数有可能不一致,接下来分卷积步长step=1和step=2两种情况来分析这样的输入特征对于计算的影响。

图3为步长为1的卷积计算时语音特征流的复用模式。卷积核为三维n*p*c,此处简化表示为n个向量,n为大于1的整数,每个向量wi(i=1-n)的维度为p*c。此处以n=3、步长step=1举例,这n个向量由w1、w2、w3组成。如图3所示,以m=30举例,第一次输入input1的第一步计算为特征向量1、2、3分别与w1、w2、w3对应相乘并累加,第二步计算为特征向量2、3、4分别与w1、w2、w3对应相乘并累加,之后的计算步骤依次类推;第二次输入input2的第一步计算为特征向量2、3、4分别与w1、w2、w3对应相乘并累加,这与input1的第二步计算是完全相同的,input2的第二步计算为特征向量3、4、5分别与w1、w2、w3对应相乘并累加,这又与input1的第三步计算是完全相同的。由此发现,input2的所有计算步骤中,只有最后一步的卷积计算(特征向量29、30、31与w1、w2、w3对应相乘)与之前不同,其它的计算过程均与input1的计算有重复。

图4为步长为2时的卷积计算时语音特征流的复用情况。input2的整个计算过程与input1的计算过程不再有任何重复,而第三次输入input3的计算与第一次输入input1的计算过程出现重复。以此类推,如果输入每次只更新一行,而卷积步长step=s,则第k次输入的计算与第k+s次输入的计算存在大量重复。由于输入数据更新的行数与卷积步长不一致,导致具有不同模式的重复计算情况。据此得到普适性的结论,假设输入数据每次更新m行,卷积步长为s,则每隔s/m-1个输入会出现计算重复。

对于步长为s(s不等于m)的情况,由于每隔s/m-1个输入才会出现计算重复,则需对中间运算的结果进行存储保留,即中间结果分为保留s/m次。这种情况下存储空间缩减的效果比s=m的情况要少。因此,在神经网络架构设计时,s不宜取过大值。

本发明对于连续卷积层的网络结构,不仅仅是重复的计算量可以省去,每层输出结果存储也大量节省,因为本层的输出结果已经在上一次输入计算时计算过。

图5是步长为与数据更新行数相同时的卷积计算的数据复用操作方法。以步长为1为例,每一帧数据到来时只更新一行数据,用这一行最新的数据替换掉原数据存储器中最旧的那一行数据。在卷积操作时,本发明依次将数据取址顺序循环下移一位,使之与卷积核的每一行权重相对应进行正确的乘累加操作。如图5所示,假定开始的第28、29、30帧数据依次存在以a0、a1、a2为地址的数据存储器,第k次卷积计算的数据取址顺序是a0→a1→a2。则第k+1次卷积计算的数据取址顺序是a1→a2→a0,第k+2次卷积计算的数据取址顺序是a2→a0→a1,接下来的第k+3次卷积计算的数据取址顺序则回归到a0→a1→a2,以此循环往复,使得数据的取址顺序与权重的取址顺序保持一致。

图6是步长为与数据更新行数不相同时的卷积计算的数据复用操作方法。以步长为2、更新行数为1为例,每一帧数据到来时只更新一行数据,用这一行最新的数据替换掉原数据存储器中最旧的那一行数据。在卷积操作时,由于步长s=2,在常规卷积运算中,每次数据将下移两行之后再与卷积核的权重进行卷积运算。依据图4的分析,本发明依次将数据取址顺序循环下移一位,使之与卷积核的每一行权重相对应进行正确的乘累加操作。但与图5步长等于数据更新行数的情况不同的是,此处分两块中间数据存储器,第一块存储器存储奇数次操作的卷积运算结果,第二块存储器存储偶数次操作的卷积运算结果。如图6所示,假定开始的第28、29、30帧数据依次存在以a0、a1、a2为地址的数据存储器,第k次卷积计算的数据取址顺序是a0→a1→a2,卷积运算结果存储在第一块中间数据存储器。则第k+1次卷积计算的数据取址顺序是a1→a2→a0,卷积运算结果存储在第二块中间数据存储器。接下来的第k+3次卷积计算的数据取址顺序则回归到a0→a1→a2,卷积运算结果存储在第一块中间数据存储器。以此循环往复,使得数据的取址顺序与权重的取址顺序保持一致。

如图7所示,本发明存储的输入数据或中间数据如下方黑色方框所示,对比整个词都存储的方案来说降低了虚线部分的存储量。同时,在每一帧新数据到来时只有一行是需要更新的,见阴影部分,这进一步减少了存储器的动态功耗。阴影部分的更新数据在每一帧数据到来时会用新的数据替换到存储器中最早的数据。

一个具体案例

在以下具体实施案例中,将基于语音特征复用的关键词唤醒神经网络存储和计算压缩方法应用于一个具体的通道可分离卷积神经网络中,用来进行关键词唤醒。

该通道可分离神经网络的整体结构图如图7所示,包含一层卷积层,一层通道可分离卷积层,一层池化层和一层全连接层,除第一层卷积层采用8bit的输入位宽外,其余的各层数据均为二值化1bit数据。每层的网络规模和卷积核的大小见图上标注。

在这个神经网络电路中,数据存储规模的缩减效果明显,如图7所示,灰色方框是节省掉的数据量,而黑色方框是实际存储的数据量,其中在存储的数据中,每一次计算只有一行是需要更新的,见阴影部分,这进一步减少了存储器的动态功耗。阴影部分的更新数据在每一帧数据到来时会用新的数据替换到存储器中最早的数据。以输入数据为例,未进行数据复用之前,输入数据需全部存储,规模为10×30;若采用语音特征流的数据复用方式,由于第一个卷积层的纵向步长为1,所以卷积计算时相邻两次输入间存在大量重复,新一帧的数据到来时,只有第一行输入特征更新,也就是说输出数据的20行中,也只有第一行的数据是全新的,其它19行的数据都是上一帧计算已经得到的,因此在存储输入语音特征数据时,只需存储与第一行输出计算有关的前10行数据(第一层卷积核为10×4),存储规模为10×10,削减为复用之前的1/3。同理,除了卷积层之外,通道分离卷积神经网络中,通道分离卷积层、通道融合卷积层和池化层的输入数据同样可以削减。

本系统所用神经网络结构的计算量和存储量在进行语音特征流的复用模式前后对比如图8的表格所示。由对比可知,通过语音特征流复用方式,神经网络尤其是卷积计算部分的计算次数得到了极大削减,第一层8比特输入数据的计算量削减至复用前的5%,后面几层1比特计算量削减至复用前的7.34%。中间数据的存储也有明显削减,存储量削减为复用前的28.6%。参数量与复用前保持不变,并且,因为复用方式实际上并没有改变网络结构及计算结果,故而不影响神经网络的识别率。

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