用于神经网络的量化的制作方法

文档序号:33151235发布日期:2023-02-03 22:54阅读:151来源:国知局
用于神经网络的量化的制作方法

1.本发明实施例大体上涉及量化领域。具体地,一些实施例涉及在人工智能尤其是神经网络的框架中使用的量化。


背景技术:

2.协作智能是跨移动云基础设施高效部署深度神经网络的几种新范式(paradigm)之一。通过例如在(移动)设备和云之间划分网络,可以分配计算工作负载,使得系统的总能量和/或时延最小化。一般而言,分配计算工作负载使得在神经网络部署中使用资源有限的设备。神经网络通常包括两层或两层以上。特征图是一层的输出。在设备之间(例如在设备和云之间)划分的神经网络中,划分位置(例如第一设备)的输出侧的特征图被压缩并传输到该神经网络的其余层(例如第二设备)。
3.传输资源通常是有限的,因此需要对传输数据进行压缩。一般而言,压缩可以是无损的(例如熵编码)或有损的(例如进行量化)。有损压缩通常提供更高的压缩比。然而,有损压缩通常是不可逆转的,即一些信息可能无法挽回地丢失。另一方面,压缩的质量会对神经网络解决实际任务的准确性产生重大影响。此外,鉴于移动设备在能耗和硬件资源方面也存在局限性,使压缩过程的复杂性最小化可能至关重要。


技术实现要素:

4.本发明涉及用于压缩在神经网络中使用的数据的方法和装置。这些数据可以包括但不限于特征(例如特征图)。
5.本发明由独立权利要求的范围限定。一些有利实施例提供在从属权利要求中。
6.具体地,本发明一些实施例涉及修改量化器的量化电平以增大重建值的动态范围。这种方法可以在神经网络等应用中提供更好的性能,例如在准确性方面。
7.根据一方面,提供了一种修改用于神经网络的量化器的量化电平的方法。所述方法包括以下步骤:获取数据值和归属于所述数据值的初步量化电平,其中,所述初步量化电平包括至少一个不可修改量化电平和至少一个可修改量化电平;确定修改后的量化电平包括所述至少一个不可修改量化电平以及根据表示所述获取到的数据值和初步量化电平之间失真的成本函数调整所述至少一个可修改量化电平而得到的至少一个电平,其中,所述至少一个不可修改量化电平包括所有较低数据值截取到的最小截取值和/或所有较高数据值截取到的最大截取值。
8.提供不可修改量化电平,尤其是对应于最小截取值或最大截取值的一个量化电平,可以提供更高的动态范围。更高的动态范围可以提高神经网络的性能,例如准确性方面的性能。
9.例如,至少存在两个不可修改量化电平,即至少所述最小截取值和所述最大截取值。
10.将最小截取值和最大截取值都用作量化电平进一步增大了动态范围。
11.另外或可替换地,存在至少两个不可修改量化电平,其中,所述至少两个不可修改量化电平中有一个值为0。
12.提供更多量化电平对网络的更多计算/其简化有意义。
13.在一种示例性实现方式中,所述方法还包括:将电平计算为分配给所述电平的数据值的预定义函数。这可以适应训练数据。
14.例如,所述预定义函数是分配给所述电平的所述数据值的平均值。
15.平均值提供了简单计算和数据值的公平表示。
16.在一个实施例中,所述成本函数包括所述失真和速率的线性组合,所述速率由表示所述相应的初步量化电平的码字的码字长度表示,表示至少两个相应的初步量化电平的码字具有相互不同的长度。
17.在优化过程中同时考虑可变长度编码和失真(而不是固定vlc或根据固定码字分配单独设计vlc)可以提高编码效率和神经网络的准确性。此外,通过使用已知码字长度而不是计算概率,不需要生成熵编码码流来计算速率来进行速率失真优化,也就是说,码字大小可以简单地求和。
18.具体地,所述方法还可以包括:确定成对修改后的相邻量化电平之间的判决阈值,其中,两个修改后的相邻量化电平之间的阈值是根据所述两个修改后的相邻量化电平和表示所述相应的两个修改后的相邻量化电平的码字长度确定的。
19.根据失真和速率确定的阈值可以提高神经网络的准确性。
20.如上所述的方法可以迭代地执行。所述获取初步量化电平和确定修改后的量化电平的步骤迭代k次,k大于1;所述k次迭代中的第j次迭代包括:获取与通过第(j

1)次迭代确定的修改后的量化电平对应的初步量化电平;确定所述修改后的量化电平包括所述至少一个不可修改量化电平,以及根据所述成本函数修改通过第(j

1)次迭代得到的所述至少一个可修改量化电平。通过迭代,可以获得更高的准确性。
21.根据一个实施例,所述迭代方法包括:在以下条件下,在所述k次迭代之后停止迭代:第k次迭代中的成本函数的值小于第一阈值时,和/或第(k

1)次迭代中的代价函数的值与第k次迭代中的代价函数的值之差小于第二阈值。通过设置迭代次数,可以高效控制准确性和复杂性。
22.在一些实现方式中,第一次迭代之前的初步量化电平是均匀量化电平。具体地,初步量化电平可以对应于均匀线性量化器。简单的初始猜测可以为改进提供良好的基础,而不会大幅增加复杂性。
23.例如,所述数据值是:由所述神经网络的一层输出的特征图的值,和/或所述神经网络的一层的权重。如上所述,神经网络的准确性可以通过增大动态范围来提高,尤其是对于少量量化电平(例如大约8个或以下)。稍微增加量化误差不会给神经网络的应用带来问题。
24.在任一上述实施例和示例中,所述方法还可以包括以下步骤:计算所述修改后的量化电平和所述修改之前的量化电平之间的调整距离;对于每个修改后的量化电平,根据所述调整距离使用所述修改后的量化电平或所述修改之前的量化电平,调整所述修改后的量化电平。
25.根据一方面,提供了一种将用于神经网络的数据编码到码流中的方法。所述方法
包括以下步骤:通过所述神经网络的至少一层生成数据值;根据任一上述实施例/示例所述的基于预定数据值和/或作为所述获取到的数据值的所述生成数据值修改用于神经网络的量化器的量化电平的方法;将所述生成数据值量化到所述修改后的量化电平;将表示所述量化数据的码字放入所述码流中。
26.所述方法还可以包括以下步骤:将所述修改后的量化电平的指示放入所述码流中。在本实施例中,解码器不需要具有预先存储的量化电平。
27.根据一方面,提供了一种从如上所述编码的码流中解码出用于神经网络的数据的方法。所述方法包括:从所述码流中获取修改后的量化电平的指示;根据所述获取到的修改后的量化电平,从所述码流的码字中获取所述用于神经网络的数据;通过所述神经网络的至少一层处理所述获取到的用于神经网络的数据。
28.如上所述,部署动态范围更高的量化电平有利于神经网络进行的进一步处理。
29.根据一方面,提供了一种从码流中解码出用于神经网络的数据的方法。所述方法包括:获取量化原始量化电平以量化所述数据;获取与所述原始量化电平中的一个或多个电平对应的一个或多个补充量化电平;计算所述原始量化电平和所述对应的补充量化电平之间的调整距离;对于每个修改后的量化电平,根据所述调整距离使用一个原始量化电平或对应的补充量化电平,确定修改后的量化电平;根据所述获取到的修改后的量化电平,从所述码流的码字中获取所述用于神经网络的数据;通过所述神经网络的至少一层处理所述获取到的用于神经网络的数据。
30.即使编码器设备与任何类型的量化器一起工作,这种方法也能够增大解码器侧的动态范围。
31.例如,在所述方法中,所述一个或多个补充量化电平包括所有较低数据值截取到的最小截取值、所有较高数据值截取到的最大截取值、零电平中的至少一个。
32.另外或可替换地,所述调整距离包括所述原始量化电平和对应的补充量化电平之间的差值以及预定常数的偏移。距离和偏移可以在不增加复杂性的情况下实现。
33.在一个示例性实施例中,所述确定修改后的量化电平包括对所述原始量化电平中的每个电平执行以下步骤:计算所述原始量化电平和与所述原始量化电平相关联的补充量化电平之间的调整距离;当所述调整距离小于调整阈值时,将与所述原始量化电平对应的修改后的量化电平设置为所述补充量化电平;否则,将修改后的量化电平设置为所述原始量化电平。通过这种阈值,较小的调整是优选的,这可以保持量化误差受到限制。
34.例如,从所述码流中解码出所述预定常数、所述调整阈值或所述补充电平中的至少一个。这样能够协调和控制编码器和解码器以及使用源数据等设置这些参数。
35.根据一方面,提供了一种计算机产品,包括用于执行上述方法的程序代码。所述计算机产品可以提供在非瞬时性介质上并且包括指令,当所述指令在一个或多个处理器上执行时,这些指令执行方法(上述方法之一)的步骤。
36.根据一方面,提供了一种修改用于神经网络的量化器的量化电平的量化器修改设备。所述量化器设备由用于执行根据任一上述方法的步骤的电路实现。
37.根据一个实施例,提供了一种将用于神经网络的数据编码到码流中的编码器。所述编码器包括:神经网络电路,用于通过所述神经网络的至少一层生成数据值;如上所述的量化器修改设备,用于根据预定数据值和/或作为获取到的数据值的所述生成数据值,修改
用于神经网络的量化器的量化电平;量化器,用于将所述生成数据值量化到所述修改后的量化电平;码流生成器,用于将表示所述量化数据的码字放入所述码流中。
38.根据一方面,提供了一种从码流中解码出用于神经网络的数据的解码器。所述解码器包括:量化调整电路,用于获取原始量化电平以量化所述数据;获取与所述原始量化电平的相应一个或多个电平对应的一个或多个补充量化电平;计算所述原始量化电平和对应的补充量化电平之间的调整距离;以及对于每个修改后的量化电平,根据所述调整距离使用一个原始量化电平或对应的补充量化电平,确定修改后的量化电平;反量化器,用于根据所述获取到的修改后的量化电平从所述码流的码字中获取所述用于神经网络的数据;神经网络电路,用于通过所述神经网络的至少一层处理所述获取到的用于神经网络的数据。
39.根据一方面,一种通过神经网络处理数据的系统。所述系统包括:如上所述的编码器,用于将用于神经网络的数据编码到码流中;包括电路的解码器设备,用于从所述码流中获取修改后的量化电平的指示;根据所述获取到的修改后的量化电平,从所述码流的码字中获取所述用于神经网络的数据;通过所述神经网络的至少一层处理所述获取到的用于神经网络的数据。如上所述,由于量化数据的动态范围增大,在分布式计算中使用神经网络可能特别有利。
40.根据一方面,所述解码器设备由云实现。神经网络可能相当复杂,因此高效量化可以在传输所需的速率和神经网络准确性之间实现良好的权衡。
41.上述装置可以在集成芯片上实现。
42.任一上述实施例和示例性实现方式可以组合在一起。
附图说明
43.下面结合附图更加详细地描述本发明实施例,其中:
44.图1是量化器q以及量化器输入和输出之间的示例性关系的示意图;
45.图2是示例性量化方法的流程图;
46.图3是示例性量化器确定(设计)方法的流程图;
47.图4是包括边缘设备和计算设备的协作系统的框图;
48.图5是应用预定义截取的修改后的量化器设计以及进行修改后的量化和反量化的解码器的方法的流程图;
49.图6是示例性修改后的量化调整过程的流程图;
50.图7是用于解码器的示例性量化器调整的流程图;
51.图8是用于实现本发明实施例的一种示例性视频译码系统的框图。
52.图9是用于实现本发明实施例的另一种示例性视频译码系统的框图。
53.图10是一种示例性编码装置或解码装置的框图。
54.图11是另一种示例性编码装置或解码装置的框图。
具体实施方式
55.在以下描述中,参考形成本发明一部分并以说明的方式示出本发明实施例的具体方面或可以使用本发明实施例的具体方面的附图。应理解,本发明实施例可以在其它方面中使用,并且可以包括附图中未描述的结构变化或逻辑变化。因此,以下详细描述不应以限
制性的意义来理解,且本发明的范围由所附权利要求书界定。
56.例如,应理解,与描述的方法有关的公开内容对于用于执行所述方法的对应设备或系统也同样适用,反之亦然。例如,如果描述一个或多个具体方法步骤,则对应的设备可以包括一个或多个单元(例如功能单元)来执行所描述的一个或多个方法步骤(例如,一个单元执行一个或多个步骤,或多个单元分别执行多个步骤中的一个或多个步骤),即使附图中未明确描述或说明这样的一个或多个单元。另一方面,例如,如果根据一个或多个单元(例如功能单元)来描述特定装置,则对应的方法可以包括一个步骤来执行一个或多个单元的功能(例如,执行所述一个或多个单元的功能的一个步骤,或各自执行所述多个单元中的一个或多个单元的功能的多个步骤),即使图中未明确描述或说明这样的一个或多个步骤。此外,应理解,除非另外明确说明,本文中描述的各种示例性实施例和/或方面的特征可以相互组合。
57.一些实施例的目的是对用于神经网络的数据进行低复杂性压缩。例如,数据可以包括特征图或在神经网络中使用的其它数据,例如权重或其它参数。在一些示例性实现方式中,提供了压缩,从而能够量化到少量量化电平(例如三个、四个等),同时保持(可能已经训练过的)神经网络的整体准确性。一些实施例还可以解决使用现有方法设计的(反)量化器以次优的方式重建一些特征图值时引起的神经网络准确性降低的问题。根据协同智能范式(collaborative intelligence paradigm),移动设备或边缘设备如果需要反馈,可以从云获取。但是,需要说明的是,本发明并不限于包括云在内的协作网络的框架。本发明可以用于任何分布式神经网络系统。此外,本发明也可以用于在神经网络中存储特征图,而这些神经网络不一定是分布式的。
58.下面概述了一些使用的技术术语。
59.神经网络通常包括至少一个输入层和至少一个输出层。神经网络的一层中可以有一个或多个神经网络节点,每个神经网络节点根据激活函数的一个或多个输入计算该激活函数。通常情况下,激活函数是非线性的。深度神经网络(deep neural network,dnn)是一种神经网络,它包括一个或多个隐藏层。特征图是神经网络的一层(输入层、输出层或隐藏层)的输出。特征图可以包括一个或多个特征。特征图值是特征图中元素的值,其中,特征图可以包括多个元素(特征)。激活是由神经网络的激活函数输出的特征图值。需要说明的是,特征图也可以是神经网络层的其它部分(或函数或过程)(例如卷积或批归一化,或其它可能的操作)的输出。
60.协作智能是一种范式,其中,神经网络的处理分布在两个或两个以上不同的计算节点(例如设备,但一般是任何功能定义的节点)之间。这里,术语“节点”并不是指上述神经网络节点。相反,这里的(计算)节点指的是实现神经网络各部分的(物理上或至少逻辑上)独立的设备/模块。这些设备可以是不同的服务器、不同的终端用户设备、服务器和/或用户设备和/或云和/或处理器的组合,等等。换句话说,可以认为计算节点是属于同一神经网络且相互通信以在神经网络内/为神经网络传送经译码数据的节点。例如,为了能够执行复杂计算,一个或多个层可以在第一设备上执行,一个或多个层可以在另一个设备上执行。但是,分布也可以更精细,单层可以在多个设备上执行。在本发明中,术语“多个”是指两个或两个以上。在一些现有技术方案中,神经网络功能的一部分在设备(用户设备或边缘设备等)或多个这样的设备中执行,然后将输出(特征图)传递给云。云是位于设备外部的处理系
统或计算系统的集合,该设备运行神经网络的一部分。
61.在一些实施例中,提供了量化,这有利于将神经网络数据传递到(可能是分布式的)网络中/内。量化由量化器执行。术语“量化器”可以是指用于执行量化的实际设备(处理设备)或电路。然而,术语“量化”也可以用于表示执行量化的功能(逻辑)模块,该功能块可以在任何硬件或软件基础设施中实现。
62.图1示出了具有输入值x和输出值的量化器q。量化器可以看作是非线性函数,该函数在输入为x时输出对应量化电平的值。量化电平是一组值,通过其中一个值近似量化器的输入。换句话说,量化器在一定输入下的输出是对应的量化电平。根据预定义规则确定一个输入对应的量化电平。例如,一个输入值对应的输出是最接近输入值的量化电平。然而,量化器可以具有其它规则(例如,使用不一定位于两个量化电平之间的判决阈值)和各种不同的距离度量。量化器的输出是量化后的输入值,可以使用量化索引表示。量化索引是量化电平唯一映射到的值或符号。换句话说,量化电平(分别)与量化索引一一关联。量化索引可以用于传输(译码)量化后的输出值。
63.输入值x和输出值之间的示例性关联关系在图1的示例性图表中示出。图1示出了m(这里,m为5)个可能的量化电平(输出值),其中包括量化电平和任何输入值都映射到m个量化电平中的一个电平。本示例中的映射由包括tq、t
q+1
和t
q+2
的m

1个判决阈值给出。具体地,在阈值t
q+1
和t
q+2
之间的任何输入值x都量化到量化电平换句话说,存在m个量化电平和m

1个判决阈值,每个判决阈值都位于两个相邻量化电平之间。因此,位于两个相邻量化电平值之间的区间内的每个输入值根据位于两个相邻量化电平之间的阈值量化到两个相邻量化电平中的一个电平。具体地,当输入值小于阈值时,取两个相邻量化电平中的较低电平作为量化值,否则,取两个相邻量化电平中的较高电平。
64.为了实现输入值和量化值之间的这种赋值,通常假设输入值具有有限的输入值范围。量化(输出)值的取值范围由量化电平中的最小值和最大值给出,即在最低和最高量化电平之间。
65.为了提供有限(受限)取值范围给输入值,可以截取(clip)量化之前的输入值。然后,可以通过使量化器失真度量最小化来选择量化电平。例如,量化器失真度量可以是输入值和相应量化后的输入值(即输出值)之间的最小平方误差,或任何其它失真度量,或通常是包括失真项的成本函数。
66.根据某个量化器失真度量选择量化电平产生的量化电平在阈值以内,这些阈值将输入值的范围划分为量化器bin。术语“量化器bin”是指属于量化电平的两个相邻阈值(t
q+1
、t
q+2
)之间的区间,也就是映射到所述量化电平的所有值所在的区间。这时,bin可以由数字(例如索引)或二进制符号等表示。
67.量化后的输入值可以被传输或存储,然后进一步由神经网络(例如由以下层)使用。从量化索引或二进制符号中恢复值的过程称为重建或反量化。相应地,给定一个索引(或二进制符号),重建值对应于与索引(或二进制符号)相关联的量化电平。需要说明的是,在一些量化器中,在映射到量化电平之前进行缩放和/或偏移。相应地,在这种情况下,重建值会通过进行包括逆偏移和缩减的逆操作得到。
68.例如,电平可以由索引3表示(唯一地与之相关联)。索引3可以译码为bin“11”。可以直接将电平与二进制符号相关联,而不提供索引。在本文的描述中,当引用索引时,可以理解,索引可以直接使用二进制符号替代,反之亦然。二进制符号可以是具有相同(固定长度)或具有可变长度(对应于熵编码等)的二进制字(码字)。量化电平和索引或量化电平和二进制符号之间的关联关系是唯一且预定义的。
69.当将截取的输入值量化到非常少的量化电平时,已知的量化器通常会导致神经网络失去一定准确性,因为可用的重建值大于最小截取值或小于最大截取值;或者因为要量化的一部分特征图值不具有对应相等(或基本上接近)的量化电平。一些技术将特征图值设置为图像,然后使用传统的图像压缩技术。这些技术的缺点在于,它们会消耗设备上的大量功率和硬件资源,并且当应用于设置的特征图值时,它们的压缩效率很低。
70.图2示出了实现量化器的已知量化过程的一个示例。在步骤210中,将一系列输入值xm(其中,m∈{0,1,

m-1})提供给量化器。量化器由量化电平(其中,n∈{0,1,

n-1})和量化判决阈值tn(其中,n∈{1,

n-1})限定。在开始量化输入值xm(其中,m∈{0,1,...m-1})之前,在步骤215中,将m初始化(设置)为0。对于m的每个值(m在步骤280中递增),量化其中一个输入值。具体地,在初始化215之后,在每个步骤m中,量化器将相应的第m个值xm与一组量化器判决阈值tn(其中,n∈{1,...n-1})进行比较,并且将每个xm映射到量化电平(其中,n∈{0,1,...n-1}),其中,该量化电平对应于x<tn(其中,n∈{1,...n-1})时的最小值(n-1)以及对应于x不小于任一tn时的(n-1)。因此,将一组实数划分为n个量化器bin,其中,量化器判决阈值是bin的边界,每个bin包括量化电平位于相关bin内的任一xm映射到该量化电平。每个bin都分配有一组符号sn(其中,n∈{0,1,...n-1})中的量化索引,当输入值xm映射到量化电平时,量化过程输出符号sn。用于量化索引的符号可以是整数,例如,sn=n(其中,n∈{0,1,...n-1}),对应于量化器bin的索引。
71.具体地,当查看图2时,在步骤220中,检查输入值xm是否小于最小阈值t1。如果是,则在步骤225中,将输入值xm量化到最小量化电平另一方面,如果在步骤220中,输入值xm不小于最小阈值t1,则在步骤230中,检查输入值xm是否大于或等于最大阈值t
n-1
。如果是,则在步骤235中,将输入值xm量化到最大量化电平如果步骤230的结果为否,则在步骤240中,初始化循环处理n∈{1,...n-1},其中,n设置为2。在循环中,对于每个n,在步骤250中,检查输入值xm是否小于第n个判决阈值tn。如果是,在步骤260中,将输入值xm量化到对应的量化电平否则,在步骤255中,通过将n增加1来执行下一次迭代。在执行步骤225、235和260中的一个步骤之后,将输入值xm量化到其中一个可能的量化电平(其中,n∈{0,1,...n-1})。
72.然后,在步骤270中,如果有另一个输入值要量化,则该方法增加m(这对应于选择另一个输入值进行量化),并且从步骤220开始执行,以步骤225、235和260中的一个步骤结束。在量化完所有输入值xm(其中,m∈{0,1,...m-1})之后,在步骤290中,将对应符号sn分配给量化值。量化器bin(由相应的量化器电平表示)和符号sn之间存在唯一的关联关系。符号sn可以是任何类型的索引或符号,例如固定或可变长度的二进制码字。
73.图3示出了一种示例性熵约束标量量化器设计过程。术语“量化器设计”是指推导量化电平(其中,n∈{0,1,...n-1})和量化器判决阈值tn(其中,n∈{1,...n-1})。一般而言,最简单的量化器之一是均匀量化器,它将输入值的取值范围划分为相同大小的bin。然
而,只有当输入值均匀分布在取值范围内时,这种量化器才是高效的。否则,其它方法可以提供更好的结果。为了设计更好的量化器,考虑了数据分布。具体地,量化器可以通过为某一训练数据集优化量化电平和/或阈值来设计。需要说明的是,这里的术语“训练数据”并不是指神经网络的训练。相反,这里的训练数据是指一组输入值,这些输入值用于优化量化器,以便使某一成本函数最小化。这可以是失真函数等,例如均方误差,即输入值和其对应量化后的输入值(量化器的输出)之间的量化误差的平均值。然而,可以使用任何其它失真度量,或者通常使用任何其它成本函数,其可以包括(除了失真之外或替代失真)其它项,例如速率或复杂性等。需要说明的是,训练集可以是仅用于训练的集合,然后将基于该训练集的量化器设计应用于其它数据。或者,训练集可以对应于后续由量化器量化的数据,量化器参数可以指示给执行反量化的对端。一些混合技术方案也是可能的,它们进行重新训练,表示定期执行量化器设计以使量化器适应可能具有变化特征(分布)的输入数据。
74.例如,图3中的量化器设计基于成本函数,包括拉格朗日乘子,以对成本函数中的速率部分和失真部分进行加权。换句话说,图3中的量化器设计是基于速率失真的量化器设计。
75.量化器的设计包括以下步骤,以便输出量化电平(其中,n∈{0,1,

n-1})和量化器判决阈值tn(其中,n∈{1,

n-1})。首先,在步骤310中,获取量化器设计的数据和参数。具体地,获取训练输入值(样本)xm(其中,m∈{0,1,

m-1})。这可以通过从存储器中读取或通过采样模拟信号或通过任何其它方式来完成。然后,获取到量化器设计的参数。这些参数可以包括量化器bin的数量n。n越小,量化就越粗糙,即可实现的最小量化误差越大,输入数据的压缩率就越高。另一个量化器设计参数可以是拉格朗日成本函数的拉格朗日乘子λ和阈值j
tr
。这些参数可以由用户或应用使用通过该方法设计的量化器来选择。一般而言,参数通过任何方式预定义。
76.在获取到训练数据和量化器设计参数之后,在执行步骤320之前初始化方法,步骤320可以迭代地执行:
77.1.初始化每个量化器bin的量化电平和概率pn,其中,n∈{0,1,

n-1}(例如,均匀和等概率)。
78.在初始化中,根据量化器设计参数、所需bin的数量n,推导均匀标量量化器。在这里,概率pn是输入值(训练样本)位于第n个bin内的概率。在本示例性初始化步骤中,bin具有相同的大小,因此概率pn相同。
79.2.步骤320:将每个训练样本xm(其中,m∈{0,1,

m-1})分配给具有量化电平的量化器bin n,使得拉格朗日速率失真成本j最小化:
[0080][0081]
以这种方式分配给bin n的一部分样本xm表示为bn。
[0082]
3.步骤330:根据步骤2中的分配更新概率pn,并且重新计算每个bin的量化电平:
[0083]
其中,n∈{0,

,n-1}
[0084]
其中,|bn|是分配给bin n的训练样本数。
[0085]
概率的更新可以通过将分配给每个bin的样本数除以总样本数估计该bin的概率
来执行。从上面的公式可以看出,第n个量化电平对应于分配给对应的第n个bin的训练样本的平均值。
[0086]
4.步骤340:根据重新计算的量化电平,重新计算拉格朗日成本函数(在步骤2中指定),并且重复步骤2和3,直到成本函数j的减少量小于阈值j
tr
。在步骤350中检查该阈值。
[0087]
需要说明的是,在图3中,成本函数简写为j=d+λr,其中,d表示对应于平方误差的失真,r表示与步骤2的成本函数中的项log2pn对应的速率。
[0088]
5.步骤360:计算n

1个量化器判决阈值:
[0089]
其中,n∈{1,

n-1}。
[0090]
这种量化器设计可能有利于一般数据和n个量化电平。然而,这种设计存在一些缺点,尤其是在压缩神经网络中的特征图的背景下,具体是高压缩率的时候。
[0091]
图4示出了在协作智能应用中使用压缩方法。协作智能涉及(至少)两个实体(系统):边缘设备410和计算设备490。在本示例中,边缘设备410可以是移动用户设备。一般而言,边缘设备410的计算能力比计算设备490的弱。为了执行计算上复杂的任务,边缘设备仅执行任务的一部分,并且通过传输介质450将中间结果传输到计算设备。
[0092]
边缘设备410可以包括第一数量的神经网络层420,这些层处理输入数据以生成特征图。然后,使用也属于边缘设备410的编码器440对特征图进行编码。
[0093]
神经网络可以是dnn。dnn中的各层可以包括卷积、批归一化操作和激活函数等操作。一层的输出是特征图。如果dnn 420中的第一部分层在移动或边缘设备410等上执行,则压缩由第一部分层420输出的特征图以传输450到在执行dnn的其余层480的平台490会是有用的。由于压缩将在边缘设备410中的编码器440中执行,因此有利于保持压缩方法的复杂性相对较低,同时不显著降低dnn模型的准确性。本发明提供的“轻量级压缩”依赖于相对简单的操作,例如截取430和非常粗糙的标量量化435以量化到几个量化电平。为了进一步压缩数据,将量化符号转换438为二进制表示以传递给熵编码器439。总之,边缘设备410包括一个或多个神经网络层420和编码器440。编码器包括实现截取模块430、量化器435、二值化438和熵编码439的电路。
[0094]
将压缩码流发送给云490或另一计算平台,其中,码流由解码器460解码并转换为重建后的特征图,然后由dnn的其余层480处理。该过程对dnn计算的有效影响在于,截取和量化一层(即待传输的层)的输出。计算设备490中的解码器460包括熵解码器473、反二值化474和反量化470。
[0095]
将编码器440侧的特征图值截取(钳制)430在预定的最小值和最大值c
min
和c
max
之间。然后,可以使用均匀(例如线性)量化器或非线性量化器来量化435截取的特征图值。当使用线性量化器时,n电平量化器处理截取的特征图值,表示为x
clp
,以生成量化索引或符号q(x
clp
),如下所示:
[0096]
q(x
clp
)=round((x
clp-c
min
)/(c
max-c
min
)
·
(n-1)),
[0097]
其中,运算round(
·
)在中间情况下远零舍入(舍入到最接近的值)。与重点降低位深度架构的已知架构不同,量化电平(bin)的数量n不需要是2的幂,因为量化的目的是码流中的压缩和后续传输或存储。因此,这里的n不一定是截取的特征图值量化到的比特数,n也不限制为2的整数幂;而是值量化到的电平或符号数,对应于n电平量化器的整数比特数是
但通过熵编码,表示特征图值所需的平均比特数可以是小于的非整数值。
[0098]
虽然均匀量化器很简单,但对于不均匀分布的信号来说,它并不是最优的,如上所述。此外,由于在压缩特征图时,需要权衡dnn准确性和比特率,因此希望在速率或文件大小范围内压缩这些特征图。熵约束量化(例如结合图3描述的量化)和速率失真优化是压缩数据的方法,这些方法必须使上述拉格朗日成本函数最小化:
[0099]
j=d+λr,
[0100]
其中,d是失真度量,r是表示的速率或大小,λ是标量,它在计算失真度量时确定失真和速率之间的比值。因此,通过使用熵约束设计过程,可以很容易地在速率范围内以均方(l2范数)的方式获得如上所示的最优量化器。然而,当量化到非常少的电平(例如少于8个电平)时,dnn的准确性对层的特征图值的截取范围相当敏感。这种l2范数优化量化器的每个bin的量化电平对应于量化到该bin的数据的质心。由于特征图值的非对称分布,重建数据可能跨越远小于初始截取范围的范围,因为最小的重建值将大于c
min
,最大的重建值将小于c
max
。因此,重建后的特征图值所跨越的范围将小于量化之前截取的特征图值所跨越的范围。在这种情况下,dnn的其余层将在动态范围小于未量化特征图的范围的数据上操作,这会降低dnn的整体准确性。
[0101]
为了解决这个问题,本发明实施例包括修改后的熵约束量化器设计过程,以将最外层量化器bin的量化电平固定(pin)到c
min
和/或c
max
。这是为了确保重建后的特征图值跨越整个截图范围。
[0102]
具体地,根据一个实施例,提供了一种用于修改用于神经网络的量化器的量化电平的方法。修改量化电平是指修改量化器的一组量化电平。这是指调整至少一个量化电平。方法501如图5所示。所述方法包括以下步骤:获取510数据值和归属于所述数据值的初步量化电平。所述初步量化电平包括至少一个不可修改量化电平和至少一个可修改量化电平。需要说明的是,所述数据值可以是训练集等,例如训练样本。所述获取可以实现为从存储器/存储区读取或从传感器或模数转换器等其它设备接收。例如,可以根据在量化电平之间限定的判决阈值将所述数据值归属于所述量化电平。一般而言,这种归属可以根据预定义规则执行。
[0103]
所述方法还包括以下步骤:确定525修改后的量化电平包括所述至少一个不可修改量化电平(在步骤520中分配给修改后的量化电平)和通过调整所述至少一个可修改量化电平而得到的至少一个电平。所述调整530基于表示所述获取到的数据值和初步量化电平之间失真的成本函数。所述至少一个不可修改量化电平包括所有较低数据值截取到的最小截取值和/或所有较高数据值截取到的最大截取值。
[0104]
这种修改后的量化器设计的优点之一是提供了更高的动态范围。发明人已经发现,在神经网络中,尽管量化误差可能会增大,但较高的动态范围实际上可以提高网络准确性。因此,当用于压缩神经网络中的数据时,上述修改后的量化器可以提供特殊优势。
[0105]
如果存在至少两个不可修改量化电平,并且这两个电平是最小截取值和最大截取值,则可能更有优势。这使得可以进一步增大动态范围。
[0106]
然而,需要说明的是,本发明不限于不可修改电平是最小电平和最大电平。另外,或作为最小电平和最大电平的替代,不可修改电平可以是值为0的电平。提供零电平对于神经网络的更多计算和/或其简化有意义。另外或可替代地,其它量化器电平可以是不可修改
的。
[0107]
提供不可修改量化电平是这里所说的“固定(pinning)”这些量化电平。这表示这些电平被固定(pin/fix)到预定义值,并且在量化器调整数据值(例如训练数据值)时不进行修改。如上所述,在一些实施例中,这种固定可以(同样)应用于其它重建后的特征图值,而不是(仅仅)最小值和最大值。如果外部最小和最大量化电平被固定,则内部bin的量化电平和所有bin之间的阈值不会被固定,而是在量化器设计算法下自由改变。一般而言,存在一个或多个固定(在本文中也称为不可修改)量化电平和一个或多个可修改量化电平,可修改量化电平可以在量化器设计操作下改变(也称为非固定)。
[0108]
为了给使用截取的特征图值的神经网络设计在轻量级压缩系统中工作良好的量化器,修改后的量化器设计过程可以调整,如以下示例性实施例所示。在本示例性实施例中,不可修改值是截取值。
[0109]
本实施例中修改后的量化器设计与结合图3描述的量化器设计的不同之处具体在于,步骤包括在以下步骤4中固定第一量化电平和最后一个量化电平,以及在步骤6中(相应地在步骤3中)使用码字长度代替熵来计算速率项。需要说明的是,在一些实施例中,只有以下步骤4(固定不可修改电平)可以与图3的步骤不同。其余成本函数计算以及阈值计算可以通过与图3中相同的方式或通过另一种方式执行。
[0110]
图6的流程图示出了一种修改后的量化器方法。在步骤610中,获取(训练)输入数据x∈{xm;m=0,1,...,m

1}。此外,还获取在量化器设计中使用的参数,例如所需bin的数量n、码字长度bn(其中,n∈{1,...,n

1}),以及拉格朗日成本函数的拉格朗日乘子λ、截取范围[c
min
,c
max
]和阈值j
tr
。这些参数可以都是预设的,或者其中一个或多个参数可以由用户或应用或实现一层或多层的另一个设备(例如云设备)等配置。一般而言,获取这些参数的方式并不限制本发明。在获取到输入数据值和参数之后,修改后的量化从初始化开始。
[0111]
执行以下步骤:
[0112]
1.将训练特征图值(输入值)x截取(钳制)在[c
min
,c
max
]内,即应用于特征图值的截取范围。
[0113]
如结合图3的量化设计所述,这里的术语“训练”并不是指神经网络训练,而是指最优设计量化器使用的一组值。这里的术语“最优”是指与某个预定义成本函数的最小值对应的最佳效果。
[0114]
2.初始化每个量化器bin的量化电平其中,n∈{0,1,

n-1}(例如,将量化器电平初始化为均匀量化器的电平,如上文针对图3的量化器设计所述)。
[0115]
需要说明的是,这只是一个示例,一般而言,可以将量化器初始化为另一个值。具体地,量化器可以是针对特定分布的值而优化的某一量化器,或针对另一个数据集而训练的量化器,等等。
[0116]
3.步骤620:将每个训练样本xm(其中,m∈{0,1,

m-1})分配给具有量化电平的量化器bin n,使得拉格朗日速率失真成本最小化:
[0117][0118]
分配给bin n的一部分样本xm表示为bn,bn是量化器为bin n输出的码字长度,以比特为单位。在本示例中,分配给每个bin的二进制码字是可变长度码,对应于熵编码439。
[0119]
因此,在这个特定的示例中,成本函数使用相同的失真项(量化误差的平方范数),但使用与图3的量化器设计不同的速率项。然而,需要说明的是,这只是一个示例性实施例,一般而言,速率项不需要存在,或者可以使用与图3中相同的涉及概率的速率项,或者可以使用另一个速率项。此外或可替代地,可以使用其它项,例如复杂性等。
[0120]
4.步骤630:重新计算每个bin的量化电平:
[0121][0122][0123]
如果n》2,则其中,n∈{1,

,n-2}
[0124]
其中,|bn|是分配给bin n的样本数。
[0125]
可以看出,步骤630与上述步骤330的不同之处在于,将最高量化电平和最低量化电平分别固定到c
min
、c
max
。换句话说,在本例中,最小量化电平和最大量化电平是不可修改量化电平。在本示例中,量化器的其余量化电平是可修改量化电平,如上所示,在n大于0且小于n

1时,即当n∈{1,

,n-2}时,重新计算。
[0126]
5.步骤640:根据重新计算的量化电平,重新计算拉格朗日成本函数,并且重复步骤3和4,直到成本函数j的减少量小于阈值j
tr
(在步骤650中检查)。本步骤对应于步骤340和350,但这里的步骤650使用上面步骤3中提到的修改后的成本函数,并且使用码字长度来表示速率。
[0127]
需要说明的是,在步骤650和350中应用的迭代停止条件(即停止改进的条件是拉格朗日阈值)仅是示例性的。这种条件的优点是迭代次数适应收敛速度。还可以使用其它终止条件。例如,迭代可以在预定(预设)次数的迭代之后停止。在需要保持低/限制复杂性的情况下,这种条件可能是有利的。其它条件标准也是可能的。
[0128]
6步骤660:计算n

1个量化器判决阈值:
[0129]
其中,n∈{1,

n-1}
[0130]
步骤660与步骤360的不同之处在于,适应不同的成本函数。可以看出,在本示例中,第一项对应于两个量化电平之间的平均值。该判决阈值通过表示与相应量化电平和相关联的速率(码字长度)之间的差值(b
n-b
n-1
)的第二项修改。该项除以与阈值tn相邻的一对量化电平之间的差值并且乘以拉格朗日乘子和1/2。
[0131]
修改后的量化器可能比图3所示设计的量化器具有更准确的神经网络操作。这主要是因为以下事实:尤其是对于少量n个量化电平(例如8个或以下),由神经网络解决的实际任务的峰值准确性(例如峰值最小平均准确率(minimum average precision,map))和最小均方量化误差(minimum mean square quantization error,msqr)在使用一组相同的最大和/或最小截取值时不能同时实现。换句话说,使msqr最小化的最小/最大截取值与优化map的截取值不同。
[0132]
下面提供了一个示例,说明了为什么需要将外层量化电平固定到c
min
和c
max
。为了示例起见,假设1比特量化器将取值区间[0.0,2.0]划分为两个bin[0.0,1.0)和[1.0,2.0],这两个bin对应的量化器电平分别为0.3和1.5。如果特征图值被截取到[0.0,2.0]、量化并
传输,则接收器的反量化器会输出仅具有值0.3或1.5的重建特征图,使得特征图值的动态范围在区间[0.3,1.5]内。这比初始截取的取值范围[0.0,2.0]小得多。为了解决这个问题,结合图6所述的修改后的熵约束量化器设计过程是将最外部bin的重建电平固定到c
min
和c
max
,以确保重建后的激活跨越整个截取范围。内部bin的(至少部分)重建值和bin之间的阈值不固定,而是在设计算法下自由改变。为了简单起见,上述示例仅示出了两个量化电平。然而,缩小动态范围的行为也可以是更多量化电平的主要行为,这也能够修改一个或多个(可修改)量化电平。
[0133]
需要说明的是,图6是详细的示例,可能包括多次迭代。然而,本发明可以改进在执行一个修改步骤时已经存在的初始量化器,如结合图5所示。
[0134]
一般而言,图5的方法还可以包括以下步骤:将量化电平计算为分配给该电平的数据值的预定义函数。预定义函数可以是分配给所述电平的数据值的平均值。平均值提供了简单计算,同时也提供了数据值的公平表示。然而,也有一些替代方案可以代替平均值,例如加权平均值、中间值或任何其它函数。
[0135]
在一些实施例中,成本函数包括失真和速率的线性组合。该速率由表示相应的初步量化电平的码字的码字长度表示,表示至少两个相应初步量化电平的码字具有相互不同的长度。这与上文结合图6描述的示例相对应。这种方法的优点之一是在优化过程中同时考虑可变长度编码和失真(而不是固定vlc或根据固定码字分配单独设计vlc)。这种方法会提高神经网络的准确性,并且有助于实现更高的编码效率。另一个可能的优点在于,通过使用已知码字长度而不是计算概率,不需要生成熵编码的码流速率进行概率计算,也就是说,码字大小可以简单地求和。
[0136]
但是,可以使用不同的成本函数。例如,可以使用包括(表示)失真和复杂性的成本函数,或者使用如上所述的其它成本函数。码字可以具有固定的长度,因此不需要考虑速率,或者可以通过另一种形式考虑速率。
[0137]
还需要说明的是,对于一些特征图,提供1比特量化可能是有利的,对于该量化,有两个码字“0”和“1”,因此长度都是1个比特。在这种情况下,如果存在两个不可修改量化电平,则这些电平是最终电平,因此不需要修改。但是,可以存在一个可修改量化电平和一个不可修改量化电平。如果只有一个不可修改量化电平,则对于1比特量化情况,可以根据成本函数确定另一个电平,而不考虑码字长度。
[0138]
该方法还可以包括以下步骤:确定成对修改后的相邻量化电平之间的判决阈值,其中,两个修改后的相邻量化电平之间的阈值是根据两个修改后的相邻量化电平和表示相应的两个修改后的相邻量化电平的码字长度确定的。在步骤360和660中可以看到确定判决阈值的示例。然而,本发明并不限于通过这种方式确定阈值。原则上,可以确定阈值位于计算为两个修改后(包括可修改和可能不可修改)的相邻量化电平之间的平均值的bin的中间。平均值可以加权或通过其它方式修改。阈值也可以通过不同的方式计算。
[0139]
为了更好的解释,这里称为可修改量化电平和不可修改量化电平。这两种电平构成量化器的修改后的量化电平的一部分,可以称为量化器的一组量化电平。一般而言,可修改量化电平是第一类电平,在量化器设计过程中可以通过进行某种优化来修改。不可修改量化电平是在量化器设计过程中不可修改(即被固定)的第二类电平。
[0140]
可以在图6的示例中看到,上述方法可以迭代地执行。根据基于图5的一个实施例,
获取510初步量化电平和确定525修改后的量化电平的步骤迭代k次,k大于1。k次迭代中的第j次迭代包括:(i)获取510与通过第(j

1)次迭代确定的修改后的量化电平对应的初步量化电平,(ii)确定525修改后的量化电平包括至少一个不可修改量化电平,以及根据成本函数修改通过第(j

1)次迭代得到的至少一个可修改量化电平。
[0141]
通过迭代,可以获得更高的准确性。通过设置/限制迭代的次数,可以控制准确性和复杂性。
[0142]
在第一次迭代之前,在一些示例性实现方式中,初步量化电平是均匀量化电平。但是,本发明并不限于这种初始化。一般而言,通过将量化器初始化为针对数据设计的量化器,可以实现更好的性能,其中,所述数据通过与训练数据更相似的方式分布。因此,可以定期更新不同训练数据的量化器设计,在这种情况下,初始量化器可以对应于最新设计的量化器。然而,从均匀量化器开始可以提供一个简单的初始猜测和良好的改进基础。
[0143]
迭代方法可以包括以下步骤:当以下两个条件中的至少一个适用时,在k次迭代之后停止迭代:(i)第k次迭代中的成本函数的值小于第一阈值,(ii)第(k

1)次迭代中的成本函数的值与第k次迭代中的成本函数的值之差小于第二阈值。只使用条件(i)或只使用条件(ii)的实施例(例如步骤350、650)也是可能的。这些条件(规则)取决于当前迭代对改进的质量和/或贡献,这能够调整方法以实现所需的质量/复杂性。
[0144]
判断是否要调整(可修改)量化电平可能是有利的。根据可以基于任一上述实施例和示例性实现方式的一个示例性实施例,该方法还包括以下步骤:计算修改后的量化电平和修改之前的对应量化电平之间的调整距离。这可以在每次迭代中执行,或者在终止迭代之后执行,或者在预定次数的迭代之后执行。然后,该方法可以包括以下步骤:对于每个修改后的可修改量化电平,根据调整距离使用所述修改后的量化电平或修改之前的量化电平,调整修改后的量化电平。
[0145]
例如,可以将修改后的量化电平和原始量化电平之间计算的调整距离与阈值进行比较,如果距离小于阈值,则使用修改;否则不使用修改。这里的“使用”是指生成调整后的量化电平,包括:(i)不可修改量化电平(ii)每个可修改量化电平对应的初步(或初始)量化电平或修改后的量化电平,取决于调整距离。
[0146]
本文中描述的量化器设计可以提供分布式神经网络的高效操作。例如,在一个实施例中,用于设计量化器的方法应用于神经网络的数据。在一个实施例中,数据值是:(i)由神经网络的一层输出的特征图的值,和/或(ii)神经网络的一层的权重。然而,本发明并不限于用于神经网络的这些类型的数据。可以通过这种方式对更多数据和参数进行编码。还可以对训练神经网络生成的数据进行量化,这些数据在神经网络操作的情况下包括上述特征图和权重。另外或可替代地,神经网络内后向的学习数据可以通过修改后的量化器设计进行译码/量化。该方法可以很好地适用于在神经网络已经训练之后量化神经网络的特征图,即训练后量化。换句话说,不需要重新训练神经网络(的权重)。然而,对这类方法没有限制,一般而言,本文中描述的方法也可以与重新训练一起使用。
[0147]
图4示出了一种将用于神经网络的数据编码到码流中的方法。所述方法包括以下步骤:所述神经网络(包括层420和480)的至少一层420生成数据值。然后,所述方法根据任一上述示例,基于预定(训练)数据值和/或作为获取到的数据值的生成数据值修改量化器435的量化电平。换句话说,修改后的量化器可以根据实际要使用量化器进行编码的数据或
根据一些其它预定(训练)数据来设计。这里的预定可以通过任何方式执行。训练数据可以从一些代表性源获取、从存储器中读取,或者从另一个设备获取,等等。所述方法还可以包括以下步骤:将所述生成数据值量化435到修改后的量化电平,以及将表示量化数据的码字放入438、439码流中。
[0148]
在这里,术语“码流”是指可以用于传输450和/或存储或缓冲等的码流。在传输之前,码流可以进行进一步的封包,包括编码和调制,以及可能的更多发射器操作,取决于传输编码数据所在的介质。这里的预定数据是指在量化器设计中使用的训练数据。它不是训练神经网络的数据,而是调整(设计)量化器使用的统计信息的数据。
[0149]
量化435能够减少需要向码流指示的数据量,以便实现系统的目的(例如神经网络处理)。通过进行熵编码439可以实现进一步减少。码字的长度可以与量化器设计同时设计,也可以单独设计。
[0150]
根据一个实施例(与任一上述实施例兼容),所述方法还包括以下步骤:将修改后的量化电平的指示放入540码流中。这在图5中示为在步骤510至530中设计量化器之后执行的步骤。
[0151]
将指示放入码流中可能是有利的,因为能够更新(例如编码到码流中的)特定输入数据的量化器。解码器不需要有预先存储的量化器。需要说明的是,该指示可以直接指示整个量化器,例如通过传输量化电平和/或能够在解码器侧推导反量化器的其它参数。
[0152]
图4示出了在协作智能应用中与神经网络一起使用时的轻量级压缩系统。系统的输入是输入数据,可以是图像、视频或数据的其它数值表示。神经网络包括层420、480,它们实现卷积、批归一化操作和激活函数等操作。划分神经网络,使得初始部分层420在移动或边缘设备等设备410上执行,其余层480在云或计算设备或平台490等不同设备上执行。初始部分层420中的最后一层输出包括特征图值的特征图。将特征图值输入到截取过程430,其中,每个值截取在[c
min
,c
max
]内,即,将小于c
min
的特征图值调整为等于c
min
,将大于c
max
的特征图值调整为等于c
max
。截取过程输出包括截取的特征图,包括截取的特征图值,它们随后输入到量化过程435。量化过程包括量化器,也可以包括缩放和偏移操作,将每个截取的特征图值映射到量化电平,并且输出与每个映射的量化电平相关联的量化器索引。这可以根据结合图2描述的示例执行。
[0153]
量化器可以包括通过图5或图6的修改后的熵约束标量量化器设计过程产生的参数。将由量化过程435输出的量化器索引输入到二值化过程438,该过程将每个输入量化器索引映射到包括一串(一系列)比特(一个或多个比特)的码字。熵编码过程439将码字序列压缩为码流。码流可以存储在文件中,或者通过传输介质450发送给另一个平台,例如执行神经网络的其余层480的云计算设备490。在接收到码流时,熵解码过程473对码流进行解码并输出码字序列。将码字输入到反二值化过程474,该过程执行在在二值化过程中执行的映射的逆过程,以输出量化器索引。量化器索引序列通过包括反量化器的反量化过程470,并且还可以包括逆缩放和/或偏移操作,它们一起执行量化过程映射的逆过程,以输出量化器电平或表示重建后的特征图的缩放和偏移量化器电平。
[0154]
将重建后的特征图输入到神经网络的其余层480,这些层根据神经网络的目的产生输出数据。该输出可以包括数据,例如分类索引、对象检测坐标和元数据、像素分割数据、重建图像和视频、时间序列预测值和其它数据预测值。可以将部分或全部输出数据发回执
行第一部分神经网络层的设备或其它设备。修改后的量化也可以用于对这些数据进行编码。
[0155]
图4的截取过程430截取或钳制其输入值,以包含在范围[c
min
,c
max
]内。给定输入值x
nonclip
,可以是特征图值,截取过程根据以下方法输出值x
clp

[0156][0157]
值c
min
和c
max
可以是预定的,可以存储在存储器中并从存储器中检索,或者可以作为参数输入到移动/边缘设备410或云/计算设备490中,或者可以在码流中指示。预定截取值c
min
和c
max
的一种方法是离线运行神经网络,同时在第一部分神经网络层的输出侧使用不同的截取值,测量其余神经网络层的输出与已知参考输出的接近程度,然后选择使输出数据和已知参考输出数据之差最小化(即,使神经网络输出的准确性最大化)的截取值。截取值可以根据预定算法估计,也可以通过任何其它方式获取。
[0158]
图2示出了包括量化器的量化过程435。给定输入值x,量化器将其与一组量化器判决阈值tn(其中,n∈{1,

n-1})进行比较,并且将x映射到量化电平(其中,n∈{0,1,

n-1}),其中,该量化电平对应于x《tn(其中,n∈{1,

n-1})时的最小值(n-1)以及对应于x不小于任一tn时的(n-1)。因此,将一组实数划分为量化器bin,其中,量化器判决阈值是bin的边界,每个bin包括量化电平,位于给定bin内的任一x映射到该量化电平。每个bin都分配有一组符号sn(其中,n∈{0,1,

n-1})中的量化索引,当输入值x映射到量化电平时,量化过程输出符号sn。用于量化索引的符号可以是整数,例如,sn=n(其中,n∈{0,1,

n-1}),对应于量化器bin的索引。量化器判决阈值和量化电平可以在量化过程的操作之前计算,包括使用图5或图6的修改后的熵约束标量量化器设计过程。
[0159]
量化过程435还可以包括偏移和缩放操作。对于输入到量化过程的值x
clp
,可以将x
clp
加上偏移,而且缩放该和,以便量化器处理的值在已知取值范围内。如果偏移值是-c
min
,缩放值是1/(c
max-c
min
),则将(x
clp-c
min
)/(c
max-c
min
)输入到量化器。如果x
clp
已经处理,使其在[c
min
,c
max
]内,则输入到量化器的偏移和缩放值在[0.0,1.0]内。
[0160]
二值化过程438将量化器索引映射到码字。截断一元二值化方案就是这种映射的一个示例。对于具有四个量化器电平的量化器,量化器索引{0,1,2,3}可以分别映射到二进制码字串{0,10,110,111}。对于输入到二值化过程的给定量化器索引,输出对应的码字。
[0161]
熵编码过程439压缩码字序列并输出码流。熵编码器的一个示例是基于上下文的自适应二进制算术编码(context-adaptive binary arithmetic coding,cabac),其中,一个上下文可以分配给二进制码字串的每个比特位置。如果码字集是{0,10,110,111},则可以使用三个上下文,因为码字的长度最多可以为3个比特。也可以使用较少的上下文,例如所有比特位置使用一个上下文。但是,本发明并不限于cabac。可以使用任何其它类型的熵编码,例如基于上下文的自适应变长编码(context-adaptive variable length-coding,cavlc),或者甚至可以使用不基于上下文自适应的熵编码。
[0162]
检索或接收可以存储在存储器中、由计算机进一步处理或通过传输介质450发送的码流,并且输入到熵解码过程473,该过程反转由熵编码器执行的过程。熵解码器输出的
码字与输入到熵编码器的码字相同,即熵编码和解码过程是无损的。
[0163]
将熵解码的码字输入到反二值化过程474,该过程通过反转二值化过程中指定的映射来输出量化器索引。由反二值化过程输出的量化器索引与输入到二值化过程438的量化器索引相同。
[0164]
然后,将量化器索引输入到反量化过程470,该过程输出对应于输入量化索引的量化电平。在本实施例中,反量化过程中使用的量化器判决阈值和量化电平与量化过程中使用的相同。可以发送、固定设置或部分发送/部分从编码器和解码器侧可用的数据中推导出量化器判决阈值和量化电平。
[0165]
如果量化过程435包括缩放和偏移操作,并且如果在量化过程中,偏移值是-c
min
,缩放值是1/(c
max-c
min
),则将反量化过程470中的量化电平乘以(c
max-c
min
),然后与c
min
相加,使得当量化过程中的量化器输出量化电平时,重建后的截取值时,重建后的截取值对应于由反量化过程输出的重建后的特征图值。
[0166]
在本实施例中,量化电平到量化索引的映射是量化过程中对应映射的逆过程。反量化过程输出的量化电平对应于重建后的特征图值。然后,将重建后的特征图值输入到其余神经网络层,这些层输出由神经网络生成的最终输出数据。
[0167]
总之,根据一个实施例,提供了一种从通过任一上述方法进行编码的码流中解码出用于神经网络的数据的方法。方法如图5所示。解码方法502包括以下步骤:从码流中获取550修改后的量化电平的指示。相应地,在解码器侧设置555反量化器,这表示根据指示推导在反量化中使用的量化电平并在使用中设置。此外,所述方法包括:根据获取到的修改后的量化电平从码流的码字中获取558用于神经网络的数据;通过神经网络的至少一层处理获取到的用于神经网络的数据。当神经网络的各层不直接连接时,这种方法可以有助于使用神经网络特征。量化器的指示可以使量化器适应编码器和解码器。
[0168]
上述技术方案通常适用于量化器设计过程。量化器在编码器和解码器中都使用,但是在一些情况下,量化器可以在神经网络操作之前设计。在一些情况下,定义量化器如何工作的参数可以在码流中指示给量化器,如上所述(参见步骤540)。
[0169]
总之,本发明一些实施例涉及量化器设计,即根据要量化的一组预定样本确定量化器电平。量化器设计可以实现为一种方法,也可以实现为一种设备,例如,包括用于执行上述步骤的相应模块的电路。此外,本发明提供了一种编码器和一种解码器,它们在神经网络中等使用设计的量化器和对应的方法。神经网络可以是,例如用于压缩视频或音频信号或其它类型信号的神经网络。然而,本发明并不限于此,而且量化器可以与任何神经网络一起使用,例如作为分类器等。本发明还提供了一种编码器,其实施量化设计以实现自适应量化器,该自适应量化器可以重新训练以改变输入数据。量化器设计、量化、编码和解码可以实现为程序或集成电路。
[0170]
然而,作为上述量化器设计的一部分的量化器的修改也可以应用于解码器。即使在解码器侧通常不执行使用训练数据的量化设计,进行量化器修改也可能是有利的,如下所述。
[0171]
在这种情况下,编码器的量化器可以是任何已知的量化器。解码器还可以包括已知的反量化器,可能与编码器量化器相反。然而,解码器还从码流接收一列固定的补充量化电平。在解码器中的反量化过程中,将重建值与列表中包含的固定(补充)量化电平进行比
较。如果重建值和固定(补充)量化电平之间的失真(调整)度量小于可以预定、计算或从码流中解码出的阈值,则将重建值调整为等于固定(补充)量化电平,以使失真(调整)度量最小化。在传统的视频或图像压缩方案中,人们通常不希望解码器改变重建值,因为编码器中的重建值和解码器中的重建值之间会存在不匹配。然而,对于神经网络应用,最终目标是使神经网络的输出准确性最大化,而且由于其非线性性质,增加重建误差可能非常有用,而在解码器侧调整量化电平会增加重建误差。例如,如果编码器的量化器没有将最小和/或最大量化电平固定到c
min
和c
max
,这在编码器是无法修改的产品的一部分(例如,属于与解码器不同的一方)时是常见的,则在解码过程中,最小和最大量化电平仍然可以修改为分别等于c
min
和c
max
。因此,在编码器和解码器之间造成不匹配,但确保了解码后的重建值跨越所需的动态范围,这可能有利于神经网络的整体性能。此外,可以从码流中解码出值λ
adj
,以便解码器可以在失真调整度量中使用该值,如下所示。
[0172]
根据一个实施例,提供了一种从码流中解码出用于神经网络的数据的方法。方法503的一个特定示例如图5所示。所述方法包括步骤560:获取原始量化电平以量化所述数据,并且获取与相应的一个或多个原始量化电平对应的一个或多个补充量化电平。这里,可以通过提供最小和/或最大和/或零电平作为补充量化电平或通过任何其它预定义的约定等方式隐式给出对应关系。可替代地,可以通过将补充量化电平与原始量化电平进行比较并找到最接近的(最相似的)量化电平来确定对应关系。例如,每个原始电平都可以相对于每个补充电平来衡量(与之进行比较)。但是,这可能不是必要的,而且可以仅对一部分电平执行比较。
[0173]
方法503还包括:计算570原始量化电平和对应的补充量化电平之间的调整距离。调整距离可以是绝对差值或其它距离度量。方法503还包括:对于每个修改后的量化电平,根据调整距离使用原始量化电平或对应的补充量化电平,确定575修改后的量化电平。换句话说,修改后的量化电平的数量可以与原始量化电平的数量相同,而且相应的修改后的量化电平和原始量化电平之间可以存在一一对应关系。然后,将每个修改后的电平设置为对应的原始电平或其中一个补充量化电平。一般而言,补充量化电平可以是一个或多个额外量化电平的列表,然后根据使用成本函数的一些优化或简单地根据如上所述的差值来确定对应关系。需要说明的是,从上述示例中可以明显看出,“对应关系”并不(一定)表示相同,而是表示成对补充量化电平和原始量化电平之间存在一种关系。这并不表示每个原始量化电平都有对应的补充量化电平。但是,每个补充电平都有对应的原始电平。这是合理的,以避免原始量化电平和补充量化电平之间的配对中的任何排列。
[0174]
方法503还包括:根据获取到的修改后的量化电平,从码流的码字中获取590用于神经网络的数据。换句话说,执行反量化(重建)。如果执行调整以向神经网络提供数据,则所述方法还可以包括:通过神经网络的至少一层处理获取到的用于神经网络的数据。
[0175]
例如,如果补充量化电平类似于前面论述的最小值和最大值,则可以恢复量化数据的动态范围。如果没有这种恢复,原始量化电平可能没有足够的动态范围来满足神经网络其余部分的性能,如上文结合量化器设计所述。
[0176]
术语“修改后的量化电平”也可以使用术语“调整后的量化电平”替代,因为修改可以看作是对原始量化电平的调整。
[0177]
在一种示例性实现中,一个或多个补充量化电平包括所有较低数据值截取到的最
小截取值、所有较高数据值截取到的最大截取值、零电平中的至少一个。这类补充电平的优点之一在于,它们可以恢复动态范围,或者可以恢复“重要”值(例如0值或边缘值),以馈送到神经网络的其余部分。
[0178]
例如,调整距离包括原始量化电平和对应的补充量化电平之间的(绝对)差值,以及可能还包括预定常数的偏移。
[0179]
具体地,在一个实施例中,确定修改后的量化电平包括针对每个原始量化电平执行的以下步骤:
[0180]

计算所述原始量化电平和与原始量化电平相关联的补充量化电平之间的调整距离;
[0181]

当调整距离小于调整阈值时,将与所述原始量化电平对应的修改后的量化电平设置为补充量化电平;
[0182]

将修改后的量化电平设置为所述原始量化电平。
[0183]
需要说明的是,与原始量化电平相关联的补充量化电平是通过上述对应关系获取到的。例如,可以通过找到与原始量化电平的值最相似或成本最小的补充量化电平获取到。还需要说明的是,在与调整阈值进行比较时,可以考虑调整距离的符号或方向。例如,比较还可以包括检查调整方向是正的还是负的,或者是增加还是减少,以便限制调整是增加还是减少修改后的量化电平。
[0184]
具体地,从码流中解码出预定常数、调整阈值(与调整距离进行比较以决定使用原始量化电平还是对应的补充量化电路)或至少一个补充电平中的至少一个(多个或所有)。
[0185]
图7示出了示例性解码器侧量化器修改。相应地,将反量化过程中的量化电平修改为包括两组量化电平。第一组(其中,n∈{0,1,

n-1})可以与量化过程中使用的量化电平相同,该第一组中的量化电平表示为原始量化电平。第二组(其中,j∈{0,1,

j-1})中的量化电平表示为补充量化电平。作为反量化过程的一部分,使用修改后的映射(反量化)过程将量化索引(从码流中提取)映射到量化电平。如果和之间的调整距离度量g(
·
)小于阈值∈,则这种修改后的映射(反量化)过程将一个或多个原始量化电平(其中,n∈{0,1,

n-1})调整为等于第一组(其中,j∈*0,1,

j-1})中包括的补充量化电平。
[0186]
该过程中的步骤包括:
[0187]
1.步骤710:提供一组原始量化电平(其中,n∈{0,1,

n-1})和一组补充量化电平(其中,j∈{0,1,

j-1})。j是补充量化电平的数量,n是原始电平的数量。j和n可以相同。然而,在一些实施例中,j可以小于n。
[0188]
这些组的电平可以从码流中获取,或者这些组的电平中的一组电平(例如,一组原始电平)可以预配置等。例如,一组原始电平可以对应于均匀量化或通过设计(如结合图3或任何其它量化器所示)得到的量化电平。此外,阈值∈可以在本步骤中获取到,例如从码流中获取到,或者可以由用户或应用等在解码器侧设置。在步骤720中,将经过原始量化电平的迭代变量n初始化为0:n=0。
[0189]
2.步骤730:计算一组调整距离度量其中,j∈{0,1,

j-1},j是补充电平的数量。调整距离度量可以是任何距离度量,例如差值等。
[0190]
3.步骤740和750:如果j个调整距离度量值(其中,j∈{0,1,

j-1})中的一个或多个小于阈值∈,则(在步骤750中)将调整为等于其中,也就是说,是相对于距离度量与在步骤740中获取到的最接近的补充量化电平。换句话说,在本步骤740中,足够接近第j个补充量化电平的原始量化电平由补充量化电平替代。因此,使用补充量化电平而不使用原始量化电平。
[0191]
4.在步骤770中,递增n,如果在步骤760中,n≤n-1,则跳转到步骤730(上面的步骤2)。
[0192]
5.该过程的输出是一组调整后的量化电平(其中,n∈{0,1,

n-1}),其中,一个或多个原始量化电平已经调整为等于补充量化电平。
[0193]
距离度量函数可以包括度量,例如距离的l1范数:或有符号差值:或用于测量距离的任何其它度量。在反量化过程中,原始量化电平由调整后的量化电平替代,因此,将量化索引映射到调整后的量化电平。
[0194]
在这个示例中,输入值是标量的,本文中设计的量化器是标量量化器。然而,本发明也适用于矢量量化器设计。例如,特征图包括可以是矢量的元素,量化器是矢量量化器。相应地,量化器电平可以是矢量。在上述距离度量中,可以使用对应的矢量l1范数或l2范数,或任何其它范数。同样的情况也可以适用于关于编码器侧的量化器设计和对应的度量/成本函数的实施例。
[0195]
需要说明的是,在上述示例中,上述过程迭代n次,n是原始量化电平的迭代索引。然而,通过搜索接近(通过调整距离度量测量)补充电平的原始量化电平,在补充电平的索引j上执行迭代。
[0196]
在一些示例性实现方式中,如上所述,一组补充量化电平是其中,j∈{0,1},
[0197]
可替换地或另外,通过加上λg·
‖sn‖来修改距离度量其中,‖sn‖是映射到量化电平的码字的比特长度。对于在距离度量中使用l
1-范数的情况,本实施例相当于使用距离度量权重λg可以通过尝试各种值(例如,通过执行优化以推导值)根据经验确定,或者可以从码流中获取到和/或由用户或应用设置。在一个示例性实施例中,λg是从指示补充量化电平的码流中解码出的。
[0198]
例如,一组二进制码字串(对表示量化数据的索引进行译码,其中,量化数据可以取量化电平的值)是从码流中解码出的。图7的修改后的反量化调整过程可以用于调整量化过程中的量化电平,如上文结合编码器实施例已经提到的内容所述。
[0199]
如果量化电平调整应用于解码器侧,则编码器侧的量化过程中的量化器也可以是线性或均匀量化器,这使得量化器可以通过舍入过程实现。在这种情况下,由输出量化索引的函数q(x
clp
)表示的量化器可以使用以下公式实现:
[0200]
q(x
clp
)=round((x
clp-c
min
)/(c
max-c
min
)
·
(n-1))
[0201]
其中,n是量化电平的数量,round(
·
)舍入到最接近的整数(在远离零的方向上),表示+3.5舍入到4,

3.5舍入到

4(不是

3),以此类推。换句话说,中间值的舍入是为了得到
具有下一个最大大小(和相同符号)的整数。
[0202]
根据一个实施例,初始部分神经网络层在云或计算设备或平台490上执行,其余神经网络层在移动或边缘设备410上执行。换句话说,本发明不限于图4所示的边缘设备包括量化器以及云包括反量化器的情况。相反,另外或可替换地,量化器可以在云中使用,而反量化器可以在边缘设备中使用。一般而言,本发明不限于边缘和云设备,本文中描述的量化和反量化可以用于任何设备中。相同的设备可以包括量化器和反量化器,因为它们能够同时传输和接收压缩数据(例如,用于神经网络的数据)。
[0203]
在任一上述实施例和示例中,一组固定的最终量化电平可以包括c
min
和c
max
。特征图值可以划分为一组特征张量,其中,每个张量包括r
×
c个特征图值的二维数组,r和c是整数。这类特征图可以容易地用于实现图像或视频编码或图像或视频编码的一些部分(例如滤波或预测等)的神经网络等中。需要注意的是,上面的术语“特征张量”指的是二维数组。然而,一般而言,特征图和/或特征张量可以具有更多(甚至更少)的维度,这取决于神经网络结构。因此,上述示例并不将本发明限制为任何特定大小或格式的特征图或特征张量。
[0204]
可以在码流中为每个特征张量指示(或解码出)一组固定的最终量化电平(修改后的量化电平)。这可以实现更精确的重建,但需要一些信令开销。可替换地,或者在配置有信令粒度的情况下,在码流中为每个特征图指示(或解码出)一组最终量化电平(这种实现方式比先前实施例消耗的比特更少,但可能会产生更高的量化误差)。
[0205]
如上所述,指示一组固定的最终量化电平的粒度(例如,每个特征图或特征张量等)可以是可配置的。例如,可以通过以下步骤,根据特征图张量的面积r
·
c和对应于n电平量化器的比特数nbits来指示和选择粒度:如果用于指示固定的最终量化电平的比特数大于8
·r·c·
nbits,则每个特征图指示一组固定的最终量化电平一次。否则,为特征图中的每个张量指示。然而,本发明不限于上述方法,而是可以有更多的指示粒度,或用于决定粒度的其它判决机制。
[0206]
如上所述,量化过程中使用的量化器电平可以在码流中指示,并且它们可以从码流中解码出,以便在反量化过程中使用。它们不一定必须直接用于反量化,而是可以根据上述实施例之一修改(调整),以便解码器将调整应用于一些补充量化电平。
[0207]
关于在一些实施例中使用的距离度量,可以使用一个预定义的距离度量函数。预定义距离度量函数是从一组预定义距离度量函数中选择的,而且在码流中为每个特征图(或为其它部分,取决于配置或预定义的指示粒度)指示(或解码出)所选距离度量函数的索引一次。例如,距离度量函数可以从一组预定义的距离度量函数中选择,而且在码流中为每个特征图张量指示(或解码出)所选距离度量函数的索引一次。
[0208]
一组补充量化电平可以是预定义的(即,不需要在码流中指示)。在另一个实施例中,预定义多组补充量化电平,而且在码流中为每个特征图指示(解码出)与本发明方法提供的反量化过程中使用的一组电平对应的索引一次。然而,也可以具有组合实施例,其中,预定义多组补充量化电平,而且在码流中为每个特征张量指示(解码出)与本发明方法提供的反量化过程中使用的一组电平对应的索引一次。
[0209]
在又一个示例性实现方式中,预定义多组补充量化电平,而且在码流中为所有特征张量指示(解码出)与本发明方法提供的反量化过程中使用的一组电平对应的索引。可替换地,可以在码流中指示一组补充量化电平的元素。
[0210]
可以部署上述编码器和解码器处理链的对应系统如图8所示。图8是可以使用本技术中技术的一种示例性译码系统(例如,视频、图像、音频和/或其它译码系统)的示意框图。视频译码系统10中的视频编码器20(或简称为编码器20)和视频解码器30(或简称为解码器30)是两个示例,即可以用于根据本技术中描述的各种示例执行各种技术的设备。例如,视频编码和解码可以采用神经网络,例如图4中所示的神经网络,该神经网络可以是分布式的并且可以进行上述量化和反量化以在分布式计算节点(两个或两个以上)之间传送特征图。
[0211]
如图8所示,译码系统10包括源设备12,源设备12用于将编码图像数据21提供给目的地设备14等,以对经编码图像数据21进行解码。
[0212]
源设备12包括编码器20,并且可以另外(即可选地)可以包括图像源16、预处理器(或预处理单元)18(例如图像预处理器18)和通信接口或通信单元22。
[0213]
图像源16可以包括或者可以是任何类型的用于捕获真实世界图像的摄像机等图像捕获设备,和/或任何类型的用于生成计算机动画图像的计算机图形处理器等图像生成设备,或者任何类型的用于获取和/或提供真实世界图像、计算机生成图像(例如,屏幕内容、虚拟现实(virtual reality,vr)图像)和/或其任意组合(例如增强现实(augmented reality,ar)图像)的其它设备。图像源可以是任何类型的存储任一上述图像的存储器(memory/storage)。
[0214]
为了区分预处理器18和预处理单元18执行的处理,图像或图像数据17还可以称为原始图像或原始图像数据17。
[0215]
预处理器18用于接收(原始)图像数据17并对图像数据17执行预处理,以获取预处理图像19或预处理图像数据19。预处理器18执行的预处理可以包括修剪(trimming)、颜色格式转换(例如从rgb转换为ycbcr)、调色或去噪等。可以理解的是,预处理单元18可以为可选组件。需要说明的是,预处理还可以采用使用量化器和/或反量化器的神经网络(例如在图4中)。
[0216]
视频编码器20用于接收预处理图像数据19并提供经编码图像数据21。
[0217]
源设备12中的通信接口22可以用于接收经编码图像数据21,并通过通信信道13将经编码图像数据21(或对经编码图像数据21进一步处理后得到的数据)发送给另一设备,例如目的地设备14或任何其它设备,以便进行存储或直接重建。
[0218]
目的地设备14包括解码器30(例如视频解码器30),并且可以另外(即可选地)包括通信接口或通信单元28、后处理器32(或后处理单元32)和显示设备34。
[0219]
目的地设备14中的通信接口28用于直接从源设备12或从存储设备(例如经编码图像数据存储设备)等任何其它源接收经编码图像数据21(或对经编码图像数据21进一步处理后得到的数据),并将经编码图像数据21提供给解码器30。
[0220]
通信接口22和通信接口28可以用于通过源设备12和目的地设备14之间的直接通信链路(例如,直接有线或无线连接)或者通过任何类型的网络(例如,有线网络或无线网络或其任何组合,或者任何类型的私网和公网,或者其任何类型的组合)发送或接收经编码图像数据21或经编码数据13。
[0221]
例如,通信接口22可以用于将经编码图像数据21封装成合适的格式(例如数据包),和/或通过任何类型的传输编码或处理方式来处理经编码图像数据,以便通过通信链路或通信网络进行传输。
[0222]
例如,与通信接口22对应的通信接口28可以用于接收传输数据,并使用任何类型的对应传输解码或处理方式和/或解封装方式对传输数据进行处理,以获取经编码图像数据21。
[0223]
通信接口22和通信接口28都可以配置为图8中从源设备12指向目的地设备14的通信信道13的箭头所指示的单向通信接口,或者配置为双向通信接口,并且可以用于发送和接收消息等,以建立连接、确认并交换与通信链路和/或数据传输(例如经编码图像数据传输)相关的任何其它信息,等等。解码器30用于接收经编码图像数据21并提供经解码图像数据31或经解码图像31(例如,使用基于图4的神经网络)。
[0224]
目的地设备14中的后处理器32用于对经解码图像数据31(也称为经重建图像数据)(例如经解码图像31)进行后处理,以获取后处理图像数据33(例如后处理图像33)。后处理单元32执行的后处理可以包括颜色格式转换(例如从ycbcr转换为rgb)、调色、修剪或重采样,或者任何其它处理,以便提供经解码图像数据31由显示设备34等显示,等等。
[0225]
目的地设备14中的显示设备34用于接收后处理图像数据33,以便向用户或观看者等显示图像。显示设备34可以是或可以包括任何类型的用于表示经重建图像的显示器,例如集成或外部显示器或显示屏。例如,显示器可以包括液晶显示器(liquid crystal display,lcd)、有机发光二极管(organic light emitting diode,oled)显示器、等离子显示器、投影仪、微型led显示器、硅基液晶(liquid crystal on silicon,lcos)显示器、数字光处理器(digital light processor,dlp)或任何类型的其它显示器。
[0226]
虽然图8示出了源设备12和目的地设备14作为单独的设备,但是设备的实施例还可以同时包括两种设备或同时包括这两种设备的功能,即源设备12或对应的功能以及目的地设备14或对应的功能。在这些实施例中,源设备12或对应的功能以及目的地设备14或对应的功能可以使用相同的硬件和/或软件或通过单独的硬件和/或软件或其任意组合来实现。
[0227]
本领域技术人员基于描述明显可知,图8所示的源设备12和/或目的地设备14内的不同单元或功能的存在和(精确)功能划分可能根据实际设备和应用有所不同。
[0228]
编码器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所示。
[0229]
源设备12和目的地设备14可以包括多种设备中的任一种,包括任何类型的手持设
备或固定设备,例如,笔记本或膝上型电脑、手机、智能手机、平板或平板电脑、摄像机、台式电脑、机顶盒、电视、显示设备、数字媒体播放器、视频游戏机、视频流设备(例如内容业务服务器或内容分发服务器)、广播接收器设备、广播发射器设备等,并且可以不使用或使用任何类型的操作系统。在一些情况下,源设备12和目的地设备14可以配备用于无线通信。因此,源设备12和目的地设备14可以是无线通信设备。
[0230]
在一些情况下,图8所示的视频译码系统10仅仅是示例性的,本技术中的技术可以适用于不一定包括编码设备与解码设备之间的任何数据通信的视频译码设置(例如,视频编码或视频解码)。在其它示例中,数据从本地存储器检索、通过网络流式传输,等等。视频编码设备可以对数据进行编码并且将数据存储到存储器中,和/或视频解码设备可以从存储器检索数据并且对数据进行解码。在一些示例中,编码和解码由相互不通信而是仅仅将数据编码到存储器和/或从存储器检索数据并对数据进行解码的设备执行。
[0231]
为便于描述,本文(例如)参考由itu-t视频编码专家组(video coding experts group,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,而是针对它们的下一代和/或任何其他编解码器。
[0232]
图10为本发明一个实施例提供的视频译码设备1000的示意图。视频译码设备1000适用于实现本文中描述的公开实施例。在一个实施例中,视频译码设备1000可以是解码器(例如图8中的视频解码器30)或编码器(例如图8中的视频编码器20)。
[0233]
视频译码设备1000包括用于接收数据的入端口1010(或输入端口1010)和接收单元(rx)1020,用于处理所述数据的处理器、逻辑单元或中央处理单元(central processing unit,cpu)1030,用于发送所述数据的发送单元(tx)1040和出端口1050(或输出端口1050)以及用于存储所述数据的存储器1060。视频译码设备1000还可以包括与入端口1010、接收单元1020、发送单元1040和出端口1050耦合的光电(optical-to-electrical,oe)组件和电光(electrical-to-optical,eo)组件,用作光信号或电信号的出口或入口。
[0234]
处理器1030通过硬件和软件实现。处理器1030可以实现为一个或多个cpu芯片、一个或多个核(例如多核处理器)、一个或多个fpga、一个或多个asic和一个或多个dsp。处理器1030与入端口1010、接收器单元1020、发送单元1040、出端口1050和存储器1060通信。处理器1030包括译码模块1070。译码模块1070实现上文描述的公开实施例。例如,译码模块1070执行、处理、准备或提供各种译码操作。因此,将译码模块1070包含在内为视频译码设备1000的功能提供了实质性的改进,并且影响了视频译码设备1000到不同状态的转换。可选地,以存储在存储器1060中并由处理器1030执行的指令来实现译码模块1070。
[0235]
存储器1060可以包括一个或多个磁盘、一个或多个磁带机以及一个或多个固态硬盘,并且可以用作溢出数据存储设备,以在选择程序来执行时存储这些程序以及存储在执行程序过程中读取的指令和数据。例如,存储器1060可以是易失性和/或非易失性的,并且可以是只读存储器(read-only memory,rom)、随机存取存储器(random access memory,ram)、三态内容寻址存储器(ternary content-addressable memory,tcam)和/或静态随机存取存储器(static random-access memory,sram)。
[0236]
图11为一个示例性实施例提供的装置800的简化框图。装置800可以用作图8中的源设备12和/或目的地设备14。
[0237]
装置1100中的处理器1102可以是中央处理器。可选地,处理器1102可以是现有的或今后将开发出的能够操作或处理信息的任何其它类型的设备或多个设备。虽然所公开的实现方式可以使用如图所示的处理器1102等单个处理器来实施,但使用多个处理器可以提高速度和效率。
[0238]
在一种实现方式中,装置1100中的存储器1104可以是只读存储器(read only memory,rom)设备或随机存取存储器(random access memory,ram)设备。任何其它合适类型的存储设备都可以用作存储器1104。存储器1104可以包括处理器1102通过总线1112访问的代码和数据1106。存储器1104还可包括操作系统1108和应用程序1110,应用程序1110包括至少一个程序,这个程序使得处理器1102执行本文描述的方法。例如,应用程序1110可以包括应用1至应用n,还包括执行本文描述的方法的视频译码应用。
[0239]
装置1100还可以包括一个或多个输出设备,例如显示器1118。在一个示例中,显示器1118可以是将显示器与触敏元件组合的触敏显示器,该触敏元件能够用于感测触摸输入。显示器1118可以通过总线1112耦合到处理器1102。
[0240]
虽然装置1100中的总线1112在本文中描述为单个总线,但是总线1112可以包括多个总线。此外,辅助存储器可以直接与装置1100中的其它组件耦合或可以通过网络访问,并且可以包括单个集成单元(例如一个存储卡)或多个单元(例如多个存储卡)。因此,装置1100可以通过多种配置实现。
[0241]
本发明提供了适用于量化器侧的量化器修改和适用于解码器侧的量化器修改。本发明还包括对应的编码器、解码器以及其中实现的量化器和反量化器。本发明一些实施例引入了用于压缩神经网络的特征图和/或权重的轻量级编解码器。包括截取、量化、二值化和熵编码。在一些实施例中,具体方法是修改量化器或量化器设计过程,以便调整一些量化器电平,使得重建后的特征图跨越整个截取范围。这个概念可以扩展到限定一组固定(不可修改)和非固定(可修改)量化器电平,其中,固定电平在量化器设计过程中不可以改变,确保保留重要电平或重建值。解码器侧修改的反量化调整过程也可以使用一组固定和非固定量化器电平,使得如果使用传统量化器的解码重建特征图值足够接近其中一个固定量化器电平,则可以将其调整为等于最近的固定电平。另外,在速率失真优化量化器(或量化器设计)过程中,使用以比特为单位的码字长度,而不是使用从训练集中测量到的熵。
[0242]
一种为输入是数据值的量化器生成量化电平的方法可以在/由上述硬件和/或软件中实现。所述方法可以包括:限定一组初始量化电平,将所述一组初始电平划分为固定和非固定量化电平子集,在由所述输入数据值跨越的空间中生成阈值,以便限定从输入空间的子集到量化电平的映射;调整非固定量化电平,以使包含在输入空间的每个子集中的输入数据和其对应的量化电平之间的失真度量最小化,同时保持一组固定量化电平是固定的。
[0243]
可以重复生成阈值和调整非固定量化电平的步骤,直到满足失真条件。在一些实施例中,固定量化电平子集包括最小值,并且将小于最小值的数据值映射到最小值。例如,固定量化电平子集包括最大值,将大于最大值的数据值映射到最大值。输入数据值有利地包括从神经网络中的一层输出的特征图。另外或作为替代,输入数据值包括神经网络中的
权重值。具体地,特征图值是神经网络中激活过程的输出。
[0244]
根据一个实施例,提供了一种对码流进行解码的方法。所述码流包括量化索引,其中,每个量化索引映射到映射的原始量化电平,调整后的量化电平通过以下步骤生成:限定一组补充量化电平;计算每个映射的原始量化电平和所述一组补充量化电平中的元素之间的调整距离度量;如果最小调整距离度量小于阈值,则将映射的原始量化电平调整为等于与所述最小距离度量对应的补充量化电平。
[0245]
例如,从码流解码出一组固定的最终量化电平。这一组固定的最终量化电平可以包括最小值,将小于最小值的数据值映射到最小值。具体地,这一组固定的最终量化电平包括最大值,将大于最大值的数据值映射到最大值。例如,量化电平表示神经网络中的特征图和/或神经网络中的权重值。神经网络中前一层的特征图可以从包括重建值的重建特征图中恢复。在一些示例性实现方式中,从重建值中恢复激活,重建值是从部分重建映射张量中获取到的。部分激活可以从重建值中恢复。
[0246]
上述方法的参数可以从码流中解码出。例如,值λ可以从码流中解码出,并用于失真度量中。阈值可以从码流中解码出。上述一组固定的最终量化电平从码流中解码出。
[0247]
概括地说,本发明涉及用于修改量化器的方法和装置。具体地,根据涉及一组预定输入值的失真的优化修改一组初步量化电平中的至少一个量化电平。不修改这组初步电平中的至少一个其它量化电平。不被修改(不可修改)的量化电平是最小截取值或最大截取值。上述修改可以有助于增大量化/反量化数据的动态范围。这种修改后的量化器对于在神经网络中压缩其数据(例如特征图等)是有利的。这种量化器可以提高神经网络的准确性。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1