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

用于关于神经网络模型压缩的基于统一的编码的方法和装置与流程

2022-07-23 04:00:15 来源:中国专利 TAG:

用于关于神经网络模型压缩的基于统一的编码的方法和装置
1.相关申请的交叉引用
2.本技术基于在美国专利商标局于2020年10月8日提交的美国临时专利申请第63/089,443号以及于2021年7月1日提交的美国专利申请第17/365,367号并要求这两个专利的优先权,以上两个专利的公开内容通过引用整体并入本文。


背景技术:

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


技术实现要素:

4.根据实施方式,用于关于神经网络模型压缩的基于统一的(unification based)编码的方法由至少一个处理器执行,并且包括:接收指示输入神经网络的量化的权重是否使用统一编码方法被编码的层统一标志;基于接收的层统一标志,确定量化的权重是否使用统一编码方法被编码;基于量化的权重被确定为使用统一编码方法被编码,使用统一编码方法对量化的权重进行编码;以及基于量化的权重被确定为不使用统一编码方法被编码,使用非统一编码方法对量化的权重进行编码。
5.根据实施方式,用于关于神经网络模型压缩的基于统一的编码的装置包括:至少一个存储器,其被配置成存储程序代码;以及至少一个处理器,其被配置成读取程序代码并按照程序代码所指示的进行操作。该程序代码包括:接收代码,其被配置成使至少一个处理器接收指示输入神经网络的量化的权重是否使用统一编码方法被编码的层统一标志;以及确定代码,其被配置成使至少一个处理器基于接收的层统一标志确定量化的权重是否使用统一编码方法被编码。该程序代码还包括:第一编码代码,其被配置成使至少一个处理器基于量化的权重被确定为使用统一编码方法被编码,使用统一编码方法对量化的权重进行编码;以及第二编码代码,其被配置成使至少一个处理器基于量化的权重被确定为不使用统一编码方法被编码,使用非统一编码方法对量化的权重进行编码。
6.根据实施方式,一种非暂态计算机可读存储介质存储如下指令,所述指令当由至少一个处理器执行以用于关于神经网络模型压缩的基于统一的编码时使至少一个处理器:接收指示输入神经网络的量化的权重是否使用统一编码方法被编码的层统一标志;基于接收的层统一标志,确定量化的权重是否使用统一编码方法被编码;基于量化的权重被确定为使用统一编码方法被编码,使用统一编码方法对量化的权重进行编码;并且基于量化的权重被确定为不使用统一编码方法被编码,使用非统一编码方法对量化的权重进行编码。
附图说明
7.图1是根据实施方式的可以实现本文描述的方法、装置和系统的环境的图。
8.图2是图1的一个或更多个设备的示例组件的框图。
9.图3是根据实施方式的用于神经网络模型压缩的系统的功能性框图。
10.图4是根据实施方式的使用垂直方向上的光栅扫描的自适应三维(3d)编码树单元(ctu3d)/3d编码单元(cu3d)划分的两个示例的图。
11.图5是根据实施方式的具有三个深度的3d-octree结构的示例的图。
12.图6a是根据实施方式的用于关于神经网络模型压缩的基于统一的编码的方法的流程图。
13.图6b是使用如图6a所示的统一编码方法对量化的权重进行编码的操作的流程图。
14.图7是根据实施方式的用于关于神经网络模型压缩的基于统一的编码的装置的框图。
具体实施方式
15.本公开内容涉及神经网络模型压缩。更具体地,本文描述的方法和装置涉及关于神经网络模型压缩的基线编码与统一编码之间的协调。
16.扫描顺序
17.在用于多媒体内容描述和分析的神经网络压缩中,编码方法以行优先的方式从左到右扫描参数张量,并从顶部到底部扫描行。
18.表1
[0019][0020]
二维(2d)整数数组statetranstab[][]指定了针对相关标量量化的状态转换表,如下所示:
[0021]
statetranstab[][]={{0,2},{7,5},{1,3},{6,4},{2,0},{5,7},{3,1},{4,6}}。
ꢀꢀꢀ
(1)
[0022]
量化
[0023]
在用于多媒体内容描述和分析的神经网络压缩中,使用了三种类型的量化方法:
[0024]
基线方法:使用由参数qpdensity和qp表示的固定步长以及等于零的标志dq_flag
将统一量化应用于参数张量。解码张量中的重构值是步长的整数倍。
[0025]
基于码本的方法:参数张量被表示为码本和索引的张量,索引的张量具有与原始张量相同的形状。码本的大小在编码器处被选择并作为元数据参数被发送。索引具有整数值,并将被进一步熵编码。码本由32个浮点值组成。解码张量中的重构值是由它们的索引值引用的码本元素的值。
[0026]
相关标量量化方法:每当标志dq_flag等于1时,使用由参数qpdensity和qp表示的固定步长和大小为8的状态转换表将相关标量量化应用于参数张量。解码张量中的重构值是步长的整数倍。
[0027]
熵编码
[0028]
在用于多媒体内容描述和分析的神经网络压缩中,编码方法从左到右以行优先的方式扫描参数张量,并从上到下扫描行。每个量化的参数水平根据以下采用整数参数maxnumnorem的过程被编码:
[0029]
在第一步骤中,针对量化的参数水平对二进制语法元素sig_flag进行编码,该量化的参数水平指定相应水平是否等于零。如果sig_flag等于1,则对另一个二进制语法元素sign_flag进行编码。仓(bin)指示当前参数水平是正还是负。接下来,对一元的仓序列进行编码,然后是如下固定长度的序列。
[0030]
使用零对变量k进行初始化,并使用1《《k对x进行初始化。对语法元素abs_level_greater_x进行编码,该语法元素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的代码被编码,该长度为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]
表2
[0037][0038]
sig_flag指定量化的权重quantparam[i]是否非零。等于0的sig_flag指示quantparam[i]为零。
[0039]
sign_flag指定量化的权重quantparam[i]为正还是为负。等于1的sign_flag指示quantparam[i]为负。
[0040]
abs_level_greater_x[j]指示quantparam[i]的绝对水平是否大于j 1。
[0041]
abs_level_greater_x2[j]包括指数golomb余数的一元部分。
[0042]
abs_remainder指示固定长度的余数。
[0043]
直接对量化的权重系数执行熵编码。在权重张量被划分成不交叠的ctu3d块之后不考虑局部分布。大多数权重系数在重新训练操作之后具有局部结构。利用3d-octree结构、3d-unitree结构、3d-tagtree结构和/或3d-unitagtree结构的方法可以通过使用ctu3d块的局部分布来生成更有效的表示。这些方法还没有与上述基线方法相协调。
[0044]
图1是根据实施方式的环境100的图,在该环境中可以实现本文描述的方法、装置和系统。
[0045]
如图1所示,环境100可以包括用户设备110、平台120和网络130。环境100的设备可以经由有线连接、无线连接或有线连接与无线连接的组合被互连。
[0046]
用户设备110包括能够接收、生成、存储、处理和/或提供与平台120相关联的信息的一个或更多个设备。例如,用户设备110可以包括计算设备(例如,台式计算机、膝上型计
算机、平板计算机、手持计算机、智能扬声器、服务器等)、移动电话(例如,智能电话、无线电话等)、可穿戴设备(例如,一副智能眼镜或智能手表)或类似设备。在一些实施方案中,用户设备110可以从平台120接收信息和/或向平台120发送信息。
[0047]
平台120包括本文中其他地方描述的一个或更多个设备。在一些实施方案中,平台120可以包括云服务器或云服务器组。在一些实施方案中,平台120可以被设计成模块化,使得软件组件可以被换入或换出。这样,平台120可以针对不同的用途被容易地和/或快速地重新配置。
[0048]
在一些实施方案中,如图所示,平台120可以托管在云计算环境122中。值得注意的是,虽然本文描述的实施方案将平台120描述为被托管在云计算环境122中,但是在一些实施方案中,平台120可以不基于云(即,可以在云计算环境之外实现)或者可以部分地基于云。
[0049]
云计算环境122包括托管平台120的环境。云计算环境122可以提供计算、软件、数据访问、存储等服务,这些服务不需要终端用户(例如,用户设备110)知道托管平台120的系统和/或设备的物理位置和配置。如图所示,云计算环境122可以包括一组计算资源124(共同称为“多个计算资源124”,以及单独称为“一个计算资源124”)。
[0050]
计算资源124包括一个或更多个个人计算机、工作站计算机、服务器设备或其他类型的计算和/或通信设备。在一些实施方案中,计算资源124可以托管平台120。云资源可以包括在计算资源124中执行的计算实例、在计算资源124中提供的存储设备、由计算资源124提供的数据传输设备等。在一些实施方案中,计算资源124可以经由有线连接、无线连接或有线连接与无线连接的组合与其他计算资源124通信。
[0051]
如图1中进一步所示,计算资源124包括一组云资源,诸如一个或更多个应用(“application,app”)124-1、一个或更多个虚拟机(“virtual machine,vm”)124-2、虚拟化存储设备(“virtualized storage,vs”)124-3、一个或更多个监管器(“hypervisor,hyp”)124-4等。
[0052]
应用124-1包括可以被提供给用户设备110和/或平台120或者由用户设备110和/或平台120访问的一个或更多个软件应用。应用124-1可以消除在用户设备110上安装和执行软件应用的需要。例如,应用124-1可以包括与平台120相关联的软件和/或能够经由云计算环境122提供的任何其他软件。在一些实施方案中,一个应用124-1可以经由虚拟机124-2向/从一个或更多个其他应用124-1发送/接收信息。
[0053]
虚拟机124-2包括像物理机器一样执行程序的机器(例如,计算机)的软件实施方案。虚拟机124-2可以是系统虚拟机或进程虚拟机,这取决于虚拟机124-2对任何真实机器的使用和对应程度。系统虚拟机可以提供支持完整的操作系统(“operating system,os”)的执行的完整的系统平台。进程虚拟机可以执行单个程序,并且可以支持单个进程。在一些实施方案中,虚拟机124-2可以代表用户(例如,用户设备110)执行,并且可以管理云计算环境122的基础结构诸如数据管理、同步或长持续时间数据传输。
[0054]
虚拟化存储设备124-3包括在计算资源124的存储系统或设备中使用虚拟化技术的一个或更多个存储系统和/或一个或更多个设备。在一些实施方案中,在存储系统的上下文中,虚拟化的类型可以包括块虚拟化和文件虚拟化。块虚拟化可以指逻辑存储与物理存储的抽象(或分离),使得存储系统可以在不考虑物理存储或异构结构的情况下被访问。分
离可以允许存储系统的管理员在管理员如何管理针对终端用户的存储方面的灵活性。文件虚拟化可以消除以文件级别访问的数据与物理地存储文件的位置之间的依赖性。这可以使得能够优化存储使用、服务器整合和/或无中断文件迁移的性能。
[0055]
监管器124-4可以提供允许多个操作系统(例如,“客户操作系统”)在诸如计算资源124的主计算机上同时执行的硬件虚拟化技术。监管器124-4可以向客户操作系统呈现虚拟操作平台,并且可以管理客户操作系统的执行。各种操作系统的多个实例可以共享虚拟化硬件资源。
[0056]
网络130包括一个或更多个有线网络和/或无线网络。例如,网络130可以包括蜂窝网络(例如,第五代(fifth generation,5g)网络、长期演进(long-term evolution,lte)网络、第三代(third generation,3g)网络、码分多址(code division multiple access,cdma)网络等)、公共陆地移动网络(public land mobile network,plmn)、局域网(local area network,lan)、广域网(wide area network,wan)、城域网(metropolitan area network,man)、电话网络(例如,公共交换电话网络(public switched telephone network,pstn))、专用网络、自组织网络、内联网、互联网、基于光纤的网络等、以及/或者这些或其他类型的网络的组合。
[0057]
图1所示的设备和网络的数目和布置作为示例被提供。实际上,与图1所示的设备和/或网络相比,可以存在另外的设备和/或网络、更少的设备和/或网络、不同的设备和/或网络、或者不同布置的设备和/或网络。此外,图1所示的两个或更多个设备可以在单个设备内实现,或者图1所示的单个设备可以实现为多个分布式设备。另外地或可替选地,环境100的设备的集合(例如,一个或更多个设备)可以执行被描述为由环境100的另一个设备的集合执行的一个或更多个功能。
[0058]
图2是图1的一个或更多个设备的示例组件的框图。
[0059]
设备200可以对应于用户设备110和/或平台120。如图2所示,设备200可以包括总线210、处理器220、存储器230、存储组件240、输入组件250、输出组件260和通信接口270。
[0060]
总线210包括允许设备200的组件之间的通信的组件。处理器220以硬件、固件或硬件与软件的组合来实现。处理器220是中央处理单元(central processing unit,cpu)、图形处理单元(graphics processing unit,gpu)、加速的处理单元(accelerated processing unit,apu)、微处理器、微控制器、数字信号处理器(digital signal processor,dsp)、现场可编程门阵列(field-programmable gate array,fpga)、专用集成电路(application-specific integrated circuit,asic)或其他类型的处理组件。在一些实施方案中,处理器220包括能够被编程以执行功能的一个或更多个处理器。存储器230包括随机存取存储器(random access memory,ram)、只读存储器(read only memory,rom)和/或存储由处理器220使用的信息和/或指令的其他类型的动态或静态存储设备(例如闪存、磁存储器和/或光存储器)。
[0061]
存储组件240存储与设备200的操作和使用相关的信息和/或软件。例如,存储组件240可以包括硬盘(例如,磁盘、光盘、磁光盘和/或固态盘)、致密盘(compact disc,cd)、数字多功能盘(digital versatile disc,dvd)、软盘、盒式磁带、磁带和/或其他类型的非暂态计算机可读介质连同相应的驱动器。
[0062]
输入组件250包括允许设备200例如经由用户输入(例如,触摸屏显示器、键盘、小
键盘、鼠标、按钮、开关和/或麦克风)接收信息的组件。另外地或可替选地,输入组件250可以包括用于感测信息的传感器(例如,全球定位系统(global positioning system,gps)组件、加速度计、陀螺仪和/或致动器)。输出组件260包括从设备200提供输出信息的组件(例如,显示器、扬声器和/或一个或更多个发光二极管(light-emitting diode,led))。
[0063]
通信接口270包括类似收发器的组件(例如,收发器和/或分离的接收器和发送器),该类似收发器的组件使设备200能够例如经由有线连接、无线连接或有线连接与无线连接的组合与其他设备通信。通信接口270可以允许设备200从另一设备接收信息和/或向另一设备提供信息。例如,通信接口270可以包括以太网接口、光接口、同轴接口、红外接口、射频(radio frequency,rf)接口、通用串行总线(universal serial bus,usb)接口、wi-fi接口、蜂窝网络接口等。
[0064]
设备200可以执行本文中描述的一个或更多个过程。设备200可以响应于处理器220执行由诸如存储器230和/或存储组件240的非暂态计算机可读介质存储的软件指令来执行这些过程。计算机可读介质在本文中被定义为非暂态存储设备。存储设备包括单个物理存储设备内的存储空间或跨多个物理存储设备分布的存储空间。
[0065]
软件指令可以经由通信接口270从另一计算机可读介质或从另一设备读入到存储器230和/或存储组件240中。存储在存储器230和/或存储组件240中的软件指令在被执行时可以使处理器220执行本文中描述的一个或更多个过程。另外地或可替选地,可以使用硬连线电路系统来代替软件指令或者与软件指令组合以执行本文中描述的一个或更多个过程。因此,本文描述的实施方案不限于硬件电路系统与软件的任何特定组合。
[0066]
图2中所示的组件的数目和布置作为示例被提供。实际上,与图2中所示的组件相比,设备200可以包括另外的组件、更少的组件、不同的组件或不同布置的组件。另外地或可替选地,设备200的组件集(例如,一个或更多个组件)可以执行被描述为由设备200的另一组件集执行的一个或更多个功能。
[0067]
图3是根据实施方式的用于神经网络模型压缩的系统300的功能性框图。
[0068]
如图3所示,系统300包括参数缩减模块310、参数近似模块320、重构模块330、编码器340和解码器350。
[0069]
参数缩减模块310减少输入神经网络的参数集,以获得输出神经网络。神经网络可以包括由深度学习框架指定的参数和架构。
[0070]
例如,参数缩减模块310可以使神经网络的连接稀疏化(将权重设置为零)和/或删减神经网络的连接。在另一示例中,参数缩减模块310可以对神经网络的参数张量执行矩阵分解以形成更小的参数张量的集合。参数缩减模块310可以级联地执行这些方法,例如,可以首先使权重稀疏化,然后分解所得矩阵。
[0071]
参数近似模块320对从输出神经网络提取的参数张量应用参数近似技术,该输出神经网络从参数缩减模块310获得。例如,这些技术可以包括量化、变换和预测中的任何一种或任何组合。参数近似模块320输出没有被参数近似模块320修改的第一参数张量、被参数近似模块320修改或近似的第二参数张量、以及用于根据修改的第二参数张量重构没有被参数近似模块320修改的原始参数张量的相应元数据。
[0072]
重构模块330使用从参数近似模块320和/或解码器350获得的相应元数据,根据从参数近似模块320和/或解码器350获得的修改的第二参数张量来重构原始参数张量。重构
模块330可以使用重构的原始参数张量和第一参数张量来重构输出神经网络。
[0073]
编码器340可以对从参数近似模块320获得的第一参数张量、第二参数张量和相应的元数据执行熵编码。该信息可以被编码成到解码器350的比特流。
[0074]
解码器350可以对从编码器340获得的比特流进行解码,以获得第一参数张量、第二参数张量和相应的元数据。
[0075]
系统300可以在平台120中实现,以及图3的一个或更多个模块可以由与平台120分离或包括平台120的设备或设备组诸如用户设备110来执行。
[0076]
现在将详细描述用于关于神经网络模型压缩的基于统一的编码的方法和装置。
[0077]
ctu3d和递归cu3d块划分
[0078]
对于布局为[r][s][c][k]的卷积层,权重张量的维度通常为4;对于布局为[c][k]的全连接层,权重张量的维度通常为2;以及对于偏置和批量正常层,权重张量的维度通常为1,其中r/s是卷积核大小,c是输入特征大小,以及k是输出特征大小。
[0079]
对于卷积层,2d[r][s]维度被重塑为一维(1d)[rs]维度,使得四维(4d)张量[r][s][c][k]被重塑为3d张量[rs][c][k]。全连接层被当作r=s=1的3d张量的情况。
[0080]
沿着[c][k]平面的3d张量[rs][c][k]被划分成不交叠的较小的块(ctu3d)。每个ctu3d具有[rs][ctu3d_height][ctu3d_width]的形状,其中ctu3d_height=max_ctu3d_height,以及ctu3d_width=max_ctu3d_width。
[0081]
如图4所示,对于ctu3d 410,在张量的右侧和/或底部,给定深度的父cu3d节点420可能不具有所有4个子节点。对于位于张量的右侧和/或底部的父cu3d节点420,其ctu3d_height是c/max_ctu3d_height的余数,并且其ctu3d_width是k/max_ctu3d_width的余数。
[0082]
max_ctu3d_height和max_ctu3d_width的值可以明确地用信号通知给比特流,或者可以被不明确地推断。当max_ctu3d_height=c并且max_ctu3d_width=k时,块划分被禁用。
[0083]
使用简化的分块结构,在简化的分块结构中,使用四叉树结构递归地将ctu3d/cu3d划分成较小的cu3d直到达到最大递归深度。从ctu3d节点开始,使用深度优先四叉树扫描顺序扫描和处理该cu3d的四叉树。使用光栅扫描顺序在水平方向或垂直方向对同一父节点下的子节点进行扫描和处理。
[0084]
在实施方式中,对于给定四叉树深度下的cu3d,使用以下公式计算这些cu3d的max_cu3d_height/max_cu3d_width,并且当max_cu3d_height和max_cu3d_width中的每一个小于或等于预定义阈值时达到最大递归深度。该阈值可以明确地包括在比特流中,或者可以是预定义的值(诸如8)使得该阈值可以由解码器不明确地推断。当预定义阈值为ctu3d的大小时,该递归划分被禁用。
[0085]
max_cu3d_height=max_ctu3d_height》》depth。
ꢀꢀꢀ
(2)
[0086]
max_cu3d_width=max_ctu3d_width》》depth。
ꢀꢀꢀ
(3)
[0087]
基于率失真(rate-distortion,rd)的编码算法被用于决定是否将父cu3d分割成多个较小的子cu3d。如果这些较小的子cu3d的组合的rd小于来自父cu3d的rd,则父cu3d被分割成多个较小的子cu3d。否则,不分割该父cu3d。分割标志被定义为用于记录分割决定。该标志可以在编码单元(coding unit,cu)划分的最后深度被跳过。
[0088]
在实施方式中,执行递归cu3d块划分操作,并且分割标志被定义为用于记录分割
决定。
[0089]
在实施方式中,不执行递归cu3d块划分操作,并且没有分割标志被定义为用于记录分割决定。在这种情况下,cu3d块与ctu3d块相同。
[0090]
3d-金字塔结构
[0091]
3d-金字塔结构是其中每个内部节点正好具有八个子节点的树数据结构。3d-金字塔用于通过沿z、y、x轴递归地将三维张量细分为八个八分体来对该三维张量进行划分。
[0092]
可以使用多种方法来构建这种3d树结构以表示cu3d中的系数。
[0093]
cu3d的3d-octree构造如下:3d-octree位置在最后深度处的节点值1指示对应的cu3d中的码本索引(如果使用码本编码方法)或系数(如果使用直接量化编码方法)非零,并且3d-octree位置在底部深度处的节点值0指示对应的cu3d中的码本索引或系数为零。3d-octree位置在另一深度处的节点值被定义为其八个子节点的最大值。
[0094]
如图5所示,octree 500是其中每个内部节点510恰好具有八个子节点520的树数据结构。3d-octree用于通过沿z、y、x轴递归地将三维张量530细分为八个八分体540来对该三维张量进行划分。
[0095]
cu3d的3d-unitree被构造如下:3d-unitree位置在除了最后深度之外的深度处的节点值1指示该3d-unitree的子节点(及这些子节点的子节点,包括最后深度处的节点)具有不统一(不同)的值,以及3d-unitree位置在除了最后深度之外的深度处的节点值0指示该3d-unitree的所有子节点(及这些子节点的子节点,包括最后深度处的节点)具有统一(相同)的绝对值。
[0096]
cu3d的3d-tagtree被构造如下:3d-tagtree位置在最后深度处的节点值指示对应的cu3d中的码本索引(如果使用码本编码方法)或绝对系数(如果使用直接量化编码方法)的绝对值非零。3d-tagtree位置在另一深度处的节点值被定义为该3d-tagtree的八个子节点的最小值。
[0097]
cu3d的3d-unitagtree通过组合3d-tagtree和3d-unitree来构建。
[0098]
对于一些具有不同深度/高度/宽度的cu3d,不具有足够的系数来构建完整的3d-金字塔,在该完整的3d-金字塔中,每个父节点具有全部可用的八个子节点。如果父节点不具有全部八个子节点,则跳过对这些不存在的子节点的扫描和编码。
[0099]
3d-金字塔扫描顺序
[0100]
在构建了3d金字塔之后,使用预定义的扫描顺序遍历(walk through)所有节点以对节点值进行编码。
[0101]
在实施方式中,从顶部节点开始,使用深度优先搜索扫描顺序遍历所有节点。共享同一父节点的子节点的扫描顺序可以被任意定义,诸如(0,0,0)-》(0,0,1)-》(0,1,0)-》(0,1,1)-》(1,0,0)-》(1,0,1)-》(1,1,0)-》(1,1,1)。
[0102]
在实施方式中,从顶部节点开始,使用广度优先搜索扫描顺序遍历所有节点。因为每个金字塔深度是3d形状,所以每个深度中的扫描顺序可以被任意定义。在实施方式中,使用下面的伪代码来定义扫描顺序,以与金字塔编码方法对齐:
[0103][0104]
encoding_start_depth语法元素指示参与编码过程的第一深度。当使用预定义的扫描顺序遍历所有节点时,如果当前节点的深度高于encoding_start_depth,则跳过对该节点值的编码。多个cu3d、ctu3d、层或模型可以共享一个encoding_start_depth。
[0105]
在实施方式中,encoding_start_depth被明确地用信号通知给比特流。
[0106]
在实施方式中,encoding_start_depth被预定义,并且被不明确地推断。
[0107]
在实施方式中,encoding_start_depth被设置为3d-金字塔结构的最后深度,并且被不明确地推断。
[0108]
3d-金字塔编码方法
[0109]
存在遍历所有节点并对由不同的3d树表示的系数进行编码的不同的方法。
[0110]
对于3d-octree,在实施方式中,如果父节点的值为0,则跳过对该父节点的子节点(及这些子节点的子节点)的扫描和编码,因为该父节点的子节点(及这些子节点的子节点)的值可能总是0。如果父节点的值为1,而除了最后子节点之外的所有子节点的值都为0,则仍扫描最后子节点,但会跳过对该最后子节点的值的编码,因为该最后子节点的值可能总是1。如果当前深度是金字塔的最后深度并且如果当前节点值为1,则当不使用码本方法时,映射值的符号被编码,随后是映射值本身被编码。
[0111]
对于3d-unitree,在实施方式中,给定节点的值被编码。如果节点值为零,则对该给定节点的对应的统一的值进行编码,并跳过对该给定节点的子节点(及这些子节点的子节点)的编码,因为该给定节点的子节点(及这些子节点的子节点)的绝对值可能总是等于统一的值。该给定节点的子节点继续被扫描直到到达底部深度,其中如果节点值非零,则对每个子节点的符号位进行编码。
[0112]
对于3d-unitree,在实施方式中,给定节点的值被编码。如果节点值为零,则对该给定节点的对应的统一的值进行编码,并且跳过对该给定节点的子节点(及这些子节点的子节点)的扫描和编码,因为该给定节点的子节点(及这些子节点的子节点)的绝对值可能总是等于统一的值。并且在该cu3d中的所有节点被处理之后,再次扫描金字塔,并且如果节点值非零,则对底部深度处的每个子节点的符号位进行编码。
[0113]
对于3d-tagtree,在实施方式中,如果节点是不具有父节点的顶部节点,则对值进行编码。对于任何子节点,对父节点与该子节点之间的差异进行编码。如果父节点的值为x并且除了最后子节点之外的所有子节点的值都大于x,则仍然对最后子节点进行扫描,但是可能跳过对最后子节点的值的编码,因为它们可能总是x。
[0114]
对于3d-unitagtree,在实施方式中,首先对来自unitree的给定节点的值进行编码。tagtree编码方法用于在节点是不具有父节点的顶部节点的情况下对tagtree值进行编码,或者对父节点与该子节点之间的tagtree值的差异进行编码。还采用了在tagtree编码部分中介绍的节点跳过方法。如果unitree节点值为零,则跳过对该unitree的子节点(及这
些子节点的子节点)的扫描和编码,因为该unitree的子节点(及这些子节点的子节点)的值可能总是等于统一的值。
[0115]
存在start_depth是最后深度的情况。在实施方式中,先前描述的这些系数跳过方法被禁用,因此所有系数被编码。在实施方式中,为了利用先前描述的这些系数跳过方法,通过调整start_depth使得start_depth是第二最后深度来对3d-金字塔树进行编码。在实施方式中,对于3d-unitagtree,通过调整start_depth使得start_depth是第二最后深度来对3d-金字塔树的unitree部分进行编码,并且在不调整start_depth的情况下对3d-金字塔树的tagtree部分进行编码。
[0116]
针对卷积和全连接层定义层统一标志(例如,layer_uniform_flag),以指示该层是否使用可以称为统一编码方法的3d-金字塔编码方法进行编码。
[0117]
如果layer_uniform_flag标志等于零,则使用当前工作草案中描述的方法对该层进行编码,这些方法可以称为非统一编码方法。
[0118]
如果layer_uniform_flag等于1,则该层被重塑为ctu3d布局。对于每个ctu3d,定义ctu3d统一标志(例如,ctu3d_uniform_flag)以指示底部深度处共享同一父节点的所有子节点是否统一(不共享同一父节点的节点可能具有不同的统一值)。
[0119]
如果ctu3d统一标志(例如,ctu3d_uniform_flag)等于1,则对于该ctu3d,底部深度处共享同一父节点的所有子节点是统一的(不共享同一父节点的节点可能具有不同的统一值)。在实施方式中,使用3d-unitree编码方法(可以称为统一编码方法)来对该ctu3d进行编码。encoding_start_depth被设置为3d-金字塔结构的最后深度,并被不明确地推断。可以跳过对节点的统一值的编码,因为节点的统一值可能总是0。在实施方式中,可以针对底部深度处共享同一父节点的所有子节点对一个统一值进行编码,接着在节点值为非零值的情况下对这些子节点的符号位进行编码。在实施方式中,可以针对底部深度处共享同一父节点的所有子节点对一个统一值进行编码。并且在该cu3d中的所有节点都被处理之后,再次扫描金字塔,并且如果节点值非零,则对底部深度处的每个子节点的符号位进行编码。
[0120]
如果ctu3d_uniform_flag标志等于零,则在实施方式中,使用3d-tagtree编码方法(可以称为非统一编码方法)来对该ctu3d进行编码。encoding_start_depth被设置为3d-金字塔结构的最后深度,并被不明确地推断。在实施方式中,基于预定义的扫描顺序对子节点的值进行编码。在实施方式中,基于预定义的扫描顺序,对子节点的绝对值进行编码,随后对该子节点的符号位进行编码。在实施方式中,基于预定义的扫描顺序对所有子节点的绝对值进行编码。在对该cu3d中的所有节点处理之后,如果节点值非零,则对所有子节点的符号位进行编码。
[0121]
相关量化
[0122]
由于重构值之间的相关性,相关量化过程可能需要以扫描顺序(以与参数被熵解码相同的顺序)重构参数。然后,通过以下步骤实现相关标量量化的方法:a)定义两个具有不同的重构水平的标量量化器;以及b)定义在两个标量量化器之间切换的过程。
[0123]
类似于传统的统一重构量化器,对于两个量化器(由图4中的q0和q1表示),可用的重构水平的位置由量化步长δ唯一地指定。两个标量量化器q0和q1表征如下。
[0124]
q0:第一量化器q0的重构水平由量化步长δ的偶数整数倍给出。当使用该量化器时,根据t

=2
·k·
δ计算重构的神经网络参数t

,其中k表示相关的参数水平(传输的量
化指数)。
[0125]
q1:第二量化器q1的重构水平由量化步长δ的奇数整数倍给出,此外,重构水平等于零。神经网络参数水平k到重构的参数t

的映射由t

=(2
·
k-sgn(k))
·
δ指定,其中sgn(
·
)表示符号函数:
[0126][0127]
代替在比特流中明确地用信号通知当前权重参数的所使用的量化器(q0或q1),量化器由编码/重构顺序中在当前权重参数之前的权重参数水平的奇偶校验来确定。量化器之间的切换经由表3表示的状态机实现。状态具有八个可能的值(0、1、2、3、4、5、6、7),并且由编码/重构顺序中在当前权重参数之前的权重参数水平的奇偶校验唯一地确定。对于每个层,状态变量最初被设置为0。每当重构权重参数时,状态随后根据表3被更新,其中k表示变换系数水平的值。下一个状态仅取决于当前状态和当前权重参数水平k的奇偶校验(k&1)。因此,状态更新可以通过以下方式获得:state=sttab[state][k&1],其中sttab表示表3。
[0128]
表3:用于确定用于神经网络参数的标量量化器的状态转换表,其中k表示神经网络参数的值。
[0129][0130]
状态唯一地指定所使用的标量量化器。如果当前权重参数的状态值是偶数(0,2,4,6),则使用标量量化器q0。否则,如果状态值是奇数(1,3,5,7),则使用标量量化器q1。
[0131]
因为相关量化过程可能需要以扫描顺序(以参数被熵解码的相同顺序)重构参数,所以基线编码方法中的所有系数都被扫描和熵编码。然而,由于3d-金字塔编码方法的性质,系数可以从熵编码过程中跳过。
[0132]
在实施方式中,当使用3d-金字塔编码方法时,相关量化过程被禁用。
[0133]
在实施方式中,当使用3d-金字塔编码方法时,启用相关量化过程。相关量化构造
过程被改变,使得这些系数在从熵编码过程中跳过时可以被排除在相关量化系数的构造之外。系数的绝对值用于构造相关量化。
[0134]
熵编码的上下文更新
[0135]
基线编码方法将4d权重张量重塑为2d权重张量。先前编码的权重系数被保存为相邻权重,并用于更新当前系数的上下文。当多个被编码的系数可以被输入通道乘以核大小相除时,保存的系数被重置为零。
[0136]
基于统一的编码方法将4d权重张量重塑为3d权重张量。
[0137]
在实施方式中,当更新相邻权重时,先前编码的权重系数被保存为相邻权重,并用于更新当前系数的上下文。当多个编码系数可以被输入通道乘以核大小相除时,保存的系数被重置为零。
[0138]
在实施方式中,当更新相邻权重时,先前编码的权重系数被保存为相邻权重,并用于更新当前系数的上下文。当多个被编码的系数可以除以核大小时,保存的系数被重置为零。
[0139]
语法表
[0140]
下面列出了相应的语法表的示例。粗体元素是语法元素。
[0141]
ndim(arrayname[])返回arrayname[]的维数。
[0142]
scan_order根据下表指定针对具有多于一个的维度的参数的块扫描顺序:
[0143]
0:没有块扫描
[0144]
1:8x8个块
[0145]
2:16x16个块
[0146]
3:32x32个块
[0147]
4:64x64个块
[0148]
表4
[0149]
[0150][0151]
layer_uniform_flag指定量化的权重quantparam[]是否使用统一方法被编码。layer_uniform_flag等于1指示quantparam[]使用统一方法被编码。
[0152]
表5
[0153][0154]
2d整数数组statetranstab[][]指定了相关标量量化的状态转换表并且如下:
[0155]
statetranstab[][]={{0,2},{7,5},{1,3},{6,4},{2,0},{5,7},{3,1},{4,6}}
[0156]
表6
[0157]
[0158]
[0159]
[0160][0161]
ctu3d_uniform_flag指定量化的ctu3d权重quantparam[]是否使用统一方法被编码。ctu3d_uniform_flag等于1指示quantparam[]使用统一方法被编码。
[0162]
sign_flag指定量化的权重quantparam[i]是正还是负。sign_flag等于1指示quantparam[i]为负。
[0163]
表7
[0164]
[0165]
[0166][0167]
sig_flag指定量化的权重quantparam[i]是否非零。sig_flag等于0指示quantparam[i]为零。
[0168]
sign_flag指定量化的权重quantparam[i]是正还是负。sign_flag等于1指示quantparam[i]为负。
[0169]
abs_level_greater_x[j]指示quantparam[i]的绝对水平是否大于j 1。
[0170]
abs_level_greater_x2[j]包括指数golomb余数的一元部分。
[0171]
abs_remainder指示固定长度的余数。
[0172]
图6a是根据实施方式的用于关于神经网络模型压缩的基于统一的编码的方法600的流程图。
[0173]
在一些实施方案中,图6的一个或更多个过程块可以由平台120执行。在一些实施方案中,图6的一个或更多个过程块可以由与平台120分离或包括平台120的另一设备或设备组诸如用户设备110来执行。
[0174]
如图6a所示,在操作610中,方法600包括接收层统一标志,该层统一标志指示输入神经网络的被量化的权重是否使用统一编码方法被编码。
[0175]
在操作620中,方法600包括:基于接收到的层统一标志,确定被量化的权重是否使用统一编码方法被编码。
[0176]
基于量化的权重被确定为使用统一编码方法被编码(操作620-是),在操作630中,方法600包括使用统一编码方法对量化的权重进行编码。
[0177]
基于量化的权重被确定为没有使用统一编码方法被编码(操作620-否),在操作640中,方法600包括使用非统一编码方法对量化的权重进行编码。
[0178]
图6b是如图6a所示的使用统一编码方法对量化的权重进行编码的操作630的流程图。
[0179]
如图6b所示,在操作650中,操作630包括将输入神经网络的量化的权重划分成多个三维编码树单元(ctu3d)。
[0180]
在操作660中,操作630包括接收ctu3d统一标志,该ctu3d统一标志指示多个ctu3d之一的量化的权重是否使用统一编码方法被编码。
[0181]
在操作670中,操作630包括:基于接收到的ctu3d统一标志,确定多个ctu3d之一的量化的权重是否使用统一编码方法被编码。
[0182]
基于多个ctu3d之一的量化的权重被确定为使用统一编码方法被编码(操作670-是),在操作680中,操作630包括使用统一编码方法对多个ctu3d之一的量化的权重进行编码。
[0183]
基于多个ctu3d之一的量化的权重被确定为没有使用统一编码方法被编码(操作670-否),在操作690中,操作630包括使用非统一编码方法对多个ctu3d之一的量化的权重
进行编码。
[0184]
使用统一编码方法对多个ctu3d之一的量化的权重进行编码可以包括:使用3d-unitree编码方法对多个ctu3d之一的量化的权重进行编码。
[0185]
方法600还可以包括:基于多个ctu3d之一的量化的权重被编码,使用3d-unitree编码方法对指示多个ctu3d之一的量化的权重是正还是负的符号标志进行编码。
[0186]
方法600还可以包括:基于多个ctu3d中的每一个的量化的权重被编码,使用3d-unitree编码方法对指示多个ctu3d中的每一个的量化的权重是正还是负的符号标志进行编码。
[0187]
使用非统一编码方法对多个ctu3d之一的量化的权重进行编码可以包括:使用3d-tagtree编码方法对多个ctu3d之一的量化的权重进行编码。
[0188]
方法600还可以包括:基于多个ctu3d之一的量化的权重被编码,使用3d-tagtree编码方法对指示多个ctu3d之一的量化的权重是正还是负的符号标志进行编码。
[0189]
方法600还可以包括:基于多个ctu3d中的每一个的量化的权重被编码,使用3d-tagtree编码方法对指示多个ctu3d中的每一个的量化的权重是正还是负的符号标志进行编码。
[0190]
虽然图6示出了方法600的示例块,但是在一些实施方案中,与图6所描绘的那些块相比,方法600可以包括另外的块、更少的块、不同的块或不同布置的块。另外地或可替选地,方法600的块中的两个或更多个可以被并行执行。
[0191]
图7是根据实施方式的用于关于神经网络模型压缩的基于统一的编码的装置700的图。
[0192]
如图7所示,装置700包括接收代码710、确定代码720、第一编码代码730、第二编码代码740以及划分代码750。
[0193]
接收代码710被配置成使至少一个处理器接收层统一标志,该层统一标志指示输入神经网络的量化的权重是否使用统一编码方法被编码。
[0194]
确定代码720被配置成使至少一个处理器基于接收到的层统一标志来确定量化的权重是否使用统一编码方法被编码。
[0195]
第一编码代码730被配置成:使至少一个处理器基于量化的权重被确定为使用统一编码方法被编码,使用统一编码方法对量化的权重进行编码。
[0196]
第二编码代码740被配置成:使至少一个处理器基于量化的权重被确定为没有使用统一编码方法被编码,使用非统一编码方法对量化的权重进行编码。
[0197]
划分代码750被配置成使至少一个处理器将输入神经网络的量化的权重划分成多个三维编码树单元(ctu3d)。
[0198]
接收代码710还被配置成使至少一个处理器接收ctu3d统一标志,该ctu3d统一标志指示多个ctu3d之一的量化的权重是否使用统一编码方法被编码。
[0199]
确定代码720还被配置成:使至少一个处理器基于接收到的ctu3d统一标志,确定多个ctu3d之一的量化的权重是否使用统一编码方法被编码。
[0200]
第一编码代码730还被配置成:使至少一个处理器基于多个ctu3d之一的量化的权重被确定为使用统一编码方法被编码,使用统一编码方法对多个ctu3d之一的量化的权重进行编码。
[0201]
第二编码代码740还被配置成:使至少一个处理器基于多个ctu3d之一的量化的权重被确定为没有使用统一编码方法被编码,使用非统一编码方法对多个ctu3d之一的量化的权重进行编码。
[0202]
第一编码代码730还可以被配置成:使至少一个处理器使用3d-unitree编码方法对多个ctu3d之一的量化的权重进行编码。
[0203]
第一编码代码730还可以被配置成:使至少一个处理器基于多个ctu3d之一的量化的权重被编码,使用3d-unitree编码方法对指示多个ctu3d之一的量化的权重是正还是负的符号标志进行编码。
[0204]
第一编码代码730还可以被配置成:使至少一个处理器基于多个ctu3d中的每一个的量化的权重被编码,使用3d-unitree编码方法对指示多个ctu3d中的每一个的量化的权重是正还是负的符号标志进行编码。
[0205]
第二编码代码740还可以被配置成:使至少一个处理器使用3d-tagtree编码方法对多个ctu3d之一的量化的权重进行编码。
[0206]
第二编码代码740还可以被配置成:使至少一个处理器基于多个ctu3d之一的量化的权重被编码,使用3d-tagtree编码方法对指示多个ctu3d之一的量化的权重是正还是负的符号标志进行编码。
[0207]
第二编码代码740还可以被配置成:使至少一个处理器基于多个ctu3d中的每一个的量化的权重被编码,使用3d-tagtree编码方法对指示多个ctu3d中的每一个的量化的权重是正还是负的符号标志进行编码。
[0208]
前述公开内容提供了说明和描述,但不旨在穷举或将实施方案限制于所公开的精确形式。修改和变化鉴于以上公开内容是可行的,或者可以从实施方案的实践中获得。
[0209]
如本文中所使用的,术语“组件”旨在被广义地解释为硬件、固件或硬件与软件的组合。
[0210]
将明显的是,本文中描述的系统和/或方法可以以不同形式的硬件、固件或硬件与软件的组合被实现。用于实现这些系统和/或方法的实际专用的控制硬件或软件代码并不限制这些实施方案。因此,本文在没有参考特定的软件代码的情况下描述了系统和/或方法的操作和行为,应当理解,软件和硬件可以被设计成基于本文的描述来实现系统和/或方法。
[0211]
即使特征的组合在权利要求中被叙述和/或在说明书中被公开,但这些组合并不旨在限制可行的实施方案的公开内容。事实上,这些特征中的许多特征可以以没有在权利要求中具体叙述和/或没有在说明书中公开的方式被组合。尽管所附每个从属权利要求可以直接依赖于仅一个权利要求,但是可行的实施方案的公开内容包括每个从属权利要求与权利要求集中的每个其他权利要求的组合。
[0212]
除非明确说明,否则本文使用的任何元素、动作或指令都可能不被解释为关键或必要的。此外,如本文中所使用的,冠词“一(a)”和“一个(an)”旨在包括一个或更多个项,并且可以与“一个或更多个”互换地使用。此外,如本文中所使用的,术语“集”旨在包括一个或更多个项(例如,相关联的项、不相关联的项、相关联的项与不相关联的项的组合等),并且可以与“一个或更多个”互换地使用。当仅意指一个项时,术语“一个(one)”或类似的语言被使用。此外,如本文中所使用的,术语“具有”、“有”、“含有”等意在是开放式术语。此外,除非
另有明确说明,否则短语“基于”旨在意味着“至少部分地基于”。
再多了解一些

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

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

相关文献