神经网络生成及图像处理方法和装置、平台、电子设备与流程

文档序号:17742808发布日期:2019-05-24 20:20阅读:176来源:国知局
神经网络生成及图像处理方法和装置、平台、电子设备与流程

本公开涉及计算机视觉技术,尤其是一种神经网络生成及图像处理方法和装置、平台、电子设备。



背景技术:

随着深度卷积神经网络的发展,更深或更宽的网络结构不断刷新各个计算机视觉数据集的准确率,然而,网络的加深或加宽势必会增加网络在预测过程中的运行时间。近年来,为了能够将深度卷积神经网络部署在fpga等低功耗、适合定点运算等资源平台上运行,越来越多的研究人员开始研究将在gpu等设备上训练好的浮点模型量化成低bit的定点模型。设计好的定点模型使得模型更小并且依然能保证准确率,成为了深度学习领域一个热点方向。



技术实现要素:

本公开实施例提供了一种神经网络生成及图像处理技术。

根据本公开实施例的一个方面,提供的一种神经网络生成方法,包括:

获取神经网络预期部署的硬件平台的定点运算资源信息;

将所述神经网络包括的至少一个网络单元的网络参数的值的分布调整为均匀型分布;

基于样本图像数据对所述参数调整后的神经网络进行训练;

根据所述定点运算资源信息对所述训练后的神经网络中的网络参数的值进行定点化调整。

可选地,在本公开上述任一方法实施例中,所述网络单元包括至少一个网络层。

可选地,在本公开上述任一方法实施例中,所述将所述神经网络包括的至少一个网络单元的网络参数的值的分布调整为均匀型分布,包括:

根据所述神经网络中的至少一个网络单元的网络参数的值的分布的均值,确定动态阈值;

根据所述动态阈值调整所述神经网络中的至少一个网络单元的网络参数的值,以使调整后的至少一所述网络单元的各网络参数的值的分布为均匀型分布。

可选地,在本公开上述任一方法实施例中,所述根据所述神经网络中的至少一个网络单元的网络参数的值的分布的均值,确定动态阈值,包括:

确定所述至少一个网络单元中每个网络单元的网络参数在1范数下的能量均值,将所述能量均值作为所述网络参数的值的分布的均值;

基于所述网络参数的值的分布的均值和设定参数,确定所述动态阈值。

可选地,在本公开上述任一方法实施例中,所述动态阈值包括正阈值和负阈值;

所述基于所述网络参数的值的分布的均值和设定参数,确定所述动态阈值,包括:

确定所述网络参数的值的分布的均值和所述设定参数的乘积,确定所述正阈值和负阈值。

可选地,在本公开上述任一方法实施例中,所述根据所述动态阈值调整所述神经网络中的至少一个网络单元的网络参数的值,包括:

将取值超出所述动态阈值的所述至少一个网络单元的网络参数的值替换为所述动态阈值。

可选地,在本公开上述任一方法实施例中,所述根据所述定点运算资源信息对所述训练后的神经网络中的网络参数的值进行定点化调整,包括:

根据所述定点运算资源信息确定定点数的动态范围;

基于所述动态范围对所述神经网络的网络参数进行定点化调整,以使获得的所述神经网络的网络参数均落入所述动态范围。

可选地,在本公开上述任一方法实施例中,所述基于所述动态范围对所述神经网络的网络参数进行定点化调整,包括:

根据所述神经网络的网络参数的值,确定所述网络参数定点化表示的整数位和小数位;

根据所述整数位和小数位将所述网络参数的值进行浮点数到定点数的调整。

可选地,在本公开上述任一方法实施例中,所述方法还包括:

基于样本图像数据对所述网络参数定点化调整后的神经网络进行再训练;

根据所述定点运算资源信息对所述再训练后的神经网络中的网络参数的值进行定点化调整。

可选地,在本公开上述任一方法实施例中,所述基于样本图像数据对所述网络参数定点化调整后的神经网络进行再训练之前,还包括:

对所述网络参数定点化调整后神经网络的网络参数进行位宽扩展,获得对应所述神经网络的精度提高后的定点网络参数;

所述基于样本图像数据对所述网络参数定点化调整后的神经网络进行再训练,包括:

基于所述样本图像数据对所述包括精度提高后的定点网络参数的神经网络进行训练,多次执行本步骤直至满足预定的神经网络训练完成条件。

根据本公开实施例的另一方面,提供的一种图像处理方法,包括:

获取待处理的图像和采用如上任意一项实施例所述的神经网络生成方法得到的神经网络;

控制部署有所述神经网络的硬件平台根据所述神经网络定点化调整后的网络参数处理所述图像,得到所述图像的处理结果。

可选地,在本公开上述任一方法实施例中,所述控制部署有所述神经网络的硬件平台根据所述神经网络定点化调整后的网络参数处理所述图像,包括:

控制所述硬件平台根据所述神经网络定点化调整后的网络参数对所述图像进行如下至少一项处理:

定点乘法运算、定点加法运算、移位运算。

可选地,在本公开上述任一方法实施例中,所述图像的处理结果包括如下至少一项:

特征提取结果、分割结果、分类结果、对象检测/跟踪结果。

根据本公开实施例的又一方面,提供的一种神经网络生成装置,包括:

资源获取单元,用于获取神经网络预期部署的硬件平台的定点运算资源信息;

参数分布调整单元,用于将所述神经网络包括的至少一个网络单元的网络参数的值的分布调整为均匀型分布;

网络训练单元,用于基于样本图像数据对所述参数调整后的神经网络进行训练;

参数定点化单元,用于根据所述定点运算资源信息对所述训练后的神经网络中的网络参数的值进行定点化调整。

可选地,在本公开上述任一装置实施例中,所述网络单元包括至少一个网络层。

可选地,在本公开上述任一装置实施例中,所述参数分布调整单元,包括:

动态阈值确定模块,根据所述神经网络中的至少一个网络单元的网络参数的值的分布的均值,确定动态阈值;

参数值调整模块,用于根据所述动态阈值调整所述神经网络中的至少一个网络单元的网络参数的值,以使调整后的至少一所述网络单元的各网络参数的值的分布为均匀型分布。

可选地,在本公开上述任一装置实施例中,所述动态阈值确定模块,用于确定所述至少一个网络单元中每个网络单元的网络参数在1范数下的能量均值,将所述能量均值作为所述网络参数的值的分布的均值;基于所述网络参数的值的分布的均值和设定参数,确定所述动态阈值。

可选地,在本公开上述任一装置实施例中,所述动态阈值包括正阈值和负阈值;

所述动态阈值确定模块在基于所述网络参数的值的分布的均值和设定参数,确定所述动态阈值时,用于确定所述网络参数的值的分布的均值和所述设定参数的乘积,确定所述正阈值和负阈值。

可选地,在本公开上述任一装置实施例中,所述参数值调整模块,用于将取值超出所述动态阈值的所述至少一个网络单元的网络参数的值替换为所述动态阈值。

可选地,在本公开上述任一装置实施例中,所述参数定点化单元,用于根据所述定点运算资源信息确定定点数的动态范围;基于所述动态范围对所述神经网络的网络参数进行定点化调整,以使获得的所述神经网络的网络参数均落入所述动态范围。

可选地,在本公开上述任一装置实施例中,所述参数定点化单元在基于所述动态范围对所述神经网络的网络参数进行定点化调整时,用于根据所述神经网络的网络参数的值,确定所述网络参数定点化表示的整数位和小数位;根据所述整数位和小数位将所述网络参数的值进行浮点数到定点数的调整。

可选地,在本公开上述任一装置实施例中,所述装置还包括:

网络再训练单元,用于基于样本图像数据对所述网络参数定点化调整后的神经网络进行再训练;

定点化调整单元,用于根据所述定点运算资源信息对所述再训练后的神经网络中的网络参数的值进行定点化调整。

可选地,在本公开上述任一装置实施例中,所述装置还包括:

精度提高单元,用于对所述网络参数定点化调整后神经网络的网络参数进行位宽扩展,获得对应所述神经网络的精度提高后的定点网络参数;

所述网络再训练单元,用于基于所述样本图像数据对所述包括精度提高后的定点网络参数的神经网络进行训练,多次执行本步骤直至满足预定的神经网络训练完成条件。

根据本公开实施例的还一方面,提供的一种图像处理装置,包括:

获取单元,用于获取待处理的图像和采用如上任意一项实施例所述方法得到的神经网络;

处理单元,用于控制部署有所述神经网络的硬件平台根据所述神经网络定点化调整后的网络参数处理所述图像,得到所述图像的处理结果。

可选地,在本公开上述任一装置实施例中,所述处理单元,用于控制所述硬件平台根据所述神经网络定点化调整后的网络参数对所述图像进行如下至少一项处理:定点乘法运算、定点加法运算、移位运算。

可选地,在本公开上述任一装置实施例中,所述图像的处理结果包括如下至少一项:

特征提取结果、分割结果、分类结果、对象检测/跟踪结果。

根据本公开实施例的再一方面,提供的一种基于现场可编程门阵列fpga的硬件平台,其特征在于,包括:处理器、外部存储器、内存和fpga运算单元;

所述外部存储器中存储有采用如上任意一项实施例所述神经网络生成方法生成的神经网络的定点化调整后的网络参数;

所述处理器将所述神经网络的定点化调整后的网络参数读入所述内存,将所述内存上的数据和待处理的图像输入到所述fpga运算单元;

所述fpga运算单元根据所述待处理的图像和所述定点化调整后的网络参数进行运算处理,得到所述图像的处理结果。

可选地,在本公开上述任一平台实施例中,所述处理器,用于控制所述硬件平台根据所述神经网络定点化调整后的网络参数对所述图像进行如下至少一项处理:定点乘法运算、定点加法运算、移位运算。

可选地,在本公开上述任一平台实施例中,所述图像的处理结果包括如下至少一项:

特征提取结果、分割结果、分类结果、对象检测/跟踪结果。

根据本公开实施例的另一方面,提供的一种电子设备,包括:

存储器,用于存储程序指令;

处理器,用于调用并执行所述存储器中的程序指令,执行上述任意一项所述的神经网络生成方法或图像处理方法的步骤。

根据本公开实施例的又一方面,提供的一种智能驾驶系统,包括上述实施例所述的电子设备。

根据本公开实施例的又一方面,提供的一种计算机可读存储介质,其特征在于,所述可读存储介质中存储有计算机程序,所述计算机程序用于执行上述任意一项所述的神经网络生成方法或图像处理方法。

基于本公开上述实施例提供的一种神经网络生成及图像处理方法和装置、平台、电子设备,获取神经网络预期部署的硬件平台的定点运算资源信息;将神经网络包括的至少一个网络单元的网络参数的值的分布调整为均匀型分布;基于样本图像数据对参数调整后的神经网络进行训练;根据定点运算资源信息对训练后的神经网络中的网络参数的值进行定点化调整,调整为均匀型分布的网络参数的值更适合进行定点化调整,减少了从浮点数转换到定点数的精度损失,提高了定点化调整后的神经网络的精度;并且基于硬件平台的定点运算资源信息进行定点化调整,使调整后的神经网络可以在硬件资源有限的平台上运行,提高图像处理效率,减小甚至避免了基于定点化处理后的神经网络部署在硬件资源有限的平台后对图像进行处理时的图像处理精度的损失,减少了神经网络模型所需的存储资源。

下面通过附图和实施例,对本公开的技术方案做进一步的详细描述。

附图说明

构成说明书的一部分的附图描述了本公开的实施例,并且连同描述一起用于解释本公开的原理。

参照附图,根据下面的详细描述,可以更加清楚地理解本公开,其中:

图1为本公开实施例提供的神经网络生成方法的一个流程示意图。

图2为本公开实施例提供的神经网络生成方法的另一实施例的流程示意图。

图3a为现有技术中神经网络的网络参数的值的分布示意图。

图3b为本公开实施例提供的神经网络生成方法中基于动态阈值调整后的网络参数的值的分布示意图。

图4为本公开实施例提供的神经网络生成方法的又一实施例的流程示意图。

图5为本公开实施例提供的神经网络生成方法中神经网络再训练的一个示例的结构示意图。

图6为本公开实施例提供的神经网络生成装置的一个结构示意图。

图7为本公开实施例提供的图像处理方法的一种流程示意图。

图8为本公开实施例提供的图像处理装置的一个结构示意图。

图9为本公开实施例提供的基于现场可编程门阵列fpga的硬件平台的结构示意图。

图10为适于用来实现本公开实施例的终端设备或服务器的电子设备的结构示意图。

具体实施方式

现在将参照附图来详细描述本公开的各种示例性实施例。应注意到:除非另外具体说明,否则在这些实施例中阐述的部件和步骤的相对布置、数字表达式和数值不限制本公开的范围。

同时,应当明白,为了便于描述,附图中所示出的各个部分的尺寸并不是按照实际的比例关系绘制的。

以下对至少一个示例性实施例的描述实际上仅仅是说明性的,决不作为对本公开及其应用或使用的任何限制。

对于相关领域普通技术人员已知的技术、方法和设备可能不作详细讨论,但在适当情况下,所述技术、方法和设备应当被视为说明书的一部分。

应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步讨论。

图1为本公开实施例提供的神经网络生成方法的一种流程示意图。该方法可以由任意电子设备执行,例如终端设备、服务器、移动设备等等。如图1所示,该实施例方法包括:

步骤110,获取神经网络预期部署的硬件平台的定点运算资源信息。

为了能够将神经网络部署在低功耗、适合定点运算等资源平台上运行(例如,现场可编程门阵列(field-programmablegatearray,fpga)等),可选地,将浮点模型(网络参数为浮点数的神经网络)量化成低bit的定点模型(网络参数为定点数的神经网络)。

硬件平台上的运算单元的定点运算资源信息通常较为有限,为了发挥fpga等硬件平台低功耗、加速运算等方面的综合优势,需要根据硬件平台的定点运算资源信息确定神经网络的定点化调整;例如,某些情形下,为了实现更低功耗往往会选择尽量小的定点运算资源信息(对应定点位宽硬件资源量),比如8比特或4比特位宽甚至更少位宽硬件资源量来实现定点运算。然而,定点位宽硬件资源量少往往会影响运算速度,对于要求快速响应甚至是实时响应的平台,例如自动驾驶的车载运算平台等,则需要对神经网络进行适配硬件定点位宽硬件资源量方面的优化,以实现在有限资源平台上的加速运算。出于上述的需求,当神经网络在fpga等硬件资源有限的平台上运行之前,可以首先进行定点化调整,以适配硬件定点位宽资源量,从而同时满足对于运算平台的低功耗以及快速响应的要求。具体的,是将神经网络的网络参数调整为定点数。经过定点化操作之后,浮点数的乘加可以转换为定点数的乘加。对于fpga等平台,定点数的乘法、加法等运算可以直接使用数字信号处理器(digitalsignalprocessor,dsp)来执行,因此,对神经网络的网络参数进行定点化操作,可以减少fpga等平台的硬件消耗。

步骤120,将神经网络包括的至少一个网络单元的网络参数的值的分布调整为均匀型分布。

本公开实施例中的均匀型分布是指取值不同的网络参数的数量较为接近,例如,取值分别为-4,-3,-1,0等的网络参数对应的网络参数的数量较为接近;而未经调整的浮点模型中的网络参数的值通常为正态型分布,正态型分布是指某些取值的网络参数的数量会远大于其他取值的网络参数的数量,例如,取值为-1,0,1的网络参数的数量远大于取值为4,-3的网络参数的数量。

对神经网络进行定点化调整较好的方法是动态定点,即:根据模型每一层的激活值和参数的范围确定整数位和小数位;然后将浮点模型量化成定点模型;再通过微调的方式将损失的精度补回来。本公开发明人在实现本公开的过程中发现,当训练出来的浮点神经网络,其范围和能量均值的比较大时,例如,神经网络的网络参数的值的分布为正态型分布(non-uniform-likequantization),网络参数的值的分布范围与能量均值的比较大,动态定点后神经网络的性能精度损失很大,如基于部署有该动态定点化的神经网络进行图像中目标对象检测的处理时,检测精度相对浮点神经网络而言损失很大。

而本公开实施例将神经网络中至少一个网络单元的网络参数的值调整为均匀型分布(uniform-likedistribution,例如,网络单元的网络参数的值的分布通常呈现正态型分布,本公开实施例通过对正态型分布的网络参数的值采用尺度截断(scale-clip)等分布调整的操作),将网络单元的网络参数的值的分布由正态型分布调整为均匀型分布,由于均匀型分布中网络参数的值的分布范围与能量均值的比相对较小,使得训练出来的浮点模型,其网络参数的分布更加适合定点化,即:使得本公开实施例得到的神经网络能产生更少的精度损失,尤其定点位宽较小时,神经网络的性能精度损失更小,例如,在低比特(如4bit,8bit等)硬件定点运算平台上部署的定点化处理后的神经网络对图像进行目标对象检测等处理时,相对浮点神经网络而言,检测精度损失很小甚至几乎不发生精度损失。

步骤130,基于样本图像数据对参数调整后的神经网络进行训练。

本公开实施例中,在进行网络参数的值定点化之前,还需要对参数调整后的神经网络进行训练,使其参数更适合定点化,在训练该参数调整后的神经网络时,每次向前传播和损失反馈前,先将神经网络中至少一个网络单元的网络参数的值的分布调整为均匀型分布,每次基于损失调整网络参数后,其动态阈值都将发生变化,因此,每次都需要重新对网络参数进行分布调整,直到完成参数调整后的神经网络的训练。

以交通标志检测的图像处理任务为例,单次训练的可选示例例如:将带有交通标志标注信息的路面图像输入神经网络,通过神经网络的网络层对路面图像进行特征提取、非线性处理、池化、分类等一种或多种处理,得到该神经网络对该路面图像的交通标志预测结果,确定该交通标志预测结果与交通标志标注信息之间的损失,并将损失反向回传神经网络并调整神经网络的至少一网络层的如卷积核、权重等一种或多种网络参数。

上述步骤120和步骤130是循环执行的,每次执行步骤130之前都需要执行步骤120,直到满足训练预定完成条件(如损失小于设定阈值、训练迭代次数超过预定上限次数等)则结束训练,得到训练后的神经网络,再执行步骤140,对训练后的神经网络的网络参数进行定点化调整。

步骤140,根据定点运算资源信息对训练后的神经网络中的网络参数的值进行定点化调整。

可选地,通过将训练后的神经网络中的网络参数从浮点数转换为定点数实现网络参数的值的定点化调整,本公开实施例在定点化调整过程中,不改变神经网络的网络结构,仅对网络参数的值进行定点化调整,以使调整后的神经网络模型更小,应用更广泛,不受空间资源限制,更适合在运算资源有限的硬件平台上运行。

本公开上述实施例提供的神经网络生成方法,获取神经网络预期部署的硬件平台的定点运算资源信息;将神经网络包括的至少一个网络单元的网络参数的值的分布调整为均匀型分布;基于样本图像数据对参数调整后的神经网络进行训练;根据定点运算资源信息对训练后的神经网络中的网络参数的值进行定点化调整,调整为均匀型分布的网络参数的值更适合进行定点化调整,减少了从浮点数转换到定点数的精度损失,提高了定点化调整后的神经网络的精度;并且基于硬件平台的定点运算资源信息进行定点化调整,使调整后的神经网络可以在硬件资源有限的平台上运行,提高图像处理效率,减小甚至避免了基于定点化处理后的神经网络部署在硬件资源有限的平台后对图像进行处理时的图像处理精度的损失,减少了神经网络模型所需的存储资源。

在一个或多个可选的实施例中,网络单元包括至少一个网络层。

本公开实施例中,网络单元可以包括一个或多个网络层,网络层指构成神经网络的任意网络层,例如:卷积层、全连接层、池化层、激活层等等,当网络单元包括多个网络层时,该多个网络层可以是相同或不同的网络层,例如,网络单元包括一个卷积层和一个池化层,或网络层包括3个卷积层。本公开实施例不限制网络单元包括网络层的数量和种类。

图2为本公开实施例提供的神经网络生成方法的另一实施例的流程示意图。如图2所示,该实施例方法包括:

步骤210,获取神经网络预期部署的硬件平台的定点运算资源信息。

可选地,可通过对硬件平台的计算资源进行分析,以获得定点运算资源信息,定点运算资源信息可表现为定点位宽资源量,可实现定点位宽资源量限制硬件平台中可运行的神经网络的网络参数的定点位宽,例如,硬件平台对应的定点位宽资源量为8比特,那么基于本公开实施例定点化处理后的网络参数需要小于8比特才能更好的适应该硬件平台,发挥该硬件平台低功耗、加速运算等方面的综合优势。

步骤220,根据神经网络中的至少一个网络单元的网络参数的值的分布的均值,确定动态阈值。

本公开实施例中基于动态阈值对网络参数进行调整,以实现将正态型分布的网络参数调整为均匀型分布,而该动态阈值并不是随意确定的数值,可选地,本公开实施例中对应每个网络单元的动态阈值都是基于该网络单元中的网络参数经过计算获得的,基于网络单元的网络参数确定的动态阈值更符合该网络单元的数值需要,不会因为随意确定动态阈值而导致网络精度降低。

步骤230,根据动态阈值调整神经网络中的至少一个网络单元的网络参数的值,以使调整后的至少一网络单元的各网络参数的值的分布为均匀型分布。

本公开实施例中,由于具有相同网络结构的浮点模型(网络参数为浮点数的神经网络),若精度相同或相似,则网络参数的范围与能量均值比越小,经过定点转换后得到的定点模型(网络参数为定点数的神经网络)精度损失越小,精度越高;可选地,本公开实施例基于动态阈值对网络参数的值进行调整,以使网络参数的范围与能量均值的比减小,例如,通过动态阈值截断的方式将网络浮点参数的分布限制在一定的范围内,以提高获得的神经网络的精度。

步骤240,基于样本图像数据对参数调整后的神经网络进行训练。

本公开实施例中步骤240与上述实施例的步骤130类似,可参照上述实施例对该步骤进行理解,在此不再赘述。

步骤250,根据定点运算资源信息对训练后的神经网络中的网络参数的值进行定点化调整。

本公开实施例基于动态阈值对网络参数的值的分布进行调整,使获得的网络参数的值呈均匀型分布,更适合进行定点化调整,减少了定点化调整造成的神经网络性能的精度损失。

可选地,步骤220包括:

确定至少一个网络单元中每个网络单元的网络参数在1范数下的能量均值,将能量均值作为网络参数的值的分布的均值;

基于网络参数的值的分布的均值和设定参数,确定动态阈值。

可选地,每个网络单元对应一个能力均值,即每个网络单元对应一个动态阈值,实现对不同的网络单元进行不同的网络参数调整(如,阈值截断);1范数作为向量范数时,可表示向量元素绝对值之和。

可选地,动态阈值可以包括正阈值和负阈值,即,通过正阈值和负阈值可以获得一个阈值区间,该阈值区间可以是大于或等于负阈值,小于或等于正阈值。

确定网络参数的值的分布的均值和设定参数的乘积,确定正阈值和负阈值。

在一个可选示例中,上述获得正阈值和负阈值的过程可基于以下公式(1)实现:

threshold=k*mean(abs(weight))公式(1)

其中,threshold表示动态阈值,动态阈值中的正阈值为threshold,负阈值为-threshold,基于动态阈值确定的阈值区间为[-threshold,threshold],该阈值空间的两端分别对应负阈值和正阈值;weight表示神经网络中一个网络单元的浮点参数,abs表示对浮点参数取绝对值,mean表示对所有网络浮点参数求和之后求平均,mean(abs(weight))可概括为计算神经网络中任一网络单元的浮点参数的1范数下的能量均值;k为设定参数,可基于需求进行设定,例如,k的取值可以包括但不限于:2、4等任意整数;*表示相乘。

在一个或多个可选的实施例中,步骤230包括:

将取值超出动态阈值的至少一个网络单元的网络参数的值替换为动态阈值。

为了将网络单元的网络参数调整为均匀型分布,可选地,本公开实施例根据动态阈值确定的阈值区间(大于或等于负阈值,小于或等于正阈值)对网络参数进行调整,具体地,将网络单元的网络参数的值大于正阈值的替换为正阈值,将小于负阈值的替换为负阈值,例如:阈值区间为[-4,4],一个网络参数的数值为5,另一个网络参数为-7,经过动态阈值调整获得一个的数值为4的网络参数,另一个数值为-4的网络参数;而对于网络参数中未超出网络层的动态阈值确定的阈值区间的,由于其数值原来就分布在阈值区间中,保持其数值不变化即可。

图3a为现有技术中神经网络的网络参数的值的分布示意图。图3a可理解为网络参数的密度图,图中横坐标为网络参数的取值,纵坐标为当前取值(如,-4、-2、0、2、4等)对应的网络参数的数量占总的网络参数的数量的比例。如图3a所示,现有技术中神经网络的浮点数表达的网络参数的分布通常为正态型分布如图3a右侧所示,而正态型分布的网络参数的值难以量化,因为离群值会影响量化精度。因此,直接对正态型分布的网络参数的值进行定点化调整将导致神经网络的精度下降较多。相同网络结构的浮点模型,若精度相同或相似,则网络参数的范围与能量均值比越小,经过定点化调整后得到的定点模型精度损失越小,因此,本公开实施例在进行网络参数定点化调整之前,对神经网络中至少一个网络单元的网络参数进行动态阈值调整,图3b为本公开实施例提供的神经网络生成方法中基于动态阈值调整后的网络参数的值的分布示意图。图3b可理解为网络参数的密度图,图中横坐标为网络参数的取值,纵坐标为当前取值(如,-4、-2、0、2、4等)对应的网络参数的数量占总的网络参数的数量的比例。如图3b所示,经过动态阈值调整的网络参数的值的分布为均匀型分布,在不同取值时网络参数的数量差异较小,使网络参数相对集中分布,减少了离群值,更适合进行定点化调整。

在一个或多个可选的实施例中,步骤140或步骤250包括:

根据定点运算资源信息确定定点数的动态范围;

基于动态范围对神经网络的网络参数进行定点化调整,以使获得的神经网络的网络参数均落入动态范围。

可选地,为了发挥fpga等硬件平台低功耗、加速运算等方面的综合优势,运算单元的定点运算资源信息(定点位宽硬件资源量)通常较为有限。然而,定点位宽硬件资源量少往往会影响运算速度,对于要求快速响应甚至是实时响应的平台,例如自动驾驶的车载运算平台等,因此对神经网络进行适配硬件定点位宽硬件资源量方面的优化,以实现在有限资源平台上的加速运算。出于上述的需求,当神经网络在fpga等硬件资源有限的平台上运行之前,可以进行基于定点运算资源信息的定点化调整,以适配硬件平台的定点运算资源信息,从而同时满足对于运算平台的低功耗以及快速响应的要求。经过定点化操作之后,浮点数的乘加可以转换为定点数的乘加。对于fpga等平台,定点数的乘法、加法等运算可以直接使用dsp来执行,因此,对神经网络的网络参数进行定点化操作,可以减少fpga等平台的硬件消耗。

例如,fpga的dsp的定点位宽硬件资源量可以是4比特-8比特,即fpga的dsp可以支持4比特到8比特的定点数的计算。相应的,在进行定点化处理时,需要将浮点数定点化为4比特到8比特的定点数。

可选地,基于动态范围对神经网络的网络参数进行定点化调整,包括:

根据神经网络的网络参数的值,确定网络参数定点化表示的整数位和小数位;

根据整数位和小数位将网络参数的值进行浮点数到定点数的调整。

本公开实施例中,将网络单元中的网络参数(例如,卷积层中的权重值weight)由浮点数表示转换为定点数表示,定点数包括符号位、整数位和小数位,本公开实施例中将网络参数转换为多少位表达的定点数可以由每个网络单元的网络参数和硬件平台的定点运算资源信息确定;可选地,先用int型将网络参数的值表示为仅包括整数位的定点数,再利用获得的小数位包括的比特数对int型表达的定点数的小数点进行相应的左移,即可得到包括的整数位和小数位定点数;其中,int表示整型变量,是一种数据类型,用于定义一个整型变量,在本公开实施例中获得的int型的网络参数仅包括整数位;在确定整数位和小数位的情况下,对int型的网络参数的小数点向左移,以使整数位的比特数与确定整数位的比特数相同,小数点左移后得到的小数位的比特数大于确定小数位比特数时,对小数位进行截断,以牺牲精度来提高神经网络在硬件平台上的运行速度。例如,根据神经网络的网络参数的值,确定网络参数定点化表示的整数位和小数位分别为2和3;定点化调整获得的int型的网络参数表示为111011;基于确定整数位对小数点左移3位,使整数位为2,获得11.1011;再基于确定小数位为3进行小数位截断,获得定点化调整后的网络参数为11.101。

可选地,本公开实施例可通过动态定点实现网络参数的定点化调整;相比较于固定定点(即整个网络中的整数位和小数位都是相同的),动态定点是根据每一个网络单元的网络参数和激活值的分布,动态的对每一网络单元的网络参数确定不同的整数位和小数位。这样的好处是,可以使获得的神经网络有更大的表示范围和精度。

可选地,网络单元包括卷积层和激活层;

对网络单元中的网络参数进行定点化调整时,对卷积层的权重值(weight)进行定点化调整的同时,对激活层输出的激活值进行定点话调整。

本公开实施例中,每个网络单元中激活层输出的激活值(activation)即可作为该网络单元的输出,即为下一个网络单元中的卷积层的输入,由于卷积层中将输入与卷积层的权重值进行卷积操作,为实现卷积操作,本公开实施例将激活层输出的激活值也进行定点化调整。

图4为本公开实施例提供的神经网络生成方法的又一实施例的流程示意图。如图4所示,该实施例方法包括:

步骤410,获取神经网络预期部署的硬件平台的定点运算资源信息。

本公开实施例中步骤410与上述实施例的步骤110和步骤210类似,可参照上述实施例对该步骤进行理解,在此不再赘述。

步骤420,将神经网络包括的至少一个网络单元的网络参数的值的分布调整为均匀型分布。

本公开实施例中的网络参数的值的分布调整,可以是针对神经网络中所有网络单元的调整,也可以是基于部分网络单元的调整,可选地,为了获得更好的定点化调整效果,需要将神经网络中所有网络单元的网络参数的值的分别调整为均匀型分布。

步骤430,基于样本图像数据对参数调整后的神经网络进行训练。

可选地,每次将神经网络中至少一个网络单元的网络参数的值的分布进行调整后,就对参数调整后的神经网络进行训练,基于参数调整后的神经网络对样本图像数据处理获得的损失对神经网络的参数进行调整,由于损失的调整将导致训练后的神经网络的网络参数分布改变,因此,每次基于样本图像数据对应的损失对神经网络进行参数调整后,需要执行步骤420对神经网络中至少一个网络单元的网络参数的值的分布进行调整。

步骤440,根据定点运算资源信息对训练后的神经网络中的网络参数的值进行定点化调整。

本公开实施例中步骤440与上述实施例的步骤140和步骤250类似,可参照上述实施例对该步骤进行理解,在此不再赘述。

步骤450,基于样本图像数据对网络参数定点化调整后的神经网络进行再训练。

由于在网络参数的值进行定点化调整过程中可能出现精度损失,为了提高神经网络的精度,本公开实施例对网络参数定点化调整后的神经网络进行再训练,通过再训练过程提高定点化表达的网络参数的精度,以降低定点化调整后的神经网络的精度损失。

可选地,对定点化调整后的神经网络通过浮点数表达的损失进行网络参数调整,因此,每次基于损失调整后的网络参数将转换为浮点数,在接收下一批样本图像数据之前,需要对浮点数表达的网络参数进行定点化调整。可选地,可基于步骤460实现对对浮点数表达的网络参数进行定点化调整。

步骤460,根据定点运算资源信息对再训练后的神经网络中的网络参数的值进行定点化调整。

在提高定点化调整后的神经网络的精度的同时,需要考虑到在硬件平台上的正常运行,因此,在对浮点数表达的网络参数进行定点化调整时,根据定点运算资源信息确定的定点数位宽对经过再训练的神经网络中的网络参数进行定点化调整,以使获得的神经网络能够满足在硬件平台上快速运行。

在一个或多个可选的实施例中,在执行步骤450之前还可以包括:对网络参数定点化调整后神经网络的网络参数进行位宽扩展,获得对应神经网络的精度提高后的定点网络参数。

本公开实施例中进行再训练的目的是为了减少网络参数从浮点数调整为定点数的精度损失,因此,在进行再训练之前,对定点化调整后神经网络的网络参数进行位宽扩展,使扩展后的定点网络参数能更准确的表达神经网络的原始浮点参数;在对精度提高后的定点网络参数进行训练,使训练后的神经网络更接近初始神经网络的性能,减少了在定点化调整过程中对神经网络产生的损失。

此时步骤450包括:基于样本图像数据对包括精度提高后的定点网络参数的神经网络进行训练,多次执行本步骤直至满足预定的神经网络训练完成条件。

经过训练获得的精度提高后的定点网络参数的位数较多,并不符合本公开实施例缩减网络的初衷,可选地,本实施例通过对精度提高后的定点网络参数进行动态阈值截断减小网络参数的位数,进而缩小了神经网络,在更低bit上得到更高精度的定点模型。

图5为本公开实施例提供的神经网络生成方法中神经网络再训练的一个示例的结构示意图。如图5所示,本公开实施例的再训练过程中在前向传播和反向传播(forward&backward)时网络参数以定点数表示,获得的网络损失以浮点数表示,基于损失调整网络参数时,将网络参数调整为浮点数,在进行参数更新时再重新进行参数定点化调整;具体训练过程可参照图5所示,其中w为基于定点化调整后神经网络的网络参数进行位宽扩展获得的精度提高后的定点网络参数,对精度提高后的定点网络参数w随机抽样获得参数w,基于w获得网络输出yl,基于yl和w获得梯度基于梯度公式获得网络参数更新的损失δw,基于损失δw对全精度参数进行更新,损失δw对全精度参数进行更新在图中显示为虚线,表示在训练过程中进行该过程,而达到训练完成条件时,不执行该更新过程,直到达到训练完成条件(例如,达到设定的训练次数、获得的损失小于预设值等条件),获得更新后的网络参数。本公开实施例的再训练方法所需时间和消耗资源较少,更适合应用在资源有限的硬件平台上。

本领域普通技术人员可以理解:实现上述方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成,前述的程序可以存储于一计算机可读取存储介质中,该程序在执行时,执行包括上述方法实施例的步骤;而前述的存储介质包括:rom、ram、磁碟或者光盘等各种可以存储程序代码的介质。

图6为本公开实施例提供的神经网络生成装置的一个结构示意图。该实施例的装置可用于实现本公开上述各方法实施例。如图6所示,该实施例的装置包括:

资源获取单元61,用于获取神经网络预期部署的硬件平台的定点运算资源信息。

参数分布调整单元62,用于将神经网络包括的至少一个网络单元的网络参数的值的分布调整为均匀型分布。

网络训练单元63,用于基于样本图像数据对参数调整后的神经网络进行训练。

参数定点化单元64,用于根据定点运算资源信息对训练后的神经网络中的网络参数的值进行定点化调整。

本公开上述实施例提供的神经网络生成装置,减少了从浮点数转换到定点数的精度损失,提高了定点化调整后的神经网络的精度;并且基于硬件平台的定点运算资源信息进行定点化调整,使调整后的神经网络可以在硬件资源有限的平台上运行,提高图像处理效率,减小甚至避免了基于定点化处理后的神经网络部署在硬件资源有限的平台后对图像进行处理时的图像处理精度的损失,减少了神经网络模型所需的存储资源。

可选地,网络单元包括至少一个网络层。

在一个或多个可选的实施例中,参数分布调整单元62,包括:

动态阈值确定模块,根据神经网络中的至少一个网络单元的网络参数的值的分布的均值,确定动态阈值;

参数值调整模块,用于根据动态阈值调整神经网络中的至少一个网络单元的网络参数的值,以使调整后的至少一网络单元的各网络参数的值的分布为均匀型分布。

本公开实施例中,由于具有相同网络结构的浮点模型(网络参数为浮点数的神经网络),若精度相同或相似,则网络参数的范围与能量均值比越小,经过定点转换后得到的定点模型(网络参数为定点数的神经网络)精度损失越小,精度越高;可选地,本公开实施例基于动态阈值对网络参数的值进行调整,以使网络参数的范围与能量均值的比减小,例如,通过动态阈值截断的方式将网络浮点参数的分布限制在一定的范围内,以提高获得的神经网络的精度。

可选地,动态阈值确定模块,用于确定至少一个网络单元中每个网络单元的网络参数在1范数下的能量均值,将能量均值作为网络参数的值的分布的均值;基于网络参数的值的分布的均值和设定参数,确定动态阈值。

可选地,动态阈值包括正阈值和负阈值;动态阈值确定模块在基于网络参数的值的分布的均值和设定参数,确定动态阈值时,用于确定网络参数的值的分布的均值和设定参数的乘积,确定正阈值和负阈值。

可选地,参数值调整模块,用于将取值超出动态阈值的至少一个网络单元的网络参数的值替换为动态阈值。

在一个或多个可选的实施例中,参数定点化单元64,用于根据定点运算资源信息确定定点数的动态范围;基于动态范围对神经网络的网络参数进行定点化调整,以使获得的神经网络的网络参数均落入动态范围。

可选地,为了发挥fpga等硬件平台低功耗、加速运算等方面的综合优势,运算单元的定点运算资源信息(定点位宽硬件资源量)通常较为有限。然而,定点位宽硬件资源量少往往会影响运算速度,对于要求快速响应甚至是实时响应的平台,例如自动驾驶的车载运算平台等,因此对神经网络进行适配硬件定点位宽硬件资源量方面的优化,以实现在有限资源平台上的加速运算。出于上述的需求,当神经网络在fpga等硬件资源有限的平台上运行之前,可以进行基于定点运算资源信息的定点化调整,以适配硬件平台的定点运算资源信息,从而同时满足对于运算平台的低功耗以及快速响应的要求。

可选地,参数定点化单元64在基于动态范围对神经网络的网络参数进行定点化调整时,用于根据神经网络的网络参数的值,确定网络参数定点化表示的整数位和小数位;根据整数位和小数位将网络参数的值进行浮点数到定点数的调整。

在一个或多个可选的实施例中,本公开实施例提供的装置还包括:

网络再训练单元,用于基于样本图像数据对网络参数定点化调整后的神经网络进行再训练;

定点化调整单元,用于根据定点运算资源信息对再训练后的神经网络中的网络参数的值进行定点化调整。

由于在网络参数的值进行定点化调整过程中可能出现精度损失,为了提高神经网络的精度,本公开实施例对网络参数定点化调整后的神经网络进行再训练,通过再训练过程提高定点化表达的网络参数的精度,以降低定点化调整后的神经网络的精度损失。

可选地,本公开实施例提供的装置还包括:

精度提高单元,用于对网络参数定点化调整后神经网络的网络参数进行位宽扩展,获得对应神经网络的精度提高后的定点网络参数;

网络再训练单元,用于基于样本图像数据对包括精度提高后的定点网络参数的神经网络进行训练,多次执行本步骤直至满足预定的神经网络训练完成条件。

图7为本公开实施例提供的图像处理方法的一种流程示意图。该方法可以由任意电子设备执行,例如终端设备、服务器、移动设备、车载设备等等。如图7所示,该实施例方法包括:

步骤710,获取待处理的图像和神经网络。

其中,获取的神经网络是定点化调整后的神经网络,可选地,获取的神经网络是采用本公开上述任一实施例提供的神经网络生成方法得到的。

神经网络可以应用于图像处理过程中,本公开实施例提出一种基于神经网络的图像处理方法,本公开实施例中采用的神经网络是经过定点化调整后得到的定点模型。本公开实施例中获取的待处理图像可以为任意方式获取的图像,例如,在车道线检测、车道线拟合等场景下,可以由智能驾驶车辆的摄像头采集路面图像,处理器可以获取摄像头所采集的路面图像,该路面图像即为待处理的图像。

步骤720,控制部署有神经网络的硬件平台根据神经网络定点化调整后的网络参数处理图像,得到图像的处理结果。

在获取到待处理的图像后,控制硬件平台根据定点化调整后的网络参数处理图像,从而实现在硬件资源有限的硬件平台上使用神经网络进行高效的图像处理。

可选的,处理上述图像的过程可以包括但不限于定点乘法运算、定点加法运算、移动运算中的至少一项。

基于不同的场景,可以得到不同的图像处理结果。可以得到的图像的处理结果可以包括但不限于以下至少一项:

特征提取结果、分割结果、分类结果、对象检测结果、对象跟踪结果。

示例性的,上述对象检测结果可以是对车道线的检测结果。

本实施例中,通过对神经网络进行定点化处理,能够实现在硬件资源有限的平台上实现加速运算,从而同时满足对于硬件平台的低功耗以及快速响应的需求。

本领域普通技术人员可以理解:实现上述方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成,前述的程序可以存储于一计算机可读取存储介质中,该程序在执行时,执行包括上述方法实施例的步骤;而前述的存储介质包括:rom、ram、磁碟或者光盘等各种可以存储程序代码的介质。

图8为本公开实施例提供的图像处理装置的一个结构示意图。该实施例的装置可用于实现本公开上述各方法实施例。如图8所示,该实施例的装置包括:

获取单元81,用于获取待处理的图像和神经网络。

其中,获取的神经网络是定点化调整后的神经网络,可选地,获取的神经网络是采用本公开上述任一实施例提供的神经网络生成方法得到的。

处理单元82,用于控制部署有神经网络的硬件平台根据神经网络定点化调整后的网络参数处理图像,得到图像的处理结果。

本公开实施例提出的图像处理装置中采用的神经网络是经过定点化调整后得到的定点模型。本公开实施例中获取的待处理图像可以为任意方式获取的图像,例如,在车道线检测、车道线拟合等场景下,可以由智能驾驶车辆的摄像头采集路面图像,处理器可以获取摄像头所采集的路面图像,该路面图像即为待处理的图像。在获取到待处理的图像后,控制硬件平台根据定点化调整后的网络参数处理图像,从而实现在硬件资源有限的硬件平台上使用神经网络进行高效的图像处理。

可选的,处理上述图像的过程可以包括但不限于定点乘法运算、定点加法运算、移动运算中的至少一项。

基于不同的场景,可以得到不同的图像处理结果。可以得到的图像的处理结果可以包括但不限于以下至少一项:

特征提取结果、分割结果、分类结果、对象检测/跟踪结果。

示例性的,上述对象检测结果可以是对车道线的检测结果。

图9为本公开实施例提供的基于现场可编程门阵列fpga的硬件平台的结构示意图。如图9所示,该实施例平台包括:处理器91、外部存储器92、内存93和fpga运算单元94;

外部存储器92中存储有神经网络的定点化调整后的网络参数。

可选地,外部存储器92中存储的神经网络是基于上述任意一项实施例提供的神经网络生成方法生成的。

处理器91将神经网络的定点化调整后的网络参数读入内存93,将内存93上的数据和待处理的图像输入到fpga运算单元94。

fpga运算单元94根据待处理的图像和定点化调整后的网络参数进行运算处理,得到图像的处理结果。

处理器91还可以执行上述图像处理方法实施例中的方法步骤,具体可以参照前述方法实施例,此处不再赘述。

根据本公开实施例的另一方面,提供的一种电子设备,包括:

存储器,用于存储程序指令;

处理器,用于调用并执行所述存储器中的程序指令,执行上述任意一项实施例提供的神经网络生成方法或图像处理方法的步骤。

根据本公开实施例的又一方面,提供的一种智能驾驶系统,包括上述实施例提供的电子设备。

根据本公开实施例的还一方面,提供的一种计算机可读存储介质,其特征在于,所述可读存储介质中存储有计算机程序,所述计算机程序用于执行上述任意一项实施例提供的神经网络生成方法或图像处理方法。

根据本公开实施例的再一个方面,提供的一种计算机程序产品,包括计算机可读代码,当计算机可读代码在设备上运行时,设备中的处理器执行用于实现如上任意一项实施例提供的神经网络生成方法或图像处理方法的指令。

应理解,本公开对各个实施例的描述着重强调各个实施例之间的不同之处,其相同或相似之处可以相互参考,为了简洁,不再一一赘述。

本公开实施例还提供了一种电子设备,例如可以是移动终端、个人计算机(pc)、平板电脑、服务器等。下面参考图10,其示出了适于用来实现本公开实施例的终端设备或服务器的电子设备1000的结构示意图:如图10所示,电子设备1000包括一个或多个处理器、通信部等,所述一个或多个处理器例如:一个或多个中央处理单元(cpu)1001,和/或一个或多个图像处理器(加速单元)1013等,处理器可以根据存储在只读存储器(rom)1002中的可执行指令或者从存储部分1008加载到随机访问存储器(ram)1003中的可执行指令而执行各种适当的动作和处理。通信部1012可包括但不限于网卡,所述网卡可包括但不限于ib(infiniband)网卡。

处理器可与只读存储器1002和/或随机访问存储器1003中通信以执行可执行指令,通过总线1004与通信部1012相连、并经通信部1012与其他目标设备通信,从而完成本公开实施例提供的任一项方法对应的操作,例如,获取神经网络预期部署的硬件平台的定点运算资源信息;将神经网络包括的至少一个网络单元的网络参数的值的分布调整为均匀型分布;基于样本图像数据对参数调整后的神经网络进行训练;根据定点运算资源信息对训练后的神经网络中的网络参数的值进行定点化调整。或者,获取待处理的图像和本公开上述任一实施例提供的神经网络生成方法得到的神经网络;控制部署有神经网络的硬件平台根据神经网络定点化调整后的网络参数处理所述图像,得到图像的处理结果。

此外,在ram1003中,还可存储有装置操作所需的各种程序和数据。cpu1001、rom1002以及ram1003通过总线1004彼此相连。在有ram1003的情况下,rom1002为可选模块。ram1003存储可执行指令,或在运行时向rom1002中写入可执行指令,可执行指令使中央处理单元1001执行上述通信方法对应的操作。输入/输出(i/o)接口1005也连接至总线1004。通信部1012可以集成设置,也可以设置为具有多个子模块(例如多个ib网卡),并在总线链接上。

以下部件连接至i/o接口1005:包括键盘、鼠标等的输入部分1006;包括诸如阴极射线管(crt)、液晶显示器(lcd)等以及扬声器等的输出部分1007;包括硬盘等的存储部分1008;以及包括诸如lan卡、调制解调器等的网络接口卡的通信部分1009。通信部分1009经由诸如因特网的网络执行通信处理。驱动器1010也根据需要连接至i/o接口1005。可拆卸介质1011,诸如磁盘、光盘、磁光盘、半导体存储器等等,根据需要安装在驱动器1010上,以便于从其上读出的计算机程序根据需要被安装入存储部分1008。

需要说明的,如图10所示的架构仅为一种可选实现方式,在具体实践过程中,可根据实际需要对上述图10的部件数量和类型进行选择、删减、增加或替换;在不同功能部件设置上,也可采用分离设置或集成设置等实现方式,例如,加速单元1013和cpu1001可分离设置或者可将加速单元1013集成在cpu1001上,通信部可分离设置,也可集成设置在cpu1001或加速单元1013上,等等。这些可替换的实施方式均落入本公开公开的保护范围。

特别地,根据本公开的实施例,上文参考流程图描述的过程可以被实现为计算机软件程序。例如,本公开的实施例包括一种计算机程序产品,其包括有形地包含在机器可读介质上的计算机程序,计算机程序包含用于执行流程图所示的方法的程序代码,程序代码可包括对应执行本公开实施例提供的方法步骤对应的指令,例如,获取神经网络预期部署的硬件平台的定点运算资源信息;将神经网络包括的至少一个网络单元的网络参数的值的分布调整为均匀型分布;基于样本图像数据对参数调整后的神经网络进行训练;根据定点运算资源信息对训练后的神经网络中的网络参数的值进行定点化调整。或者,获取待处理的图像和本公开上述任一实施例提供的神经网络生成方法得到的神经网络;控制部署有神经网络的硬件平台根据神经网络定点化调整后的网络参数处理所述图像,得到图像的处理结果。在这样的实施例中,该计算机程序可以通过通信部分1009从网络上被下载和安装,和/或从可拆卸介质1011被安装。在该计算机程序被中央处理单元(cpu)1001执行时,执行本公开的方法中限定的上述功能的操作。

可能以许多方式来实现本公开的方法和装置。例如,可通过软件、硬件、固件或者软件、硬件、固件的任何组合来实现本公开的方法和装置。用于所述方法的步骤的上述顺序仅是为了进行说明,本公开的方法的步骤不限于以上具体描述的顺序,除非以其它方式特别说明。此外,在一些实施例中,还可将本公开实施为记录在记录介质中的程序,这些程序包括用于实现根据本公开的方法的机器可读指令。因而,本公开还覆盖存储用于执行根据本公开的方法的程序的记录介质。

本公开的描述是为了示例和描述起见而给出的,而并不是无遗漏的或者将本公开限于所公开的形式。很多修改和变化对于本领域的普通技术人员而言是显然的。选择和描述实施例是为了更好说明本公开的原理和实际应用,并且使本领域的普通技术人员能够理解本公开从而设计适于特定用途的带有各种修改的各种实施例。

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