一种运行在ARM上的卷积神经网络字符识别方法
技术领域
本发明属于人工智能领域,特别是一种运行在嵌入式设备上的整数卷积神经网络字符识别方法。
背景技术
通常字符识别的方法分为结构特征识别、统计特征识别和深度学习特征识别三个方向。在结构特征识别中,基于字符结构特征和相交点特征的虚线,形成识别判断树实现字符识别,字符结构往往会产生较大的变化,甚至出现局部断裂粘连等复杂情况。因此采用结构特征识别的方法并没有较好的结果。
在统计特征识别中,多采用八方向梯度特征和梯度方向直方图特征,并且采用支持向量机和最近邻分类两种模式识别方法。统计特征相比于结构特征更能表现出不同字符的特性,但是对分辨率很低的情形,统计特征往往很难区别相似字符。
在基于深度学习的特征识别时,研究人员得到的结果相比于上面两种方法更加优秀。不同结构的卷积神经网络都取得了较好的结果。然而,在硬件设备上部署基于深度学习的识别方案时,无法同时满足识别精度和实时性两个特性,满足不了时间和精度上的双重需求。
发明内容
一种运行在ARM上的卷积神经网络字符识别方法,包括:
S100.对输入训练完毕的卷积神经网络,设置每次量化的比例R,按从大到小排序,每次将比例为R的权值量化为2的n次幂;迭代运行上述步骤直到量化后的网络与量化前的网络错误率差别小于设定阈值;
S200.输入一组校正样本集,计算权值已量化完毕的卷积神经网络每层输出的激活值。对每层的激活值进行一次性的8位有符号整数量化。
进一步地,所述S100包括:
S101.输入训练完毕的浮点型卷积神经网络、设定每轮量化权重的比例R;
S102.根据运算速度限制和量化精度需求,确定量化权值位数b;初始化与卷积神经网络相同大小的量化标记矩阵,量化标记矩阵为全为1的矩阵Tl;
S103.遍历卷积神经网络中所有权值,获得所有权值中绝对值最大的值记为max(abs(W1)),根据该值获得n2;
S104.根据量化权值位数b和n2,得到全局的最小权值指数值n1;
S105.根据全局的权值指数值n1、n2和权值位数b,得到量化后的权值范围P1;
S106.对卷积神经网络中每一层权值按照绝对值大小进行先大后小的排序,按照量化比例R获得每一层量化阈值T1;
S107.将网络中各层权值绝对值与该层的量化阈值T1相比,如果T1小于当前权值的绝对值,则将其量化为S105中P1里与其最接近的权值;否则,则该权值不变;
S108.输入经步骤S107部分量化的网络与对应的标记矩阵Tl,使用训练数据集对量化网络进行前向传播,计算损失函数;
S109.根据卷积神经网络反向传播算法与S108中计算的损失函数,对部分量化的网络进行逐层梯度计算;
S110.将S109得到的梯度用于更新各层未量化的权值,重复S107-S109训练网络若干轮;
S111.判断当前轮量化比例R,若已经达到100%则停止;否则返回S110继续执行;
S112.输出权值全为2的幂次的量化神经网络。
进一步地,S103中变量n2获取公式为:
其中,max(abs(w1))为所有权值中绝对值最大的值。
进一步地,S104中根据量化权值位数b和n2,得到全局的最小权值指数值n1的公式为:
n1=n2+1-2(b-1)/2
其中,n2为全局最大权值指数变量,b为量化权值位数。
进一步地,S105中根据全局的权值变量指数值n1,n2和权值位数b,得到量化后的权值范围P1为:
进一步地,所述S108中,对所有权值生成标记矩阵,其中未量化的权值标记为1,量化的权值标记为0。
进一步地,所述S109中,使用随机梯度下降法更新权值时,按照以下公式:
其中Tl为标记网络矩阵,Tl=0表示已经量化的部分,Tl=1表示还未量化的部分,即权值Wl(i,j)更新时,仅更新未被量化的权值。
进一步地,所述S112输出的训练后的量化网络,权值100%由2的n次幂组成,这种网络使用移位运算进行代替乘法运算。
进一步地,所述S200包括:
S201.输入为权重已量化的神经网络和一组约500张的校准样本集;
S202.在校准样本集上运行神经网络前向计算过程,统计网络模型中间层输出的激活值分布直方图;
S203.使用不同的阈值T2将浮点激活值分布直方图截断,并映射到整数激活值分布直方图;
S204.计算每个整数激活值分布与原浮点激活值分布的相对熵;
S205.迭代运行S203、S204两个步骤,选择熵最少的一个整数值分布,取得相对熵最小时对应的T2值;
S206.根据神经网络每层确定的T2值,算出每层激活值浮点数映射到整数值的量化系数;
S207.神经网络计算时,当前层的输入按步骤S100中得到的幂次权重移位计算出激活值,该激活值再按照S206中的量化系数映射到整数;量化后的整数激活值作为后续层的输入;
S208.神经网络实际推理计算时,逐层循环经过步骤S207直至到达输出层。
进一步地,S203中设定饱和阈值初始值T0,将激活值里绝对值大于T0的,采用截断的方式限定为T0。
进一步地,S204中衡量整数激活值分布与原浮点激活值分布之间的相似性时,采用Kullback-Leibler散度。
进一步地,S206中激活值按照最小、最大线性关系映射到-127到+127之间。
本发明与现有技术相比至少具有以下有益效果:与传统嵌入式实现的字符识别方法相比,本发明引入了最新的深度学习神经网络,依据大量样本自动生成识别模型,解决了传统方法中人工设置参数适应性差的问题。同时,由于神经网络的计算复杂性,部署在低功耗、低算力的嵌入式设备上时,存在计算量降低的难题。本发明采用逐步迭代量化的策略将卷积神经网络的权值进行2的幂次量化,在得到权值量化好的激活值进行8位整型量化,得到量化后的网络和标记矩阵,经过卷积神经网络训练,与现有技术相比,有着更高效的计算方式,在进行卷积运算时将卷积空间中的权值从高比特位的浮点数,变成了低比特位的特定权值,当表示需要对数据进行移位时,就可以将卷积层的乘加运算变成移位与加法运算,可极大加快卷积神经网络的计算速度。通过网络量化,训练,再量化,再训练的过程,可以将优秀的网络量化为低比特位表示的2的n次幂的权值网络,在保存精度的同时将时间消耗降到最低。
附图说明
附图用来提供对本发明的进一步理解,并且构成说明书的一部分,与本发明的实施例一起用于解释本发明,并不构成对本发明的限制。在附图中:
图1为本发明实施例中,一种运行在ARM处理器上的卷积神经网络字符识别方法流程图;
图2为本发明实施例中,卷积神经网络的权值量化重训练流程图;
图3为本发明实施例中,卷积神经网络的权值逐步量化过程示意图;
图4为本发明实施例中,卷积神经网络的激活值截断量化示意图。
具体实施方式
实施例1
本实施例公开了一种运行在ARM上的卷积神经网络字符识别方法,如图1,包括:
S100.对输入训练完毕的卷积神经网络,量化比例T的卷积神经网络进行量化,得到权值为2的n次幂的量化网络;
具体的,如图2,所述S100包括:
S101.输入训练完毕的卷积神经网络,每轮量化比例设为R,在一些优选实施例中,R选取10%。
S102.根据运算速度限制和量化精度需求,确定量化权值位数b;初始化与卷积神经网络相同大小的量化标记矩阵,量化标记矩阵为全为1的矩阵Tl;
具体的.设定量化权值位数为5,有1个bit位用于表示权值为0,4个bit位用于表示16种不同的移位操作,左移和右移各八种;越高的量化位数越能将小权值量化得更加精准。初始化标记矩阵为与卷积神经网络相同大小,如某层大小为16*16,所有权值为1。
S103.遍历卷积神经网络中所有权值,获得所有权值中绝对值最大的值,如最大值为1.6,则根据公式:
获得最大权值指数变量n2=1。
S104.根据量化权值位数得到全局的权值获得变量n1,公式如下:
n1=n2+1-2(b-1)/2
例如当b为5,n2为1时,可以计算出n1为-6。
S105.根据全局的权值获得变量n1,n2和权值位数b,得到量化后的权值范围P1;所述P1范围为:
即为{±2-6、±2-5、±2-4、±2-3、±2-2、±2-1、±20、±21、0};
S106.具体的,将每一层中权值绝对值进行从大到小的排序,根据排序大小,将绝对值最大的20%的权值部分进行量化。
S107.将网络中各层权值绝对值与该层的量化阈值T1相比,如果T1小于当前权值的绝对值,则将其量化为S105中P1里与其最接近的权值;否则,则该权值不变;具体的,根据该权值在排序后的量化范围P1中的位置,将其量化为最相邻的权值即可,如附图3.
S108.在量化的同时,对所有权值生成标记矩阵T,其中未量化权值的标记为1,量化权值的标记为0。在反向传播修改权值时,不同于之前训练时所有权值都更新的训练方法,只对未被量化的权值进行更新操作。
S108.输入经步骤S107部分量化的网络与对应的标记矩阵Tl,使用训练数据集对量化网络进行前向传播,计算损失函数。
S109.根据卷积神经网络反向传播算法与S108中计算的损失函数,对部分量化的网络进行逐层梯度计算;
S110.将S109得到的梯度用于更新各层未量化的权值,重复S107-S109训练网络若干轮;所述S110中,使用随机梯度下降法更新权值时,按照以下公式:
其中Tl为标记网络矩阵,Tl=0表示已经量化的部分,Tl=1表示还未量化的部分,即权值Wl(i,j)更新时,仅更新未被量化的权值。
S111.判断当前轮量化比例R,若已经达到100%则停止;否则返回S110继续执行;
S112.输出权值全为2的幂次的量化神经网络,所述S112输出的训练后的量化网络,权值100%由2的n次幂组成,这种网络使用移位运算代替乘法运算。
S200.得到训练后的权值量化网络,在校准数据集上运行32位浮点数推理。收集激活的直方图,并生成一组具有不同阈值的8位整数直方图表示;再通过选择两直方图之间最小KL散度的截断阈值T2;具体的,所述S200包括:
S201.输入为权重已量化的神经网络和一组约500张的校准样本集;
S202.在校准样本集上运行神经网络前向计算过程,统计网络模型中间层输出的激活值分布直方图;将激活值P(32位浮点)划分为2048个格子,统计P落入每个格子中的概率值;
S203.使用不同的阈值T2将浮点激活值分布直方图截断,并映射到整数激活值分布直方图;具体的,不断地截断直方图P,将截断区外的值加到截断直方图P的最后一个值之上,如选取初始截断值为2.4,则小于-2.4和大于2.4的值所在的直方图全部映射到-2.4和2.4所在的直方图格子中;创建直方图Q,其格横坐标为[-127,127]之间的256个格子,每个格子的取值为截断样本P映射到整数的值,映射关系如附图4。
S204.计算每个整数激活值分布与原浮点激活值分布的相对熵;具体的,S204中衡量整数激活值分布与原浮点激活值分布之间的相似性时,采用Kullback-Leibler散度。求P、Q的KL散度值,判断该值是否为目前最小值;如直方图统计量X~P取值为1,2,3时的概率分别为[0.1,0.4,0.5],直方图统计量Y~Q取值为1,2,3时的概率分别为[0.4,0.2,0.4],则:
KL(P∥Q)=0.1×log(0.1/0.4)+0.4×log(0.4/0.2)+0.5×log(0.5/0.4)=0.25
KL散度值越小,说明两个直方图的分布越相似。
S205.重复S203-S204,不断地构造P和Q,并计算相对熵,直到找到最小的相对熵,此时表示Q能极好地拟合P分布。
S206.根据神经网络每层确定的T2值,算出每层激活值浮点数映射到整数值的量化系数;如将[-10,10]范围内的值映射到[-127,127]之间,则缩放倍数为20/255。
S207.神经网络计算时,当前层的输入按步骤S100中得到的幂次权重移位计算出激活值,该激活值再按照S206中的量化系数映射到整数;量化后的整数激活值作为后续层的输入。
S208.神经网络实际推理计算时,逐层循环经过步骤S207直至到达输出层。
本实施例公开的一种运行在ARM上的卷积神经网络字符识别方法,将卷积神经网络进行量化,得到量化后的网络和标记矩阵,通过量化后的网络和标记矩阵,进行卷积神经网络训练,与现有技术相比,有着更高效的网络规模,并且在进行卷积运算时,只需要将卷积空间中权值的取值范围从高比特位的浮点数,变成了低比特位的特定权值,表示需要对数据进行移位时,就可以将卷积层的乘加运算组合变成移位与加法运算的组合,则可以极大的加快卷积神经网络的计算速度,提升在嵌入式设备的计算效率。通过网络量化,训练,再量化,再训练的过程,可以将优秀的网络量化为低比特位表示的2的n次幂的权值网络,在保存精度的同时将时间消耗降到最低。
应该明白,公开的过程中的步骤的特定顺序或层次是示例性方法的实例。基于设计偏好,应该理解,过程中的步骤的特定顺序或层次可以在不脱离本公开的保护范围的情况下得到重新安排。所附的方法权利要求以示例性的顺序给出了各种步骤的要素,并且不是要限于所述的特定顺序或层次。
在上述的详细描述中,各种特征一起组合在单个的实施方案中,以简化本公开。不应该将这种公开方法解释为反映了这样的意图,即,所要求保护的主题的实施方案需要清楚地在每个权利要求中所陈述的特征更多的特征。相反,如所附的权利要求书所反映的那样,本发明处于比所公开的单个实施方案的全部特征少的状态。因此,所附的权利要求书特此清楚地被并入详细描述中,其中每项权利要求独自作为本发明单独的优选实施方案。
本领域技术人员还应当理解,结合本文的实施例描述的各种说明性的逻辑框、模块、电路和算法步骤均可以实现成电子硬件、计算机软件或其组合。为了清楚地说明硬件和软件之间的可交换性,上面对各种说明性的部件、框、模块、电路和步骤均围绕其功能进行了一般地描述。至于这种功能是实现成硬件还是实现成软件,取决于特定的应用和对整个系统所施加的设计约束条件。熟练的技术人员可以针对每个特定应用,以变通的方式实现所描述的功能,但是,这种实现决策不应解释为背离本公开的保护范围。
结合本文的实施例所描述的方法或者算法的步骤可直接体现为硬件、由处理器执行的软件模块或其组合。软件模块可以位于RAM存储器、闪存、ROM存储器、EPROM存储器、EEPROM存储器、寄存器、硬盘、移动磁盘、CD-ROM或者本领域熟知的任何其它形式的存储介质中。一种示例性的存储介质连接至处理器,从而使处理器能够从该存储介质读取信息,且可向该存储介质写入信息。当然,存储介质也可以是处理器的组成部分。处理器和存储介质可以位于ASIC中。该ASIC可以位于用户终端中。当然,处理器和存储介质也可以作为分立组件存在于用户终端中。
对于软件实现,本申请中描述的技术可用执行本申请所述功能的模块(例如,过程、函数等)来实现。这些软件代码可以存储在存储器单元并由处理器执行。存储器单元可以实现在处理器内,也可以实现在处理器外,在后一种情况下,它经由各种手段以通信方式耦合到处理器,这些都是本领域中所公知的。
上文的描述包括一个或多个实施例的举例。当然,为了描述上述实施例而描述部件或方法的所有可能的结合是不可能的,但是本领域普通技术人员应该认识到,各个实施例可以做进一步的组合和排列。因此,本文中描述的实施例旨在涵盖落入所附权利要求书的保护范围内的所有这样的改变、修改和变型。此外,就说明书或权利要求书中使用的术语“包含”,该词的涵盖方式类似于术语“包括”,就如同“包括,”在权利要求中用作衔接词所解释的那样。此外,使用在权利要求书的说明书中的任何一个术语“或者”是要表示“非排它性的或者”。