一种神经网络的定点化方法、装置
技术领域
本申请涉及计算机
技术领域
,特别地,涉及一种神经网络的定点化方法。背景技术
在计算机中数值会按照整型、浮点型等不同类型,占用计算机不同比特位来进行保存,例如浮点数一般用高精度的32bit或者64bit表示,在可允许的精度损失范围内,用更少的比特数,例如4bit、8bit、16bit,来表示浮点数的行为称之为量化,通过动态量化算法,得到的量化后数值取值是离散的。
神经网络是机器学习算法中一种重要的算法,它推动了计算机领域的发展,随着人们不断研究,其算法的计算与存储复杂度也随之增长,不断膨胀的计算复杂度和空间复杂度对计算设备的性能提出了挑战,在保证神经网络目标性能的情形下将神经网络中的各个参数进行量化,成为神经网络应用的基础。
随着神经网络的广泛应用,越来越多的小型化设备例如嵌入式系统需要通过神经网络来实现各种场景应用,受限于硬件资源,减少神经网络被运行时所占用的处理资源成为需求。
发明内容
本申请提供了一种神经网络的定点化方法,以减少神经网络所占用的处理资源。
本申请提供的一种神经网络的定点化方法,该方法包括,
对神经网络进行至少如下之一低比特量化:
对神经网络中的卷积层输入激活值进行第一低比特量化,对卷积层中卷积核权值进行第二低比特量化,
对神经网络中除了卷积层之外的非卷积功能层,将非卷积功能层的输入激活值进行第三低比特量化;
在进行所述任意低比特量化之后,基于当前低比特量化后的神经网络,进行重训练,
基于重训练后的神经网络中各低比特量化结果,进行定点化;
其中,所述第一低比特、第二低比特、第三低比特在1比特至8比特以内。
本申请还提供一种神经网络的定点化装置,该装置包括,
至少如下之一用于对神经网络进行低比特量化的量化模块:
卷积层输入激活值量化模块,对神经网络中的卷积层输入激活值进行第一低比特量化,
卷积层权值量化模块,对卷积层中卷积核权值进行第二低比特量化,
非卷积功能层输入激活值量化模块,对神经网络中除了卷积层之外的非卷积功能层,将非卷积功能层的输入激活值进行第三低比特量化,
重训练模块,在任意所述量化模块进行低比特量化之后,基于当前低比特量化后的神经网络,进行重训练,
定点化模块,基于重训练神经网络中各低比特量化结果,进行定点化;
其中,所述第一低比特、第二低比特、第三低比特均在1比特至8比特以内。
本申请提供的一种计算机可读存储介质,所述存储介质内存储有计算机程序,所述计算机程序被处理器执行时实现所述神经网络定点化方法的步骤。
本申请使得最终定点化神经网络中激活值和卷积核权值都用低比特定点化表示,从而可以方便移植到嵌入式平台、专用集成电路之中;卷积层输入激活值和/或卷积核权值定点化为低比特,计算量和存储空间被极大的压缩;采用分阶段量化的方式,不需要逐层计算或者重复执行计算,同时能够保证阶段量化性能误差低,可根据神经网络目标性能需求灵活地选择需定点化功能层参数;在卷积层输入激活值量化后、卷积层权值量化后进行神经网络重训练,避免了逐层地训练方式所带来的误差累积,实现了端到端的重训练,有效的减少了整个网络的误差,保证了量化后的网络仍然具有足够的目标性能。
附图说明
图1为卷积神经网络模型中隐含层的一种示意图。
图2a、2b为本申请实施例一卷积神经网络的定点化方法的一种流程图。
图3为卷积层中各输出通道对应的卷积核的权值的一种示意图。
图4为卷积核权值量化过程中有关参数的关系的一种示意图。
图5为本申请实施例二的卷积神经网络的定点化方法的一种流程图。
图6为本申请实施例三的卷积神经网络的定点化方法的一种流程图。
图7为本申请实施例的神经网络定点化装置的一种示意图。
图8为本申请实施例低比特定点化的神经网络应用于基于车载摄像头目标检测的一种示意图。
图9是本申请实施例低比特定点化的神经网络应用于基于门禁摄像图像识别的一种示意图。
具体实施方式
为了使本申请的目的、技术手段和优点更加清楚明白,以下结合附图对本申请做进一步详细说明。
本申请提供一种神经网络定点化的计算方法,通过低比特定点化神经网络,从而解决神经网络采用浮点数运算带来的占用硬件资源多的问题。
为便于理解,以下以卷积神经网络的定点化为例来进行说明。鉴于各种场景下业务应用即使相同的神经网络模型,所涉及的参数特征也不尽相同,为说明本申请的技术方案,以下围绕神经网络模型本身为核心来说明。
卷积神经网络模型包括:输入层,隐含层,以及输出层,其中,输入层处理多维训练数据,例如,应用于机器视觉的卷积神经网络,输入层将分布于0~255的原始像素值归一化,以有利于提升卷积神经网络的学习效率和表现;隐含层用于对输入层的数据进行训练,输出层用于输出卷积神经网络模型的训练结果,例如,对于图像分类问题,输出层使用逻辑函数或归一化指数函数(softmax function)输出分类标签。
参见图1所示,图1为卷积神经网络模型中隐含层的一种示意图。隐含层通常依次包括,将上一激活函数层的激活值输入的卷积层1、归化池1、激活函数层1、池化层1、卷积层2、归一化层2、激活函数层2、卷积层3、归一化层3、相加层、激活函数层4....。在同一卷积层中,输入卷积层的至少一个以上激活值通过不同卷积核可以得到不同的输出结果,一输出结果可视为一输出通道。所应理解的是,隐含层的结构不限于此,例如,池化层、归一化层、相加层等除卷积层之外的非卷积功能层可视需求设计,例如,图中池化层2输出至相加层中,但卷积层是隐含层的核心。因此,在卷积神经网络中计算最耗时的部分就是卷积计算,降低这部分的计算量即能够最大程度减少整个网络计算量。
实施例一
参见图2a和2b所示,图2a、2b为本申请实施例一卷积神经网络的定点化方法的一种流程图。
步骤201,向卷积神经网络输入训练数据,前向计算出各个激活函数层输出的第一激活值,即,激活函数层中至少一个以上激活函数输出的激活值,也就是输入卷积层的各个激活值。
其中,第一激活值用浮点型数据表示,卷积神经网络中的参数以浮点型数据来保存。
步骤202,根据当前各激活函数层输出的第一激活值分布,确定各激活函数层输出的第一激活值的当前量化步长。
在该步骤中,对于任一激活函数层,分析该激活函数层输出的第一激活值分布,例如,对该激活函数层输出的第一激活值分布进行排序,然后按给定比例值选择一个量化步长,作为该激活函数层输出的第一激活值当前量化步长。
较佳地,对于任一激活函数层,还可以通过搜索的方式搜到一个量化步长,使得该激活函数层输出的第一激活值的量化误差最小化。
这样,可以得到各激活函数层输出的第一激活值浮点数的当前量化步长。
步骤203,对于各个激活函数层输出的第一激活值,根据上一步骤确定的各个激活函数层当前量化步长,求解第一激活值的取值上限,并按照求解的取值上限限制第一激活值的取值范围,得到各个激活函数层的第二激活值。
在该步骤中,对于任一激活函数层输出的第一激活值,根据浮点量化步长计算公式可以得到该激活函数层输出的第一激活值的取值上限β,其中,s为当前量化步长,用于激活值量化的第一比特数为ba,较佳地,ba为低比特,即8比特以内,较佳地,ba通常情况下可以取4。
将各个第一激活值与求解得到的取值上限进行比较,如果第一激活值大于所述取值上限,则将该第一激活值取值为所述取值上限,否则,保持第一激活值不变。由此,得到了该激活函数层的被限制取值范围的第二激活值。
数学表达为:
其中,下标i表示激活函数层i,βi表示激活函数层i输出的第一激活值的取值上限,si表示激活函数层i输出的第一激活值的当前量化步长,bai表示用于激活函数层i输出的激活值的量化比特数,较佳地,用于各激活函数层的量化比特数相同。
其中,xfi表示激活函数层i输出的第二激活值,该第二激活值为浮点数。
步骤204,将各激活函数层第二激活值进行量化,得到量化后的激活值。
在该步骤中,对于任一激活函数层的第二激活值,按照浮点数量化公式 得到量化后的激活值,其中floor操作是对该数值进行四舍五入,xf为第二激活值,ba比特的定点数值的表达范围为因此量化后的激活值限制在这个范围之中。
数学表达为:
其中,表示激活函数层i量化后的激活值,xfi为激活函数层i第二激活值。
步骤205,基于当前卷积神经网络,重新进行训练,其中,当前卷积神经网络中的各个卷积层输入的激活值为量化后的激活值。
该步骤将激活值的取值上限β作为一个可训练迭代更新的参数,随着整个网络的训练进行更新,直至收敛,这样,量化步长也随着更新。
步骤206,基于当前卷积神经网络获取各个卷积层中每个卷积核中的每个第一权值,该权值为浮点数据;对于各个卷积层的每个输出通道,累加该输出通道对应卷积核的各个第一权值的平方数,得到输出通道的第一权值平方数的累加结果。基于所述累加结果,在指定的阈值范围中进行搜索一个量化阈值,作为该输出通道的当前权值量化阈值。
参见图3所示,图3为卷积层中各输出通道对应的卷积核的权值的一种示意图。在同一卷积层中,每个输出通道对应的卷积核数量为k,每个卷积核的尺寸相同,每个卷积核具有n个第一权值;不同卷积层之间,如图中卷积层1和卷积层i之间,其输出通道的数量、卷积核数量、卷积核尺寸不同。
在该步骤中,对于任一卷积层i的任一输出通道j,计算输出通道j对应的各卷积核k中每个第一权值的平方,得到输出通道j对应的各个卷积核中每个第一权值的平方数,累加该输出通道所有卷积核中所有第一权值的平方数,得到输出通道j的累加结果;
其中,累加输出通道j的所有卷积核中所有第一权值的平方数数学表达为:
其中,Lij表示卷积层i输出通道j的累加结果,wfijkn为卷积层i中输出通道j对应卷积核k中第n个第一权值。
基于该卷积层该输出通道累加结果Lij,在指定的阈值范围中进行搜索一个量化阈值,作为卷积层i输出通道j的当前权值量化阈值。
通过该步骤,可以获得各卷积层中每个输出通道的当前权值量化阈值。
步骤207,基于各个输出通道的当前权值量化阈值,对各个输出通道对应的卷积核中的各个第一权值进行量化,得到各个输出通道对应的卷积核中的各个第一权值的当前量化权值。
在该步骤中,对于任一卷积层i,将该卷积层输出通道j的累加结果乘以该输出通道的当前权值量化阈值的结果,作为该输出通道当前幅值;将该输出通道对应的卷积核中的各个第一权值与所述当前幅值进行比较,大于该幅值则第一权值被赋值为该幅值,小于该幅值的负数则第一权值赋值为负的幅值,取值在中间的第一权值赋值为0,从而可以得到该输出通道的当前量化权值。
数学表达为:
λij=Lij×tij
其中,tij为卷积层i中输出通道j的当前权值量化阈值,λij为卷积层i中输出通道j的当前幅值;
其中,为卷积层i中输出通道j对应卷积核k的第n个第一权值的当前量化权值,wfijkn为卷积层i中输出通道j对应卷积核k中第n个第一权值。
步骤208,估计输出通道的各个第一权值的当前量化权值与各个第一权值之间的误差,如果误差大于设定的误差阈值,则说明该输出通道的当前量化阈值不符合要求,重新搜索量化阈值,作为该输出通道的当前权值量化阈值,并返回执行步骤207,直至误差小于设定的误差阈值,将最小误差所对应的量化阈值作为权值量化阈值系数。
在该步骤中,所述估计误差可以是,输出通道第一权值的当前量化权值与该第一权值的平均误差或累计误差,即,输出通道j的所有第一权值的当前量化权值与所有第一权值的累计误差或平均误差,数学表达为:
或
通过步骤207~208,可以得到各卷积层中每个输出通道的权值量化阈值系数。
步骤209,基于各个输出通道的权值量化阈值系数和累加结果,计算各个输出通道的第一幅值,
在该步骤中,对于任一卷积层i,将该卷积层输出通道j的累加结果乘以该输出通道的权值量化阈值系数的结果,作为该输出通道第一幅值;
数学表达为:
αij=Lij×Tij
其中,Tij为卷积层i中输出通道j的权值量化阈值系数,αij为卷积层i中输出通道j的第一幅值;
步骤210,基于各个卷积层中的各个输出通道的第一幅值,采用第二低比特来表示各个卷积层中的各个输出通道对应卷积核中的第一权值,得到第二权值;即,对每个第一权值进行第二低比特量化,以定点化第一权值。
为了保证卷积神经网络目标性能,按照低比特量化所导致的卷积神经网络目标性能变化的敏感程度来选择低比特量化方式。如果目标性能下降不多,说明该卷积层不敏感;如果量化为低比特时目标性能下降较多,说明该卷积层很敏感。
对于不敏感的卷积层,采用一个第二低比特来表达第一权值。具体为,将输出通道的第一幅值与第二低比特表达的权值量化阈值系数相乘;其中,低比特表达的权值量化阈值系数用低比特为bw表达的定点化数值为T1,T1的取值范围为例如,当低比特bw为2时,T1的取值范围为[-2,1]。这样,则对于卷积层i中输出通道j对应的卷积核k中第n个第一权值wfijkn的低比特表达、即第二权值wijkn为:
wijkn=αijT1ij
其中,αi为卷积层i中输出通道j的第一幅值;T1ij为卷积层i中输出通道j的权值量化阈值系数的低比特表达,即定点化后的权值量化阈值系数;wijkn为定点数据。
对于敏感的卷积层,采用两个以上第二低比特基的组合来表达卷积层的浮点权值。具体为,将卷积层中两个以上输出通道作为组合输出通道,所示组合输出通道的权值量化阈值系数为组合权值量化阈值系数,将两个以上组合输出通道的第一幅值与两个以上组合权值量化阈值系数相乘,并将所有相乘的结果求和;其中,所述组合权值量化阈值系数采用两个以上第二低比特基的组合进行表达,分别为T1,T2,...Tm定点化数值,其中,m为第二低比特基组合的数量,各组合权值量化阈值系数的取值范围为例如,当第二低比特bw为2时,各组合权值量化阈值系数的取值范围为[一2,1],比如各组合权值量化阈值系数的取值可以为-1,0,1这3个数,这时,m为3。对于卷积层i中输出通道j对应的卷积核k中第n个第一权值wfijkn的低比特表达、即第二权值wijkn为:
wijkn=αi1T1ij+…+αimTmij
其中,αim为卷积层i中J个输出通道中的第m个组合输出通道的第一幅值;Tmij为两个以上低比特基的组合中第m个组合低比特基所表达的卷积层i中输出通道j的组合权值量化阈值系数,即两个以上低比特基的组合定点化后的组合权值量化阈值系数;m为第二低比特基组合的数量,小于等于J;J为卷积层i中输出通道的总数;wijkn为定点数据。
步骤211,对各个输出通道对应的权值量化阈值系数进行量化,得到各个输出通道对应的量化后的权值量化阈值系数,即,系数量化值。
在该步骤中,对于不敏感的卷积层,对于任一输出通道j,将该输出通道对应的卷积核中的各个第二权值与第一幅值进行比较,大于该幅值,则该输出通道的权值量化阈值系数的第一系数量化值为定点化后的权值量化阈值系数本身;小于该幅值的负数,则该输出通道的权值量化阈值系数第一系数量化值为负的定点化后的权值量化阈值系数;取值在中间的,则输出通道的权值量化阈值系数被赋值为0,从而可以得到该输出通道对应的权值量化阈值系数的第一系数量化值。
数学表达为:
其中,wijkn为卷积层i中输出通道j对应卷积核k中第n个第二权值,为卷积层i中输出通道j的权值量化阈值系数的第一系数量化值,即,输出通道j的第一系数量化值。
对于敏感的卷积层,对于任一卷积层中的任一组合输出通道m,将组合输出通道的第一幅值与该组合输出通道的组合权值量化阈值系数相乘的结果作为第二幅值,将该第二幅值与第二权值进行比较,如果第二权值大于该幅值,则将该组合权值量化阈值系数作为第二系数量化值,如果第二权值小于该幅值的负数,则负的组合权值量化阈值系数作为第二系数量化值,如果第二权值取值在中间,则将0为第二系数量化值,从而可以得到该组合输出通道对应的组合权值量化阈值系数的第二系数量化值。
数学表达为:
其中,wijkn为卷积层i中输出通道j对应卷积核k中第n个第二权值,为卷积层i的J个输出通道中第m个组合输出通道的组合权值量化阈值系数的第二系数量化值,即,组合输出通道m的第二系数量化值。
例如,若组合权值量化阈值系数的取值范围为-1,0,1这三个数,则,对于任一组合权值量化阈值系数m的第二系数量化值为:
步骤212,根据各个输出通道的权值量化阈值系数的系数量化值和各个输出通道的第一幅值,计算各个输出通道的各个权值,得到第一量化权值,将各个输出通道的各个第一量化权值代入卷积神经网络,进行重训练。
在该步骤中,对于不敏感的卷积层,卷积层i中输出通道j对应的卷积核k中第n个第一权值的第一量化权值为:卷积层i中输出通道j的第一幅值与第一系数量化值的乘积;数学式表示为:
其中,为卷积层i中输出通道j对应的卷积核k中第n个第一权值的第一量化权值,这意味着,对于不敏感卷积层,同一输出通道对应卷积核中各个第一权值的第一量化权值是相同的。
对于敏感的卷积层,卷积层i中输出通道j对应的卷积核k中第n个第一权值的第一量化权值为:各组合输出通道的第一幅值与其组合输出通道的第二系数量化值乘积之和;数学式表示为:
通过步骤209~212,原来保存为32比特的权值被量化为bw比特。该过程中的数据关系可参见图4所示,图4为卷积核权值量化过程中有关参数的关系的一种示意图。
步骤213,基于重训练后的卷积神经网络,在用于对卷积层的各个输出通道的输出结果按照每个通道进行归一化操作的归一化层,将输出结果分布归一化到0均值,或1方差,使之分布满足正态分布;对于卷积层各输出通道的第一幅值,将该卷积层所连接的归一化层的各通道参数作为乘数与所述第一幅值相乘,以更新第一幅值。
在经典的神经网络中,都会在卷积层之后进行归一化操作,即,将卷积层的输出通道按照每个通道将输出结果数据分布归一化到0均值,或1方差,使之分布满足正态分布,由于归一化层的参数也是各个输出通道独立,因此在本申请中将归一化层各个通道参数乘以到与该归一化层连接的卷积层各个输出通道的第一幅值之中。
对于不敏感卷积层,将输出通道的第一幅值与归一化层对应通道的通道参数相乘,得到更新后的第一幅值,上述更新第一幅值用数学式表达为:
αij≡αij×σij
其中,σij为与卷积层i连接的归一化层i中通道j的通道参数,上式表示将与卷积层i的输出连接的归一化层通道j的参数与卷积层i的输出通道j的第一幅值相乘,用相乘的结果更新该第一幅值。
对于敏感卷积层,将输出通道中每个组合输出通道的第一幅值分别与归一化层对应输出通道的通道参数相乘,得到更新后的组合输出通道的第一幅值,上述更新第一幅值用数学式表达为:
αim≡αim×σim
其中,σim表示归一化层i中与卷积层i中组合输出通道m对应的通道参数;上式表示:将卷积层i的输出通道J中每个组合输出通道的第一幅值,与,该卷积层i的输出连接的归一化层i中对应于该组合输出通道的通道参数,进行相乘,用相乘的结果更新该组合输出通道的第一幅值。
该步骤所进行的归一化参数融合,使得第一幅值被更新,以便去除归一化操作对网络性能的影响。
步骤214,通过动态量化算法,将神经网络中的各个非卷积功能层的输入激活值进行量化。
之前步骤解决了最耗存储空间和计算量的卷积层操作,将它变为ba比特激活值和bw比特权值之间的卷积运算,神经网络中,除了卷积层之外,还有相加层、池化层等非卷积功能层,这些非卷积功能层相比于卷积层运算来说占用的计算量非常少,为了保证这部分的准确度,当它们的输出激活值不作为卷积层的输入时,采用第三低比特以量化成较高精度,一般地,第三低比特是8比特,如果作为卷积层的输入则量化为第一低比特ba。
量化过程与步骤202~204所述激活值的量化过程相同。具体为:
在前向计算出各个卷积层输入的第一激活值时,还可计算各个非卷积功能层输入的第三激活值,
对于任一非卷积功能层输入的各个第三激活值:
根据该非卷积功能层各个第三激活值分布,确定当前量化步长,例如,将各个第三激活值进行排序,然后按给定比例值选择当前量化步长,或者,搜索使得第三激活值的量化误差最小化的量化步长,作为当前量化步长;
根据当前量化步长和第三低比特,计算用于限制该非卷积功能层各个第三激活值取值范围的取值上限,在该步骤中,通过浮点量化步长计算公式,得到所述取值上限;所述浮点量化步长计算公式为:
其中,ηi为非卷积功能层i的第三激活值的取值上限,ri为非卷积功能层i第三激活值的当前量化步长,bpi为第三低比特,
根据所述取值上限,对该非卷积功能层每个第三激活值进行取值,得到该非卷积功能层各个第四激活值;在该步骤中,将第三激活值与取值上限进行比较,如果第三激活值大于取值上限,则将取值上限赋予该第三激活值,作为第四激活值,如果第三激活值小于等于取值上限,则将第三激活值保持不变,作为第四激活值;用数学式表达为:
将该非卷积功能层第四激活值进行量化,得到该非卷积功能层量化后的激活值;在该步骤中,按照浮点数量化公式,对第四激活值进行量化,所述浮点数量化公式为:
其中,表示非卷积功能层i量化后的激活值,yfi为非卷积功能层i第三激活值,ri为非卷积功能层i第三激活值的当前量化步长,floor表示是对数值进行四舍五入。
步骤215,判断神经网络中激活函数层的激活函数是否为线性修正函数(ReLU,Rectified Linear Unit),若是,则将激活函数层ReLU激活函数输出的量化后的激活值整体减去一个偏移量,然后在该激活值输入的卷积层或者其他功能层中将该偏移量弥补回来,之后执行步骤216;否则,则直接执行步骤216。
具体地,由于ReLU函数输入至卷积层的数据取值范围是低比特无符号数,例如用于激活值量化的第一低比特数ba=4时,由于ReLU函数的输出特性,则定点化数值的取值范围为了更有效地移植到硬件平台上,将低比特无符号数转化为低比特有符号数,即,确定一偏移量使得ReLU函数输出的量化后的激活值由无符号数转化为有符号数,且可用第一低比特有符号数来表达,按照偏移量将输入至ReLU函数的输入值做数据移位。例如,在ba=4时每个ReLU函数的输入值都减去8,使得取值范围变为[-8,7],按照ReLU函数的输出特性,ReLU函数的输出值也会减去8,这样能够保证用4比特有符号数来保存这些数据;为了避免ReLU函数将有符号数取值为0的影响,接着,删除各个ReLU函数层,并在被删除ReLU函数层的下一层中将偏移量弥补回来,例如当下一层为卷积层,那么可以将偏移量加在卷积层的偏置数据中,当下一层为相加层,则将偏移量加在该层的预设值之中。
在该步骤中,将ReLU激活函数的输入值和输出值由无符号数变为有符号数,并在下一层中将由无符号数变为有符号数所产生的偏移量弥补回来,这样在移植和部署时能够有效减少无符号数的资源消耗。
步骤216,将全网络参数定点化,
在该步骤中,将神经网络中各功能层之间传输的低比特量化数值转化为定点化数值,具体为,将上述步骤所得到的任一低比特量化数值,包括各卷积层量化后的输入激活值、敏感卷积层输出通道的第一幅值(归一化层融合参数更新后的)、以及权值量化阈值系数的第一系数量化值、从各不敏感卷积层输出通道中选定的组合输出通道的第一幅值(归一化层融合参数更新后的)、以及组合权值量化阈值系数的第二系数量化值、非卷积功能层量化后的输入激活值、激活函数为ReLU的激活函数层的输入值和/或输出值的有符号数、被删除的ReLU激活函数层量化后的输入值和/或输出值、各激活函数为ReLU的激活函数层的偏移量用低比特量化的数值,分别转化为定点化数值并保存,从而将当前神经网络中各层之间传输的低比特量化数值转化成定点化数值,实现了全网络参数定点化。
在上述步骤205、212中,在卷积层输入激活值量化后、卷积层权值量化后,分别进行了神经网络重训练,这是因为,对于卷积层而言,可理解为激活值与卷积核权值做乘法,由于激活值进行了量化,例如数值a从1.2量化成了1,这样一个数b与量化后a做乘法时就和量化之前的结果不一致了,因此需要通过重训练,慢慢更新改变a和b的数值,让a与b的乘法结果接近没有量化之前的结果,从而有利于保证神经网络的目标性能。所应理解的是,也可以卷积层输入激活值量化后、或卷积层权值量化后进行重训练,例如,可以不执行步骤205,而只执行步骤212,以仅在步骤212时进行重训练,这时,或者,执行步骤205,而不执行步骤212。
本实施例使得最终定点化神经网络中激活值和卷积核权值都用低比特定点化表示,从而可以方便移植到嵌入式平台、专用集成电路之中;卷积层输入激活值和卷积核权值定点化为低比特,计算量和存储空间被极大的压缩;针对量化敏感的卷积层权值分配更多的计算量,不敏感的层分配较少的计算量,实现了卷积核权值非均匀量化,能够有效减少网络量化性能误差,提升神经网络的目标性能;采用分阶段量化的方式,不需要逐层计算或者重复执行计算,同时能够保证激活值、卷积核权值两个阶段量化性能误差低,并可根据神经网络目标性能需求灵活地选择需定点化功能层参数;在定点化过程中,针对ReLU激活函数,将它的范围由无符号变为有符号,并在其下一个功能层中将由无符号变为有符号所产生的偏移量弥补回来,有利于在移植和部署时能够有效减少无符号数的资源消耗;在各个卷积层输入激活值量化后、各个卷积层权值量化后进行神经网络重训练,避免了逐层地训练方式所带来的误差累积,实现了端到端的重训练,有效的减少了整个网络的误差,保证了量化后的网络仍然具有足够的目标性能。
实施例二
参见图5所示,图5为本申请实施例二的卷积神经网络的定点化方法的一种流程图。在本实施例中,将卷积层的输入激活值用第一低比特进行量化,进一步地,将除卷积层之外的非卷积功能层的输入激活值用第三低比特进行量化。具体包括,
步骤501,向卷积神经网络输入训练数据,前向计算出各个激活函数层输出的第一激活值,即,激活函数层中至少一个以上激活函数输出的激活值,也就是输入卷积层的各个激活值。
这时,第一激活值、第三激活值是用浮点型数据表示的,卷积神经网络中的参数以浮点型数据来保存。
步骤502,根据当前各激活函数层输出的第一激活值分布,确定各激活函数层输出的第一激活值的当前量化步长。
在该步骤中,对于任一激活函数层,分析该激活函数层输出的第一激活值分布,例如,对该激活函数层输出的第一激活值分布进行排序,然后按给定比例值选择一个量化步长,作为该激活函数层输出的第一激活值当前量化步长。
较佳地,对于任一激活函数层,还可以通过搜索的方式搜到一个量化步长,使得该激活函数层输出的第一激活值的量化误差最小化。
这样,可以得到各激活函数层输出的第一激活值浮点数的当前量化步长。
步骤503,对于各个激活函数层输出的第一激活值,根据上一步骤确定的各个激活函数层当前量化步长,求解第一激活值的取值上限,并按照求解的取值上限限制第一激活值的取值范围,得到各个激活函数层的第二激活值。
在该步骤中,对于任一激活函数层输出的第一激活值,根据浮点量化步长计算公式可以得到该激活函数层输出的第一激活值的取值上限β,其中,s为当前量化步长,用于激活值量化的第一比特数为ba,较佳地,ba为低比特,即8比特以内,较佳地,ba通常情况下可以取4。
将各个第一激活值与求解得到的取值上限进行比较,如果第一激活值大于所述取值上限,则将该第一激活值取值为所述取值上限,否则,保持第一激活值不变。由此,得到了该激活函数层的被限制取值范围的第二激活值。
数学表达为:
其中,下标i表示激活函数层i,βi表示激活函数层i输出的第一激活值的取值上限,si表示激活函数层i输出的第一激活值的当前量化步长,bai表示用于激活函数层i输出的激活值的量化比特数,较佳地,用于各激活函数层的量化比特数相同。
其中,xfi表示激活函数层i输出的第二激活值,该第二激活值为浮点数。
步骤504,将各激活函数层第二激活值进行量化,得到量化后的激活值。
在该步骤中,对于任一激活函数层的第二激活值,按照浮点数量化公式 得到量化后的激活值,其中floor操作是对该数值进行四舍五入,xf为第二激活值,ba比特的定点数值的表达范围为因此量化后的激活值限制在这个范围之中。
数学表达为:
其中,表示激活函数层i量化后的激活值,xfi为激活函数层i第二激活值。
步骤505,进一步地,在步骤501前向计算出各个激活函数层输出的第一激活值时,还可前向计算出输入各个非卷积功能层的第三激活函数通过动态量化算法,将神经网络中的各个非卷积功能层的输入激活值进行量化。
神经网络中,除了卷积层之外,还有相加层、池化层等非卷积功能层,这些非卷积功能层相比于卷积层运算来说占用的计算量非常少,为了保证这部分的准确度,当它们的输出激活值不作为卷积层的输入时,采用第三低比特以量化成较高精度,一般地,第三低比特是8比特,如果作为卷积层的输入则量化为第一低比特ba。
量化过程与步骤502~504所述激活值的量化过程相同。具体为:
对于任一非卷积功能层输入的各个第三激活值:
根据该非卷积功能层各个第三激活值分布,确定当前量化步长,例如,将各个第三激活值进行排序,然后按给定比例值选择当前量化步长,或者,搜索使得第三激活值的量化误差最小化的量化步长,作为当前量化步长;
根据当前量化步长和第三低比特,计算用于限制该非卷积功能层各个第三激活值取值范围的取值上限,在该步骤中,通过浮点量化步长计算公式,得到所述取值上限;所述浮点量化步长计算公式为:
其中,ηi为非卷积功能层i的第三激活值的取值上限,ri为非卷积功能层i第三激活值的当前量化步长,bpi为第三低比特,
根据所述取值上限,对该非卷积功能层每个第三激活值进行取值,得到该非卷积功能层各个第四激活值;在该步骤中,将第三激活值与取值上限进行比较,如果第三激活值大于取值上限,则将取值上限赋予该第三激活值,作为第四激活值,如果第三激活值小于等于取值上限,则将第三激活值保持不变,作为第四激活值;用数学式表达为:
将该非卷积功能层第四激活值进行量化,得到该非卷积功能层量化后的激活值;在该步骤中,按照浮点数量化公式,对第四激活值进行量化,所述浮点数量化公式为:
其中,表示非卷积功能层i量化后的激活值,yfi为非卷积功能层i第三激活值,ri为非卷积功能层i第三激活值的当前量化步长,floor表示是对数值进行四舍五入。
步骤506,基于当前卷积神经网络,重新进行训练,其中,当前卷积神经网络中的各个功能层输入的激活值为量化后的激活值。
该步骤将激活值的取值上限β、η作为一个可训练迭代更新的参数,随着整个网络的训练进行更新,直至收敛,这样,量化步长s、r也随着更新。
步骤507,判断神经网络中激活函数层的激活函数是否为ReLU,若是,则将激活函数层ReLU激活函数输出的量化后的激活值整体减去一个偏移量,然后在该激活值输入的卷积层或者其他功能层中将该偏移量弥补回来,之后执行步骤508;否则,则直接执行步骤508。
具体地,由于ReLU函数输入至卷积层的数据取值范围是低比特无符号数,例如用于激活值量化的第一低比特数ba=4时,由于ReLU函数的输出特性,则定点化数值的取值范围为了更有效地移植到硬件平台上,将低比特无符号数转化为低比特有符号数,即,确定一偏移量使得ReLU函数输出的量化后的激活值由无符号数转化为有符号数,且可用第一低比特有符号数来表达,按照偏移量将输入至ReLU函数的输入值做数据移位。例如,在ba=4时每个ReLU函数的输入值都减去8,使得取值范围变为[-8,7],按照ReLU函数的输出特性,ReLU函数的输出值也会减去8,这样能够保证用4比特有符号数来保存这些数据;为了避免ReLU函数将有符号数取值为0的影响,接着,删除各个ReLU函数层,并在被删除ReLU函数层的下一层中将偏移量弥补回来,例如当下一层为卷积层,那么可以将偏移量加在卷积层的偏置数据中,当下一层为相加层,则将偏移量加在该层的预设值之中。
在该步骤中,将ReLU激活函数的输入值和输出值由无符号数变为有符号数,并在下一层中将由无符号数变为有符号数所产生的偏移量弥补回来,这样在移植和部署时能够有效减少无符号数的资源消耗。
步骤508,基于量化结果,将相关参数定点化,
在该步骤中,将上述步骤所得到的任一低比特量化数值,包括各卷积层量化后的输入激活值、非卷积功能层量化后的输入激活值、激活函数为ReLU的激活函数层的输入值和/或输出值的有符号数、被删除的ReLU激活函数层量化后的输入值和/或输出值、各激活函数为ReLU的激活函数层的偏移量用低比特量化的数值,分别转化为定点化数值并保存,从而将当前神经网络中各层之间传输激活值的低比特量化数值转化成定点化数值,实现了网络参数定点化。
所应理解的是,在上述步骤中,步骤506所述重训练也可以仅在卷积层输入激活值量化后进行,即,在步骤504之后505步骤之前,将激活值的取值上限β作为一个可训练迭代更新的参数,随着整个网络的训练进行更新,直至收敛,这样,量化步长s也随着更新;还可以分别在卷积层输入激活值量化后、非卷积功能层输入激活值量化后进行神经网络重训练。
本申请实施例将卷积层的输入激活值用低比特定点化,压缩了计算量和存储空间,在定点化过程中,针对ReLU激活函数,将它的范围由无符号变为有符号,并在其下一个功能层中将由无符号变为有符号所产生的偏移量弥补回来,有利于在移植和部署时能够有效减少无符号数的资源消耗;在卷积层输入激活值量化后和/或非卷积功能层输入激活值量化后进行神经网络重训练,有效的减少了整个网络的误差,保证了量化后的网络仍然具有足够的目标性能。
实施例三
参见图6所示,图6为本申请实施例三的卷积神经网络的定点化方法的一种流程图。在本实施例中,将卷积层中卷积核的权值用第二低比特进行量化。
步骤601,基于当前卷积神经网络获取各个卷积层中每个卷积核中的每个第一权值,该权值为浮点数据;对于各个卷积层的每个输出通道,累加该输出通道对应卷积核的各个第一权值的平方数,得到输出通道的第一权值平方数的累加结果。基于所述累加结果,在指定的阈值范围中进行搜索一个量化阈值,作为该输出通道的当前权值量化阈值。
在该步骤中,对于任一卷积层i的任一输出通道j,计算输出通道j对应的各卷积核k中每个第一权值的平方,得到输出通道j对应的各个卷积核中每个第一权值的平方数,累加该输出通道所有卷积核中所有第一权值的平方数,得到输出通道j的累加结果;
其中,累加输出通道j的所有卷积核中所有第一权值的平方数数学表达为:
其中,Lij表示卷积层i输出通道j的累加结果,wfijkn为卷积层i中输出通道j对应卷积核k中第n个第一权值。
基于该卷积层该输出通道累加结果Lij,在指定的阈值范围中进行搜索一个量化阈值,作为卷积层i输出通道j的当前权值量化阈值。
通过该步骤,可以获得各卷积层中每个输出通道的当前权值量化阈值。
步骤602,基于各个输出通道的当前权值量化阈值,对各个输出通道对应的卷积核中的各个第一权值进行量化,得到各个输出通道对应的卷积核中的各个第一权值的当前量化权值。
在该步骤中,对于任一卷积层i,将该卷积层输出通道j的累加结果乘以该输出通道的当前权值量化阈值的结果,作为该输出通道当前幅值;将该输出通道对应的卷积核中的各个第一权值与所述当前幅值进行比较,大于该幅值则第一权值被赋值为该幅值,小于该幅值的负数则第一权值赋值为负的幅值,取值在中间的第一权值赋值为0,从而可以得到该输出通道的当前量化权值。
数学表达为:
λij=Lij×tij
其中,tij为卷积层i中输出通道j的当前权值量化阈值,λij为卷积层i中输出通道j的当前幅值;
其中,为卷积层i中输出通道j对应卷积核k的第n个第一权值的当前量化权值,wfijkn为卷积层i中输出通道j对应卷积核k中第n个第一权值。
步骤603,估计输出通道的各个第一权值的当前量化权值与各个第一权值之间的误差,如果误差大于设定的误差阈值,则说明该输出通道的当前量化阈值不符合要求,重新搜索量化阈值,作为该输出通道的当前权值量化阈值,并返回执行步骤601,直至误差小于设定的误差阈值,将最小误差所对应的量化阈值作为权值量化阈值系数。
在该步骤中,所述估计误差可以是,输出通道第一权值的当前量化权值与该第一权值的平均误差或累计误差,即,输出通道j的所有第一权值的当前量化权值与所有第一权值的累计误差或平均误差,数学表达为:
或
通过步骤601~603,可以得到各卷积层中每个输出通道的权值量化阈值系数。
步骤604,基于各个输出通道的权值量化阈值系数和累加结果,计算各个输出通道的第一幅值,
在该步骤中,对于任一卷积层i,将该卷积层输出通道j的累加结果乘以该输出通道的权值量化阈值系数的结果,作为该输出通道第一幅值;
数学表达为:
αij=Lij×Tij
其中,Tij为卷积层i中输出通道j的权值量化阈值系数,αij为卷积层i中输出通道j的第一幅值;
步骤605,基于各个卷积层中的各个输出通道的第一幅值,采用第二低比特来表示各个卷积层中的各个输出通道对应卷积核中的第一权值,得到第二权值;即,对每个第一权值进行第二低比特量化,以定点化第一权值。
为了保证卷积神经网络目标性能,按照低比特量化所导致的卷积神经网络目标性能变化的敏感程度来选择低比特量化方式。如果目标性能下降不多,说明该卷积层不敏感;如果量化为低比特时目标性能下降较多,说明该卷积层很敏感。
对于不敏感的卷积层,采用一个第二低比特来表达第一权值。对于卷积层i中输出通道j对应的卷积核k中第n个第一权值wfijkn的低比特表达、即第二权值wijkn为:
wijkn=αijT1ij
其中,αi为卷积层i中输出通道j的第一幅值;T1ij为卷积层i中输出通道j的权值量化阈值系数的低比特表达,即定点化后的权值量化阈值系数;wijkn为定点数据。
对于敏感的卷积层,采用两个以上第二低比特基的组合来表达卷积层的浮点权值。对于卷积层i中输出通道j对应的卷积核k中第n个第一权值wfijkn的低比特表达、即第二权值wijkn为:
wijkn=αi1T1ij+…+αimTmij
其中,αim为卷积层i中J个输出通道中的第m个组合输出通道的第一幅值;Tmij为两个以上低比特基的组合中第m个组合低比特基所表达的卷积层i中输出通道j的组合权值量化阈值系数,即两个以上低比特基的组合定点化后的组合权值量化阈值系数;m为第二低比特基组合的数量,小于等于J;J为卷积层i中输出通道的总数;wijkn为定点数据。
步骤606,对各个输出通道对应的权值量化阈值系数进行量化,得到各个输出通道对应的量化后的权值量化阈值系数,即得到系数量化值。
在该步骤中,对于不敏感的卷积层,对于任一输出通道j,将该输出通道对应的卷积核中的各个第二权值与第一幅值进行比较,大于该幅值,则该输出通道的权值量化阈值系数的第一系数量化值为定点化后的权值量化阈值系数本身;小于该幅值的负数,则该输出通道的权值量化阈值系数第一系数量化值为负的定点化后的权值量化阈值系数;取值在中间的,则输出通道的权值量化阈值系数被赋值为0,从而可以得到该输出通道对应的权值量化阈值系数的第一系数量化值。
数学表达为:
其中,wijkn为卷积层i中输出通道j对应卷积核k中第n个第二权值,为卷积层i中输出通道j的权值量化阈值系数的第一系数量化值,即,输出通道j的第一系数量化值。
对于敏感的卷积层,对于任一卷积层中的任一组合输出通道m,将组合输出通道的第一幅值与该组合输出通道的组合权值量化阈值系数相乘的结果作为第二幅值,将该第二幅值与第二权值进行比较,如果第二权值大于该幅值,则将该组合权值量化阈值系数作为第二系数量化值,如果第二权值小于该幅值的负数,则负的组合权值量化阈值系数作为第二系数量化值,如果第二权值取值在中间,则将0为第二系数量化值,从而可以得到该组合输出通道对应的组合权值量化阈值系数的第二系数量化值。
数学表达为:
其中,wijkn为卷积层i中输出通道j对应卷积核k中第n个第二权值,为卷积层i的J个输出通道中第m个组合输出通道的组合权值量化阈值系数的第二系数量化值,即,组合输出通道m的第二系数量化值。
例如,若组合权值量化阈值系数的取值范围为-1,0,1这三个数,则,对于任一组合权值量化阈值系数m的第二系数量化值为:
步骤607,根据各个输出通道的权值量化阈值系数的系数量化值和各个输出通道的第一幅值,计算各个输出通道的各个权值,得到第一量化权值,将各个输出通道的各个第一量化权值代入卷积神经网络,进行重训练。
在该步骤中,对于不敏感的卷积层,卷积层i中输出通道j对应的卷积核k中第n个第一权值的第一量化权值为:卷积层i中输出通道j的第一幅值与第一系数量化值的乘积;数学式表示为:
其中,为卷积层i中输出通道j对应的卷积核k中第n个第一权值的第一量化权值,这意味着,对于不敏感卷积层,同一输出通道对应卷积核中各个第一权值的第一量化权值是相同的。
对于敏感的卷积层,卷积层i中输出通道j对应的卷积核k中第n个第一权值的第一量化权值为:各组合输出通道的第一幅值与其组合输出通道的第二系数量化值乘积之和;数学式表示为:
通过步骤604~607,原来保存为32比特的权值被量化为bw比特。
步骤608,基于重训练后的卷积神经网络,在用于对卷积层的各个输出通道的输出结果按照每个通道进行归一化操作的归一化层,将输出结果分布归一化到0均值,或1方差,使之分布满足正态分布;对于卷积层各输出通道的第一幅值,将该卷积层所连接的归一化层的各通道参数作为乘数与所述第一幅值相乘,以更新第一幅值。
在经典的神经网络中,都会在卷积层之后进行归一化操作,即,将卷积层的输出通道按照每个通道将输出结果数据分布归一化到0均值,或1方差,使之分布满足正态分布,由于归一化层的参数也是各个输出通道独立,因此在本申请中将归一化层各个通道参数乘以到与该归一化层连接的卷积层各个输出通道的第一幅值之中。
对于不敏感卷积层,将输出通道的第一幅值与归一化层对应通道的通道参数相乘,得到更新后的第一幅值,上述更新第一幅值用数学式表达为:
αij≡αij×σij
其中,σij为与卷积层i连接的归一化层i中通道j的通道参数,上式表示将与卷积层i的输出连接的归一化层通道j的参数与卷积层i的输出通道j的第一幅值相乘,用相乘的结果更新该第一幅值。
对于敏感卷积层,将输出通道中每个组合输出通道的第一幅值分别与归一化层对应输出通道的通道参数相乘,得到更新后的组合输出通道的第一幅值,上述更新第一幅值用数学式表达为:
αim≡αim×σim
其中,σim表示归一化层i中与卷积层i中组合输出通道m对应的通道参数;上式表示:将卷积层i的输出通道J中每个组合输出通道的第一幅值,与,该卷积层i的输出连接的归一化层i中对应于该组合输出通道的通道参数,进行相乘,用相乘的结果更新该组合输出通道的第一幅值。
该步骤所进行的归一化参数融合,使得第一幅值被更新,以便去除归一化操作对网络性能的影响。
步骤609基于更新后的第一幅值、以及权值量化阈值系数的系数量化值,将卷积层中卷积核参数定点化,
在该步骤中,将神经网络中各卷积层之间传输的低比特量化数值转化为定点化数值,具体为,将上述步骤所得到的任一低比特量化数值,包括敏感卷积层输出通道的归一化层参数融合后的第一幅值、以及第一系数量化值、不敏感卷积层输出通道中选定的组合输出通道归一化层参数融合后的第一幅值、以及第二系数量化值用低比特量化的数值,分别转化为定点化数值并保存,从而将当前神经网络中各卷积层之间传输的低比特量化数值转化成定点化数值,实现了网络卷积层参数定点化。
所应理解的是,在本实施例中,还可以对如同实施例二中的步骤07一样,将ReLU激活函数的输入值和输出值由无符号数变为有符号数,并在下一层中将由无符号数变为有符号数所产生的偏移量弥补回来,以在移植和部署时能够有效减少无符号数的资源消耗。
本实施例使得最终定点化神经网络中卷积核权值都用低比特定点化表示,从而可以方便移植到嵌入式平台、专用集成电路之中;卷积核权值定点化为低比特,压缩了计算量和存储空间;针对量化敏感的卷积层权值分配更多的计算量,不敏感的层分配较少的计算量,实现了卷积核权值非均匀量化,能够有效减少网络量化性能误差,提升神经网络的目标性能;采用分阶段量化的方式,不需要逐层计算或者重复执行计算,能够保证各功能层量化性能误差低;卷积层权值量化后进行神经网络重训练,有效地减少了整个网络的误差,保了量化后的网络仍然具有足够的目标性能。
参见图7所示,图7为本申请实施例的神经网络定点化装置的一种示意图。该装置包括,
卷积层输入激活值量化模块,对神经网络中的卷积层输入激活值进行第一低比特量化,和/或
卷积层权值量化模块,对卷积层中卷积核权值进行第二低比特量化,和/或
非卷积功能层输入激活值量化模块,对神经网络中除了卷积层之外的非卷积功能层,将非卷积功能层的输入激活值进行第三低比特量化,以及
重训练模块,在卷积层输入激活值进行第一低比特量化之后,和/或对卷积层中卷积核权值进行第二低比特量化之后,和/或对非卷积功能层的输入激活值进行第三低比特量化之后,基于当前低比特量化后的神经网络,进行重训练,
定点化模块,基于神经网络中各层输入激活值的低比特量化结果、和/或卷积层中卷积核权值的低比特量化结果、和/或非卷积功能层的输入激活值进行第三低比特量化的结果,进行定点化;
加载模块,将定点化后的神经网络进行加载。例如,加载至FPGA、DSP、固件、或者嵌入式系统中等硬件中。
其中,所述第一低比特、第二低比特、第三低比特在1比特至8比特以内。参见图8所示,图8为本申请实施例低比特定点化的神经网络应用于基于车载摄像头目标检测的一种示意图。多个车载环视摄像头进行拍摄,获取当前路况的图像;在基于FPGA芯片实现的自动泊车终端设备,基于低比特定点化的神经网络对当前路况图像进行神经网络的计算,以识别当前路况中行人、车辆等相关检测目标;根据当前目标检测结果控制汽车,包括且不限于判断汽车是否进行加减速或者转动方向盘。本申请应用实例在该应用场景中硬件内存消耗大大降低,硬件带宽能达到多倍以上加速比。
参见图9所示,图9是本申请实施例低比特定点化的神经网络应用于基于门禁摄像图像识别的一种示意图。门禁摄像头拍摄待识别目标以获取待识别目标图像,在基于DSP芯片实现的识别终端设备,基于低比特定点化的神经网络对当前图像进行神经网络的计算,根据网络计算结果得到当前图像的识别特征,按照识别特征与库中已有特征进行比对,根据比对结果判断人脸识别结果是否在库中。本申请实例在该应用场景中硬件内存消耗降低,硬件带宽能达到多倍以上加速比。
所应理解的是,采用本申请所述定点化的神经网络不限于上述的应用,还可应用于包括且不限于基于图像的目标行人检测、姿态检测、路况检测、以及视频分析等,通过将定点化的神经网络加载至用于实现应用的硬件中,从而使得各种应用需要的数据通过神经网络来处理,以适应设备的小型化,减少硬件资源的消耗。例如,将低比特定点化的神经网络加载到如下硬件中的至少一个中:
摄像机、车载智能系统、扫地机器人、载货机器人、无人机、无人售货机等。
本申请实施例还提供了一种计算机可读存储介质,所述存储介质内存储有计算机程序,所述计算机程序被处理器执行时上述实施例的各个步骤。
存储器可以包括随机存取存储器(Random Access Memory,RAM),也可以包括非易失性存储器(Non-Volatile Memory,NVM),例如至少一个磁盘存储器。可选的,存储器还可以是至少一个位于远离前述处理器的存储装置。
上述的处理器可以是通用处理器,包括中央处理器(Central Processing Unit,CPU)、网络处理器(Network Processor,NP)等;还可以是数字信号处理器(DigitalSignalProcessing,DSP)、专用集成电路(Application Specific Integrated Circuit,ASIC)、现场可编程门阵列(Field-Programmable Gate Array,FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。
对于装置/网络侧设备/存储介质实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语″包括″、″包含″或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句″包括一个......″限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
以上所述仅为本申请的较佳实施例而已,并不用以限制本申请,凡在本申请的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本申请保护的范围之内。
- 上一篇:石墨接头机器人自动装卡簧、装栓机
- 下一篇:计算装置、方法、板卡和计算机可读存储介质