用于神经网络的量化
文献发布时间:2023-06-19 18:32:25
技术领域
本发明实施例大体上涉及量化领域。具体地,一些实施例涉及在人工智能尤其是神经网络的框架中使用的量化。
背景技术
协作智能是跨移动云基础设施高效部署深度神经网络的几种新范式(paradigm)之一。通过例如在(移动)设备和云之间划分网络,可以分配计算工作负载,使得系统的总能量和/或时延最小化。一般而言,分配计算工作负载使得在神经网络部署中使用资源有限的设备。神经网络通常包括两层或两层以上。特征图是一层的输出。在设备之间(例如在设备和云之间)划分的神经网络中,划分位置(例如第一设备)的输出侧的特征图被压缩并传输到该神经网络的其余层(例如第二设备)。
传输资源通常是有限的,因此需要对传输数据进行压缩。一般而言,压缩可以是无损的(例如熵编码)或有损的(例如进行量化)。有损压缩通常提供更高的压缩比。然而,有损压缩通常是不可逆转的,即一些信息可能无法挽回地丢失。另一方面,压缩的质量会对神经网络解决实际任务的准确性产生重大影响。此外,鉴于移动设备在能耗和硬件资源方面也存在局限性,使压缩过程的复杂性最小化可能至关重要。
发明内容
本发明涉及用于压缩在神经网络中使用的数据的方法和装置。这些数据可以包括但不限于特征(例如特征图)。
本发明由独立权利要求的范围限定。一些有利实施例提供在从属权利要求中。
具体地,本发明一些实施例涉及修改量化器的量化电平以增大重建值的动态范围。这种方法可以在神经网络等应用中提供更好的性能,例如在准确性方面。
根据一方面,提供了一种修改用于神经网络的量化器的量化电平的方法。所述方法包括以下步骤:获取数据值和归属于所述数据值的初步量化电平,其中,所述初步量化电平包括至少一个不可修改量化电平和至少一个可修改量化电平;确定修改后的量化电平包括所述至少一个不可修改量化电平以及根据表示所述获取到的数据值和初步量化电平之间失真的成本函数调整所述至少一个可修改量化电平而得到的至少一个电平,其中,所述至少一个不可修改量化电平包括所有较低数据值截取到的最小截取值和/或所有较高数据值截取到的最大截取值。
提供不可修改量化电平,尤其是对应于最小截取值或最大截取值的一个量化电平,可以提供更高的动态范围。更高的动态范围可以提高神经网络的性能,例如准确性方面的性能。
例如,至少存在两个不可修改量化电平,即至少所述最小截取值和所述最大截取值。
将最小截取值和最大截取值都用作量化电平进一步增大了动态范围。
另外或可替换地,存在至少两个不可修改量化电平,其中,所述至少两个不可修改量化电平中有一个值为0。
提供更多量化电平对网络的更多计算/其简化有意义。
在一种示例性实现方式中,所述方法还包括:将电平计算为分配给所述电平的数据值的预定义函数。这可以适应训练数据。
例如,所述预定义函数是分配给所述电平的所述数据值的平均值。
平均值提供了简单计算和数据值的公平表示。
在一个实施例中,所述成本函数包括所述失真和速率的线性组合,所述速率由表示所述相应的初步量化电平的码字的码字长度表示,表示至少两个相应的初步量化电平的码字具有相互不同的长度。
在优化过程中同时考虑可变长度编码和失真(而不是固定VLC或根据固定码字分配单独设计VLC)可以提高编码效率和神经网络的准确性。此外,通过使用已知码字长度而不是计算概率,不需要生成熵编码码流来计算速率来进行速率失真优化,也就是说,码字大小可以简单地求和。
具体地,所述方法还可以包括:确定成对修改后的相邻量化电平之间的判决阈值,其中,两个修改后的相邻量化电平之间的阈值是根据所述两个修改后的相邻量化电平和表示所述相应的两个修改后的相邻量化电平的码字长度确定的。
根据失真和速率确定的阈值可以提高神经网络的准确性。
如上所述的方法可以迭代地执行。所述获取初步量化电平和确定修改后的量化电平的步骤迭代K次,K大于1;所述K次迭代中的第j次迭代包括:获取与通过第(j–1)次迭代确定的修改后的量化电平对应的初步量化电平;确定所述修改后的量化电平包括所述至少一个不可修改量化电平,以及根据所述成本函数修改通过第(j–1)次迭代得到的所述至少一个可修改量化电平。通过迭代,可以获得更高的准确性。
根据一个实施例,所述迭代方法包括:在以下条件下,在所述K次迭代之后停止迭代:第K次迭代中的成本函数的值小于第一阈值时,和/或第(K–1)次迭代中的代价函数的值与第K次迭代中的代价函数的值之差小于第二阈值。通过设置迭代次数,可以高效控制准确性和复杂性。
在一些实现方式中,第一次迭代之前的初步量化电平是均匀量化电平。具体地,初步量化电平可以对应于均匀线性量化器。简单的初始猜测可以为改进提供良好的基础,而不会大幅增加复杂性。
例如,所述数据值是:由所述神经网络的一层输出的特征图的值,和/或所述神经网络的一层的权重。如上所述,神经网络的准确性可以通过增大动态范围来提高,尤其是对于少量量化电平(例如大约8个或以下)。稍微增加量化误差不会给神经网络的应用带来问题。
在任一上述实施例和示例中,所述方法还可以包括以下步骤:计算所述修改后的量化电平和所述修改之前的量化电平之间的调整距离;对于每个修改后的量化电平,根据所述调整距离使用所述修改后的量化电平或所述修改之前的量化电平,调整所述修改后的量化电平。
根据一方面,提供了一种将用于神经网络的数据编码到码流中的方法。所述方法包括以下步骤:通过所述神经网络的至少一层生成数据值;根据任一上述实施例/示例所述的基于预定数据值和/或作为所述获取到的数据值的所述生成数据值修改用于神经网络的量化器的量化电平的方法;将所述生成数据值量化到所述修改后的量化电平;将表示所述量化数据的码字放入所述码流中。
所述方法还可以包括以下步骤:将所述修改后的量化电平的指示放入所述码流中。在本实施例中,解码器不需要具有预先存储的量化电平。
根据一方面,提供了一种从如上所述编码的码流中解码出用于神经网络的数据的方法。所述方法包括:从所述码流中获取修改后的量化电平的指示;根据所述获取到的修改后的量化电平,从所述码流的码字中获取所述用于神经网络的数据;通过所述神经网络的至少一层处理所述获取到的用于神经网络的数据。
如上所述,部署动态范围更高的量化电平有利于神经网络进行的进一步处理。
根据一方面,提供了一种从码流中解码出用于神经网络的数据的方法。所述方法包括:获取量化原始量化电平以量化所述数据;获取与所述原始量化电平中的一个或多个电平对应的一个或多个补充量化电平;计算所述原始量化电平和所述对应的补充量化电平之间的调整距离;对于每个修改后的量化电平,根据所述调整距离使用一个原始量化电平或对应的补充量化电平,确定修改后的量化电平;根据所述获取到的修改后的量化电平,从所述码流的码字中获取所述用于神经网络的数据;通过所述神经网络的至少一层处理所述获取到的用于神经网络的数据。
即使编码器设备与任何类型的量化器一起工作,这种方法也能够增大解码器侧的动态范围。
例如,在所述方法中,所述一个或多个补充量化电平包括所有较低数据值截取到的最小截取值、所有较高数据值截取到的最大截取值、零电平中的至少一个。
另外或可替换地,所述调整距离包括所述原始量化电平和对应的补充量化电平之间的差值以及预定常数的偏移。距离和偏移可以在不增加复杂性的情况下实现。
在一个示例性实施例中,所述确定修改后的量化电平包括对所述原始量化电平中的每个电平执行以下步骤:计算所述原始量化电平和与所述原始量化电平相关联的补充量化电平之间的调整距离;当所述调整距离小于调整阈值时,将与所述原始量化电平对应的修改后的量化电平设置为所述补充量化电平;否则,将修改后的量化电平设置为所述原始量化电平。通过这种阈值,较小的调整是优选的,这可以保持量化误差受到限制。
例如,从所述码流中解码出所述预定常数、所述调整阈值或所述补充电平中的至少一个。这样能够协调和控制编码器和解码器以及使用源数据等设置这些参数。
根据一方面,提供了一种计算机产品,包括用于执行上述方法的程序代码。所述计算机产品可以提供在非瞬时性介质上并且包括指令,当所述指令在一个或多个处理器上执行时,这些指令执行方法(上述方法之一)的步骤。
根据一方面,提供了一种修改用于神经网络的量化器的量化电平的量化器修改设备。所述量化器设备由用于执行根据任一上述方法的步骤的电路实现。
根据一个实施例,提供了一种将用于神经网络的数据编码到码流中的编码器。所述编码器包括:神经网络电路,用于通过所述神经网络的至少一层生成数据值;如上所述的量化器修改设备,用于根据预定数据值和/或作为获取到的数据值的所述生成数据值,修改用于神经网络的量化器的量化电平;量化器,用于将所述生成数据值量化到所述修改后的量化电平;码流生成器,用于将表示所述量化数据的码字放入所述码流中。
根据一方面,提供了一种从码流中解码出用于神经网络的数据的解码器。所述解码器包括:量化调整电路,用于获取原始量化电平以量化所述数据;获取与所述原始量化电平的相应一个或多个电平对应的一个或多个补充量化电平;计算所述原始量化电平和对应的补充量化电平之间的调整距离;以及对于每个修改后的量化电平,根据所述调整距离使用一个原始量化电平或对应的补充量化电平,确定修改后的量化电平;反量化器,用于根据所述获取到的修改后的量化电平从所述码流的码字中获取所述用于神经网络的数据;神经网络电路,用于通过所述神经网络的至少一层处理所述获取到的用于神经网络的数据。
根据一方面,一种通过神经网络处理数据的系统。所述系统包括:如上所述的编码器,用于将用于神经网络的数据编码到码流中;包括电路的解码器设备,用于从所述码流中获取修改后的量化电平的指示;根据所述获取到的修改后的量化电平,从所述码流的码字中获取所述用于神经网络的数据;通过所述神经网络的至少一层处理所述获取到的用于神经网络的数据。如上所述,由于量化数据的动态范围增大,在分布式计算中使用神经网络可能特别有利。
根据一方面,所述解码器设备由云实现。神经网络可能相当复杂,因此高效量化可以在传输所需的速率和神经网络准确性之间实现良好的权衡。
上述装置可以在集成芯片上实现。
任一上述实施例和示例性实现方式可以组合在一起。
附图说明
下面结合附图更加详细地描述本发明实施例,其中:
图1是量化器Q以及量化器输入和输出之间的示例性关系的示意图;
图2是示例性量化方法的流程图;
图3是示例性量化器确定(设计)方法的流程图;
图4是包括边缘设备和计算设备的协作系统的框图;
图5是应用预定义截取的修改后的量化器设计以及进行修改后的量化和反量化的解码器的方法的流程图;
图6是示例性修改后的量化调整过程的流程图;
图7是用于解码器的示例性量化器调整的流程图;
图8是用于实现本发明实施例的一种示例性视频译码系统的框图。
图9是用于实现本发明实施例的另一种示例性视频译码系统的框图。
图10是一种示例性编码装置或解码装置的框图。
图11是另一种示例性编码装置或解码装置的框图。
具体实施方式
在以下描述中,参考形成本发明一部分并以说明的方式示出本发明实施例的具体方面或可以使用本发明实施例的具体方面的附图。应理解,本发明实施例可以在其它方面中使用,并且可以包括附图中未描述的结构变化或逻辑变化。因此,以下详细描述不应以限制性的意义来理解,且本发明的范围由所附权利要求书界定。
例如,应理解,与描述的方法有关的公开内容对于用于执行所述方法的对应设备或系统也同样适用,反之亦然。例如,如果描述一个或多个具体方法步骤,则对应的设备可以包括一个或多个单元(例如功能单元)来执行所描述的一个或多个方法步骤(例如,一个单元执行一个或多个步骤,或多个单元分别执行多个步骤中的一个或多个步骤),即使附图中未明确描述或说明这样的一个或多个单元。另一方面,例如,如果根据一个或多个单元(例如功能单元)来描述特定装置,则对应的方法可以包括一个步骤来执行一个或多个单元的功能(例如,执行所述一个或多个单元的功能的一个步骤,或各自执行所述多个单元中的一个或多个单元的功能的多个步骤),即使图中未明确描述或说明这样的一个或多个步骤。此外,应理解,除非另外明确说明,本文中描述的各种示例性实施例和/或方面的特征可以相互组合。
一些实施例的目的是对用于神经网络的数据进行低复杂性压缩。例如,数据可以包括特征图或在神经网络中使用的其它数据,例如权重或其它参数。在一些示例性实现方式中,提供了压缩,从而能够量化到少量量化电平(例如三个、四个等),同时保持(可能已经训练过的)神经网络的整体准确性。一些实施例还可以解决使用现有方法设计的(反)量化器以次优的方式重建一些特征图值时引起的神经网络准确性降低的问题。根据协同智能范式(collaborative intelligence paradigm),移动设备或边缘设备如果需要反馈,可以从云获取。但是,需要说明的是,本发明并不限于包括云在内的协作网络的框架。本发明可以用于任何分布式神经网络系统。此外,本发明也可以用于在神经网络中存储特征图,而这些神经网络不一定是分布式的。
下面概述了一些使用的技术术语。
神经网络通常包括至少一个输入层和至少一个输出层。神经网络的一层中可以有一个或多个神经网络节点,每个神经网络节点根据激活函数的一个或多个输入计算该激活函数。通常情况下,激活函数是非线性的。深度神经网络(deep neural network,DNN)是一种神经网络,它包括一个或多个隐藏层。特征图是神经网络的一层(输入层、输出层或隐藏层)的输出。特征图可以包括一个或多个特征。特征图值是特征图中元素的值,其中,特征图可以包括多个元素(特征)。激活是由神经网络的激活函数输出的特征图值。需要说明的是,特征图也可以是神经网络层的其它部分(或函数或过程)(例如卷积或批归一化,或其它可能的操作)的输出。
协作智能是一种范式,其中,神经网络的处理分布在两个或两个以上不同的计算节点(例如设备,但一般是任何功能定义的节点)之间。这里,术语“节点”并不是指上述神经网络节点。相反,这里的(计算)节点指的是实现神经网络各部分的(物理上或至少逻辑上)独立的设备/模块。这些设备可以是不同的服务器、不同的终端用户设备、服务器和/或用户设备和/或云和/或处理器的组合,等等。换句话说,可以认为计算节点是属于同一神经网络且相互通信以在神经网络内/为神经网络传送经译码数据的节点。例如,为了能够执行复杂计算,一个或多个层可以在第一设备上执行,一个或多个层可以在另一个设备上执行。但是,分布也可以更精细,单层可以在多个设备上执行。在本发明中,术语“多个”是指两个或两个以上。在一些现有技术方案中,神经网络功能的一部分在设备(用户设备或边缘设备等)或多个这样的设备中执行,然后将输出(特征图)传递给云。云是位于设备外部的处理系统或计算系统的集合,该设备运行神经网络的一部分。
在一些实施例中,提供了量化,这有利于将神经网络数据传递到(可能是分布式的)网络中/内。量化由量化器执行。术语“量化器”可以是指用于执行量化的实际设备(处理设备)或电路。然而,术语“量化”也可以用于表示执行量化的功能(逻辑)模块,该功能块可以在任何硬件或软件基础设施中实现。
图1示出了具有输入值x和输出值
输入值x和输出值
为了实现输入值和量化值之间的这种赋值,通常假设输入值具有有限的输入值范围。量化(输出)值的取值范围由量化电平中的最小值和最大值给出,即在最低和最高量化电平之间。
为了提供有限(受限)取值范围给输入值,可以截取(clip)量化之前的输入值。然后,可以通过使量化器失真度量最小化来选择量化电平。例如,量化器失真度量可以是输入值和相应量化后的输入值(即输出值)之间的最小平方误差,或任何其它失真度量,或通常是包括失真项的成本函数。
根据某个量化器失真度量选择量化电平产生的量化电平在阈值以内,这些阈值将输入值的范围划分为量化器bin。术语“量化器bin”是指属于量化电平
量化后的输入值可以被传输或存储,然后进一步由神经网络(例如由以下层)使用。从量化索引或二进制符号中恢复值的过程称为重建或反量化。相应地,给定一个索引(或二进制符号),重建值对应于与索引(或二进制符号)相关联的量化电平。需要说明的是,在一些量化器中,在映射到量化电平之前进行缩放和/或偏移。相应地,在这种情况下,重建值会通过进行包括逆偏移和缩减的逆操作得到。
例如,电平
当将截取的输入值量化到非常少的量化电平时,已知的量化器通常会导致神经网络失去一定准确性,因为可用的重建值大于最小截取值或小于最大截取值;或者因为要量化的一部分特征图值不具有对应相等(或基本上接近)的量化电平。一些技术将特征图值设置为图像,然后使用传统的图像压缩技术。这些技术的缺点在于,它们会消耗设备上的大量功率和硬件资源,并且当应用于设置的特征图值时,它们的压缩效率很低。
图2示出了实现量化器的已知量化过程的一个示例。在步骤210中,将一系列输入值x
具体地,当查看图2时,在步骤220中,检查输入值x
然后,在步骤270中,如果有另一个输入值要量化,则该方法增加m(这对应于选择另一个输入值进行量化),并且从步骤220开始执行,以步骤225、235和260中的一个步骤结束。在量化完所有输入值x
图3示出了一种示例性熵约束标量量化器设计过程。术语“量化器设计”是指推导量化电平
例如,图3中的量化器设计基于成本函数,包括拉格朗日乘子,以对成本函数中的速率部分和失真部分进行加权。换句话说,图3中的量化器设计是基于速率失真的量化器设计。
量化器的设计包括以下步骤,以便输出量化电平
在获取到训练数据和量化器设计参数之后,在执行步骤320之前初始化方法,步骤320可以迭代地执行:
1.初始化每个量化器bin的量化电平
在初始化中,根据量化器设计参数、所需bin的数量N,推导均匀标量量化器。在这里,概率p
2.步骤320:将每个训练样本x
以这种方式分配给bin n的一部分样本x
3.步骤330:根据步骤2中的分配更新概率p
其中,|B
概率的更新可以通过将分配给每个bin的样本数除以总样本数估计该bin的概率来执行。从上面的公式可以看出,第n个量化电平对应于分配给对应的第n个bin的训练样本的平均值。
4.步骤340:根据重新计算的量化电平,重新计算拉格朗日成本函数(在步骤2中指定),并且重复步骤2和3,直到成本函数J的减少量小于阈值J
需要说明的是,在图3中,成本函数简写为J=D+λR,其中,D表示对应于平方误差
5.步骤360:计算N–1个量化器判决阈值:
这种量化器设计可能有利于一般数据和N个量化电平。然而,这种设计存在一些缺点,尤其是在压缩神经网络中的特征图的背景下,具体是高压缩率的时候。
图4示出了在协作智能应用中使用压缩方法。协作智能涉及(至少)两个实体(系统):边缘设备410和计算设备490。在本示例中,边缘设备410可以是移动用户设备。一般而言,边缘设备410的计算能力比计算设备490的弱。为了执行计算上复杂的任务,边缘设备仅执行任务的一部分,并且通过传输介质450将中间结果传输到计算设备。
边缘设备410可以包括第一数量的神经网络层420,这些层处理输入数据以生成特征图。然后,使用也属于边缘设备410的编码器440对特征图进行编码。
神经网络可以是DNN。DNN中的各层可以包括卷积、批归一化操作和激活函数等操作。一层的输出是特征图。如果DNN 420中的第一部分层在移动或边缘设备410等上执行,则压缩由第一部分层420输出的特征图以传输450到在执行DNN的其余层480的平台490会是有用的。由于压缩将在边缘设备410中的编码器440中执行,因此有利于保持压缩方法的复杂性相对较低,同时不显著降低DNN模型的准确性。本发明提供的“轻量级压缩”依赖于相对简单的操作,例如截取430和非常粗糙的标量量化435以量化到几个量化电平。为了进一步压缩数据,将量化符号转换438为二进制表示以传递给熵编码器439。总之,边缘设备410包括一个或多个神经网络层420和编码器440。编码器包括实现截取模块430、量化器435、二值化438和熵编码439的电路。
将压缩码流发送给云490或另一计算平台,其中,码流由解码器460解码并转换为重建后的特征图,然后由DNN的其余层480处理。该过程对DNN计算的有效影响在于,截取和量化一层(即待传输的层)的输出。计算设备490中的解码器460包括熵解码器473、反二值化474和反量化470。
将编码器440侧的特征图值截取(钳制)430在预定的最小值和最大值c
Q(x
其中,运算round(·)在中间情况下远零舍入(舍入到最接近的值)。与重点降低位深度架构的已知架构不同,量化电平(bin)的数量N不需要是2的幂,因为量化的目的是码流中的压缩和后续传输或存储。因此,这里的N不一定是截取的特征图值量化到的比特数,N也不限制为2的整数幂;而是值量化到的电平或符号数,对应于N电平量化器的整数比特数是
虽然均匀量化器很简单,但对于不均匀分布的信号来说,它并不是最优的,如上所述。此外,由于在压缩特征图时,需要权衡DNN准确性和比特率,因此希望在速率或文件大小范围内压缩这些特征图。熵约束量化(例如结合图3描述的量化)和速率失真优化是压缩数据的方法,这些方法必须使上述拉格朗日成本函数最小化:
J=D+λR,
其中,D是失真度量,R是表示的速率或大小,λ是标量,它在计算失真度量时确定失真和速率之间的比值。因此,通过使用熵约束设计过程,可以很容易地在速率范围内以均方(l
为了解决这个问题,本发明实施例包括修改后的熵约束量化器设计过程,以将最外层量化器bin的量化电平固定(pin)到c
具体地,根据一个实施例,提供了一种用于修改用于神经网络的量化器的量化电平的方法。修改量化电平是指修改量化器的一组量化电平。这是指调整至少一个量化电平。方法501如图5所示。所述方法包括以下步骤:获取510数据值和归属于所述数据值的初步量化电平。所述初步量化电平包括至少一个不可修改量化电平和至少一个可修改量化电平。需要说明的是,所述数据值可以是训练集等,例如训练样本。所述获取可以实现为从存储器/存储区读取或从传感器或模数转换器等其它设备接收。例如,可以根据在量化电平之间限定的判决阈值将所述数据值归属于所述量化电平。一般而言,这种归属可以根据预定义规则执行。
所述方法还包括以下步骤:确定525修改后的量化电平包括所述至少一个不可修改量化电平(在步骤520中分配给修改后的量化电平)和通过调整所述至少一个可修改量化电平而得到的至少一个电平。所述调整530基于表示所述获取到的数据值和初步量化电平之间失真的成本函数。所述至少一个不可修改量化电平包括所有较低数据值截取到的最小截取值和/或所有较高数据值截取到的最大截取值。
这种修改后的量化器设计的优点之一是提供了更高的动态范围。发明人已经发现,在神经网络中,尽管量化误差可能会增大,但较高的动态范围实际上可以提高网络准确性。因此,当用于压缩神经网络中的数据时,上述修改后的量化器可以提供特殊优势。
如果存在至少两个不可修改量化电平,并且这两个电平是最小截取值和最大截取值,则可能更有优势。这使得可以进一步增大动态范围。
然而,需要说明的是,本发明不限于不可修改电平是最小电平和最大电平。另外,或作为最小电平和最大电平的替代,不可修改电平可以是值为0的电平。提供零电平对于神经网络的更多计算和/或其简化有意义。另外或可替代地,其它量化器电平可以是不可修改的。
提供不可修改量化电平是这里所说的“固定(pinning)”这些量化电平。这表示这些电平被固定(pin/fix)到预定义值,并且在量化器调整数据值(例如训练数据值)时不进行修改。如上所述,在一些实施例中,这种固定可以(同样)应用于其它重建后的特征图值,而不是(仅仅)最小值和最大值。如果外部最小和最大量化电平被固定,则内部bin的量化电平和所有bin之间的阈值不会被固定,而是在量化器设计算法下自由改变。一般而言,存在一个或多个固定(在本文中也称为不可修改)量化电平和一个或多个可修改量化电平,可修改量化电平可以在量化器设计操作下改变(也称为非固定)。
为了给使用截取的特征图值的神经网络设计在轻量级压缩系统中工作良好的量化器,修改后的量化器设计过程可以调整,如以下示例性实施例所示。在本示例性实施例中,不可修改值是截取值。
本实施例中修改后的量化器设计与结合图3描述的量化器设计的不同之处具体在于,步骤包括在以下步骤4中固定第一量化电平和最后一个量化电平,以及在步骤6中(相应地在步骤3中)使用码字长度代替熵来计算速率项。需要说明的是,在一些实施例中,只有以下步骤4(固定不可修改电平)可以与图3的步骤不同。其余成本函数计算以及阈值计算可以通过与图3中相同的方式或通过另一种方式执行。
图6的流程图示出了一种修改后的量化器方法。在步骤610中,获取(训练)输入数据x∈{x
执行以下步骤:
1.将训练特征图值(输入值)x截取(钳制)在[c
如结合图3的量化设计所述,这里的术语“训练”并不是指神经网络训练,而是指最优设计量化器使用的一组值。这里的术语“最优”是指与某个预定义成本函数的最小值对应的最佳效果。
2.初始化每个量化器bin的量化电平
需要说明的是,这只是一个示例,一般而言,可以将量化器初始化为另一个值。具体地,量化器可以是针对特定分布的值而优化的某一量化器,或针对另一个数据集而训练的量化器,等等。
3.步骤620:将每个训练样本x
分配给bin n的一部分样本x
因此,在这个特定的示例中,成本函数使用相同的失真项(量化误差的平方范数),但使用与图3的量化器设计不同的速率项。然而,需要说明的是,这只是一个示例性实施例,一般而言,速率项不需要存在,或者可以使用与图3中相同的涉及概率的速率项,或者可以使用另一个速率项。此外或可替代地,可以使用其它项,例如复杂性等。
4.步骤630:重新计算每个bin的量化电平:
如果N>2,则
其中,|B
可以看出,步骤630与上述步骤330的不同之处在于,将最高量化电平和最低量化电平分别固定到c
5.步骤640:根据重新计算的量化电平,重新计算拉格朗日成本函数,并且重复步骤3和4,直到成本函数J的减少量小于阈值J
需要说明的是,在步骤650和350中应用的迭代停止条件(即停止改进的条件是拉格朗日阈值)仅是示例性的。这种条件的优点是迭代次数适应收敛速度。还可以使用其它终止条件。例如,迭代可以在预定(预设)次数的迭代之后停止。在需要保持低/限制复杂性的情况下,这种条件可能是有利的。其它条件标准也是可能的。
6步骤660:计算N–1个量化器判决阈值:
步骤660与步骤360的不同之处在于,适应不同的成本函数。可以看出,在本示例中,第一项
修改后的量化器可能比图3所示设计的量化器具有更准确的神经网络操作。这主要是因为以下事实:尤其是对于少量N个量化电平(例如8个或以下),由神经网络解决的实际任务的峰值准确性(例如峰值最小平均准确率(minimum average precision,mAP))和最小均方量化误差(minimum mean square quantization error,MSQR)在使用一组相同的最大和/或最小截取值时不能同时实现。换句话说,使MSQR最小化的最小/最大截取值与优化mAP的截取值不同。
下面提供了一个示例,说明了为什么需要将外层量化电平固定到c
需要说明的是,图6是详细的示例,可能包括多次迭代。然而,本发明可以改进在执行一个修改步骤时已经存在的初始量化器,如结合图5所示。
一般而言,图5的方法还可以包括以下步骤:将量化电平计算为分配给该电平的数据值的预定义函数。预定义函数可以是分配给所述电平的数据值的平均值。平均值提供了简单计算,同时也提供了数据值的公平表示。然而,也有一些替代方案可以代替平均值,例如加权平均值、中间值或任何其它函数。
在一些实施例中,成本函数包括失真和速率的线性组合。该速率由表示相应的初步量化电平的码字的码字长度表示,表示至少两个相应初步量化电平的码字具有相互不同的长度。这与上文结合图6描述的示例相对应。这种方法的优点之一是在优化过程中同时考虑可变长度编码和失真(而不是固定VLC或根据固定码字分配单独设计VLC)。这种方法会提高神经网络的准确性,并且有助于实现更高的编码效率。另一个可能的优点在于,通过使用已知码字长度而不是计算概率,不需要生成熵编码的码流速率进行概率计算,也就是说,码字大小可以简单地求和。
但是,可以使用不同的成本函数。例如,可以使用包括(表示)失真和复杂性的成本函数,或者使用如上所述的其它成本函数。码字可以具有固定的长度,因此不需要考虑速率,或者可以通过另一种形式考虑速率。
还需要说明的是,对于一些特征图,提供1比特量化可能是有利的,对于该量化,有两个码字“0”和“1”,因此长度都是1个比特。在这种情况下,如果存在两个不可修改量化电平,则这些电平是最终电平,因此不需要修改。但是,可以存在一个可修改量化电平和一个不可修改量化电平。如果只有一个不可修改量化电平,则对于1比特量化情况,可以根据成本函数确定另一个电平,而不考虑码字长度。
该方法还可以包括以下步骤:确定成对修改后的相邻量化电平之间的判决阈值,其中,两个修改后的相邻量化电平之间的阈值是根据两个修改后的相邻量化电平和表示相应的两个修改后的相邻量化电平的码字长度确定的。在步骤360和660中可以看到确定判决阈值的示例。然而,本发明并不限于通过这种方式确定阈值。原则上,可以确定阈值位于计算为两个修改后(包括可修改和可能不可修改)的相邻量化电平之间的平均值的bin的中间。平均值可以加权或通过其它方式修改。阈值也可以通过不同的方式计算。
为了更好的解释,这里称为可修改量化电平和不可修改量化电平。这两种电平构成量化器的修改后的量化电平的一部分,可以称为量化器的一组量化电平。一般而言,可修改量化电平是第一类电平,在量化器设计过程中可以通过进行某种优化来修改。不可修改量化电平是在量化器设计过程中不可修改(即被固定)的第二类电平。
可以在图6的示例中看到,上述方法可以迭代地执行。根据基于图5的一个实施例,获取510初步量化电平和确定525修改后的量化电平的步骤迭代K次,K大于1。K次迭代中的第j次迭代包括:(i)获取510与通过第(j–1)次迭代确定的修改后的量化电平对应的初步量化电平,(ii)确定525修改后的量化电平包括至少一个不可修改量化电平,以及根据成本函数修改通过第(j–1)次迭代得到的至少一个可修改量化电平。
通过迭代,可以获得更高的准确性。通过设置/限制迭代的次数,可以控制准确性和复杂性。
在第一次迭代之前,在一些示例性实现方式中,初步量化电平是均匀量化电平。但是,本发明并不限于这种初始化。一般而言,通过将量化器初始化为针对数据设计的量化器,可以实现更好的性能,其中,所述数据通过与训练数据更相似的方式分布。因此,可以定期更新不同训练数据的量化器设计,在这种情况下,初始量化器可以对应于最新设计的量化器。然而,从均匀量化器开始可以提供一个简单的初始猜测和良好的改进基础。
迭代方法可以包括以下步骤:当以下两个条件中的至少一个适用时,在K次迭代之后停止迭代:(i)第K次迭代中的成本函数的值小于第一阈值,(ii)第(K–1)次迭代中的成本函数的值与第K次迭代中的成本函数的值之差小于第二阈值。只使用条件(i)或只使用条件(ii)的实施例(例如步骤350、650)也是可能的。这些条件(规则)取决于当前迭代对改进的质量和/或贡献,这能够调整方法以实现所需的质量/复杂性。
判断是否要调整(可修改)量化电平可能是有利的。根据可以基于任一上述实施例和示例性实现方式的一个示例性实施例,该方法还包括以下步骤:计算修改后的量化电平和修改之前的对应量化电平之间的调整距离。这可以在每次迭代中执行,或者在终止迭代之后执行,或者在预定次数的迭代之后执行。然后,该方法可以包括以下步骤:对于每个修改后的可修改量化电平,根据调整距离使用所述修改后的量化电平或修改之前的量化电平,调整修改后的量化电平。
例如,可以将修改后的量化电平和原始量化电平之间计算的调整距离与阈值进行比较,如果距离小于阈值,则使用修改;否则不使用修改。这里的“使用”是指生成调整后的量化电平,包括:(i)不可修改量化电平(ii)每个可修改量化电平对应的初步(或初始)量化电平或修改后的量化电平,取决于调整距离。
本文中描述的量化器设计可以提供分布式神经网络的高效操作。例如,在一个实施例中,用于设计量化器的方法应用于神经网络的数据。在一个实施例中,数据值是:(i)由神经网络的一层输出的特征图的值,和/或(ii)神经网络的一层的权重。然而,本发明并不限于用于神经网络的这些类型的数据。可以通过这种方式对更多数据和参数进行编码。还可以对训练神经网络生成的数据进行量化,这些数据在神经网络操作的情况下包括上述特征图和权重。另外或可替代地,神经网络内后向的学习数据可以通过修改后的量化器设计进行译码/量化。该方法可以很好地适用于在神经网络已经训练之后量化神经网络的特征图,即训练后量化。换句话说,不需要重新训练神经网络(的权重)。然而,对这类方法没有限制,一般而言,本文中描述的方法也可以与重新训练一起使用。
图4示出了一种将用于神经网络的数据编码到码流中的方法。所述方法包括以下步骤:所述神经网络(包括层420和480)的至少一层420生成数据值。然后,所述方法根据任一上述示例,基于预定(训练)数据值和/或作为获取到的数据值的生成数据值修改量化器435的量化电平。换句话说,修改后的量化器可以根据实际要使用量化器进行编码的数据或根据一些其它预定(训练)数据来设计。这里的预定可以通过任何方式执行。训练数据可以从一些代表性源获取、从存储器中读取,或者从另一个设备获取,等等。所述方法还可以包括以下步骤:将所述生成数据值量化435到修改后的量化电平,以及将表示量化数据的码字放入438、439码流中。
在这里,术语“码流”是指可以用于传输450和/或存储或缓冲等的码流。在传输之前,码流可以进行进一步的封包,包括编码和调制,以及可能的更多发射器操作,取决于传输编码数据所在的介质。这里的预定数据是指在量化器设计中使用的训练数据。它不是训练神经网络的数据,而是调整(设计)量化器使用的统计信息的数据。
量化435能够减少需要向码流指示的数据量,以便实现系统的目的(例如神经网络处理)。通过进行熵编码439可以实现进一步减少。码字的长度可以与量化器设计同时设计,也可以单独设计。
根据一个实施例(与任一上述实施例兼容),所述方法还包括以下步骤:将修改后的量化电平的指示放入540码流中。这在图5中示为在步骤510至530中设计量化器之后执行的步骤。
将指示放入码流中可能是有利的,因为能够更新(例如编码到码流中的)特定输入数据的量化器。解码器不需要有预先存储的量化器。需要说明的是,该指示可以直接指示整个量化器,例如通过传输量化电平和/或能够在解码器侧推导反量化器的其它参数。
图4示出了在协作智能应用中与神经网络一起使用时的轻量级压缩系统。系统的输入是输入数据,可以是图像、视频或数据的其它数值表示。神经网络包括层420、480,它们实现卷积、批归一化操作和激活函数等操作。划分神经网络,使得初始部分层420在移动或边缘设备等设备410上执行,其余层480在云或计算设备或平台490等不同设备上执行。初始部分层420中的最后一层输出包括特征图值的特征图。将特征图值输入到截取过程430,其中,每个值截取在[c
量化器可以包括通过图5或图6的修改后的熵约束标量量化器设计过程产生的参数。将由量化过程435输出的量化器索引输入到二值化过程438,该过程将每个输入量化器索引映射到包括一串(一系列)比特(一个或多个比特)的码字。熵编码过程439将码字序列压缩为码流。码流可以存储在文件中,或者通过传输介质450发送给另一个平台,例如执行神经网络的其余层480的云计算设备490。在接收到码流时,熵解码过程473对码流进行解码并输出码字序列。将码字输入到反二值化过程474,该过程执行在在二值化过程中执行的映射的逆过程,以输出量化器索引。量化器索引序列通过包括反量化器的反量化过程470,并且还可以包括逆缩放和/或偏移操作,它们一起执行量化过程映射的逆过程,以输出量化器电平或表示重建后的特征图的缩放和偏移量化器电平。
将重建后的特征图输入到神经网络的其余层480,这些层根据神经网络的目的产生输出数据。该输出可以包括数据,例如分类索引、对象检测坐标和元数据、像素分割数据、重建图像和视频、时间序列预测值和其它数据预测值。可以将部分或全部输出数据发回执行第一部分神经网络层的设备或其它设备。修改后的量化也可以用于对这些数据进行编码。
图4的截取过程430截取或钳制其输入值,以包含在范围[c
值c
图2示出了包括量化器的量化过程435。给定输入值x,量化器将其与一组量化器判决阈值t
量化过程435还可以包括偏移和缩放操作。对于输入到量化过程的值x
二值化过程438将量化器索引映射到码字。截断一元二值化方案就是这种映射的一个示例。对于具有四个量化器电平的量化器,量化器索引{0,1,2,3}可以分别映射到二进制码字串{0,10,110,111}。对于输入到二值化过程的给定量化器索引,输出对应的码字。
熵编码过程439压缩码字序列并输出码流。熵编码器的一个示例是基于上下文的自适应二进制算术编码(context-adaptive binary arithmetic coding,CABAC),其中,一个上下文可以分配给二进制码字串的每个比特位置。如果码字集是{0,10,110,111},则可以使用三个上下文,因为码字的长度最多可以为3个比特。也可以使用较少的上下文,例如所有比特位置使用一个上下文。但是,本发明并不限于CABAC。可以使用任何其它类型的熵编码,例如基于上下文的自适应变长编码(context-adaptive variable length-coding,CAVLC),或者甚至可以使用不基于上下文自适应的熵编码。
检索或接收可以存储在存储器中、由计算机进一步处理或通过传输介质450发送的码流,并且输入到熵解码过程473,该过程反转由熵编码器执行的过程。熵解码器输出的码字与输入到熵编码器的码字相同,即熵编码和解码过程是无损的。
将熵解码的码字输入到反二值化过程474,该过程通过反转二值化过程中指定的映射来输出量化器索引。由反二值化过程输出的量化器索引与输入到二值化过程438的量化器索引相同。
然后,将量化器索引输入到反量化过程470,该过程输出对应于输入量化索引的量化电平。在本实施例中,反量化过程中使用的量化器判决阈值和量化电平与量化过程中使用的相同。可以发送、固定设置或部分发送/部分从编码器和解码器侧可用的数据中推导出量化器判决阈值和量化电平。
如果量化过程435包括缩放和偏移操作,并且如果在量化过程中,偏移值是-c
在本实施例中,量化电平到量化索引的映射是量化过程中对应映射的逆过程。反量化过程输出的量化电平对应于重建后的特征图值。然后,将重建后的特征图值输入到其余神经网络层,这些层输出由神经网络生成的最终输出数据。
总之,根据一个实施例,提供了一种从通过任一上述方法进行编码的码流中解码出用于神经网络的数据的方法。方法如图5所示。解码方法502包括以下步骤:从码流中获取550修改后的量化电平的指示。相应地,在解码器侧设置555反量化器,这表示根据指示推导在反量化中使用的量化电平并在使用中设置。此外,所述方法包括:根据获取到的修改后的量化电平从码流的码字中获取558用于神经网络的数据;通过神经网络的至少一层处理获取到的用于神经网络的数据。当神经网络的各层不直接连接时,这种方法可以有助于使用神经网络特征。量化器的指示可以使量化器适应编码器和解码器。
上述技术方案通常适用于量化器设计过程。量化器在编码器和解码器中都使用,但是在一些情况下,量化器可以在神经网络操作之前设计。在一些情况下,定义量化器如何工作的参数可以在码流中指示给量化器,如上所述(参见步骤540)。
总之,本发明一些实施例涉及量化器设计,即根据要量化的一组预定样本确定量化器电平。量化器设计可以实现为一种方法,也可以实现为一种设备,例如,包括用于执行上述步骤的相应模块的电路。此外,本发明提供了一种编码器和一种解码器,它们在神经网络中等使用设计的量化器和对应的方法。神经网络可以是,例如用于压缩视频或音频信号或其它类型信号的神经网络。然而,本发明并不限于此,而且量化器可以与任何神经网络一起使用,例如作为分类器等。本发明还提供了一种编码器,其实施量化设计以实现自适应量化器,该自适应量化器可以重新训练以改变输入数据。量化器设计、量化、编码和解码可以实现为程序或集成电路。
然而,作为上述量化器设计的一部分的量化器的修改也可以应用于解码器。即使在解码器侧通常不执行使用训练数据的量化设计,进行量化器修改也可能是有利的,如下所述。
在这种情况下,编码器的量化器可以是任何已知的量化器。解码器还可以包括已知的反量化器,可能与编码器量化器相反。然而,解码器还从码流接收一列固定的补充量化电平。在解码器中的反量化过程中,将重建值与列表中包含的固定(补充)量化电平进行比较。如果重建值和固定(补充)量化电平之间的失真(调整)度量小于可以预定、计算或从码流中解码出的阈值,则将重建值调整为等于固定(补充)量化电平,以使失真(调整)度量最小化。在传统的视频或图像压缩方案中,人们通常不希望解码器改变重建值,因为编码器中的重建值和解码器中的重建值之间会存在不匹配。然而,对于神经网络应用,最终目标是使神经网络的输出准确性最大化,而且由于其非线性性质,增加重建误差可能非常有用,而在解码器侧调整量化电平会增加重建误差。例如,如果编码器的量化器没有将最小和/或最大量化电平固定到c
根据一个实施例,提供了一种从码流中解码出用于神经网络的数据的方法。方法503的一个特定示例如图5所示。所述方法包括步骤560:获取原始量化电平以量化所述数据,并且获取与相应的一个或多个原始量化电平对应的一个或多个补充量化电平。这里,可以通过提供最小和/或最大和/或零电平作为补充量化电平或通过任何其它预定义的约定等方式隐式给出对应关系。可替代地,可以通过将补充量化电平与原始量化电平进行比较并找到最接近的(最相似的)量化电平来确定对应关系。例如,每个原始电平都可以相对于每个补充电平来衡量(与之进行比较)。但是,这可能不是必要的,而且可以仅对一部分电平执行比较。
方法503还包括:计算570原始量化电平和对应的补充量化电平之间的调整距离。调整距离可以是绝对差值或其它距离度量。方法503还包括:对于每个修改后的量化电平,根据调整距离使用原始量化电平或对应的补充量化电平,确定575修改后的量化电平。换句话说,修改后的量化电平的数量可以与原始量化电平的数量相同,而且相应的修改后的量化电平和原始量化电平之间可以存在一一对应关系。然后,将每个修改后的电平设置为对应的原始电平或其中一个补充量化电平。一般而言,补充量化电平可以是一个或多个额外量化电平的列表,然后根据使用成本函数的一些优化或简单地根据如上所述的差值来确定对应关系。需要说明的是,从上述示例中可以明显看出,“对应关系”并不(一定)表示相同,而是表示成对补充量化电平和原始量化电平之间存在一种关系。这并不表示每个原始量化电平都有对应的补充量化电平。但是,每个补充电平都有对应的原始电平。这是合理的,以避免原始量化电平和补充量化电平之间的配对中的任何排列。
方法503还包括:根据获取到的修改后的量化电平,从码流的码字中获取590用于神经网络的数据。换句话说,执行反量化(重建)。如果执行调整以向神经网络提供数据,则所述方法还可以包括:通过神经网络的至少一层处理获取到的用于神经网络的数据。
例如,如果补充量化电平类似于前面论述的最小值和最大值,则可以恢复量化数据的动态范围。如果没有这种恢复,原始量化电平可能没有足够的动态范围来满足神经网络其余部分的性能,如上文结合量化器设计所述。
术语“修改后的量化电平”也可以使用术语“调整后的量化电平”替代,因为修改可以看作是对原始量化电平的调整。
在一种示例性实现中,一个或多个补充量化电平包括所有较低数据值截取到的最小截取值、所有较高数据值截取到的最大截取值、零电平中的至少一个。这类补充电平的优点之一在于,它们可以恢复动态范围,或者可以恢复“重要”值(例如0值或边缘值),以馈送到神经网络的其余部分。
例如,调整距离包括原始量化电平和对应的补充量化电平之间的(绝对)差值,以及可能还包括预定常数的偏移。
具体地,在一个实施例中,确定修改后的量化电平包括针对每个原始量化电平执行的以下步骤:
–计算所述原始量化电平和与原始量化电平相关联的补充量化电平之间的调整距离;
–当调整距离小于调整阈值时,将与所述原始量化电平对应的修改后的量化电平设置为补充量化电平;
–将修改后的量化电平设置为所述原始量化电平。
需要说明的是,与原始量化电平相关联的补充量化电平是通过上述对应关系获取到的。例如,可以通过找到与原始量化电平的值最相似或成本最小的补充量化电平获取到。还需要说明的是,在与调整阈值进行比较时,可以考虑调整距离的符号或方向。例如,比较还可以包括检查调整方向是正的还是负的,或者是增加还是减少,以便限制调整是增加还是减少修改后的量化电平。
具体地,从码流中解码出预定常数、调整阈值(与调整距离进行比较以决定使用原始量化电平还是对应的补充量化电路)或至少一个补充电平中的至少一个(多个或所有)。
图7示出了示例性解码器侧量化器修改。相应地,将反量化过程中的量化电平修改为包括两组量化电平。第一组
该过程中的步骤包括:
1.步骤710:提供一组原始量化电平
这些组的电平可以从码流中获取,或者这些组的电平中的一组电平(例如,一组原始电平)可以预配置等。例如,一组原始电平可以对应于均匀量化或通过设计(如结合图3或任何其它量化器所示)得到的量化电平。此外,阈值∈可以在本步骤中获取到,例如从码流中获取到,或者可以由用户或应用等在解码器侧设置。在步骤720中,将经过原始量化电平的迭代变量n初始化为0:n=0。
2.步骤730:计算一组调整距离度量
3.步骤740和750:如果J个调整距离度量值
4.在步骤770中,递增n,如果在步骤760中,n≤N-1,则跳转到步骤730(上面的步骤2)。
5.该过程的输出是一组调整后的量化电平
距离度量函数
在这个示例中,输入值是标量的,本文中设计的量化器是标量量化器。然而,本发明也适用于矢量量化器设计。例如,特征图包括可以是矢量的元素,量化器是矢量量化器。相应地,量化器电平可以是矢量。在上述距离度量中,可以使用对应的矢量l
需要说明的是,在上述示例中,上述过程迭代n次,n是原始量化电平的迭代索引。然而,通过搜索接近(通过调整距离度量测量)补充电平的原始量化电平,在补充电平的索引j上执行迭代。
在一些示例性实现方式中,如上所述,一组补充量化电平是
可替换地或另外,通过加上λ
例如,一组二进制码字串(对表示量化数据的索引进行译码,其中,量化数据可以取量化电平的值)是从码流中解码出的。图7的修改后的反量化调整过程可以用于调整量化过程中的量化电平,如上文结合编码器实施例已经提到的内容所述。
如果量化电平调整应用于解码器侧,则编码器侧的量化过程中的量化器也可以是线性或均匀量化器,这使得量化器可以通过舍入过程实现。在这种情况下,由输出量化索引的函数Q(x
Q(x
其中,N是量化电平的数量,round(·)舍入到最接近的整数(在远离零的方向上),表示+3.5舍入到4,–3.5舍入到–4(不是–3),以此类推。换句话说,中间值的舍入是为了得到具有下一个最大大小(和相同符号)的整数。
根据一个实施例,初始部分神经网络层在云或计算设备或平台490上执行,其余神经网络层在移动或边缘设备410上执行。换句话说,本发明不限于图4所示的边缘设备包括量化器以及云包括反量化器的情况。相反,另外或可替换地,量化器可以在云中使用,而反量化器可以在边缘设备中使用。一般而言,本发明不限于边缘和云设备,本文中描述的量化和反量化可以用于任何设备中。相同的设备可以包括量化器和反量化器,因为它们能够同时传输和接收压缩数据(例如,用于神经网络的数据)。
在任一上述实施例和示例中,一组固定的最终量化电平可以包括c
可以在码流中为每个特征张量指示(或解码出)一组固定的最终量化电平(修改后的量化电平)。这可以实现更精确的重建,但需要一些信令开销。可替换地,或者在配置有信令粒度的情况下,在码流中为每个特征图指示(或解码出)一组最终量化电平(这种实现方式比先前实施例消耗的比特更少,但可能会产生更高的量化误差)。
如上所述,指示一组固定的最终量化电平的粒度(例如,每个特征图或特征张量等)可以是可配置的。例如,可以通过以下步骤,根据特征图张量的面积r·c和对应于N电平量化器的比特数nbits来指示和选择粒度:如果用于指示固定的最终量化电平的比特数大于8·r·c·nbits,则每个特征图指示一组固定的最终量化电平一次。否则,为特征图中的每个张量指示。然而,本发明不限于上述方法,而是可以有更多的指示粒度,或用于决定粒度的其它判决机制。
如上所述,量化过程中使用的量化器电平可以在码流中指示,并且它们可以从码流中解码出,以便在反量化过程中使用。它们不一定必须直接用于反量化,而是可以根据上述实施例之一修改(调整),以便解码器将调整应用于一些补充量化电平。
关于在一些实施例中使用的距离度量,可以使用一个预定义的距离度量函数。预定义距离度量函数是从一组预定义距离度量函数中选择的,而且在码流中为每个特征图(或为其它部分,取决于配置或预定义的指示粒度)指示(或解码出)所选距离度量函数的索引一次。例如,距离度量函数可以从一组预定义的距离度量函数中选择,而且在码流中为每个特征图张量指示(或解码出)所选距离度量函数的索引一次。
一组补充量化电平可以是预定义的(即,不需要在码流中指示)。在另一个实施例中,预定义多组补充量化电平,而且在码流中为每个特征图指示(解码出)与本发明方法提供的反量化过程中使用的一组电平对应的索引一次。然而,也可以具有组合实施例,其中,预定义多组补充量化电平,而且在码流中为每个特征张量指示(解码出)与本发明方法提供的反量化过程中使用的一组电平对应的索引一次。
在又一个示例性实现方式中,预定义多组补充量化电平,而且在码流中为所有特征张量指示(解码出)与本发明方法提供的反量化过程中使用的一组电平对应的索引。可替换地,可以在码流中指示一组补充量化电平的元素。
可以部署上述编码器和解码器处理链的对应系统如图8所示。图8是可以使用本申请中技术的一种示例性译码系统(例如,视频、图像、音频和/或其它译码系统)的示意框图。视频译码系统10中的视频编码器20(或简称为编码器20)和视频解码器30(或简称为解码器30)是两个示例,即可以用于根据本申请中描述的各种示例执行各种技术的设备。例如,视频编码和解码可以采用神经网络,例如图4中所示的神经网络,该神经网络可以是分布式的并且可以进行上述量化和反量化以在分布式计算节点(两个或两个以上)之间传送特征图。
如图8所示,译码系统10包括源设备12,源设备12用于将编码图像数据21提供给目的地设备14等,以对经编码图像数据21进行解码。
源设备12包括编码器20,并且可以另外(即可选地)可以包括图像源16、预处理器(或预处理单元)18(例如图像预处理器18)和通信接口或通信单元22。
图像源16可以包括或者可以是任何类型的用于捕获真实世界图像的摄像机等图像捕获设备,和/或任何类型的用于生成计算机动画图像的计算机图形处理器等图像生成设备,或者任何类型的用于获取和/或提供真实世界图像、计算机生成图像(例如,屏幕内容、虚拟现实(virtual reality,VR)图像)和/或其任意组合(例如增强现实(augmentedreality,AR)图像)的其它设备。图像源可以是任何类型的存储任一上述图像的存储器(memory/storage)。
为了区分预处理器18和预处理单元18执行的处理,图像或图像数据17还可以称为原始图像或原始图像数据17。
预处理器18用于接收(原始)图像数据17并对图像数据17执行预处理,以获取预处理图像19或预处理图像数据19。预处理器18执行的预处理可以包括修剪(trimming)、颜色格式转换(例如从RGB转换为YCbCr)、调色或去噪等。可以理解的是,预处理单元18可以为可选组件。需要说明的是,预处理还可以采用使用量化器和/或反量化器的神经网络(例如在图4中)。
视频编码器20用于接收预处理图像数据19并提供经编码图像数据21。
源设备12中的通信接口22可以用于接收经编码图像数据21,并通过通信信道13将经编码图像数据21(或对经编码图像数据21进一步处理后得到的数据)发送给另一设备,例如目的地设备14或任何其它设备,以便进行存储或直接重建。
目的地设备14包括解码器30(例如视频解码器30),并且可以另外(即可选地)包括通信接口或通信单元28、后处理器32(或后处理单元32)和显示设备34。
目的地设备14中的通信接口28用于直接从源设备12或从存储设备(例如经编码图像数据存储设备)等任何其它源接收经编码图像数据21(或对经编码图像数据21进一步处理后得到的数据),并将经编码图像数据21提供给解码器30。
通信接口22和通信接口28可以用于通过源设备12和目的地设备14之间的直接通信链路(例如,直接有线或无线连接)或者通过任何类型的网络(例如,有线网络或无线网络或其任何组合,或者任何类型的私网和公网,或者其任何类型的组合)发送或接收经编码图像数据21或经编码数据13。
例如,通信接口22可以用于将经编码图像数据21封装成合适的格式(例如数据包),和/或通过任何类型的传输编码或处理方式来处理经编码图像数据,以便通过通信链路或通信网络进行传输。
例如,与通信接口22对应的通信接口28可以用于接收传输数据,并使用任何类型的对应传输解码或处理方式和/或解封装方式对传输数据进行处理,以获取经编码图像数据21。
通信接口22和通信接口28都可以配置为图8中从源设备12指向目的地设备14的通信信道13的箭头所指示的单向通信接口,或者配置为双向通信接口,并且可以用于发送和接收消息等,以建立连接、确认并交换与通信链路和/或数据传输(例如经编码图像数据传输)相关的任何其它信息,等等。解码器30用于接收经编码图像数据21并提供经解码图像数据31或经解码图像31(例如,使用基于图4的神经网络)。
目的地设备14中的后处理器32用于对经解码图像数据31(也称为经重建图像数据)(例如经解码图像31)进行后处理,以获取后处理图像数据33(例如后处理图像33)。后处理单元32执行的后处理可以包括颜色格式转换(例如从YCbCr转换为RGB)、调色、修剪或重采样,或者任何其它处理,以便提供经解码图像数据31由显示设备34等显示,等等。
目的地设备14中的显示设备34用于接收后处理图像数据33,以便向用户或观看者等显示图像。显示设备34可以是或可以包括任何类型的用于表示经重建图像的显示器,例如集成或外部显示器或显示屏。例如,显示器可以包括液晶显示器(liquid crystaldisplay,LCD)、有机发光二极管(organic light emitting diode,OLED)显示器、等离子显示器、投影仪、微型LED显示器、硅基液晶(liquid crystal on silicon,LCoS)显示器、数字光处理器(digital light processor,DLP)或任何类型的其它显示器。
虽然图8示出了源设备12和目的地设备14作为单独的设备,但是设备的实施例还可以同时包括两种设备或同时包括这两种设备的功能,即源设备12或对应的功能以及目的地设备14或对应的功能。在这些实施例中,源设备12或对应的功能以及目的地设备14或对应的功能可以使用相同的硬件和/或软件或通过单独的硬件和/或软件或其任意组合来实现。
本领域技术人员基于描述明显可知,图8所示的源设备12和/或目的地设备14内的不同单元或功能的存在和(精确)功能划分可能根据实际设备和应用有所不同。
编码器20(例如视频编码器20)或解码器30(例如视频解码器30)或者编码器20和解码器30可以通过图16所示的处理电路来实现。该处理电路包括一个或多个微处理器、一个或多个数字信号处理器(digital signal processor,DSP)、一个或多个专用集成电路(application-specific integrated circuit,ASIC)、一个或多个现场可编程门阵列(field-programmable gate array,FPGA)、一个或多个离散逻辑、一个或多个硬件、一个或多个视频译码专用处理器或其任意组合。编码器20可以通过处理电路46实现,以体现包括神经网络(例图4所示的神经网络或其部分)的各种模块。解码器30可以通过处理电路46实现,以体现结合图4描述的各种模块和/或本文中描述的任何其它解码器系统或子系统。处理电路可以用于执行下文论述的各种操作。如果这些技术部分地在软件中实现,则一种设备可以将该软件的指令存储在合适的非瞬时性计算机可读存储介质中,并且可以通过一个或多个处理器在硬件中执行这些指令,以执行本发明中的技术。视频编码器20或视频解码器30可以作为组合编码器/解码器(编解码器)的一部分集成在单个设备中,例如,如图9所示。
源设备12和目的地设备14可以包括多种设备中的任一种,包括任何类型的手持设备或固定设备,例如,笔记本或膝上型电脑、手机、智能手机、平板或平板电脑、摄像机、台式电脑、机顶盒、电视、显示设备、数字媒体播放器、视频游戏机、视频流设备(例如内容业务服务器或内容分发服务器)、广播接收器设备、广播发射器设备等,并且可以不使用或使用任何类型的操作系统。在一些情况下,源设备12和目的地设备14可以配备用于无线通信。因此,源设备12和目的地设备14可以是无线通信设备。
在一些情况下,图8所示的视频译码系统10仅仅是示例性的,本申请中的技术可以适用于不一定包括编码设备与解码设备之间的任何数据通信的视频译码设置(例如,视频编码或视频解码)。在其它示例中,数据从本地存储器检索、通过网络流式传输,等等。视频编码设备可以对数据进行编码并且将数据存储到存储器中,和/或视频解码设备可以从存储器检索数据并且对数据进行解码。在一些示例中,编码和解码由相互不通信而是仅仅将数据编码到存储器和/或从存储器检索数据并对数据进行解码的设备执行。
为便于描述,本文(例如)参考由ITU-T视频编码专家组(Video Coding ExpertsGroup,VCEG)和ISO/IEC运动图像专家组(Motion Picture Experts Group,MPEG)的视频编码联合协作团队(Joint Collaboration Team on Video Coding,JCT-VC)开发的高效视频编码(High-Efficiency Video Coding,HEVC)或下一代视频编码标准即通用视频编码(Versatile Video Coding,VVC)的参考软件描述本发明实施例。本领域普通技术人员将理解,本发明实施例不限于HEVC或VVC,而是针对它们的下一代和/或任何其他编解码器。
图10为本发明一个实施例提供的视频译码设备1000的示意图。视频译码设备1000适用于实现本文中描述的公开实施例。在一个实施例中,视频译码设备1000可以是解码器(例如图8中的视频解码器30)或编码器(例如图8中的视频编码器20)。
视频译码设备1000包括用于接收数据的入端口1010(或输入端口1010)和接收单元(Rx)1020,用于处理所述数据的处理器、逻辑单元或中央处理单元(central processingunit,CPU)1030,用于发送所述数据的发送单元(Tx)1040和出端口1050(或输出端口1050)以及用于存储所述数据的存储器1060。视频译码设备1000还可以包括与入端口1010、接收单元1020、发送单元1040和出端口1050耦合的光电(optical-to-electrical,OE)组件和电光(electrical-to-optical,EO)组件,用作光信号或电信号的出口或入口。
处理器1030通过硬件和软件实现。处理器1030可以实现为一个或多个CPU芯片、一个或多个核(例如多核处理器)、一个或多个FPGA、一个或多个ASIC和一个或多个DSP。处理器1030与入端口1010、接收器单元1020、发送单元1040、出端口1050和存储器1060通信。处理器1030包括译码模块1070。译码模块1070实现上文描述的公开实施例。例如,译码模块1070执行、处理、准备或提供各种译码操作。因此,将译码模块1070包含在内为视频译码设备1000的功能提供了实质性的改进,并且影响了视频译码设备1000到不同状态的转换。可选地,以存储在存储器1060中并由处理器1030执行的指令来实现译码模块1070。
存储器1060可以包括一个或多个磁盘、一个或多个磁带机以及一个或多个固态硬盘,并且可以用作溢出数据存储设备,以在选择程序来执行时存储这些程序以及存储在执行程序过程中读取的指令和数据。例如,存储器1060可以是易失性和/或非易失性的,并且可以是只读存储器(read-only memory,ROM)、随机存取存储器(random access memory,RAM)、三态内容寻址存储器(ternary content-addressable memory,TCAM)和/或静态随机存取存储器(static random-access memory,SRAM)。
图11为一个示例性实施例提供的装置800的简化框图。装置800可以用作图8中的源设备12和/或目的地设备14。
装置1100中的处理器1102可以是中央处理器。可选地,处理器1102可以是现有的或今后将开发出的能够操作或处理信息的任何其它类型的设备或多个设备。虽然所公开的实现方式可以使用如图所示的处理器1102等单个处理器来实施,但使用多个处理器可以提高速度和效率。
在一种实现方式中,装置1100中的存储器1104可以是只读存储器(read onlymemory,ROM)设备或随机存取存储器(random access memory,RAM)设备。任何其它合适类型的存储设备都可以用作存储器1104。存储器1104可以包括处理器1102通过总线1112访问的代码和数据1106。存储器1104还可包括操作系统1108和应用程序1110,应用程序1110包括至少一个程序,这个程序使得处理器1102执行本文描述的方法。例如,应用程序1110可以包括应用1至应用N,还包括执行本文描述的方法的视频译码应用。
装置1100还可以包括一个或多个输出设备,例如显示器1118。在一个示例中,显示器1118可以是将显示器与触敏元件组合的触敏显示器,该触敏元件能够用于感测触摸输入。显示器1118可以通过总线1112耦合到处理器1102。
虽然装置1100中的总线1112在本文中描述为单个总线,但是总线1112可以包括多个总线。此外,辅助存储器可以直接与装置1100中的其它组件耦合或可以通过网络访问,并且可以包括单个集成单元(例如一个存储卡)或多个单元(例如多个存储卡)。因此,装置1100可以通过多种配置实现。
本发明提供了适用于量化器侧的量化器修改和适用于解码器侧的量化器修改。本发明还包括对应的编码器、解码器以及其中实现的量化器和反量化器。本发明一些实施例引入了用于压缩神经网络的特征图和/或权重的轻量级编解码器。包括截取、量化、二值化和熵编码。在一些实施例中,具体方法是修改量化器或量化器设计过程,以便调整一些量化器电平,使得重建后的特征图跨越整个截取范围。这个概念可以扩展到限定一组固定(不可修改)和非固定(可修改)量化器电平,其中,固定电平在量化器设计过程中不可以改变,确保保留重要电平或重建值。解码器侧修改的反量化调整过程也可以使用一组固定和非固定量化器电平,使得如果使用传统量化器的解码重建特征图值足够接近其中一个固定量化器电平,则可以将其调整为等于最近的固定电平。另外,在速率失真优化量化器(或量化器设计)过程中,使用以比特为单位的码字长度,而不是使用从训练集中测量到的熵。
一种为输入是数据值的量化器生成量化电平的方法可以在/由上述硬件和/或软件中实现。所述方法可以包括:限定一组初始量化电平,将所述一组初始电平划分为固定和非固定量化电平子集,在由所述输入数据值跨越的空间中生成阈值,以便限定从输入空间的子集到量化电平的映射;调整非固定量化电平,以使包含在输入空间的每个子集中的输入数据和其对应的量化电平之间的失真度量最小化,同时保持一组固定量化电平是固定的。
可以重复生成阈值和调整非固定量化电平的步骤,直到满足失真条件。在一些实施例中,固定量化电平子集包括最小值,并且将小于最小值的数据值映射到最小值。例如,固定量化电平子集包括最大值,将大于最大值的数据值映射到最大值。输入数据值有利地包括从神经网络中的一层输出的特征图。另外或作为替代,输入数据值包括神经网络中的权重值。具体地,特征图值是神经网络中激活过程的输出。
根据一个实施例,提供了一种对码流进行解码的方法。所述码流包括量化索引,其中,每个量化索引映射到映射的原始量化电平,调整后的量化电平通过以下步骤生成:限定一组补充量化电平;计算每个映射的原始量化电平和所述一组补充量化电平中的元素之间的调整距离度量;如果最小调整距离度量小于阈值,则将映射的原始量化电平调整为等于与所述最小距离度量对应的补充量化电平。
例如,从码流解码出一组固定的最终量化电平。这一组固定的最终量化电平可以包括最小值,将小于最小值的数据值映射到最小值。具体地,这一组固定的最终量化电平包括最大值,将大于最大值的数据值映射到最大值。例如,量化电平表示神经网络中的特征图和/或神经网络中的权重值。神经网络中前一层的特征图可以从包括重建值的重建特征图中恢复。在一些示例性实现方式中,从重建值中恢复激活,重建值是从部分重建映射张量中获取到的。部分激活可以从重建值中恢复。
上述方法的参数可以从码流中解码出。例如,值λ可以从码流中解码出,并用于失真度量中。阈值可以从码流中解码出。上述一组固定的最终量化电平从码流中解码出。
概括地说,本发明涉及用于修改量化器的方法和装置。具体地,根据涉及一组预定输入值的失真的优化修改一组初步量化电平中的至少一个量化电平。不修改这组初步电平中的至少一个其它量化电平。不被修改(不可修改)的量化电平是最小截取值或最大截取值。上述修改可以有助于增大量化/反量化数据的动态范围。这种修改后的量化器对于在神经网络中压缩其数据(例如特征图等)是有利的。这种量化器可以提高神经网络的准确性。
- 用于深度神经网络的多底数对数量化方法及装置
- 一种用于深度神经网络高速实时量化结构和运算实现方法
- 一种神经网络权重量化方法和神经网络权重量化装置
- 用于量化浮点神经网络以获得定点神经网络的方法和设备