一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

用于神经网络模型压缩的量化、自适应块分区和码本编解码的方法和装置与流程

2021-12-14 22:44:00 来源:中国专利 TAG:

用于神经网络模型压缩的量化、自适应块分区和码本编解码的方法和装置
1.引用并入
2.本技术要求于2019年11月22日提交的美国临时专利申请第62/939,057号,2019年11月22日提交的美国临时专利申请第62/939,054号,2019年11月25日提交的美国临时专利申请第62/939,949号,2019年12月12日提交的美国临时专利申请第62/947,236,以及2020年11月16日向美国专利商标局提交的美国专利申请第17/099,202号的优先权。在先申请的全部内容通过引用并入本文。


背景技术:

3.深度神经网络(deep neural networks,dnns)在语义分类、目标检测/识别、目标跟踪、视频质量增强等大量视频应用中取得成功,因此需要压缩dnn模型。因此,运动图像专家组(motion picture experts group,mpeg)正在积极致力于神经网络标准(neural network standard,nnr)的编码表示,该标准用于对dnn模型进行编码以节省存储和计算。


技术实现要素:

4.根据实施例,一种用于神经网络模型压缩的量化、自适应块分区和码本编码的方法由至少一个处理器执行,并且包括:确定神经网络的一层中多维张量的饱和最大值,以及对应于所述饱和最大值的位深度;并且,将所述多维张量中的权重系数限幅在所述饱和最大值的范围内。所述方法还包括基于所述位深度,量化已限幅的权重系数;以及,向解码器发送包括所述位深度的层报头。
5.根据实施例,一种用于神经网络模型压缩的量化、自适应块分区和码本编码的装置包括:至少一个存储器,用于存储程序代码;至少一个处理器,用于读取所述程序代码,并按照所述程序代码的指令进行操作。所述程序代码包括:第一确定代码,用于使得所述至少一个处理器确定神经网络的一层中多维张量的饱和最大值,以及对应于所述饱和最大值的位深度;以及,限幅代码,用于使得所述至少一个处理器将所述多维张量中的权重系数限幅在所述饱和最大值的范围内。所述程序代码还包括量化代码,用于使得所述至少一个处理器基于所述位深度,量化已限幅的权重系数;以及,发送代码,用于使得所述至少一个处理器向解码器发送包括所述位深度的层报头。
6.根据实施例,一种非易失性计算机可读介质存储指令,当所述指令由用于神经网络模型压缩的量化、自适应块分区和码本编码的至少一个处理器执行时,使得所述至少一个处理器:确定神经网络的一层中多维张量的饱和最大值,以及对应于所述饱和最大值的位深度;以及,将所述多维张量中的权重系数限幅在所述饱和最大值的范围内。当由至少一个处理器执行时,所述指令还使得至少一个处理器基于所述位深度,量化已限幅的权重系数;以及,向解码器发送包括所述位深度的层报头。
附图说明
7.图1a是将系数裁剪和映射到8位表示的示意图。
8.图1b是gepm/gepp划分方法的示意图。
9.图2是根据实施例的可以在其中实施本文描述的方法、装置和系统的环境的示意图。
10.图3是图2中一个或多个设备的示例组件的框图。
11.图4是根据实施例的用于神经网络模型压缩的系统的功能框图。
12.图5是根据实施例的用于神经网络模型压缩的量化方法的流程图。
13.图6是根据实施例的用于神经网络模型压缩的量化装置的框图。
14.图7是根据实施例的在垂直方向使用光栅扫描的自适应ctu3d/3d编码单元(cu3d)分区的两个示例的图。
15.图8是根据实施例的用于神经网络模型压缩的自适应块分区方法的流程图。
16.图9是根据实施例的用于神经网络模型压缩的自适应块分区装置的框图。
17.图10是根据实施例的码本、码本预测器和预测图的示意图。
18.图11是根据实施例的用于神经网络模型压缩的码本编码方法的流程图。
19.图12是根据实施例的用于神经网络模型压缩的码本编码装置的框图。
具体实施方式
20.本公开涉及神经网络模型压缩。更具体地,本文描述的方法和装置涉及用于神经网络模型压缩的量化、自适应块分区和码本编码。
21.在用于多媒体内容描述和分析的神经网络压缩中,如果一个权重张量的维度大于二(例如卷积层),则将该权重张量重塑为二维(two

dimensional,2d)张量。如果权重张量的维度不超过二(例如,全连接层或偏置层),则不执行重塑。
22.编码方法以行优先的方式从左到右扫描权重系数,并且从上到下扫描行。
[0023][0024][0025]
在用于多媒体内容描述和分析的神经网络压缩中,最近邻量化以统一的方式应用于权重矩阵中的每个权重系数。应用固定步长。解码矩阵中的重构值是步长的整数倍。将步长定义为32位浮点数。
[0026][0027]
step_size是量化步长。
[0028]
在用于多媒体内容描述和分析的神经网络压缩中,根据以下过程,使用整数参数maxnumnorem,对每个量化的权重级别进行编码。
[0029]
在第一步骤中,针对已量化的权重级别,对二进制语法元素sig_flag进行编码,该二进制语法元素sig_flag指定对应的级别是否等于零。如果sig_flag等于一,则对另一二进制语法元素sign_flag进行编码。该二进制数指示当前权重级别是正还是负。接下来,对二进制数的一元序列进行编码,随后是如下的固定长度序列:
[0030]
变量k用零初始化,并且x用1<<k初始化。对语法元素abs_level_greater_x进行编码,指示已量化权重级别的绝对值大于x。如果abs_level_greater_x等于1,并且如果x大于maxnumnorem,则变量k增加1。之后,将1<<k加到x,并且对另一abs_level_greater_x进行编码。继续该过程直到abs_level_greater_x等于0。现在,x必须是值(x,x

1,

x

(1<<k) 1)之一。对长度为k的码进行编码,该码指向列表中的值,该值是绝对量化的权重级别。
[0031]
上下文建模对应于将三种类型的标志sig_flag、sign_flag、和abs_level_greater_x与上下文模型相关联。以此方式,具有类似统计行为的标志可以与相同的上下文模型相关联,使得概率估计器(在上下文模型内部)可以适应底层统计。
[0032]
所提出的方法的上下文建模如下:
[0033]
根据左边的相邻已量化权重级别是零、小于零还是大于零,针对sig_flag区分三个上下文模型。
[0034]
根据左边的相邻已量化权重级别是零、小于零还是大于零,针对sign_flag区分三个其他上下文模型。
[0035]
对于abs_level_greater_x标志,每个x使用一个或两个单独的上下文模型。如果x<=maxnumnorem,则根据sign_flag区分两个上下文模型。如果x>maxnumnorem,则仅使用一种上下文模型。
[0036][0037][0038]
sig_flag指定量化权重quantweight[i]是否非零。sig_flag等于0表示quantweight[i]为零。
[0039]
sign_flag指定量化权重quantweight[i]是正数还是负数。sign_flag等于1表示quantweight[i]为负。
[0040]
abs_level_greater_x[j]表示quantweight[i]的绝对级别是否大于j 1。
[0041]
abs_level_greater_x2[j]包括指数哥伦余数(exponential golomb remainder)的一元部分。
[0042]
abs_remainder表示固定长度的余数。
[0043]
在当前nnr中,将步长定义为32位浮点数。在当前层的解码完成之前,解码器不知道已量化系数的最大位深度。这迫使解码器为具有最大可能位深度(例如32位)的量化系数分配内存,从而浪费内存使用量、带宽和推理速度。
[0044]
此外,深度学习系统的推断操作广泛地使用矩阵乘法,因此高性能矩阵乘法库(high

performance matrix multiplication library,gemm)是该推断操作的关键。根据左手侧(left

hand

side,lhs)矩阵和右手侧(right

hand

side,rhs)矩阵的大小,两个gemm例程(gepp/gebp,gepm/gebp)在过去十年中被业界公认为是最佳gemm解决方案。如图1b所示,这两种方法递归地对lhs矩阵和rhs矩阵进行分区,以在现代计算平台中最佳地利用片外存储器(例如,双倍数据速率(double data rate,ddr))和片上存储器(如多级缓存)的不同特性,并且通常以列为主顺序存储lhs矩阵,以实现最佳存储器存取模式。通常对lhs矩阵进行转置,以实现最佳存储器存取模式。一些较新的gemm例程(如qnnpack)针对为移动和边缘设备设计的神经网络进行了优化,是gepp例程或gepm例程的变型,并且遵循类似的矩阵分块/分区方法。
[0045]
将nnr中的矩阵扫描顺序定义为从左到右的行优先方式和多行从上到下的顺序。该扫描顺序与推断操作所需的扫描顺序不匹配,因为该推断操作在开始操作之前必须缓冲过大的权重系数。例如,当对于vgg16的第一全连接层执行推断操作时,假定该层的矩阵尺寸是25088x4096,则必须保留能够存储nx25088个系数的缓冲器以执行gemm例程。如果对于常规gemm操作n=64,则即使系数由8位整数而不是32位浮点数来表示,缓冲器大小也将是1.5mb,但是这种缓冲器大小太大了,特别是对于移动和边缘设备。
[0046]
此外,可以直接对已量化权重系数执行熵编码。尚未考虑将权重张量划分为不重叠的2d/3d编码树单元(coding tree unit,ctu)/三维编码树单元(ctu3d)块后的局部分布。一种码本方法通过对ctu/ctu3d块中的已量化权重系数进行重新索引来提供更紧凑的表示。
[0047]
图2是根据实施例的环境200的示意图,在该环境中可以实现在此描述的方法、装置和系统。如图2所示,环境200可以包括用户设备210,平台220和网络230。环境200的设备可以通过有线连接、无线连接或有线和无线连接的组合来互连。
[0048]
用户设备210包括一个或多个设备,该一个或多个设备能够接收、生成、存储、处理和/或提供与平台220相关的信息。例如,用户设备210可以包括计算设备(例如,台式计算机、膝上型计算机、平板计算机、手持式计算机、智能扬声器、服务器等)、移动电话(例如,智能电话、无线电话等)、可穿戴设备(例如,智能眼镜或智能手表)或相似设备。在一些实施方式中,用户设备210可以从平台220接收信息和/或向平台120发送信息。
[0049]
平台220包括如本文中其它地方所描述的一个或多个设备。在一些实施方式中,平台220可以包括云服务器或云服务器组。在一些实施方式中,平台220可以被设计成模块化,使得软件组件可以被换入或换出。这样,可以容易地和/或快速地重新配置平台220以具有不同的用途。
[0050]
在一些实施方式中,如图所示,平台220可以被托管(hosted)在云计算环境222中。
值得注意的是,虽然本文所述的实施方式将平台220描述为托管在云计算环境222中,但是在一些实施方式中,平台220不是基于云的(即,可以在云计算环境外部实现)或者可以是部分基于云的。
[0051]
云计算环境222包括托管平台220的环境。云计算环境222可以提供计算、软件、数据访问、存储等服务,这些服务不需要终端用户(例如,用户设备210)了解托管平台220的系统和/或设备的物理位置和配置。如图所示,云计算环境222可以包括一组计算资源224(统称为“计算资源(computing resources)224”并分别称为“计算资源(computing resource)224”)。
[0052]
计算资源224包括一个或多个个人计算机、工作站计算机、服务器设备或其它类型的计算和/或通信设备。在一些实施方式中,计算资源224可以托管平台220。云资源可以包括在计算资源224中执行的计算实例、在计算资源224中提供的存储设备、由计算资源224提供的数据传输设备等。在一些实施方式中,计算资源224可以通过有线连接、无线连接或有线和无线连接的组合与其它计算资源224通信。
[0053]
进一步如图2所示,计算资源224包括一组云资源,例如一个或多个应用程序(“app”)224

1、一个或多个虚拟机(“vm”)224

2、虚拟化存储(“vs”)224

3、一个或多个管理程序(“hyp”)224

4等。
[0054]
应用程序224

1包括一个或多个软件应用程序,其可以提供给用户设备210和/或平台220,或由用户设备210和/或平台220访问。应用程序224

1无需在用户设备210上安装和执行软件应用程序。例如,应用程序224

1可以包括与平台220相关的软件,和/或,能够通过云计算环境222提供的任何其它软件。在一些实施方式中,一个应用程序224

1可以通过虚拟机224

2向或从一个或多个其它应用程序224

1发送/接收信息。
[0055]
虚拟机224

2包括机器(例如,计算机)的软件实现,该机器执行程序,类似于物理机。虚拟机224

2可以是系统虚拟机,也可以是进程虚拟机,这取决于虚拟机224

2对任何真实机的使用和对应程度。系统虚拟机可以提供完整系统平台,其支持完整操作系统(“os”)的执行。进程虚拟机可以执行单个程序,并且可以支持单个进程。在一些实施方式中,虚拟机224

2可以代表用户(例如,用户设备210)执行,并且可以管理云计算环境222的基础架构,例如数据管理、同步或长期数据传输。
[0056]
虚拟化存储224

3包括一个或多个存储系统和/或一个或多个设备,该一个或多个设备在计算资源224的存储系统或设备内使用虚拟化技术。在一些实施方式中,在存储系统的上下文内,虚拟化的类型可以包括块虚拟化和文件虚拟化。块虚拟化可以指逻辑存储从物理存储的抽象(或分离),以便可以在不考虑物理存储或异构结构的情况下访问存储系统。分离可以允许存储系统的管理员灵活地管理终端用户的存储。文件虚拟化可以消除在文件级别存取的数据与物理存储文件的位置之间的依赖性。这可以优化存储使用、服务器整合和/或无中断文件迁移的性能。
[0057]
管理程序(hypervisor)224

4可以提供硬件虚拟化技术,其允许多个操作系统(例如,“客户操作系统”)在诸如计算资源224的主计算机上同时执行。管理程序224

4可以向客户操作系统提供虚拟操作平台,并且可以管理客户操作系统的执行。各种操作系统的多个实例可以共享虚拟化硬件资源。
[0058]
网络230包括一个或多个有线和/或无线网络。例如,网络230可以包括蜂窝网络
(例如,第五代(fifth generation,5g)网络、长期演进(long

term evolution,lte)网络、第三代(third generation,3g)网络、码分多址(cdma)网络等)、公共陆地移动网络(public land mobile network,plmn)、局域网(local area network,lan)、广域网(wide area network,wan)、城域网(metropolitan area network,man)、电话网络(例如,公共交换电话网络(public switched telephone network,pstn))、专用网络、自组织网络、内联网、因特网、基于光纤的网络等,和/或这些或其它类型的网络的组合。
[0059]
图2所示的设备和网络的数量和排列被作为示例来提供。实际上,与图2所示的设备和/或网络相比,可以有更多的设备和/或网络、更少的设备和/或网络、不同的设备和/或网络、或排列不同的设备和/或网络。此外,图2所示的两个或更多个设备可以在单个设备内实现,或者图2所示的单个设备可以实现为多个分布式设备。另外或可替代地,环境200的一组设备(例如,一个或多个设备)可以执行被描述为由环境200的另一组设备执行的一个或多个功能。
[0060]
图3是图2中一个或多个设备的示例组件的框图。设备300可以对应于用户设备210和/或平台220。如图3所示,设备300可以包括总线310、处理器320、存储器330、存储组件340、输入组件350、输出组件360和通信接口370。
[0061]
总线310包括允许设备300的组件之间进行通信的组件。处理器320以硬件、固件或硬件和软件的组合来实现。处理器320是中央处理单元(cpu)、图形处理单元(gpu)、加速处理单元(apu)、微处理器、微控制器、数字信号处理器(dsp)、现场可编程门阵列(fpga)、专用集成电路(asic)或另一类型的处理组件。在一些实施方式中,处理器320包括一个或多个能够被编程以执行功能的处理器。存储器330包括随机存取存储器(ram)、只读存储器(rom)和/或另一类型的动态或静态存储设备(例如,闪存、磁存储器和/或光存储器),其存储供处理器320使用的信息和/或指令。
[0062]
存储组件340存储与设备300的操作和使用相关的信息和/或软件。例如,存储组件340可以包括硬盘(例如,磁盘、光盘、磁光盘和/或固态盘)、光盘(cd)、数字通用盘(dvd)、软盘、盒式磁带、磁带和/或另一类型的非易失性计算机可读介质,以及相应的驱动器。
[0063]
输入组件350包括允许设备300例如通过用户输入接收信息的组件,例如,触摸屏显示器、键盘、小键盘、鼠标、按钮、开关和/或麦克风。另外或可替代地,输入组件350可以包括用于感测信息的传感器(例如,全球定位系统(gps)组件、加速计、陀螺仪和/或致动器)。输出组件360包括提供来自设备300的输出信息的组件,例如,显示器、扬声器和/或一个或多个发光二极管(led)。
[0064]
通信接口370包括类似收发器的组件(例如,收发器和/或单独的接收器和发送器),该组件使设备300能够例如通过有线连接、无线连接或有线和无线连接的组合与其它设备通信。通信接口370可以允许设备300从另一设备接收信息和/或向另一设备提供信息。例如,通信接口370可以包括以太网接口、光接口、同轴接口、红外接口、射频(rf)接口、通用串行总线(usb)接口、wi

fi接口、蜂窝网络接口等。
[0065]
设备300可以执行本文中所描述的一个或多个过程。设备300可以响应于处理器320执行由非易失性计算机可读介质(例如存储器330和/或存储组件340)存储的软件指令来执行这些过程。计算机可读介质在本文中被定义为非易失性存储器设备。存储器设备包括单个物理存储设备内的存储空间或分布在多个物理存储设备上的存储空间。
[0066]
软件指令可以通过通信接口370从另一计算机可读介质或从另一设备读入存储器330和/或存储组件340。当被执行时,存储在存储器330和/或存储组件340中的软件指令可以使处理器320执行本文中所描述的一个或多个过程。另外或可替代地,可以使用硬件连线电路来代替软件指令或与软件指令结合以执行本文中所描述的一个或多个过程。因此,本文中所描述的实施方式不限于硬件电路和软件的任何特定组合。
[0067]
图3所示的组件的数量和排列被作为示例来提供。实际上,与图3所示的组件相比,设备300可能包括更多的组件、更少的组件、不同的组件或排列不同的组件。另外或可替代地,设备300的一组组件(例如,一个或多个组件)可以执行被描述为由设备300的另一组组件执行的一个或多个功能。
[0068]
图4是根据实施例的用于神经网络模型压缩的系统400的功能框图。
[0069]
如图4所示,系统400包括参数缩减模块405、参数近似模块410、重建模块415、编码器420和解码器425。
[0070]
参数缩减模块405缩减输入神经网络的一组参数,以获得输出神经网络。该神经网络可以包括由深度学习框架指定的参数和架构。
[0071]
例如,参数缩减模块405可以稀疏化(将权重设置为零)和/或修剪掉(prune away)神经网络的连接。在另一示例中,参数缩减模块405可以对神经网络的参数张量执行矩阵分解以分解为一组较小的参数张量。参数缩减模块405可以级联地执行这些方法,例如,可以首先使权重稀疏化,然后分解结果矩阵。
[0072]
参数近似模块410对从输出神经网络提取的参数张量应用参数近似技术,该输出神经网络从参数缩减模块405获得。例如,该技术可以包括量化、变换和预测中的任一个或任何组合。参数近似模块410输出未被参数近似模块410修改的第一参数张量、被参数近似模块410修改或近似的第二参数张量,以及相应元数据。其中,相应元数据用于从修改的第二参数张量重建未被参数近似模块410修改的原始参数张量。
[0073]
重建模块415使用从参数近似模块410和/或解码器425获得的相应元数据,从修改的第二参数张量重建原始参数张量,该修改的第二参数张量是从参数近似模块410和/或解码器425获得的。重建模块415可以使用重建的原始参数张量和第一参数张量来重建输出神经网络。
[0074]
编码器420可以对从参数近似模块410获得的第一参数张量、第二参数张量和相应的元数据执行熵编码。此信息可以被编码成比特流,发送到解码器425中。
[0075]
解码器425可以对从编码器420获得的比特流进行解码,以获得该第一参数张量、第二参数张量和相应的元数据。
[0076]
系统400可以在平台220中实现,并且图4的一个或多个模块可由与平台220分离或包括平台220的一个设备或一组设备(如用户设备210)来执行。
[0077]
现在将详细描述用于神经网络模型压缩的量化的方法和装置。
[0078]
层中的神经网络权重分布可以遵循高斯分布,其中具有较大值的权重系数的百分比非常小,但是权重系数的最大值非常大。优化的量化算法使用诸如kl(kullback

leibler)散度的算法,找到给定位深度的最佳饱和最大值。如图1a所示,所有权重系数被限幅在饱和最大值的范围内,并且此后,修改的权重系数被统一量化(映射)为整数[

(2**bitdepth

1),2**bitdepth

1]。
[0079]
饱和最大值可以由其原始的32位浮点数来表示,或者可以被变换为整数,同时保持n位小数精度。例如,饱和最大值layer_sat_maxw的整数int_layer_sat_maxw可以通过以下等式来计算:
[0080]
int_layer_sat_maxw=int(ceil(layer_sat_maxw*(2**n)))
ꢀꢀꢀꢀꢀ
(1)。
[0081]
ceil()函数返回大于或等于输入数字的最小整数值。
[0082]
重建的饱和最大值rec_layer_sat_maxw可以通过以下等式计算:
[0083]
rec_layer_sat_maxw=(float)int_layer_sat_maxw/(2**n)
ꢀꢀꢀꢀ
(2)。
[0084]
在实施例中,层报头中包含量化权重系数的位深度。可以使用可变长度编码方法或固定长度编码方法对位深度进行编码。
[0085]
下面的表1中列出了相应语法表的示例:
[0086]
表1
[0087][0088]
layer_stepsize表示量化步长。
[0089]
layer_bitdepth表示层中多维张量的位深度。
[0090]
在另一实施例中,在层报头中包含量化权重系数的位深度,并且量化步长被饱和最大值代替。饱和最大值可以由上述浮点数或整数表示。如果饱和最大值用整数表示,则可以使用可变长度编码方法或固定长度编码方法,对饱和最大值进行编码。
[0091]
下面的表2中列出了相应语法表的示例:
[0092]
表2
[0093][0094]
layer_sat_maxw使用整数格式或浮点格式表示层中多维张量的饱和最大值。
[0095]
layer_bitdepth表示层中多维张量的位深度。
[0096]
图5是根据实施例的用于神经网络模型压缩的量化方法500的流程图。在一些实施方式中,图5的一个或多个操作可由平台220执行。在一些实施方式中,图5的一个或多个操作可以由与平台220分离、或包括平台220的另一设备或一组设备执行,例如,用户设备210和/或编码器420。
[0097]
如图5所示,在操作510中,方法500包括确定神经网络层中多维张量的饱和最大值,以及与饱和最大值对应的位深度。
[0098]
在操作520中,方法500包括将多维张量中的权重系数限幅在饱和最大值的范围内。
[0099]
在操作530中,方法500包括基于位深度,量化限幅的权重系数。
[0100]
在操作540中,方法500包括向解码器发送包含位深度的层报头。
[0101]
方法500可以进一步包括使用可变长度编码、或固定长度编码,对位深度进行编码。层报头可以包含已编码的位深度。
[0102]
层报头可以进一步包括饱和最大值。
[0103]
饱和最大值可以由浮点数表示。
[0104]
方法500可以进一步包括基于上面的等式(1),确定代表饱和最大值的整数。
[0105]
方法500可以进一步包括使用可变长度编码、或固定长度编码,对饱和最大值的整数进行编码。
[0106]
层报头可以进一步包括量化限幅的权重系数的步长。
[0107]
尽管图5示出了方法500的示例块,在一些实施方式中,方法500可以包括与图5中描绘的那些块相比额外的块、更少的块、不同的块或不同排列的块。另外地或替代地,方法500的两个或更多块可以并行执行。
[0108]
图6是根据实施例的用于神经网络模型压缩的量化的装置600的示意图。在一些实施方式中,图6中的一个或多个代码可以由平台220执行。在一些实施方式中,图6的一个或多个代码可以由与平台220分离、或包括平台220的另一设备或一组设备执行,例如,用户设备210,和/或,编码器420。
[0109]
如图6所示,装置600包括第一确定代码610、限幅代码620、量化代码630和发送代码640。
[0110]
第一确定代码610用于使得装置600的至少一个处理器确定神经网络的层中多维张量的饱和最大值,以及与饱和最大值对应的位深度。
[0111]
限幅代码620用于使得至少一个处理器将多维张量中的权重系数限幅在饱和最大值的范围内。
[0112]
量化代码630用于使得至少一个处理器基于所述位深度,量化限幅的权重系数。
[0113]
发送代码640用于使得至少一个处理器将包含所述位深度的层报头发送至解码器。
[0114]
装置600可以进一步包括编码代码650,用于使得至少一个处理器使用可变长度编码或固定长度编码,对所述位深度进行编码。层报头中包含已编码的位深度。
[0115]
层报头可以进一步包括饱和最大值。
[0116]
饱和最大值可由浮点数表示。
[0117]
装置600可以进一步包括第二确定代码660,用于使得至少一个处理器根据上面的等式(1),确定代表饱和最大值的整数。
[0118]
编码代码650可以进一步用于使得至少一个处理器使用可变长度编码、或固定长度编码,对饱和最大值的整数进行编码。
[0119]
层报头可以进一步包括量化已限幅的权重系数的步长。
[0120]
现在将详细描述用于神经网络模型压缩的自适应块分区的方法和装置。
[0121]
如果lhs张量以列为主顺序存储,或者在行是主张量的转置之后存储,则对于布局为[r][s][c][k]的卷积层,权重张量的维数通常是4,对于布局为[c][k]的全连接层,权重张量的维数通常是2,并且对于偏置和批量常规层,权重张量的维数通常是1。r/s是卷积内核尺寸,c是输入特征尺寸,并且k是输出特征尺寸。
[0122]
在实施例中,对于卷积层,2d[r][s]维重塑为1d[rs]维,使得四维(four

dimensional,4d)张量[r][s][c][k]被重塑为3d张量[rs][c][k]。将全连接层视为r=s=1的3d张量的特殊情况。
[0123]
由于内核尺寸rs通常远小于c/k,因此3d张量[rs][c][k]沿着[c][k]平面被划分为非重叠的较小块(ctu3d)。每个ctu3d具有[rs][ctu3d_height][ctu3d_width]的形状,其中,ctu3d_height=max_ctu3d_height,ctu3d_width=max_ctu3d_width,并且,将max_ctu3d_height/max_ctu3d_width编码在模型头中。对于位于张量右侧和/或底部的ctu3d,它的ctu3d_height是c/max_ctu3d_height的余数,并且,它的ctu3d_width是k/max_ctu3d_width的余数。
[0124]
在进一步的实施例中,使用正方形形状分区,使得max_ctu3d_height=max_ctu3d_width,并且变量max_ctu3d_size用于表示max_ctu3d_height和max_ctu3d_width。将max_ctu3d_size定义为2**n,并且n的值是8、16、32、64。
[0125]
为了便于推断操作中的片上存储器要求,在实施例中,定义一个标志,以指示对于具有不同内核大小的多个层的总ctu3d大小是否存在限制。等于0的该标志指示ctu3d_height/ctu3d_width与内核大小无关且保持不变,并且在这种情况下,卷积层的ctu3d的大小是全连接层的ctu3d的大小的rs倍。等于1的该标志指示ctu3d_height/ctu3d_width是基于内核大小缩放的。例如,ctu3d_height=ctu3d_width=int(ctu3d_height*ctu3d_width/r/s)。
[0126]
虽然可以使用任何扫描顺序来扫描和处理3d张量中的多个ctu3d,但是在实施例中,使用水平方向(scan_ck)或垂直方向(scan_kc)上的光栅扫描顺序来扫描和处理多个ctu3d。
[0127]
下面的表3

5中列出了相应语法表的示例:
[0128]
表3
[0129][0130]
[0131]
表4
[0132][0133]
enable_max_ctu3d_size为0表示无论内核大小如何,ctu3d_height/ctu3d_width都保持不变,并且enable_max_ctu3d_size为1表示ctu3d_height/ctu3d_width根据内核大小进行缩放。
[0134]
max_ctu3d_idx在以下等式中:
[0135]
max_ctu_3d_size=(max_ctu3d_idx==0)?64:(max_ctu3d_idx==1)?32:(max_ctu3d_idx==2)?16:8
ꢀꢀꢀꢀꢀꢀꢀ
(3)
[0136]
表5
[0137][0138]
layer_scan_order为0表示水平方向的光栅扫描顺序,并且layer_scan_order为1表示垂直方向的光栅扫描顺序。
[0139]
在实施例中,使用在视频编解码标准中使用的ctu/cu自适应分区方法。
[0140]
使用简化的分块结构,其中使用四叉树结构递归地将ctu3d/cu3d划分为更小的多个cu3d,直到达到最大递归深度。从ctu3d节点开始,使用深度优先的四叉树扫描顺序来扫描和处理cu3d的这一四叉树。使用水平方向或垂直方向上的光栅扫描顺序来扫描和处理同一父节点下的多个子节点。
[0141]
对于给定四叉树深度处的cu3d,使用以下等式(4)和(5)计算这些cu3d的max_cu3d_height/max_cu3d_width,并且当max_cu3d_height和max_cu3d_width都小于或等于预定义阈值时,达到最大递归深度。该阈值可以明确地包括在比特流中,或者可以是预定义的数字(如8),因此可以由解码器隐式推断。
[0142]
max_cu3d_height=max_ctu3d_height>>depth
ꢀꢀꢀꢀꢀꢀꢀꢀꢀ
(4)
[0143]
max_cu3d_width=max_ctu3d_width>>depth
ꢀꢀꢀꢀꢀꢀꢀꢀꢀ
(5)
[0144]
在进一步的实施例中,使用正方形形状的分区,使得max_ctu3d_height=max_ctu3d_width。对于给定四叉树深度的cu3d,使用下面的等式(4)计算这些cu3d的max_cu3d_size,并且当max_cu3d_size小于或等于预定义阈值时,达到最大递归深度。该阈值可以明确的包括在比特流中,或者可以是预定义的数值(如8),因此可以由解码器隐式推断。
[0145]
max_cu3d_size=max_ctu3d_size>>depth
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
(6)
[0146]
如图7所示,对于ctu3d 705,在张量的右侧和/或底部,在给定深度的父cu3d节点710可能没有全部4个子节点。对于位于张量右侧和/或底部的cu3d 710,cu3d_height是max_ctu3d_height/max_cu3d_height的余数,并且cu3d_width是max_ctu3d_width/max_cu3d_width的余数。
[0147]
在进一步的实施例中,使用基于速率失真(rate

distortion,rd)的编码算法决定是否将父cu3d划分为多个更小的子cu3d。如果这些更小的子cu3d的组合rd小于父cu3d的rd,则将父cu3d划分为多个更小的子cu3d。否则,不划分父cu3d。定义一个划分标志,以记录该划分决定。
[0148]
下面的表6和表7中列出了相应语法表的示例:
[0149]
表6
[0150][0151]
表7
[0152][0153]
split_flag是一个标志,用于指示父cu3d是否拆分为4个较小的子cu3d。
[0154]
图8是根据实施例的用于神经网络模型压缩的自适应块分区的方法800的流程图。在一些实施方式中,图8中的一个或多个过程块可由平台220执行。在一些实施方式中,图8的一个或多个过程块可以由与平台220分离、或包括平台220的另一设备或一组设备(例如,
用户设备210)执行。
[0155]
如图8所示,在操作810中,方法800包括将神经网络的四维(four

dimensional,4d)参数张量重塑为神经网络的三维(three

dimensional,3d)参数张量,3d参数张量包括卷积核大小、输入特征大小和输出特征大小。
[0156]
在操作820中,方法800包括沿着由输入特征大小和输出特征大小形成的平面,将3d参数张量划分为多个3d编码树单元(ctu3d)。
[0157]
在操作830中,方法800包括对多个ctu3d进行熵编码。
[0158]
多个ctu3d可能是不重叠的正方形块。
[0159]
方法800可以进一步包括设置一个标志,以指示每个ctu3d具有恒定大小。划分3d参数张量可以包括,基于被设置为指示每个ctu3d具有恒定大小的标志,沿着平面将3d参数张量划分成具有恒定大小的多个ctu3d。
[0160]
方法800可以进一步包括设置一个标志,以指示每个ctu3d都有一个根据卷积核大小缩放的大小。划分3d参数张量可以包括,基于被设置为指示每个ctu3d具有依据卷积核大小缩放的大小的标志,沿平面将3d参数张量划分为多个ctu3d,其中,多个ctu3d的大小基于卷积核大小缩放。
[0161]
对多个ctu3d进行熵编码可以包括,以水平方向或垂直方向的光栅扫描顺序对多个ctu3d进行熵编码。
[0162]
方法800可以进一步包括使用四叉树,将每个ctu3d递归地划分为多个3d编码单元(3d coding units,cu3ds),直到最大深度。
[0163]
对多个ctu3d进行熵编码可以包括扫描四叉树的第一深度,并在水平方向或垂直方向上以光栅扫描顺序对多个cu3d中的一个或多个cu3d进行熵编码,其中,多个cu3d中的一个或多个cu3d包括在所扫描的四叉树的第一深度中。
[0164]
多个cu3d可以是不重叠的方形块。
[0165]
将每个ctu3d划分为多个cu3d可以包括,确定子cu3d的组合速率失真是否小于多个cu3d中父cu3d的速率失真,并且当确定子cu3d的组合速率失真小于父cu3d的速率失真时,将父cu3d划分为多个子cu3d。
[0166]
尽管图8示出了方法800的示意块,在一些实施方式中,方法800可以包括与图8描绘的那些块相比额外的块、更少的块、不同的块、或不同排列的块。另外或替代地,方法800的两个或更多块可以并行执行。
[0167]
图9是根据实施例的用于神经网络模型压缩的自适应块分区的装置900的示意图。如图9所示,装置900包括重塑代码910,第一分区代码920和熵编码代码930。
[0168]
重塑代码910用于使得装置900的至少一个处理器将神经网络的4d参数张量重塑为神经网络的3d参数张量。3d参数张量包括卷积核大小、输入特征大小和输出特征大小。
[0169]
第一分区代码920用于使得至少一个处理器沿着由输入特征大小和输出特征大小形成的平面,将3d参数张量划分为多个3d编码树单元(ctu3d)。
[0170]
熵编码代码930用于使至少一个处理器对多个ctu3d进行熵编码。
[0171]
多个ctu3d可以是不重叠的方形块。
[0172]
装置900可以进一步包括设置代码940,用于使得至少一个处理器设置一个标志,以指示每个ctu3d具有恒定大小。第一分区代码920可以进一步用于使得至少一个处理器,
基于设置为指示每个ctu3d具有恒定大小的标志,将3d参数张量沿平面划分为具有恒定大小的多个ctu3d。
[0173]
设置代码940可以进一步用于使得至少一个处理器设置一个标志,以指示每个ctu3d都有一个根据卷积核大小缩放的大小。第一分区代码920还可以用于使至少一个处理器,基于该标志,其中该标志被设置为指示每个ctu3d的大小根据卷积核大小缩放,沿平面将3d参数张量划分为多个ctu3d,其中,多个ctu3d的大小根据卷积核大小缩放。
[0174]
熵编码代码930可以进一步用于使得至少一个处理器,以水平方向或垂直方向的光栅扫描顺序对多个ctu3d进行熵编码。
[0175]
装置900可以进一步包括第二分区代码950,用于使得至少一个处理器使用四叉树,将多个ctu3d中的每个ctu3d递归地划分为多个3d编码单元(cu3ds),直到最大深度。
[0176]
熵编码代码930可以进一步用于使得至少一个处理器扫描四叉树的第一深度,并以水平方向或垂直方向的光栅扫描顺序,对多个cu3d中的一个或多个cu3d进行熵编码,其中,多个cu3d中的一个或多个cu3d包括在所扫描的四叉树的第一深度中。
[0177]
多个cu3d可以是不重叠的方形块。
[0178]
第二分区代码950可以进一步用于使得至少一个处理器确定,多个子cu3d的组合速率失真是否小于多个cu3d中的父cu3d的速率失真,并且,当确定多个子cu3d的组合速率失真小于父cu3d的速率失真时,将父cu3d划分为多个子cu3d。
[0179]
现在将详细描述用于神经网络模型压缩的码本编码的方法和装置。
[0180]
码本用于重新索引cu3d的量化权重系数。
[0181]
在实施例中,使用k均值(k

means)方法生成大小为k的码本。
[0182]
在另一个实施例中,使用基于直方图的方法来生成码本。定义了一个大小为max_predictor_size的码本预测器,以存储从之前的多个码本生成的码本条目。生成量化系数的直方图。可选地,可以将相邻的多个直方图区间(bin)组合在一起。或者,也可以删除频率计数小的直方图区间。使用基于率失真(rate distortion,rd)的方法,将量化的区间(bin)质心与预测器中的所有条目进行比较,如果使用预测器中的条目获得更好的率失真,则该质心被预测器中的条目替换。重复此步骤,直到处理完所有直方图区间。将最大码本大小定义为max_codebook_size。如果区间的个数(k)小于最大码本大小max_codebook_size,则选择k个区间的质心作为码本;否则,选择区间质心的第一个最大码本大小max_codebook_size作为码本。在码本中,将从预测器获得的条目放置在码本的开头,后面跟着不是从预测器获得的条目。
[0183]
处理完这个cu3d后更新码本预测器,选择码本模式作为编码方式。在一个实施例中,码本预测器被当前码本代替。在另一个实施例中,从预测器中去除码本和预测器之间的重复质心,然后将码本插入到预测器的前面。如果新预测器的总大小大于大小max_predictor_size,则仅保留大小为max_predictor_size的第一项,并将剩余条目从预测器中删除;否则,为预测器保留所有条目。
[0184]
参照图10,预测码本条目是从预测器获得的多个条目。在比特流中编码预测码本条目的大小(predicted_size)。在一个实施例中,将该大小predicted_size当作语法元素并直接在比特流中编码。首先,对绝对值进行编码,然后,在绝对值不等于零时,对符号值进行编码。在另一实施例中,将来自先前处理的码本的大小predicted_size用作偏移量,将当
前大小predicted_size和先前大小predicted_size之间的差值视为语法元素并在比特流中编码。首先,对该差值的绝对值进行编码,然后,在绝对值不等于零时,对符号值进行编码。在又一实施例中,将先前处理的码本的大小(codebook_size)用作偏移量,并将当前大小predicted_size与先前处理的码本的先前大小(codebook_size)之间的差值视为语法元素并在比特流中编码。首先,对该差值的绝对值进行编码,然后,在绝对值不等于零时,对符号值进行编码。
[0185]
如图10所示,在实施例中,定义了一个大小为max_predictor_size(predicted_bitmap[max_predictor_size])的位图数组,其中,predicted_bitmap[n]=0指示码本预测器的条目n在码本中,并且predicted_bitmap[n]=1指示码本预测器的条目n不在该码本中。从第一元素开始,将预测位图(predicted_bitmap)的内容在比特流中逐一编码,直到最后一个0被编码。剩余元素可以始终为1,因此它们不会在比特流中编码。
[0186]
在另一实施例中,定义了大小为max_predictor_size(predicted_bitmap[max_predictor_size])的位图数组,其中predicted_bitmap[n]=1指示码本预测器的条目n在码本中,并且predicted_bitmap[n]=0指示码本预测器的条目n不在该码本中。从第一元素开始,将预测位图(predicted_bitmap)的内容在比特流中逐一编码,直到最后的1被编码。剩余元素可以始终为0,因此它们不会在比特流中编码。
[0187]
下面的表8中列出了对应语法表的示例:
[0188]
表8
[0189][0190]
abs_predicted_diff是predicted_size

prev_predicted_size的绝对值。
[0191]
sign是predicted_size

prev_predicted_size的符号位。
[0192]
predicted_flag是一个标志,其中,0表示位置n不是预测条目,并且,1表示位置n
是预测条目。
[0193]
参照图10,发信号通知的码本条目不是从预测器获得的条目。将发信号通知的码本条目的大小(signalled_size)定义为码本大小(codebook_size)与预测大小(predicted_size)之间的差值,并且将该差值在比特流中编码。具体来说,首先对该差值的绝对值进行编码,然后,在绝对值不等于零时,对符号值进行编码。
[0194]
发信号通知的信号码本条目的发送内容(signalled_size)包括量化的权重系数,所述权重系数可以是正数或负数或零。具有相同绝对值的条目不超过两个。定义了一个大小为signalled_size的delta数组,其中,delta[n]保存signalled[n]的绝对值与先前已编码的码本的绝对值之间的差值。在一个实施例中,用于第一个发信号通知的码本的先前已编码的码本是零。在另一实施例中,用于第一个发信号通知的码本的先前已编码的码本是最后预测的码本条目。
[0195]
为了对delta数组进行编码,首先,对delta[n]的有效状态进行编码,如果delta[n]不等于零,则对delta[n]的符号值进行编码,然后对delta[n]的绝对值进行编码。如果signalled[n

1]的绝对值在先前编码的码本条目、或先前编码的发信号通知的码本条目中出现两次,则跳过对delta[n]的有效状态的编码。此后,在比特流中编码signalled[]的符号位数组。
[0196]
下面的表9中列出了相应语法表的示例:
[0197]
表9
[0198][0199][0200]
signalled_size是发信号通知的码本大小。
[0201]
nzflag_delta是delta的非零标志。
[0202]
sign_delta是delta的符号位。
[0203]
abs_delta是delta的绝对值。
[0204]
sign是码本条目的符号位。
[0205]
下面表10中列出了相应语法表的另一个示例。
[0206]
表10
[0207][0208][0209]
在一个实施例中,对于cu3d中的每个已量化的权重系数(q),计算相应已量化的权重系数q与所有码本条目之间的绝对差,选择最小绝对差对应的码本索引(n)作为各个已量化的权重系数q的码本索引。使用权重系数的所有码本索引,构建该cu3d的索引图。
[0210]
在另一实施例中,对于cu3d中的每个已量化的权重系数(q),计算相应已量化的权重系数q与所有码本条目之间的绝对差,选择最小绝对差对应的码本索引(n)进行额外的率失真(rate distortion,rd)计算(rd_codebook)。还计算对该已量化的权重系数进行编码的rd(rd_escape)。如果额外的rd计算(rd_codebook)小于该rd(rd_escape),则选择该码本索引(n)作为相应的已量化的权重系数q的码本索引。否则,将一个特殊的转义索引(escape index)定义为码本的大小,并用作各个已量化的权重系数q的码本索引。使用该权重系数的码本索引和转义索引来构建该cu3d的索引图。
[0211]
将编码算法应用于已量化的权重系数和索引图(index map)系数,并且选择具有较好率失真的一种模式。这种模式决定在比特流中隐式编码。当预测的大小(predicted_size)和发信号通知的大小(signalled_size)都等于零时,可以推断出不使用码本的模式。
[0212]
图11是根据实施例的用于神经网络模型压缩的码本编码方法1100的流程图。在一些实施方式中,图11中的一个或多个过程块可由平台220执行。在一些实施方式中,图11中的一个或多个过程块可以由与平台220分离、或包括平台220的另一设备或一组设备(例如用户设备210)执行。
[0213]
如图11所示,在操作1110中,方法1100包括生成量化权重系数的直方图。
[0214]
在操作1120,方法1100包括将生成的直方图的每个区间的率失真与量化权重系数的码本预测器中的每个条目的率失真进行比较。
[0215]
在操作1130,方法1100包括,当比较得知直方图中多个区间中一个区间的率失真小于码本预测器中多个条目中一个条目的率失真时,使用多个条目中的该条目替换多个区间中的该区间,以生成用于重新索引量化权重系统的码本。
[0216]
方法1100还进一步包括生成预测位图,以指示码本预测器的每个条目是否在生成的码本中。
[0217]
尽管图11示出了方法1100的示例块,在一些实施方式中,方法1100可以包括与图11中描绘的那些块相比更多的块、更少的块、不同的块或不同排列的块。另外或替代地,方法1100的两个或更多个块可以并行执行。
[0218]
图12是根据实施例的用于神经网络模型压缩的码本编码装置1200的示意图。如图12所示,装置1200包括第一生成代码1210、比较代码1220、替换代码1230和第二生成代码1240。
[0219]
第一生成代码1210用于使得至少一个处理器生成量化权重系数的直方图。
[0220]
比较代码1220用于使得至少一个处理器,将生成的直方图的每个区间的率失真与量化权重系数的码本预测器中每个条目的率失真进行比较。
[0221]
替换代码1230用于使得至少一个处理器,当比较得知直方图中多个区间中一个区间的率失真小于码本预测器中多个条目中一个条目的率失真时,使用多个条目中的该条目替换多个区间中的该区间,以生成用于重新索引量化权重系统的码本。
[0222]
第二生成代码1240用于使得至少一个处理器生成预测位图,以指示码本预测器的每个条目是否在生成的码本中。
[0223]
前述公开提供了说明和描述,但并非旨在穷举或将实施限制为所公开的精确形式。根据上述公开内容可以进行修改和变化,也可以从实施方式的实践中获得修改和变化。
[0224]
如本文所用,术语组件旨在广义地解释为硬件、固件或硬件和软件的组合。
[0225]
显然,这里描述的系统和/或方法可以以不同形式的硬件、固件或硬件和软件的组合来实现。用于实施这些系统和/或方法的实际专用控制硬件或软件代码不限制实施。因此,此处描述的系统和/或方法的操作和行为没有参考特定的软件代码
‑‑
应当理解,可以设计软件和硬件来实现基于本文描述的系统和/或方法。
[0226]
尽管在权利要求中叙述了特征的组合,和/或,在说明书中公开了这些特征的组合,但这些组合并不旨在限制可能实现方式的公开。事实上,这些特征中的许多特征可以以权利要求中未具体记载和/或说明书中未公开的方式组合。尽管下面列出的每个从属权利要求可能仅直接依赖于一个权利要求,但可能的实现方式的公开包括每个从属权利要求与权利要求集合中所有其他权利要求的组合。
[0227]
除非明确说明,否则此处使用的任何元素、动作或指令均不得解释为关键或必要的。此外,如本文所用,冠词“一个(a)”和“一个(an)”旨在包括一个或多个项目,并且可以与“一个或多个”互换使用。此外,如本文所用,术语“集合”旨在包括一个或多个项目(例如,相关项目、不相关项目、相关项目和不相关项目的组合等),并且可以与“一个或多个”互换使用。如果仅打算使用一项,则使用术语“一个”或类似的语言。此外,如本文所用,术语“有(has)”、“有(have)”、“有(having)”等意为开放式术语。此外,除非另有明确说明,否则短语“基于(based on)”旨在表示“至少部分基于”。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献