CN119384673A - 使用重新排序提供神经网络的解码参数的解码器、编码器、方法和计算机程序 - Google Patents
使用重新排序提供神经网络的解码参数的解码器、编码器、方法和计算机程序 Download PDFInfo
- Publication number
- CN119384673A CN119384673A CN202380046551.9A CN202380046551A CN119384673A CN 119384673 A CN119384673 A CN 119384673A CN 202380046551 A CN202380046551 A CN 202380046551A CN 119384673 A CN119384673 A CN 119384673A
- Authority
- CN
- China
- Prior art keywords
- array
- dimension
- decoder
- reordered
- variable
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/04—Architecture, e.g. interconnection topology
- G06N3/0495—Quantised networks; Sparse networks; Compressed networks
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T9/00—Image coding
- G06T9/002—Image coding using neural networks
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/04—Architecture, e.g. interconnection topology
- G06N3/045—Combinations of networks
- G06N3/0455—Auto-encoder networks; Encoder-decoder networks
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/04—Architecture, e.g. interconnection topology
- G06N3/047—Probabilistic or stochastic networks
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/08—Learning methods
- G06N3/082—Learning methods modifying the architecture, e.g. adding, deleting or silencing nodes or connections
-
- H—ELECTRICITY
- H03—ELECTRONIC CIRCUITRY
- H03M—CODING; DECODING; CODE CONVERSION IN GENERAL
- H03M7/00—Conversion of a code where information is represented by a given sequence or number of digits to a code where the same, similar or subset of information is represented by a different sequence or number of digits
- H03M7/30—Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
- H03M7/3068—Precoding preceding compression, e.g. Burrows-Wheeler transformation
- H03M7/3077—Sorting
-
- H—ELECTRICITY
- H03—ELECTRONIC CIRCUITRY
- H03M—CODING; DECODING; CODE CONVERSION IN GENERAL
- H03M7/00—Conversion of a code where information is represented by a given sequence or number of digits to a code where the same, similar or subset of information is represented by a different sequence or number of digits
- H03M7/30—Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
- H03M7/40—Conversion to or from variable length codes, e.g. Shannon-Fano code, Huffman code, Morse code
- H03M7/4006—Conversion to or from arithmetic code
- H03M7/4012—Binary arithmetic codes
- H03M7/4018—Context adapative binary arithmetic codes [CABAC]
-
- H—ELECTRICITY
- H03—ELECTRONIC CIRCUITRY
- H03M—CODING; DECODING; CODE CONVERSION IN GENERAL
- H03M7/00—Conversion of a code where information is represented by a given sequence or number of digits to a code where the same, similar or subset of information is represented by a different sequence or number of digits
- H03M7/30—Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
- H03M7/40—Conversion to or from variable length codes, e.g. Shannon-Fano code, Huffman code, Morse code
- H03M7/4031—Fixed length to variable length coding
- H03M7/4037—Prefix coding
- H03M7/4043—Adaptive prefix coding
-
- H—ELECTRICITY
- H03—ELECTRONIC CIRCUITRY
- H03M—CODING; DECODING; CODE CONVERSION IN GENERAL
- H03M7/00—Conversion of a code where information is represented by a given sequence or number of digits to a code where the same, similar or subset of information is represented by a different sequence or number of digits
- H03M7/30—Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
- H03M7/70—Type of the data to be coded, other than image and sound
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N19/00—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
- H04N19/10—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
- H04N19/102—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the element, parameter or selection affected or controlled by the adaptive coding
- H04N19/129—Scanning of coding units, e.g. zig-zag scan of transform coefficients or flexible macroblock ordering [FMO]
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N19/00—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
- H04N19/10—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
- H04N19/102—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the element, parameter or selection affected or controlled by the adaptive coding
- H04N19/13—Adaptive entropy coding, e.g. adaptive variable length coding [AVLC] or context adaptive binary arithmetic coding [CABAC]
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N19/00—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
- H04N19/10—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
- H04N19/134—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the element, parameter or criterion affecting or controlling the adaptive coding
- H04N19/167—Position within a video image, e.g. region of interest [ROI]
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N19/00—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
- H04N19/10—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
- H04N19/189—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the adaptation method, adaptation tool or adaptation type used for the adaptive coding
- H04N19/196—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the adaptation method, adaptation tool or adaptation type used for the adaptive coding being specially adapted for the computation of encoding parameters, e.g. by averaging previously computed encoding parameters
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/04—Architecture, e.g. interconnection topology
- G06N3/0464—Convolutional networks [CNN, ConvNet]
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N7/00—Computing arrangements based on specific mathematical models
- G06N7/01—Probabilistic graphical models, e.g. probabilistic networks
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- Artificial Intelligence (AREA)
- Computing Systems (AREA)
- General Physics & Mathematics (AREA)
- Evolutionary Computation (AREA)
- Multimedia (AREA)
- Biomedical Technology (AREA)
- General Health & Medical Sciences (AREA)
- Health & Medical Sciences (AREA)
- Biophysics (AREA)
- Computational Linguistics (AREA)
- Data Mining & Analysis (AREA)
- Software Systems (AREA)
- Life Sciences & Earth Sciences (AREA)
- Molecular Biology (AREA)
- General Engineering & Computer Science (AREA)
- Mathematical Physics (AREA)
- Signal Processing (AREA)
- Probability & Statistics with Applications (AREA)
- Compression, Expansion, Code Conversion, And Decoders (AREA)
- Compression Or Coding Systems Of Tv Signals (AREA)
Abstract
根据本发明的实施例涉及用于基于编码表示提供神经网络的解码参数的解码器,其中解码器被配置为使用神经网络参数的解码获得包括多个神经网络参数值的第一多维数组,以及其中解码器被配置为使用重新排序获得重新排序的多维数组,其中,第一多维数组的第一维度被重排到重新排序的多维数组中的另一个维度。此外,公开了使用重新排序的编码器、方法和计算机程序。
Description
技术领域
根据本发明的实施例涉及用于使用重新排序提供神经网络的解码参数的解码器、编码器、方法和计算机程序。
根据本发明的实施例涉及通过张量维度移位对张量维度重新排序。
根据本发明的实施例涉及用于神经网络的编码的张量维度重新排序的方法。
根据本发明的实施例涉及用于多媒体内容描述和分析的神经网络的压缩。
背景技术
许多框架提供了多种压缩工具,包括量化和/或无损编码方法和无损解码方法,用于处理和/或压缩张量。
例如,基于人工神经网络在多媒体分析和处理、媒体编码、数据分析和许多其他应用方面的成功应用,对允许交换此类网络(例如以各自的神经网络参数的形式)的概念的需求有所增加。例如,这些神经网络参数可以以张量的形式进行处理和/或编码和解码。
因此,这种张量的处理、编码和解码可能是提供这种框架效率的关键方面。
因此,希望获得一种改进的概念用于编码、解码和处理以多维数组或张量鞥结构化表示形式提供的参数,如神经网络参数,从而在编码效率、灵活性和复杂性之间取得更好的折衷。
本申请通过独立权利要求中的主题内容实现这一目标。
根据本发明的进一步实施例由本申请的从属权利要求的主题定义。
发明内容
根据本发明的实施例包括一种解码器,用于基于编码表示,例如基于以编码的(例如压缩)形式表示(或例如包括)神经网络参数的比特流,提供神经网络的解码参数,例如“权重”或“系数”。
解码器被配置为获得第一多维数组(例如inputTensor[idxA],其中idxA是多个索引变量的向量;例如A[m][n][o][p],其中m、n、o、p是索引变量),第一多维数组包括多个神经网络参数值(例如神经网络权重),使用神经网络参数的解码例如以使第一多维数组包括解码的神经网络参数。
此外,解码器被配置为使用重排排序获得重新排序的多维数组(例如reorderedTensor[idxB],其中idxB是多个索引变量的向量;例如B[n][o][m][p],其中n、o、m、p是索引变量),其中第一多维数组的第一维度(例如由最左侧数组索引指定的多维数组的维度)被重排,例如移动到不同的维度,例如与重新排序的多维数组中的第一维度不同。
在许多框架中,参数的结构化表示,例如张量,可以被解释为一维或二维表示,例如以一维数组或二维数组的形式。因此,这种被解释的表示的形状可以由结构化表示的原始维度,特别是原始结构化表示中的参数的各自顺序决定。
例如,根据某些框架,在这种解释中,被解释的数组的第一维度的长度可以等于原始表示的第一维度的长度,而被解释的数组的第二维度的长度可以等于原始表示的所有其他维度的乘积。
发明人认识到,参数的这种形状和/或顺序也会影响压缩和/或处理流水线的效率。此外,传统框架缺乏灵活性,无法在处理步骤之间调整相应的结构化参数表示(例如张量)以提高效率。
因此,发明人认识到,基于参数的结构化表示的维度的重新排序,可以为编码、解码和/或处理参数(如神经网络参数)提供编码效率、灵活性和复杂性之间提供更好的折衷,这些参数在结构化表示(如多维数组或张量)中提供。
此外,例如,对于这些参数的编码和/或解码,重新排序可以利用参数之间的相关性,从而可以提高编码效率。特别是,可以对重新排序进行调整以改善相关特性,从而使用上下文自适应编码(例如CABAC)。
此外,发明人认识到,本发明的重新排序方法允许将用于编码的张量形状的需求或约束与用于处理的张量形状的需求或约束解耦。因此,即使张量形状的目标是矛盾的,也可以经由重新排序来实现。
此外,发明人认识到,基于本发明的重新排序,可以提高现有编码框架的效率,而对复杂性的影响有限。例如,已经开发的处理方法需要预定义的参数结构,例如张量形式,但为了提高处理效率,这些方法可以保持不变,同时允许重塑参数表示。例如,本发明的重新排序可以允许重塑相应的张量,从而实现高效的块扫描。
根据本发明的实施例,解码器被配置为解码维度移位值(例如“first_tensor_dimension_shift”值,例如单个标量值)。维度移位值描述了在执行重新排序时,例如为了获得具有维度[D0,D1,D2,D3]的重新排序的多维数组,第一多维数组(例如具有维度[D2,D0,D1,D3])的第一维度,例如D2(例如也被指定为“第一张量维度”)应该移位多少维度,例如移位多少数组索引,例如向更大的维度编号移位。发明者认识到,基于维度移位值,可以以较低的信令开销控制张量维度的移位。此外,通过信号传递维度的移位信息可以让重新排序更加高效。
根据本发明的实施例,解码器被配置为解码维度移位值,例如“first_tensor_dimension_shift”值,以及维度移位值(例如标量值)描述了第一多维数组(例如具有维度[D2,D0,D1,D3])的第一维度,例如D2(例如也被指定为“第一张量维度”)在重新排序的多维数组中的新位置,例如“具有维度[D0,D1,D2,D3]”的多维数组中的第三维度”。因此,可以提供绝对维度重新排序信息,而不是相对位移信息。这样就可以对相应的张量维度进行精确的重新排序。
根据本发明的实施例,对维度移位值进行Exp哥伦布编码。可选地,解码器被配置为对维度移位值执行Exp哥伦布解码。发明人认识到,Exp哥伦布编码可以提供维度移位值的有效表示。
根据本发明的实施例,解码器被配置为使用单个标量维度移位值(例如first_tensor_dimension shift)作为描述重新排序的多维数组中维度新顺序的唯一参数执行重新排序。发明人认识到,重新排序可以通过单个标量维度移位值来控制,因此附加数据(例如以信令开销的形式)非常有限,因此允许在重新排序的基础上最大化编码和/或处理效率收益。
根据本发明的实施例,解码器被配置为例如仅执行单个维度到另一个位置的单次移位,以获得重新排序的多维数组。发明人认识到,允许任意维度顺序可能会导致巨大的信令开销,特别是对于高维张量,因为排列的数量可能随着张量维度的数量大量增加。相反,根据本发明的一个方面,解码器可以仅执行单个维度到另一个位置的移位,从而限制信令开销。
根据本发明的实施例,解码器被配置为从第一多维数组的第一维度得到导出辅助数组的维度。作为示例,可选地,解码器可被配置为从第一多维数组的第一维度中导出矢量或二维数组或具有两个以上维度的数组的维度;例如,张量或“相关张量”或“对应张量”的维度。例如,可选地,解码器可被配置为从第一多维数组的第一维度导出偏置值的“辅助”数组的维度,或批量归一化参数的“辅助”数组的维度,或缩放因子的“辅助”数组的维度。可选地,例如,解码器被配置为将辅助数组的维度设置为等于第一多维数组的第一维度。
一些框架(如MPEG-7第17部分)指定了特殊的NDU类型(如NNR_PT_BLOCK),允许在单个NDU中一起传输权重张量和几个相应的张量,即偏置、批量归一化参数和缩放因子。块中的所有张量可以共享相同的头部信息(例如,而不是传输单独的头部信息),因此可以减少比特流的大小。由于其他张量可能与权重张量直接相关,发明人认识到它们的维度可以从(权重)张量维度中推导出来。
因此,通常对于多维数组(如权重张量),本发明的解码器可以被配置为推导一个或多个辅助数组(如包括偏置、批量归一化参数和缩放因子)。因此,可以执行上述解释的维度确定,从而限制信令开销。
根据本发明的实施例,解码器被配置为将第一多维数组的单个维度移位到不同的位置,以获得重新排序的多维数组。这可以提供本发明的重新排序的简单变体,从而限制对处理的复杂性和信令开销的整体影响,同时允许提高处理和/或编码效率。
根据本发明的实施例,解码器被配置为获得二维矩阵,例如具有维度[D2,(D0*D1*D3)],二维矩阵的第一维度由第一维度值确定(例如D2),二维矩阵的第二维度基于编码表示的多个进一步维度值的乘积决定(例如D0*D1*D2)。此外,解码器被配置为获得第一多维数组(例如具有维度[D2,D0,D1,D3]),第一多维数组的维度可选地由第一维度值(例如D2)和进一步维度值(例如D0、D1、D3)中的单个维度值确定(其中,例如,第一维度值和进一步维度值中的每个值可以与第一多维数组的一个维度相关联(和/或定义);其中,例如,第一维度值可以基于二维矩阵,与第一多维数组的第一维度相关联(和/或定义)。此外,解码器被配置为在第一多维数组的基础上获得重新排序的多维数组,例如具有维度[D0,D1,D2,D3]的多维数组,其中重新排序的多维数组的第一维度由进一步维度值之一定义。
发明人认识到,解码器可以执行,例如作为重新排序的中间步骤,将编码表示的参数表示解释为二维矩阵。这种方法可以实现与现有框架的兼容,以基于解释的二维矩阵包括本发明的重新排序。特别地,发明人认识到,将通过编码表示获得的进一步维度值之一“洗牌”到重新排序的多维阵列的第一维度,可以提高处理的灵活性,因为编码的张量形状可以与处理的张量形状不同。
根据本发明的实施例,解码器被配置为使用基于上下文的熵解码解码已编码的神经网络参数,例如使用算术解码,其中根据先前已解码的神经网络参数确定给定已编码的神经网络参数的算术解码的一个或多个上下文,例如,根据在解码顺序中直接在给定已编码的神经网络参数之前的先前已解码的神经网络参数。此外,解码器被配置为使用位置映射函数(如TensorIndex(tensorDimensions[],i,scan)确定已解码的神经网络参数在第一多维数组中的位置,该函数将标量神经网络参数索引(例如i)映射到维度索引集合(例如矢量或(最好是1维的)数组,例如具有等于第一多维数组的维数的条目数目的数组),例如,映射到指向具有第一多维数组的维度的多维数组的行主扫描顺序中的第i个元素的数组,或映射到指向第一多维数组的二维解释的块扫描顺序(例如扫描子块)中的第i个元素的数组,例如函数TensorIndex(tensorDimensions[],I,scan)所定义的,当与IndexToXY结合使用时,scan>0。这种方法可以有效地对张量值和维度进行解码和重新排序。
根据本发明的实施例,解码器被配置为沿着第一多维数组的给定维度(例如第四维度或最高维度)连续存储解码的多个神经网络参数(例如D3已解码的神经网络参数),这些参数相对于解码顺序(例如按序列解码;例如根据前一个值考虑上下文适应进行解码)直接相邻,其中,例如,给定维度的索引连续增加或减少,其中,例如,其他维度的索引保持不变。因此,解码的神经网络参数的存储可以在保持参数的各自顺序的情况下进行,例如至少在一个维度内。
根据本发明的实施例,解码器被配置为使用如下形式的处理(如计算)来获得重新排序的多维数组:
其中i是运行变量,其中Prod(inputTensorDims)是第一多维数组的维度长度的乘积,例如,可以等于第一多维数组的元素数量。此外,TensorIndex(.,.,.)是将整数值(如运行变量i,如引用第一多维数组元素的标量整数值,如以升序排列)映射到数组索引的集合(例如一维数组或向量)的函数(例如包括与第一多维数组的维度数量相等的数组索引的数量的集合),集合指定第一多维数组的元素(如已解码的神经网络参数)。此外,inputTensorDims是描述第一多维数组维度长度的值的集合(例如一维数组或集合),idxA是变量(例如表示数组索引的集合(例如一维数组或向量)),ShiftArrayIndex(.,.)是一个函数,它将输入的数组索引集合(例如一维数组或集合)(如包括与第一多维数组的维度数量相等的数组索引的集合,例如idxA)映射到数组索引的返回集合(例如一维数组或集合,例如idxB),其中返回的数组索引集合是输入的数组索引集合的副本,但输入的数组索引集合的位于位置0的元素移位到了firstTensorDimShift指定的位置(其中位置可以从0计数直到输入的数组索引集合的大小-1)。此外,firstTensorDimShift是维度移位值(例如,描述第一多维数组的第一维度应该移位多少维度),idxB是变量(例如表示数组索引集合(例如一维数组或向量),inputTensor[.]是第一多维数组,reorderedTensor[.]是重新排序的多维数组,inputTensor[idxA]是第一多维数组中位于idxA指定位置的元素,reorderedTensor[idxB]是重新排序的多维数组中位于idxB指定位置的元素。可选地,firstTensorDimShift可以对应于first_tensor_dimension_shift。发明人认识到,这种方法可以有效地执行重新排序过程。
根据本发明的实施例,解码器被配置为使用函数(例如TensorIndex(tensorDimensions[],I,scan))获得重新排序的多维数组,该函数将指定(例如唯一指定)第一多维数组的元素的整数元素索引i映射到数组索引集合(例如一维数组或矢量),其中返回的数组索引集合指定第一多维数组(例如数组维度由tensorDimensions[]指定的数组)行主扫描顺序中的第i个元素,或者其中返回的数组索引集合指定第一多维数组按块扫描的第i个元素,例如使用大小为bs乘以bs的块,其中第一多维数组是二维数组,例如宽度为w和高度为h的二维数组,其中的元素以x和y表示,其中x和y例如可以通过函数IndexToXY获得,该函数将标量整数索引i映射到由两个元素x和y组成的集合(例如数组)。发明人认识到,本发明的重新排序可以根据第一多维数组的不同扫描顺序来执行。因此,本发明的方法是灵活的,并且易于与多种扫描方法兼容。
根据本发明的实施例,解码器被配置为解码跳过行列表,例如跳过行列表[i],其中,例如,跳过行列表的条目数(如tensor2Dheight)可以等于第一多维数组的第一维度的长度(如dimensions[0])。此外,解码器被配置为将解码的神经网络系数(如QuantParam[idx])输入到第一多维数组中,例如通过设置QuantParam[idx]以获取解码值,输入到由相应数组索引集合描述的相应位置上(如由变量idx表示,该变量例如使用函数idx=TensorIndex(dimensions,i,scan_order)获得)。此外,解码器还被配置为根据第一多维数组第一维度的当前数组索引(如row_skip_list[idx[0]])所引用(如指定)的跳过行列表条目,决定是否对给定神经网络参数(或者,例如,甚至是具有相同的第一多维数组的第一维度的当前数组索引的神经网络参数序列)使用默认值(如QuantParam[idx]=0),或者是否例如通过解码函数的调用(如int_param(i,maxNumNoRemMinus1,stateId)),使用解码来确定给定神经网络参数(或者例如甚至是具有相同的第一多维数组的第一维度的当前数组索引的神经网络参数序列)。因此,基于跳过行的信息,可以减少解码工作。
根据本发明的实施例,解码器被配置为对数组维度合(例如一维数组或向量(例如描述第一多维数组在不同的维度的长度,例如tensor_dimensions[.])进行解码,其中,例如,数组的维度可以是Exp-Golomb编码的。此外,解码器被配置为获得重新排序的数组维度集,例如一维数组或矢量,其中的条目描述了在重新排序的多维数组在不同方向上的长度,例如使用ShiftArrayIndex函数对解码后的数组维度集进行处理。例如,张量或数组维度排序的确定可以因此与各自张量和/或数组本身的整形或排序分开执行。发明人认识到,这样可以提高重新排序的效率。
根据本发明的实施例,解码器被配置为随后将解码的神经网络参数(例如QuantParam[idx])输入到第一多维数组中,例如通过设置QuantParam[idx]以获取解码的值,输入到由相应的数组索引集描述的相应位置,例如由变量idx表示,例如该变量通过函数idx=TensorIndex(dimensions,i,scan_order)获得。此外,解码器被配置为使用映射函数(例如TensorIndex(tensorDimensions[],i,scan),例如它可以调用IndexToXY)获得相应的数组索引集,该映射函数将标量整数参数索引(例如i)映射到相应的数组索引集,并定义按块扫描,其中,例如,标量整数参数索引的后续值可以与随后解码的参数值相关联。发明人认识到,这种方法可以提供高效的重新排序方法。
根据本发明的实施例,映射函数包括标量整数参数索引(例如i)到两个坐标例(如x、y)的映射,这两个坐标指向与标量整数参数索引(例如i)定义的扫描索引相对应的位置,扫描时,块(如宽度为w、高度为h的二维数组)被分块扫描,如二次分块扫描;如以大小为bs乘以bs的块进行扫描。此外,映射函数包括两个坐标到各自的数组索引集的映射。发明人认识到,这种方法可以高效地处理需要重新排序的维度。
根据本发明的实施例,解码器被配置为随后将解码的神经网络参数(例如QuantParam[idx])输入到第一多维数组中,例如,通过设置QuantParam[idx]以获取解码的值,输入到由相应的数组索引集描述的相应位置(例如由变量idx表示,该变量例如使用函数idx=TensorIndex(dimensions,i,scan_order)获得)。此外,解码器被配置为基于标量整数参数i,使用函数TensorIndex(tensorDimensions[],i,scan)获得相应的数组索引集,其中函数TensorIndex(tensorDimensions[],i,scan)返回数组索引的数组,其维数与数组tensorDimensions[]相同,其中数组索引的数组的元素设置为整数值,以便数组索引的数组可以用作指向数组元素的索引,例如具有维度tensorDimensions[]的数组,如下:
如果变量scan等于0:
返回的数组索引指向具有由tensorDimensions[]定义的维度的数组[例如张量][例如第一多维数组]的行主扫描顺序中的第i个元素;
如果变量scan大于0:
变量bs设置为4<<scan_order;
变量h设置为tensorDimensions[0]
[例如设置为第一多维数组的第一维度的长度];
变量w设置为Prod(tensorDimensions)/h
[例如,设置为不同维度中第一多维数组的长度的乘积除以h,或第一多维数组的元素个数除以h];
两个变量x和y设置为返回数组的第一元素和第二元素,
通过分别调用IndexToXY(w,h,i,bs);
返回数组是TensorIndex(tensorDimensions,y*w+x,0);
其中,函数IndexToXY(w,h,i,b)返回包括两个元素的数组,函数IndexToXY返回的第一元素是x坐标,函数IndexToXY返回的第二元素是y坐标,指向宽度为w和高度为h的二维数组,其中当以大小为bs乘以bs的块为单位扫描块时[例如宽度为w和高度为h的二维数组],x和y指向与扫描索引i相对应的位置;其中x和y的推导如下:
变量fullRowOfBlocks设置为w*bs;
变量blockY设置为i/fullRowOfBlocks;
变量iOff设置为i%fullRowOfBlocks;
变量currBlockH设置为Min(bs,h-blockY*bs);
变量fullBlocks设置为bs*currBlockH;
变量blockX设置为iOff/fullBlocks;
变量blockOff设置为iOff%fullBlocks;
变量currBlockW设置为Min(bs,w-blockX*bs);
变量posX设置为blockOff%currBlockW;
变量posY设置为blockOff/currBlockW;
变量x设置为blockX*bs+posX;
变量y设置为blockY*bs+posY;
其中tensorDimensions[]是描述第一多维数组在不同维度上的长度的值的数组;其中scan是描述扫描方式的整数变量。发明人认识到,这种方法可以提供高效的重新排序方法。
下面将讨论根据本发明设计的由编码器组成的实施方案。下文所述的编码器可基于与上述解码器相同的考虑。顺便说一句,这些编码器可以单独或组合使用,并具有所有特征和功能,这些特征和功能也将在解码器中进行介绍。
根据本发明的进一步实施例,编码器用于提供神经网络参数(例如“权重”或“系数”)的编码表示,例如以比特流的形式表示编码(例如压缩)后的神经网络参数。此外,编码器被配置为使用重新排序获得重新排序的多维数组(例如BEnc[o][m][n][p],其中o、m、n、p是索引变量),其中神经网络参数的给定多维数组的给定维度(例如由给定数组索引指定的多维数组的给定维度,例如给定多维数组AEnc[m][n][o][p]的第三个维度)被重排,例如移动到重新排序的多维数组中的第一维度,该维度可选地与给定的维度不同。此外,编码器被配置为对重新排序多维数组(Benc[o][m][n][p])进行编码,例如使用重新排序的多维数组的条目的编码。
根据本发明的实施例,编码器被配置为编码维度移位值(例如,“first_tensor_dimension_shift”值,例如单个标量值),且维度移位值描述了给定多维数组的哪个给定维度被重排为重新排序的多维数组中的第一维度,或维度移位值描述了在进行解码器侧重新排序时,应将已编码的重新排序的多维数组的第一个维度(如D2)移位多少维度(例如移位多少数组索引)例如移位到更高的维数,以获得解码器侧(两次)重新排序的多维数组,例如具有维度[D0,D1,D2,D3]的数组。
根据本发明的实施例,编码器被配置为编码维度移位值,例如“first_tensor_dimension_shift”值,以及维度移位值(例如标量值)描述了编码的重新排序的多维数组(例如具有维度[D2,D0,D1,D3])的第一维度,例如D2,在解码器中应该移动到的新位置。
根据本发明的实施例,编码器被配置为使用Exp哥伦布码对维度移位值进行编码。
根据本发明的实施例,编码器被配置为使用单个标量维度移位值(例如first_tensor_dimensionshift)作为描述重新排序的多维数组中维度新顺序的唯一参数执行重新排序。
根据本发明的实施例,编码器被配置为例如仅执行将单个维度到另一个位置的单次移位,以获得重新排序的多维数组。
根据本发明的实施例,编码器被配置为将包括在编码表示中的辅助数组的维度(例如,向量或二维数组或具有两个以上维度的数组的维度;例如,张量或“相关张量”或“对应张量”的维度,例如偏置值的“辅助”数组的维度,或批量归一化参数的“辅助”数组的维度,或缩放因子的“辅助”数组的维度),设置为等于重新排序的多维数组的第一维度。
根据本发明的实施例,编码器被配置为将给定多维数组的单个维度移位到不同的位置,以获得重新排序的多维数组。
根据本发明的实施例,编码器被配置为获得重新排序的多维数组(例如具有维度[D2,D0,D1,D3]),这些维度可以可选地由与第一维度相关联的第一维度值(例如D2)和进一步维度值(例如D0、D1、D3)中的单个维度值确定(其中,例如,第一维度值和进一步维度值中的每个值可以与重新排序的多维数组的一个维度相关联(和/或定义);其中,例如,第一维度值可以基于给定的多维数组,与重新排序的多维数组的第一维度相关联(和/或定义)。此外,编码器被配置为获得二维矩阵,例如具有维度[D2,(D0*D1*D3)],其中第一维度由第一维度值决定(例如D2),二维矩阵的第二维度基于重新排序的多维数组由进一步维度值的乘积决定(例如D0*D1*D2)。此外,编码器被配置为对二维矩阵进行编码。
根据本发明的实施例,编码器被配置为使用基于上下文的熵编码来编码神经网络参数,例如,使用算术编码,其中根据先前已编码的神经网络参数确定给定神经网络参数的算术编码的一个或多个上下文,例如,根据在编码顺序中直接在给定神经网络参数之前的先前已编码的神经网络参数。此外,编码器被配置为使用位置映射函数(如TensorIndex(tensorDimensions[],i,scan))确定重新排序的多维数组中要编码的神经网络参数,该函数将标量参数索引(例如i)映射到维度索引集(例如矢量或(最好是1维的)数组,例如具有等于重新排序的多维数组的维数的条目数据的数据的数组),例如,映射到指向具有重新排序后的多维数组的维度的多维数组的行主扫描顺序中的第i个元素的数组,或映射到指向重新排序的多维数组的二维解释的按块扫描顺序(例如扫描子块)中的第i个元素的数组,例如函数TensorIndex(tensorDimensions[],i,scan)所定义的,当与IndexToXY结合使用时,scan>0。
根据本发明的实施例,编码器被配置为沿着重新排序的多维数组的给定维度(例如第四维度或最高维度)连续读取要编码的多个神经网络参数(例如,D3神经网络参数),这些参数相对于编码顺序(例如按序列编码;例如,编码时考虑根据前一个值的上下文自适应)直接相邻,其中,例如,给定维度的索引连续增加或减少,其中,例如,其他维度的索引保持不变。
根据本发明的实施例,编码器被配置为使用如下形式的处理(如计算)来获得重新排序的多维数组:
其中,i为运行变量;其中Prod Prod(inputTensorDims)是给定多维数组的维长度的乘积,例如,可以等于给定多维数组的元素数量。此外,TensorIndex(.,.,.)是将整数值(如运行变量i,如引用第一多维数组元素的标量整数值,如以升序排列)映射到数组索引集(例如一维数组或向量)的函数(例如包括与给定多维数组的维度数量相等的数组索引的数量的集合),集合指定给定多维数组的元素,例如要编码的神经网络参数。此外,inputTensorDims是描述给定多维数组的维度的长度的值的集合(例如一维数组或集合),idxA是变量,例如表示数组索引集合(例如一维数组或向量)。此外,ShiftArrayIndexEnc(.,.)是函数,将输入的数组索引集(例如一维数组或集合)(如包括与给定多维数组的维度数量相等的数组索引的集合,例如idxA)映射到数组索引的返回集合(例如一维数组或集合,例如idxB),其中,返回的数组索引集是输入的数组索引集的副本,但输入的数组索引集的位于firstTensorDimShift指定的位置的元素移位到位置0,其中作为可选的特征位置从0计数直到输入数组索引集的大小-1。此外,firstTensorDimShift是维度移位值,例如描述给定多维数组的哪个给定维度应该移位到第一位置,idxB是变量,例如表示数组索引集(例如一维数组或向量),inputTensor[.]是给定多维数组,reorderedTensor[.]是重新排序的多维数组,inputTensor[idxA]是给定多维数组中位于idxA指定的位置的元素,reorderedTensor[idxB]是重新排序多维数组中位于idxB指定的位置的元素。
根据本发明的实施例,编码器被配置为使用函数(例如TensorIndex(tensorDimensions[],I,scan))获得重新排序的多维数组,该函数将指定(例如唯一指定)给定的多维数组的元素的整数元素索引i映射到数组索引集(例如一维数组或矢量),其中返回的数组索引集指定给定多维数组(例如数组维度由tensorDimensions[]指定的数组的维度的数组)行主扫描顺序中的第i个元素,或其中返回的数组索引集指定给定多维数组按块扫描(例如使用大小为bs乘以bs的块)的第i个元素,其中给定多维数组是二维数组,例如宽度为w和高度为h的二维数组,元素例如以x和y表示,其中x和y可以使用函数IndexToXY获得,该函数将标量整数索引i映射到由两个元素x和y组成的集合(例如数组)。
根据本发明的实施例,(例如其中编码器被配置为获得跳过行列表)编码器被配置为对跳过行列表(例如跳过行列表[i])进行编码,其中,跳过行列表的条目数(如tensor2Dheight)可以等于重新排序的多维数组的第一维度的长度(如dimensions[0])。此外,编码器被配置为可选地有在相应数组索引集描述的相应位置(例如由变量idx表示,该变量使用函数idx=TensorIndex(dimensions,I,scan_order)获得)对重新排序的多维数组的神经网络系数(如QuantParam[idx])进行编码。此外,编码器还被配置为根据重新排序的多维数组的第一维度的当前数组索引(如row_skip_list[idx[0]])指定的跳过行列表的条目,决定是否在当前位置编码神经网络参数,例如由当前数组索引集指定的神经网络参数,或者例如甚至是在重新排序的多维数组的第一维度上具有相同当前数组索引的神经网络参数序列。
根据本发明的实施例,编码器被配置可选地获得重新排序的数组维度集合,例如一维数组或向量,其中的条目描述了重新排序的多维数组在不同方向上的长度,例如使用ShiftArrayIndexEnc函数对给定的多维数组相关联的数组维度集进行处理。此外,编码器被配置为可选地对重新排序的数组维度集(例如一维数组或向量)进行编码,例如以不同维度描述重新排序的多维数组的长度,例如tensor_dimensions[.],其中,例如,数组维度可以是Exp-Golomb编码的。
根据本发明的实施例,编码器被配置为在由相应的数组索引集描述的相应位置(例如由变量idx表示,例如使用函数idx=TensorIndex(dimensions,I,scan_order)获得)对重新排序的多维数组的神经网络参数(例如QuantParam[idx])进行编码。此外,编码器被配置为使用映射函数(TensorIndex(tensorDimensions[],i,scan),例如它可以调用IndexToXY)获得相应的数组索引集,该函数将标量整数参数索引(例如i)映射到相应的数组索引集,并定义按块扫描,其中,例如,标量整数参数索引的后续值可以与随后编码的参数值相关联。
根据本发明的实施例,映射函数包括标量整数参数索引(例如i)到两个坐标例(如x、y)的映射,这两个坐标指向与标量整数参数索引(例如i)定义的扫描索引相对应的位置,扫描时,块(如宽度为w、高度为h的二维数组)被分块扫描,如二次分块扫描;如以大小为bs乘以bs的块扫描。此外,映射函数包括两个坐标到各自的数组索引集的映射。
根据本发明的实施例,编码器被配置为在由相应的数组索引集描述的相应位置(例如由变量idx表示,该变量例如使用函数idx=TensorIndex(dimensions,i,scan_order)获得)编码重新排序的多维数组的神经网络参数。此外,编码器被配置为基于标量整数参数索引i,使用函数TensorIndex(tensorDimensions[],i,scan)获得相应的数组索引集合,其中函数TensorIndex TensorIndex(tensorDimensions[],i,scan)返回数组索引的数组,其维数与数组tensorDimensions[]相同,数组索引的数组的元素设置为整数值,以便数组索引的数组可以用作指向数组元素的索引,例如具有维度tensorDimensions[]的的数组,如下所示:
如果变量scan等于0:
返回的数组索引指向具有由tensorDimensions[]定义的维度的数组[例如张量][例如第一多维数组]的行主扫描顺序中的第i个元素;
如果变量scan大于0:
变量bs设置为4<<scan_order;
变量h设置为tensorDimensions[0]
(例如设置为第一多维数组的第一维度的长度);
变量w设置为Prod(tensorDimensions)/h
(例如,设置为不同维度中第一多维数组的长度的乘积除以h,或第一多维数组的元素个数除以h);
两个变量x和y设置为返回数组的第一元素和第二元素
通过分别调用IndexToXY(w,h,i,bs);
返回数组是TensorIndex(tensorDimensions,y*w+x,0);
其中,函数IndexToXY(w,h,i,b)返回包括两个元素的数组,函数IndexToXY返回的第一元素是x坐标,函数IndexToXY返回的第二元素是y坐标,指向宽度为w和高度为h的二维数组,其中当以大小为bs乘以bs的块为单位扫描块时[例如宽度为w和高度为h的二维数组],x和y指向与扫描索引i相对应的位置;其中x和y的推导如下:
变量fullRowOfBlocks设置为w*bs;
变量blockY设置为i/fullRowOfBlocks;
变量iOff设置为i%fullRowOfBlocks;
变量currBlockH设置为Min(bs,h-blockY*bs);
变量fullBlocks设置为bs*currBlockH;
变量blockX设置为iOff/fullBlocks,
变量blockOff设置为iOff%fullBlocks;
变量currBlockW设置为Min(bs,w-blockX*bs);
变量posX设置为blockOff%currBlockW;
变量posY设置为blockOff/currBlockW;
变量x设置为blockX*bs+posX;
变量y设置为blockY*bs+posY;
此外,tensorDimensions[]是描述第一多维数组在不同维度上的长度的值的数组;其中scan是描述扫描方式的整数变量。
下面将讨论根据本发明实施例的方法。下文所述的方法可以分别基于与上述解码器和编码器相同的考虑。顺便提一下,这些方法还可以单独或组合使用解码器和编码器的所有特征和功能。
本发明的实施例包括一种方法,用于基于编码表示(例如基于以编码(例如压缩)形式表示神经网络参数的比特流)提供神经网络的解码参数,例如“权重”或“系数”。此外,该方法包括获得第一多维数组(例如inputTensor[idxA],其中idxA是多个索引变量的向量;例如A[dm][dn][do][dp],其中dm、dn、do、dp是索引变量,例如A[m][n][o][p],其中m、n、o、p是索引变量),包括多个神经网络参数值,例如神经网络权重,使用神经网络参数的解码,例如使得第一多维数组包括已解码的神经网络参数。此外,方法包括使用重新排序获得重新排序的多维数组(例如reorderedTensor[idxB],其中idxB是多个索引变量的向量;例如B[n][o][m][p],其中n、o、m、p是索引变量),其中第一多维数组的第一维度,例如由最左侧数组索引指定的多维数组的维度,被重新排序(例如移动)到重新排序的多维数组中的不同的维度,该维度可选地与重新排序的多维数组的第一维度不同。
根据本发明的实施例,包括提供神经网络参数(例如“权重”或“系数”)的编码表示的方法,例如以编码(例如压缩)形式表示神经网络的参数的比特流。此外,方法包括使用重新排序获得重新排序的多维数组(例如BEnc[o][m][n][p],其中o、m、n、p是索引变量),其中神经网络参数的给定多维数组的给定维度(例如给定数组索引指定的多维数组的给定维度,例如给定多维数组AEnc[m][n][o][p]的第三维度)重新排序,例如移动到重新排序的多维数组中的第一维度,该维度可选地与给定维度不同。此外,方法还包括对重新排序的多维数组(例如Benc[o][m][n][p])进行编码,例如使用重新排序的多维数组的条目的编码。
实施例包括一种计算机程序,当计算机程序在计算机上运行时,用于执行根据本本所公开的任一实施例而制定的方法。
附图说明
附图不一定按比例绘制,重点一般放在说明本发明的原理上。在以下说明中,将参照以下附图描述本发明的各种实施例,其中:
图1示出了根据本发明的实施例的解码器的示意图,用于基于编码表示提供神经网络的解码参数;
图2示出了根据本发明的实施例具有进一步可选特征的解码器的示意图;
图3示出了根据本发明的实施例的编码器的示意图,用于提供神经网络参数的编码表示;
图4示出了基于编码表示提供神经网络的解码参数的方法的示意框图;
图5示出了用于提供神经网络参数的编码表示的方法的示意框图;
图6示出了根据本发明的实施例的编码-解码流水线的张量维度重新排序概念的示意框图;
图7示出了根据本发明的实施例的双层前馈神经网络的示意图;
图8示出了根据本发明的实施例的均匀重构量化器的示意图;
图9(a)、(b)示出了根据实施例的在有两个权重参数的简单情况下,可容许重构向量位置的示意图示例:(a)独立标量量化;(b)依赖性标量量化;
图10示出了根据实施例将重构水平集分为两个子集的示意性示例;
图11示出了根据实施例的NNR编码流水线的示意性示例;
图12示出了根据实施例的NNR单元数据结构的示意性示例;
图13示出了聚合NNR单元数据结构的示意性示例;以及
图14示出了根据实施例的NNR比特流数据结构的示意性示例。
具体实施方式
相同或等效的元件或具有相同或等效功能的元件,即使出现在不同的图中,在以下描述中也用相同或等效的参考数字表示。
在以下描述中,提出了多个细节以提供本发明的实施例的更全面的解释。然而,对于本领域技术人员来说,显然可以在没有这些具体细节的情况下实施本发明的实施例。在其他情况下,为了避免模糊本发明的实施例,众所周知的结构和设备以框图形式而不是详细地示出。此外,除非另有特别说明,下文所述的不同实施例的特征可以相互结合。
图1示出了根据本发明的实施例的解码器的示意图,解码器用于基于编码表示提供神经网络的解码参数。图1示出了由解码单元110和重新排序单元120组成的解码器100。比特流101提供给解码器100,比特流包括包括神经网络参数的编码表示(例如以压缩形式)。例如,提供给解码器100的比特流101可以是神经网络参数的编码表示。
如图1所示,解码单元110被提供比特流101,以获得包括多个神经网络参数值的第一多维数组111。因此,解码单元100被配置为解码比特流101或至少解码神经网络参数的编码表示,神经网络参数的编码表示是比特流101的一部分。
第一多维数组111提供给重新排序单元120。重新排序单元120被配置为对第一多维数组111进行重新排序以获得重新排序的多维数组121。重新排序单元120被配置为执行重新排序,其中第一多维数组111的第一维度被重排到重新排序的多维数组121中的不同维度。
解码器100可提供重新排序的多维数组121作为神经网络的解码参数102。如图所示,作为可选特征,为了提供神经网络的解码参数,解码器100可被配置为进一步处理(例如使用多个或至少一个可选的进一步处理单元130)重新排序的多维数组121,以提供神经网络的解码参数102。
如图1所示,作为可选特征,解码单元被配置为从比特流101解码维度移位值112并将其提供给重新排序单元120。维度移位值112向重新排序单元120提供了关于第一多维数组111的第一维度需要重排(例如移位如移动)的程度的信息。
因此,维度移位值112可以可选地包括或作为一种信息,重新排序单元120可基于该信息确定第一多维数组111的第一维度在重新排序的多维数组121中要重排(例如改变)的新地点或位置。
作为可选特征,维度移位值112是经Exp哥伦布编码的(Exp Golomb-coded)。因此,作为可选特征,解码单元110被配置为从比特流101解码经Exp哥伦布编码的维度移位值112。
需要注意的是,维度移位值112例如可以是单个标量。作为可选功能,单个标量可以是唯一的参数,基于此可以指定重新排序的多维数组121中维度的新顺序。
此外,值得注意的是,根据一些实施例,重新排序单元120可被配置为执行单个维度到另一个位置的单次移位,以获得重新排序的多维数组121。
图2示出了根据本发明的实施例具有进一步可选功能的解码器的示意图。图2示出了解码器200,包括解码单元210和重新排序单元220。解码器200被提供比特流201,以获得第一多维数组211。第一多维数组211提供给重新排序单元220,该重新排序单元被配置为对第一多维数组211进行重新排序以获得重新排序的多维数组221。解码器200可提供重新排序的多维数组221作为神经网络的解码参数202。如图所示,作为可选特征,为了提供神经网络的解码参数,解码器200可被配置为进一步处理(例如使用多个或至少一个可选的进一步处理单元230)重新排序的多维数组221,以提供神经网络的解码参数202。
对于图2所示的实施例的上述特征和功能的细节,为了简洁起见,请参考在图1的内容中讨论的特征和功能。需要注意的是,如图2所示的类似或相应的特征可以可选地包括与图1所述相同或相应的功能和/或细节。此外,图1中标记和/或讨论的可选的所有特征对于根据图2的实施例也是可选的。
如图2所示,作为可选特征,重新排序单元220具有维度移位值212。
此外,作为可选特征,第一多维数组211提供给可选的进一步处理单元230a。进一步处理单元230a被配置为从第一多维数组211的第一维度推导出辅助数组的维度。
例如,第一多维数组211可以是权重张量,比特流201可以包括浮点参数张量的编码表示,浮点参数张量包括(可选地分解的)权重张量和可选的局部缩放参数、偏置和批量归一化参数,这些参数在模型架构中形成一个块。换句话说,权重张量和几个相应的张量,例如偏置、批量归一化参数和缩放因子,可以一起包括在比特流201中,例如包括在一个压缩数据单元(如NDU)中。根据这样的示例,辅助数组可以包括各自对应的张量,或至少是其值,例如以适应的形状。
例如,由于相应的张量可能与权重张量相关,因此它们的维度可以从(权重)张量维度中推导出来,例如使用进一步处理单元230a。例如,偏置、批量归一化参数和缩放因子可以是长度分别等于权重张量的输出通道数量(例如全连接层)或滤波器数量(例如卷积层)的一维张量。为了推导这些维度,可将将解码的权重张量的第一维度确定为一维张量的长度。因此,可以对解码的权重张量进行排序,使第一维度对应于输出通道或滤波器的数量。
换句话说,第一多维数组211(例如作为这种权重张量)可以是有序的,使第一维度对应于输出通道或滤波器的数量。因此,可以确定一个或多个辅助数组来表示偏移量、批量归一化参数和缩放因子。用于确定这种辅助数组的相应信息213可以由解码单元213提供给进一步处理单元230a。
因此,第一多维数组211(例如以权重张量表示的形式)可能已在编码器侧重新排序,因此比特流201中第一多维数组的编码表示的第一维度就可以从第一多维数组211的第一维度推导出辅助数组的所述维度。在确定所述维度之后,可以使用重新排序单元220将第一多维数组211重新排序到其编码之前的状态。如图所示,可选地,提供包括这种辅助数组的信息231a,用于确定解码的神经网络参数202。
作为可选特征,重新排序单元220被配置为,将第一多维数组的单个维度移位到不同的位置,从而获得重新排序的多维数组。例如,允许任意维度顺序可能会导致巨大的信令开销,因此将单个维度移位到另一个位置可以保持较低的信令开销。
作为可选特征,解码单元210被配置为执行基于上下文的解码。特别地,解码单元210被配置为使用基于上下文的熵解码对编码的神经网络参数进行解码。因此,上下文信息240被提供给解码单元210。特别地,作为可选特征,解码单元210被配置为使用位置映射函数来确定解码的神经网络参数在第一多维数组211中的位置,该位置映射函数将标量神经网络参数索引映射到维度索引集合上。
图3示出了根据本发明的实施例的编码器的示意图,编码器用于提供神经网络参数的编码表示。图3示出了编码器300,包括编码单元310和重新排序单元320。
重新排序单元被配置为使用重新排序获得重新排序的多维数组321,其中将神经网络参数的给定多维数组302的给定维度301被重排到重新排序的多维数组321中的第一维度。此外,编码单元310被配置为对重新排序的多维数组321进行编码,例如如图所示编码为比特流303。
如前所述,根据本发明的实施例的编码器可以基于与相应解码器相同的考虑。因此,为了简洁起见,就附加的、可选特征而言,请参考上文以及下文将公开的包括解码器的实施例,。因此,需要注意的是,根据实施例的编码器,例如编码器300,可以包括在任何本发明解码器的上下文中所公开的任何或全部特征,既可以单独使用,也可以组合使用。
图4示出了基于编码表示提供神经网络的解码参数的方法的框图。该方法400包括:410,使用神经网络参数的解码获得包括多个神经网络参数值的第一多维数组,以及420,使用重新排序获得420重新排序的多维数组,其中,第一多维数组的第一维度重排到重新排序的多维数组中的不同维度。
图5示出了用于提供神经网络参数的编码表示的方法的框图。该方法500包括:510,使用重新排序获得重新排序的多维数组,其中神经网络参数的给定多维数组的给定维度重排到重新排序的多维数组中的第一维度,以及520,对重新排序的多维数组进行编码。
在下文中,将在“建议-通过张量维度移位进行张量维度重新排序”章节、“用于神经网络编码的张量维度重新排序方法”章节和“计划的国际标准ISO/IEC15938-17的拟议更新草案”章节及其相应的子章节中描述不同的发明实施例和方面。
此外,所附权利要求将定义进一步的实施例。
应该注意的是,权利要求中定义的任何实施例都可以选择性地由上述章节和/或子章节中描述的任何细节(特征、功能和细节)进行补充。
此外,上述章节和/或子章节中描述的实施例可以单独使用,也可以由其他章节或子章节中的任何特征或权利要求中包括的任何特征进行补充。
此外,应该注意到,本文所述的各个方面可以单独使用,也可以组合使用。因此,可以在每个所述的单个方面添加细节,而无需在另一个所述的方面添加细节。
还应注意到,本公开明确或隐含地描述了可用于神经网络编码器(用于提供神经网络参数的编码表示的编码器)和神经网络解码器(用于基于编码表示提供神经网络参数的解码参数的解码器)中的特征。因此,本文所述的任何特征都可以用于神经网络编码器的上下文中和神经网络解码器的上下文中。
此外,本文公开的与方法有关的特征和功能也可以用于(配置为执行这种功能的)装置。此外,本文公开的与装置有关的任何特性和功能也可以用于相应的方法。换句话说,本文所公开的方法可以可选择地辅以针对装置所描述的任何特征和功能。
此外,本文所述的任何特征和功能都可以通过硬件或软件实现,或者使用硬件和软件的组合,这将在“实施替代方案”一节中描述。
建议-通过张量维度移位进行张量维度重新排序
以下讨论了与“[NNC]通过张量维移位进行张量维度重新排序”相关的实施例。
1.摘要(示例,细节是可选的)
根据一个方面,该投入的论文提出了用于重新排序张量维度的方法,例如以解决与使用NNR_PT_BLOCK有关的问题。例如,在编码器,张量维度被重排,而在解码器,该操作被反转,以恢复原始的维度顺序。例如,对于与标准相关部分(即在解码器),在解码后,通过将第一维度移位到其原始位置,在解码的权重张量中张量维度被重新排序。例如,这解决了两个问题。首先,例如,压缩数据单元类型NNR_PT_BLOCK从权重张量的第一维推导出偏置和/或批量归一化和/或局部缩放参数等维度。例如,解码后张量维度的重新排序可使编码器能够处理具有任意维度顺序的张量。其次,张量维度的顺序可能不是高效编码的最佳顺序。
2.问题描述
2.1问题1:NNR_PT_BLOCK的张量维度推导
例如,当前的工作草案[1]允许在单个NDU中将多个浮点参数张量编码为块(例如,nnr_compressed_data_unit_payload_type==NNR_PT_BLOCK)。例如,块可以包括(可选的分解的)权重张量和可选的局部缩放参数和/或偏移量和/或批量归一化参数。例如,NDU中编码的张量维度与权重张量相关。例如,其他参数张量的维度推导如下。例如,每个张量都是一维的,其长度等于权重张量的第一维度。例如,这里假设权重张量的第一维度对应于输出通道的数量(在全连接层的情况下)或滤波器的数量(在卷积层的情况下)。因此,当要编码的权重张量的维度按另一种顺序排列时,块中其他参数的张量维度的推导可能会失败,导致例如不可解码的比特流。
2.2问题2:处理效率低
例如,对于编码过程,每个要压缩的张量都(可选地)转换为2D矩阵,2D矩阵具有例如等于张量的第一维度的第一维度,以及等于所有其他张量维度的乘积的第二维度。例如,根据张量的第一维度,这可能会产生相当“纤细”的矩阵,例如,如果第一维度表示3x3滤波器核的宽度或高度。例如,这可能对后续的编码阶段不是最优的,从而导致编码效率降低或低效的处理,特别是对于块扫描顺序(scan_order>0),其中每个张量被分解为块(例如4x4、8x8等)。
3.通过张量维度移位的张量维度重新排序
为了解决第2节中描述的一个或多个问题,根据本发明的一个方面,本文提出了一种通过将单个张量维度移位到另一个位置来进行张量维度重新排序的方法。为此,编码器对张量重新排序,例如,代表输出通道数量的张量维度是重新排序后的第一维度。例如,从解码器的角度来看,解码的张量通过将张量的第一维度移位到由单个值指示的另一个位置进行重新排序。图6举例说明了这一概念。图6示出了根据本发明的实施例的编码-解码流水线的张量维度重新排序概念的框图。例如,每个方框对应于一个张量/矩阵表示,其维度用方括号给出。例如,黑色实心箭头/线表示一般处理流程,虚线/箭头表示语法元素first_tensor_dimension_shift的处理流程。需要注意的是,二维矩阵的使用是可选的。
如图6所示,输入张量610可以是四维张量,具有第一维度中的D0元素,第二维度中的D1元素,第三维度中的D2元素,第三维度中的D3元素。例如,元素可以是神经网络参数。如图所示,例如使用图3所示的编码器300,例如其重新排序单元320,可以对输入张量610(这可以是多维数组302的示例)进行重新排序612,以获得重新排序的张量620(这可以是多维数组620的示例)。如图所示,给定维度(本例中为D2),可以被重新排序到重新排序的张量620中的第一维度。因此,作为可选特征,使用了first_tensor_dimension_shift 630(这可能是维度移位值的示例)。
如前所述,这种维度移位值可以描述给定多维数组的哪个给定维度已被重新排序到重新排序的多维数组中的第一维度,或者描述在执行解码器侧重新排序时,编码的重新排序的多维数组的第一维度应移位多少个维度。此外,维度移位值可以描述在解码器中将编码的重新排序的多维数组的第一维度应移位到的新位置。此外,相应的编码器(例如300)可被配置为可选地使用ExpGolomb码将维度移位值编码至比特流650(可作为比特流102、202和/或303的示例)。特别地,维度移位值可以可选地是单个标量维度移位值,作为重新排序612的唯一参数。如图6所示,重新排序612可以包括单个维度D2到另一个位置(即第一位置)的单次移位,以获得以重新排序的张量620形式的重新排序的多维数组。
基于重新排序的张量620,作为可选特征,使用2D转换622或2D解释622,可以可选地得到2D矩阵640或2D矩阵解释640。如图所示,二维矩阵640的第一维度可以由重新排序的多维数组620的第一维度确定,因此二维矩阵640的第二维度由重新排序的多维数组620(以重新排序的张量620的形式)的进一步维度值的乘积确定。
如图所示,二维矩阵640可在比特流650中进行编码642。需要注意的是,二维转换622或二维解释622只是可选的,因此,可以可选地直接对重新排序的张量620进行编码。
在任何情况下,可选地,相应的编码器(例如300)可以使用基于上下文的熵编码对神经网络参数进行编码。
解码器(如解码器100、200)接收比特流650,如图所示,该比特流可选地包括维度移位值信息630。例如,使用解码单元110、210对比特流进行解码652,以获得解码的2D矩阵660或解码的2D矩阵解释660,并使用解码634获得有关维度移位的信息630。因此,换句话说,基于编码表示获得了二维矩阵660,其第一维度由第一维度值确定,其第二维度由多个进一步维度值的乘积确定。
基于此以及张量转换662或张量解释662,解码器获得重构的张量670(可以是第一多维数组111、211的示例),该示例例如对应于重新排序的张量620。简单地说,基于二维矩阵660,重构了原始的多个维度,其中矩阵660的第一维度对应于张量670的第一维度。之后,例如使用重新排序单元120、220,将重构的张量670进行重新排序672,以获得输入张量680,输入张量680与输入张量610对应或可选地相等。因此,作为示例,使用first_tensor_dimension_shift 630(例如信息112、212)。
3.1建议的语法(示例,细节是可选的)
为此,例如,当count_tensor_dimensions大于1时,就从比特流解码新的语法元素first_tensor_dimension_shift(例如表示第一维度的新位置)。例如,first_tensor_dimension_shift的值为非负值,且小于count_tensor_dimensions的值。例如,值等于零相当于没有重新排序。例如,如果first_tensor_dimension_shift不存在,则可以推断为零。
3.2重新排序方法-示例
例如,本文件所附的工作草案文本(计划的国际标准ISO/IEC15938-17的拟议更新草案)提供语法和重新排序方法。为了简单起见,用两个分别使用2D张量和4D张量的示例来说明重新排序方法。
3.2.1示例:2D-张量,first_tensor_dimension_shift==1
例如,假设具有张量维度[D1,D0]的2D张量A以及first_tensor_dimension_shift等于1已经从比特流中解码出来,且A元素可以通过A[m][n]访问(用m∈[0,D1-1]和n∈[0,D0-1]),重新排序过程例如如下:
●例如,初始化重新排序的张量B的维度[D0,D1]
●例如,根据以下设置B的值:
例如,对于2D张量,重新排序的张量B等于转置的张量A。
3.2.2示例:4D-张量,first_tensor_dimension_shift==2
例如,假设具有张量维度[D2,D1,D0,D3]的4D-张量A以及first_tensor_dimension_shift等于2已经从比特流中解码出来,且A的元素可以被A[m][n][o][p]访问(用A[m][n][o][p],n∈[0,D1-1],o∈[0,D0-1],p∈[0,D3-1]),重新排序过程举例如下:
●例如,初始化重新排序的张量B的维度[D0,D1,D2,D3]。
●例如,根据以下设置B的值:
4建议
根据本发明的一个方面,我们建议在工作草案中采用所提出的技术。
5“建议-通过张量维度移位进行张量维度重新排序”章节的参考资料
[1]MPEG,“Working Draft 3on Incremental Compression of neuralnetworks”,Document of ISO/IEC JTC1/SC29/WG04,WG04N0178,OnLine,Jan.2022
用于神经网络的编码的张量维度重新排序方法
本发明的一个方面涉及一种对(N维)神经网络参数张量的维度进行重新排序的方法,例如,为了在神经网络压缩框架(例如用于多媒体内容描述和分析的MPEG-7第17部分标准[2])中实现对块中的多个张量进行编码和/或高效处理。这种框架(例如MPEG-7第17部分)可以提供多种压缩工具,包括量化和/或无损编码和无损解码方法。通常(但不一定),为了高效处理,张量的内部解释等同于一维(1D)或二维(2D)表示。这种1D/2D表示的形状由原始张量维度及其顺序确定。此外,这种形状也可能影响压缩和处理流水线的效率。
因此,例如本发明所述的张量维度的重新排序可以提高效率。
根据一个方面,本发明主要针对神经网络压缩中神经网络参数层的有损和无损编码,但也可选择性地应用于其他有损和无损编码领域。
例如,装置(或系统)的方法可以分为不同的主要部分,包括以下内容:
1.量化
2.无损编码
3.无损解码
不过,并不一定要具有所有这些主要部分。
为了了解本发明的主要优势,我们将首先简要介绍神经网络的主题以及参数编码的相关方法。
1应用区域(所有细节都是可选的)
例如,神经网络的最基本的形式构成了一连串仿射变换,然后是随元素变化的非线性函数。例如,它们可以表示为有向无环图,如下图所示。例如,每个节点都包含特定的值,例如,通过与边上各自的权重值相乘,将该值向前传播到下一个节点。例如,所有传入的值然后被简单地汇总。
图7示出了根据本发明实施例的2层前馈神经网络的示意图。图7示出了前馈神经网络示例的图示。具体来说,这个2层神经网络700是非线性函数,它将4维输入向量710映射到实线上。因此,网络700包括输入层720、隐藏层730和输出层740。
例如,在数学上,上述神经网络将以以下方式计算输出:
输出=σ(W2·σ(W1·输入))
其中,例如,W2和W1是神经网络权值参数(边缘权值),sigma是某个非线性函数。例如,也可以可使用所谓的卷积层,将其作为矩阵-矩阵乘积,如文献[1]所述。例如,增量更新通常旨为W1和W2的权重提供更新,例如,可以是额外训练过程的结果。例如,W2和W1的更新版本通常会导致修改后的输出。从现在开始,我们将把根据给定输入计算输出的过程称为推理。此外,我们将中间结果称为隐藏层或隐藏激活值,例如,它们构成了线性变换+元素非线性,例如,如上述第一点积+非线性的计算。
例如,神经网络通常具有数百万个参数,因此可能需要数百MB才能表示。因此,举例来说,由于推理过程涉及到大型矩阵之间的许多点积运算,它们的推理过程可能需要大量的计算资源。因此,降低执行这些点积的复杂度是非常重要的。
2传统的解决方案
应注意的是,本节“常规解决方案”中的任何特征功能和细节都可以单独或组合用于根据本发明的实施例中。
此外应注意到,参数(例如神经网络的参数,如神经网络的权重)通常(但不一定)是N维张量(或等效于N维数组)。
2.1神经网络的张量表示(所有细节都是可选的)
例如,神经网络的参数通常(但不一定)由N维张量表示,其中维度N取决于模型架构和应用。例如,在N等于1和N等于2的情况下,分别对应于向量和矩阵。例如,每个维度的张量大小可以用长度为N的数组表示如下[D0,D1,…,DN-1]。例如,对于在MPEG-7第17部分标准的编码器和解码器中的处理,所有N大于或等于3的张量都(最好但不一定)被解释为维度等于[D0,(D1·D2·…·DN-1)]的2D矩阵。如果在解码器处不可用,则标准指定了在比特流中传输张量维度的方法,以便例如在解码后重构原始张量形状。对于下面描述的方法,例如可以假设权重参数分别表示或解释为向量或2D矩阵。
2.2量化和熵编码的相关方法(所有细节都是可选的)
例如,用于多媒体内容描述和分析的神经网络压缩MPEG-7第17部分的标准[2]提供了不同的神经网络参数量化方法,例如独立标量量化和依赖性标量量化(DQ,也被称为网格编码量化,trellis-coded quantization TCQ,TCQ)。此外,它还指定了一种熵量化方案,也称为deepCABAC[7]。为了更好地理解,现对其进行简要概述,这些方法可以可选地用于根据本发明的实施例。详情例如可以在[2]中找到。
2.2.1标量量化器(示例)
例如,可以使用标量量化器对神经网络参数进行量化。例如,量化的结果是减少了参数的可接受值的集合。换句话说,例如,神经网络参数被映射到所谓的重构水平的可数集合(实际上是有限集合)。例如,重构水平集代表了可能的神经网络参数值集合的适当子集。例如,为了简化以下的熵编码,可以使用量化索引来表示可接受的重构水平,量化索引作为比特流的一部分进行传输。在解码器侧,将量化索引映射为重构的神经网络参数。例如,重构的神经网络参数的可能值对应于重构水平集。例如,在编码器侧,标量量化的结果是(整数)量化索引集。
例如,在这种应用中使用的是均匀重构量化器(URQ,uniform reconstructionquantizer)。图8举例说明了其基本设计。图8示出了根据本发明实施例的均匀重构量化器的示意图。例如,URQ具有重构水平等距的特性。两个相邻重构水平之间的距离Δ称为量化步长。例如,其中一个重建水平等于0。因此,可用重构水平的完整集合是由量化步长Δ唯一指定的。例如,从量化索引q到重构权重参数t'的解码器映射原则上由以下简单公式给出
t′=q·Δ.
在这种情况下,术语“独立标量量化”例如指的是,给定任何权重参数的量化索引q,可以独立于其他权重参数的所有量化索引来确定相关的重构权重参数t'。
2.2.2依赖性标量量化(示例,所有细节都是可选的)
在依赖性标量量化(DQ)中,神经网络参数的可容许重构水平取决于重构顺序中先前神经网络参数的量化索引选择。将依赖性标量量化的概念与改进的熵编码相结合,其中神经网络参数的概率模型选择(或码字表选择)取决于可允许的重构水平集。神经网络参数依赖量化的优点在于,可允许的重构向量被更密集地打包在N维信号空间中(其中N表示待处理样本集中的样本或神经网络参数的数量,例如一层)。神经网络参数集的重构向量是指神经网络参数集的有序重构神经网络参数(或者可替代的,有序重构样本)。图9以最简单的两个神经网络参数为例,说明了依赖性标量量化的效果。图9示出了根据实施例的两个权重参数的简单情况下,可容许的重构向量位置的示意图例:(a)独立标量量化;(b)依赖性标量量化。图9a示出了独立标量量化的可允许重构向量(表示2d平面上的910)。可以看出,第二神经网络参数t′1的可容许值集合与第一重构神经网络参数t′0的选择值无关。图9b示出了依赖性标量量化的示例。请注意,与独立标量量化相比,第二神经网络参数t′1的可选重构值取决于第一神经网络参数t′0选择的重构水平。在图9b的示例中,第二神经网络参数t′1有两组不同的可用重构水平(用不同的颜色表示,例如集合920和集合930)。如果第一神经网络参数t′0的量化索引是偶数(…,-2,0,2,…),则第二神经网络参数t′1可以选择第一集合(蓝点,920)的任何重构水平。如果第一神经网络参数t′0的量化索引是奇数(…,-3,-1,1,3,…),则第二神经网络参数t′1可以选择第二集合(红点,930)的任何重构水平。在本例中,第一集合和第二集合的重构水平移位了量化步长的一半(第二集合的任何重构水平位于第一集合的两个重构水平之间)。
神经网络参数的依赖性标量量化的作用是,在给定的每N维单位体积重构矢量的平均数量下,神经网络参数的给定输入矢量与最近可用重构矢量之间距离的期望值会减小。因此,在给定平均比特数的情况下,神经网络参数的输入矢量和重构神经网络参数矢量之间的平均失真可以降低。在矢量量化中,这种效果被称为空间填充增益。对神经网络参数集使用依赖性标量量化,可以利用高维矢量量化潜在空间填充增益的大部分。而且,与矢量量化相比,重构过程(或解码过程)的实现复杂度与使用独立标量量化器的相关神经网络参数编码的复杂度相当。
由于上述因素的影响,DQ通常在较低的比特率下达到相同的失真水平。
2.2.3 MPEG-7第17部分中的DQ(示例,所有细节是可选的)
用于多媒体内容描述和分析的神经网络压缩MPEG-7第17部分标准,采用两个具有不同重构水平集的量化器Q1和Q2。两个集合都包含量化步长Δ的整数倍。Q1包含量化步长和0的所有偶数倍,Q2包含量化步长和0的所有奇数倍。图10示出了重构集合的这种拆分。图10示出了根据实施例将重构水平集合拆分为两个子集的示意性示例。量化集合0的两个子集用“A”和“B”标记,量化集合1的两个子集用“C”和“D”标记。
基于重构顺序中为前面的神经网络参数选择的量化索引,或更准确地说,基于先前编码的量化索引的奇偶性,在集合之间切换的过程确定了要应用的量化器。该切换过程是通过具有8个状态的有限状态机实现的(如表16所示),其中每个状态都与量化器Q1或Q2中的一个相关联。
表16:具有8个状态的配置的状态转换表的优选示例。
使用状态转换的概念,当前状态和当前量化集合由前一个状态(按重构顺序)和前一个量化索引唯一确定。
2.2.4熵编码(示例,所有细节是可选的)
作为上一步应用的量化的结果,权重参数被映射到所谓的重构水平的有限集合。这些可以由(整数)量化器索引(也称为参数水平或权重水平)和量化步长表示,例如,对整个层来说,量化步长可以是固定的。为了还原一个层的所有量化权重参数,解码器可以知道层的步长和维度。例如,它们可以单独传输。
在本节中,可对扫描进行描述。例如,可在本文描述块编码(NNR_PT_BLOCK)部分。
2.2.4.1量化索引扫描(示例,所有细节是可选的)
然后使用熵编码技术传输量化索引(整数表示)。因此,使用扫描将一层权重映射到量化的权重水平序列上。为此,标准中指定了五种不同的扫描顺序,由语法元素scan_order表示。第一种(scan_order==0)表示行扫描,从矩阵的最上面一行开始,从左到右对所含值进行编码。通过这种方式,所有行都从上到下进行编码。所有其他扫描顺序(scan_order>0)都对应于块扫描顺序。这里,矩阵被分解为大小为4x4(scan_order==1)、8x8(scan_order==2)、16x16(scan_order==3)或32x32(scan_order==4)的块,并且这些块是按块行顺序处理的。也就是说,从最上面的数据块行开始,从左到右处理数据块。处理块意味着按行扫描其值(从上到下扫描行,从左到右扫描每一行)。
2.2.4.2使用上下文自适应二进制算术编码(CABAC)的量化索引编码(示例,所有细节是可选的)
对于水平(level)的编码,采用了CABAC(Context-Adaptive Binary ArithmeticCoding,上下文自适应二进制算术编码)。详情请参考[2]。因此,量化的权重水平q被分解为一系列二进制符号或语法元素,然后可以交给二进制算术编码器(CABAC)。
第一步中,为量化的权重水平推导出二进制语法元素sig_flag,用于指定对应的权重水平是否等于零。如果sig_flag等于1,则推导出另一个二进制语法元素sign_flag。二进制(bin)表示当前的权重水平是正值(例如bin=0)还是负值(例如bin=1)。
接下来,对二进制的一元序列进行编码,然后是固定长度的序列,如下所示:
变量k初始化为非负整数,X初始化为1<<k。
其中编码了一个或多个语法元素abs_level_greater_X,指示量化权重水平的绝对值大于X。如果abs_level_greater_X等于1,则更新变量k(例如增加1),然后将1<<k添加到X,并进一步编码abs_level_greater_X。该过程一直持续到abs_level_greater_X等于0。然后,长度为k的固定长度代码就足以完成量化器索引的编码。例如,变量rem=X-|q|可以使用k位进行编码。或者可替代地,变量rem′可以定义为|rem′=(1<<k)-rem-1 rem′=(1<<k)-rem-1使用k位编码。可替换地,可以使用变量rem到k位的固定长度代码的任何其他映射。
在每个abs_level_greater_X之后将k加1时,这种方法等同于应用指数哥伦布编码(如果不考虑sign_flag)。
此外,如果编码器和解码器端都知道最大绝对值abs_max,当下一个要传输的abs_level_greater_X的X>=abs_max时,那么abs_level_greater_X语法元素的编码就可以终止。
2.2.4.3使用上下文自适应二进制算术编码(CABAC)的量化索引解码(示例,所有细节是可选的)
量化的权重水平(整数表示)的解码工作类似于编码。解码器首先对sig_flag进行解码。如果它等于1,接下来是sign_flag和abs_level_great_x的一元序列,其中k的更新(从而X的增量)必须遵循与编码器中相同的规则。最后,将k位固定长度代码解码并解释为整数(例如rem或rem′取决于对两者中的哪一个进行编码)。然后从X重构出解码后的量化权重水平的绝对值|q|,并形成固定长度部分。例如,将rem作为定长部分,|q|=X-rem。或者可替代地,如果对rem′被编码,则|q|=X+1+rem′-(1<<k)。作为最后一步,需要根据解码的sign_flag将符号应用于|q|,得到量化后的权重水平q。最后,通过量化后的权重水平q与步长Δ相乘来重构量化后的权重w。
在实现方案中,k初始化为0,并按如下方式更新。每当abs_level_greater_X等于1,k的必要更新根据以下规则进行:如果X>X’,k递增1,其中X’是一个常数,具体取决于应用。例如,X’是由编码器推导出来并向解码器发出信号的数字(例如在0到100之间)。
2.2.4.4上下文建模(示例,所有细节都是可选的)
在CABAC熵编码中,量化权重水平的大多数语法元素都使用二进制概率建模进行编码。每个二进制决策(二进制)都与上下文相关联。上下文表示一类编码二进制的概率模型。对于每个上下文,基于已经用相应上下文编码的二进制的值来估计两个可能二进制值中的一个的概率。根据应用的不同,可以采用不同的上下文建模方法。通常,对于与量化权重编码相关的几个二进制,用于编码的上下文是基于已经传输的语法元素选择的。根据实际应用情况,可以选择不同的概率估计器,例如SBMP[4]、HEVC[5]或VTM-4.0[6]。这种选择会影响压缩效率和复杂度等。
以下描述一种适用于各种神经网络的上下文建模方案。为了解码权重矩阵(层)中特定位置(x,y)的量化权重水平q,将局部模板应用于当前位置。该模板包含许多其他(有序的)位置,例如(x-1,y)、(x,y-1)、(x-1,y-1)等。对于每个位置,都得出一个状态标识符。
在一个实现方案变体(表示为Sil)中,位置(x,y)的状态标识符sx,y推导如下:如果位置(x,y)点在矩阵之外,或者位置(x,y)处的量化权重水平qx,y尚未解码或等于零,则状态标识符sx,y=0。否则,状态标识符为sx,y=qx,y<0?1:2。
对于特定的模板,将推导出状态标识符序列,状态标识符值的每种可能的组合都映射到上下文索引,标识要使用的上下文。对于不同的语法元素,模板和映射可能不同。例如,从包含(有序)位置(x-1,y),(x,y-1),(x-1,y-1)的模板中,可以推导出状态标识符的有序序列sx-1,y,sx,y-1,sx-1,y-1。例如,该序列可以映射到上下文索引C=sx-1,y+3*sx,y-1+9*sx-1,y-1。例如,上下文索引C可用于标识sig_flag的多个上下文。
在一个实施方案的变体(表示为方法1)中,位置(x,y)处的量化权重水平1 qx,y的sig_flag或sign_flag的局部模板只包含一个位置(x-1,y)(即左邻居)。关联的状态标识符sx-1y是根据实现变体Sil推导出来的。
对于sig_flag,根据sx-1,y的值从三个上下文中选择一个,或者,对于sign_flag,根据sx-1,y的值从其他三个上下文中选择一个。
在另一个实施方案的变体(表示为方法2)中,sig标志的本地模板包含三个有序位置(x-1,y),(x-2,y),(x-3,y)。关联的状态标识符序列sx-1,y,sx-2,y,sx-3,y根据实施方案变体Si2推导。
对于sig_flag,上下文索引C推导如下:
如果sx-1,y≠0,则C=0。否则,如果sx-2,y≠0则C=1。
否则,如果sx-3,y≠0那么C=2。否则,C=3。
这也可以用以下公式表示:
C=(sx-1,y≠0)?0:((sx-2,y≠0)?1:((sx-3,y≠0)?2:3))
以同样的方式,左侧邻居的数量可以增加或减少,以便上下文索引C等于与左侧下一个非零权重的距离(不超过模板大小)。
例如,每个abs_level_greater_X标志都可以应用自己的两个上下文的集合。然后根据sign_flag的值从两个上下文中选择一个。
在一种实施方案变体中,对于X小于预定义数字X'的abs_level_great_X标志,根据X和/或sign_flag的值来区分不同的上下文。
在一种实施方案变体中,对于X大于或等于预定义的数字X'的abs_level_greater_X标志,仅根据X区分不同的上下文。
在另一个实施方案变体中,X大于或等于预定义的数字X'的abs_level_great_X标志,使用固定码长1进行编码(例如使用算术编码器的旁路模式)。
此外,一些或全部语法元素的编码也可以不使用上下文。相反,它们的编码长度固定为1位。例如,使用所谓的CABAC旁路二进制(bin)。
在另一个实施方案变体中,使用旁路模式对固定长度的余数rem进行编码。
在另一个实施方案变体中,编码器确定预定义的数字X’,根据符号为每个X<X’的语法元素abs_level_greater_X区分两个上下文,并对每个X<X’的abs_level_greater_X使用一个上下文。
2.2.4.5依赖性标量量化的上下文建模(示例,所有细节都是可选的)
依赖性标量量化的主要方面是神经网络参数有不同的可容许重构水平集(也称为量化集)。当前神经网络参数的量化集是基于之前神经网络参数的量化索引的值确定的。如果我们考虑图10中优选示例并比较两个量化集,很明显,集合0中重构水平等于0与相邻重建水平之间的距离要大于集合1。因此,如果使用集合0,量化索引等于0的概率更大,如果使用集合1,则概率更小。在实施方案变体中,熵编码会根据当前量化指数所使用的量化集(或状态)来切换码字表或概率模型,从而利用这种效应。
需要注意的是,在对当前量化索引(或当前量化索引的相应二进制判定)进行熵解码时,如果要对码字表或概率模型进行适当的切换,则必须知道前面所有量化索引的路径(与所用量化集的子集相关联)。因此,有必要按重构顺序对神经网络参数进行编码。因此,在实施方案变体中,神经网络参数的编码顺序等于它们的重构顺序。除此之外,量化索引的任何编码/重构顺序都是可能的,如2.2.4.2节中指定的顺序,或任何其他唯一定义的顺序。
绝对水平的二进制中至少有一部分通常使用自适应概率模型(也称为上下文)进行编码。在实施方案变体中,一个或多个二进制的概率模型是基于对应的神经网络参数的量化集(或者更一般地说,对应的状态变量)来选择的。所选择的概率模型可以取决于已传输的量化索引的多个参数或属性,但其中一个参数是适用于正在编码的量化索引的量化集或状态。
在另一个实施方案变体中,用于传输层量化索引的语法包括用于指定量化索引是否等于零或不等于0的二进制。用于编码该二进制的概率模型是从一组两个或更多的概率模型中选择的。所使用概率模型的选择取决于适用于相应量化索引的量化集(即重构水平集)。在另一个实施方案变体中,所使用的概率模型取决于当前状态变量(状态变量意味着所使用的量化集)。
在进一步的实施方案变体中,用于传输层量化索引的语法包括指定了量化索引是大于零还是小于零的二进制。换句话说,二进制表示量化索引的符号。所使用概率模型的选择取决于适用于相应量化索引的量化集(即重构水平集)。在另一个实施方案变体中,所使用的概率模型取决于当前状态变量(状态变量意味着所使用的量化集)。
在进一步的实施方案变体中,用于传输量化索引的语法包括用于指定量化索引(神经网络参数级别)的绝对值是否大于X的二进制(细节请参见2.2.4.2节)。用于编码该二进制的概率模型是从一组两个或更多的概率模型中选择的。所使用概率模型的选择取决于适用于相应量化索引的量化集(即重构水平集合)。在另一个实现方案变体中,所使用的概率模型取决于当前状态变量(状态变量意味着所使用的量化集)。
一个方面是神经网络参数的依赖性量化与熵编码相结合,其中量化索引的二进制表示(也称为量化水平)的一个或多个二进制的概率模型的选择取决于量化集(可容许的重构水平集合)或当前量化指标的相应状态变量。量化集(或状态变量)由前面的神经网络参数的量化索引(或表示量化索引的二进制的子集)按编码和重构顺序给出。
在实施方案变体中,所述概率模型的选择与以下一个或多个熵编码方面相结合:
●量化索引的绝对值使用二值化方案传输,该方案由使用自适应概率模型编码的多个二进制组成,如果自适应编码二进制尚未完全指定绝对值,则使用算术编码引擎的旁路模式(对所有二进制使用pmf(0.5,0.5)的非自适应概率模型)对后缀部分进行编码。在实施方案变体中,后缀部分的二值化取决于已经传输的量化索引的值。
●量化索引的绝对值的二值化包括自适应编码的二进制,该二进制指定量化索引是否不等于0。用于编码该二进制的概率模型(称为上下文)是从候选概率模型集合中选择的。所选择的候选概率模型不仅由当前量化索引的量化集(可容许的重构水平集)或状态变量确定,还由该层已传输的量化索引确定。在实施方案变体中,量化集(或状态变量)确定可用概率模型的子集(也称为上下文集合),已编码的量化索引的值确定该子集(上下文集合)中使用的概率模型。
在实施方案变体中,基于当前神经网络参数的局部邻域中已编码的量化索引的值确定上下文集合中使用的概率模型。下面列出了一些可以基于局部邻域内量化索引的值推导出的示例测量,然后用于选择预先确定的上下文集合的概率模型:
○局部邻域内量化索引的符号不等于0。
○局部邻域内不等于0的量化索引的数量。该数量可能被剪切到最大值。
○局部邻域内量化索引的绝对值之和。该数字可能被剪切到最大值。
○局部邻域内量化索引的绝对值之和与局部邻域内不等于0的量化索引数量之差。该数字可能被剪切到最大值。
量化索引绝对值的二值化包括自适应编码的二进制,它指定量化索引的绝对值是否大于X。用于编码这些二进制的概率模型(称为上下文)是从候选概率模型集合中选择的。所选择的概率模型不仅由当前量化指标的量化集(可容许的重构水平集)或状态变量确定,还由该层已传输的量化索引确定。在实施方案变体中,量化集和(或状态变量)确定可用概率模型的子集(也称为上下文集合),已编码的量化索引的数据确定该子集(上下文集合)中使用的概率模型。为了选择概率模型,可以使用上述任何一种方法(用于指定量化索引是否不等于0的二进制)。
2.3用于压缩神经网络增量更新的相关方法(示例,所有细节都是可选的)
本节描述用于编码神经网络增量更新的方法,其中重构的网络层是由现有的基础层(基础模型的基础层)和一个或多个增量更新层组成,这些层可以分别进行编码和传输。
2.3.1基础模型和更新模型的概念(示例,所有细节都是可选的)
该概念根据第1节引入了神经网络模型,从给定输入可计算输出的意义上讲,该模型可以被认为是完整的模型。该模型表示为基础模型NB。每个基础模型由层组成,表示为基础层LB1,LB2,...,LBJ。基础层包含基础值,例如,可以选择这些值以便在第一步中有效地表示或压缩/传输。此外,该概念还引入了更新模型(NU1,NU2,...,NUK),这些模型可能与基本模型具有相似甚至相同的体系结构。例如,更新模型可以不是上述意义上的完整模型。相反,它可以通过组合方法与基础模型相结合,从而形成一个新的完整模型NB1。该模型本身可以作为进一步更新模型的基础模型。更新模型NUk由层组成,表示为更新层LUk,1,LUk,2,...,LUk,J。更新层包含基础值,例如,可以选择这些值,以便有效地分别表示或单独压缩/传输。
更新模型可以是在编码器侧对基础模型应用(额外)训练过程的结果。根据更新模型提供的更新类型,可以应用几种组合方法。请注意,本发明中描述的方法不限于任何特定类型的更新/组合方法,而是适用于使用基础模型/更新模型方法的任何架构。
在优选的实施例中,第k个更新模型NUk包含具有差分值的层LUk,j(也称为增量更新),这些层被加到基本模型的相应层LBj中,以根据以下形成新的模型层LNk,j:
LNkj=LBi+LUk,j,对于所有j
新的模型层形成(更新的)新模型,然后作为下一次增量更新的基础模型,单独传输。
在进一步的优选实施例中,第k个更新模型包含具有缩放因子值的层LUk,j,这些层乘以相应的基础层LBj值,根据以下形成新的模型LNk,j:
LNk,j=LBj·LUk,j,对于所有j
新的模型层形成(更新的)新模型,然后作为下一次增量更新的基础模型,单独传输。
请注意,在某些情况下,更新模型也可以包含新层,以取代一个或多个现有层(即对于所有层k:LNk,j=LUk,j,对于所有j,而不是如上所述更新层。
2.3.2增量更新的神经网络参数编码(示例,所有细节都是可选的)
在熵编码阶段,可以利用基础模型和一个或多个增量更新的概念来提高编码效率。层的参数通常用多维张量表示。对于编码过程,所有张量通常映射到2D矩阵,如行和列这样的实体。然后根据预定义的顺序扫描该2D矩阵,并对参数进行编码/传输。注意,下面描述的方法并不局限于2D矩阵。这些方法适用于所有提供已知大小参数实体(如行、列、块等和/或它们的组合)的神经网络参数的表示。为了更好地理解这些方法,下面将使用2D矩阵表示。
在优选实施例中,层的参数以2D矩阵表示,该矩阵提供了如行和列的数值实体。
2.3.2.1行或通道跳过模式(示例,所有细节都是可选的)
通常,更新模型的值的大小比完整(基础)模型小。通常有相当数量的值为零,这也会被量化过程被进一步放大。因此,要传输的层可能包含很长的零序列,这意味着2D矩阵的某些行完全为零。
可以通过为每一行引入标志(skip_row_flag)来利用这一点,该标志指定一行中的所有参数是否等于零。如果该标志等于1(skip_row_flag==1),则不会对该行的其他参数进行编码。在解码器侧,如果该标志等于1,则不对该行的任何参数进行解码。相反,这些参数被假定为0。
这里的一个变体是将所有的skip_row_flags排列到标志数组skip_row_flag[N]中,其中N是行数。另外,在一个变体中,N可能会在数组之前被发出信号。
否则,如果该标志等于0,则对该行的参数进行常规编码和解码。
每个skip_row_flag都与概率模型或上下文模型相关联。基于先前编码的符号(如先前编码的参数或skip_row_flag),从一组上下文模型中选择上下文模型。
在优选实施例中,单个上下文模型适用于一层的所有skip_row_flag。
在另一个优选实施例中,基于先前编码的skip_row_flag的值,从包括两个上下文模型的集合中选择上下文模型。如果前面的skip_row_flag的值等于0,则选择第一上下文模型;如果该值等于1,则选择第二上下文模型。
在进一步的优选实施例中,基于先前编码的更新或基本模型的相应层中同位skip_row_flag的值,从包括两个上下文模型的集合中选择上下文模型。如果前面的skip_row_flag的值等于0,则选择第一上下文模型;如果该值等于1,则选择第二上下文模型。
在另一个优选实施例中,例如在前面的实施例中,上下文模型的给定数量被加倍形成两组上下文模型。然后,基于先前编码的特定更新或基础模型的相应层中同位skip_row_flag的值选择一组上下文模型。这意味着,如果前面的skip_row_flag的值等于0,则选择第一集合,如果该值等于1,则选择第二集合。
进一步的优选实施例与前述实施例等同,但是如果在先前编码的特定更新或基本模型中不存在相应的层,则选择第一上下文模型。因此,如果在先前编码的特定更新或基本模型中存在相应的层,则选择第二集合。
注意,所描述的跳过行的特定机制同样适用于二维矩阵的列,以及具有N个参数维度的广义张量,其中,可以使用所描述的skip_flag或skip_flag_array机制跳过维度较小的K(K<N)的子块或子行。
2.3.2.2改进的基础模型更新模型结构的上下文建模(示例,所有细节都是可选的)
熵编码阶段可以利用基础模型和一个或多个更新模型的概念。这里描述的方法适用于任何使用上下文模型的熵编码方案,例如2.2.4节中描述的方法。
通常,独立的更新模型(和基础模型)是相关的,可在编码器侧和解码器侧使用。这可以用于上下文建模阶段,通过提供新的上下文模型和上下文模型选择方法来提高编码效率。
在优选实施例中,采用根据章节2.2.4.2的二值化(sig_flag,sign_flag等)、上下文建模和编码方案。
在另一个优选实施例中,用于要编码的符号的给定数量的上下文模型(上下文集合)被复制,形成两个或多个上下文模型集合。然后,基于先前编码的特定更新或基础模型的相应层中的同位参数的值选择上下文模型集合。这意味着如果同位参数低于第一阈值T1,则选择第一集合,如果该值大于或等于阈值T1,则选择第二集合,如果该值大于或等于阈值T2,则选择第三集合,以此类推。该过程可以应用于更多或更少的阈值。
在一个与前一个实施例相同的优选实施例中,使用单一阈值T1=0。
在另一个优选实施例中,用于要编码的符号的给定数量的上下文模型(上下文集合)被复制,形成两个或多个上下文模型集合。然后,基于先前编码的特定更新或基本模型的相应层中由同位参数和邻域值(例如同位参数的一个或多个空间邻域)组成的值的集合选择上下文模型集合。
在与前一个实施例相同的优选实施例中,如果模板内的值(或绝对值)之和低于第一阈值T1,如果该和大于或等于阈值T1,则选择第一集合,如果该和大于或等于阈值T2,则选择第二集合,等等。该过程可以应用于更多或更少的阈值。
在与前一个实施例相同的特别优选实施例中,模板包括同位参数和同位参数的左邻居,并且使用单个阈值T1=0。
在另一个优选实施例中,基于由先前编码的特定更新模型或基础模型的相应层中的同位参数和邻近值(例如同位参数的一个或几个空间邻近值)组成的值的集合,在语法元素的上下文模型的集合中选择上下文模型。
在与前一个实施例相同的优选实施例中,如果模板内的值(或绝对值)之总和低于第一阈值T1,如果该和大于或等于阈值T1,则选择第一上下文模型,如果该值大于或等于阈值T1,则选择第二上下文模型,如果值大于或等于阈值T2,则选择第三上下文模型等等。此过程可以应用于更多或更少的阈值。
在与前一个实施例相等的特别优选实施例中,模板包括同位参数和同位参数的左邻居,并且使用单个阈值T1=0。
在进一步的优选实施例中,用于要编码的符号的给定数量的上下文模型(上下文集合)被复制形成两个或多个上下文模型集。然后,基于先前编码的特定更新或基本模型的相应层中的同位参数的绝对值选择上下文模型集合。这意味着如果同位参数的绝对值小于第一阈值T1,则选择第一集合,如果绝对值大于或等于另一个阈值T1,则选择第二集合,如果绝对值大于或等于阈值T2,则选择第三集合,等等。该过程可以应用于更多或更少的阈值。
在与前一个实施例相同的优选实施例中,使用上下文模型集合对sig_flag进行编码,以指示待编码的当前值是否等于零。本实施例使用单个阈值T1=1。
另一个优选实施例与先前实施例相同,但编码的不是sig_flag,而是sign_flag,它指示待编码的当前值的符号。
另一个优选实施例与先前实施例相同,但如果使用sig_flag,则编码abs_level_greater_X,它指示待编码的当前值是否大于X。
在进一步的优选实施例中,待编码的符号的给定数量的上下文模型(上下文集合)被加倍,形成两个上下文模型集合。然后根据是否存在相应的先前编码的更新(或基础)模型来选择上下文模型集合。如果没有相应的先前编码的更新(或基础)模型,则选择第一上下文模型集合,否则选择第二集合。
在另一个优选实施例中,基于先前编码的特定更新(或基础)模型中的相应的同位参数值,从语法元素的上下文模型集合中选择上下文模型。这意味着如果同位参数低于阈值T1,则选择第一模型,如果值大于或等于阈值T1,则选择第二模型,如果值大于或等于另一个阈值T2,则选择第三模型。该过程可以应用于更多或更少的阈值。
在与前一个实施例相同的优选实施例中,编码sign_flag,该sign_flag指示要编码的当前值的符号。上下文模型选择过程的第一阈值是T1=0,第二阈值是T2=1。
在另一个优选实施例中,基于先前编码的更新(或基础)模型中特定相应的同位参数的绝对值来从语法元素的上下文模型集合中选择上下文模型。这意味着如果同位参数的绝对值小于阈值T1,则选择第一模型,如果该值大于或等于阈值T1,则选择第二模型,如果该值大于或等于阈值T2,则选择第三模型,等等。该过程可以应用于更多或更少的阈值。
在与前一个实施例相同的优选实施例中,对sig_flag进行编码,该编码指示要编码的当前值是否等于零。它将第一阈值设置为T1=1,第二阈值设置为T2=2。
在另一个与上一个实施例相同的优选实施例中,没有使用sig_flag,而是使用abs_level_greater_X标志进行编码,该标志指示要编码的当前值是否大于X。此外,只采用了一个阈值,该阈值设置为T1=X。
请注意,上述任何一个实施例都可以与一个或多个其他实施例相结合。
2.4在块中压缩多个张量(示例,所有细节都是可选的)
通常,每个张量都是单独编码的,并在所谓的压缩数据单元(NDU)中传输,该单元还包含关于压缩张量的(头部)信息,例如张量类型、编码参数或张量的原始维度(如2.1节中所述)。不过,MPEG-7第17部分指定了一种特殊的NDU类型(NNR_PT_BLOCK),它允许在单个NDU中传输权重张量和几个相应的张量,即偏置、批量归一化参数和缩放因子。块中的所有张量共享相同的头部信息(而不是传输单独的头部信息),因此减少了比特流大小。由于其他张量与权重张量直接相关,它们的维度可以按以下方式从(权重)张量维度推导出来。偏移量、批量归一化参数和缩放因子是长度分别等于权重张量的输出通道数量(全连接层)或滤波器数量(卷积层)的一维张量。为了推导这些维度,标准指定使用解码的权重张量的第一维度作为一维张量的长度。这意味着,解码的权重张量被期望是有序的,使第一维度总是对应于输出通道或滤波器的数量。
3发明
下面将介绍本发明的各个方面以及本发明的具体实施方式。
应该注意的是,本节所述的任何特征、功能和细节都可以单独或结合使用。此外,应该注意的是,本节所述的任何特征、功能和细节都可以有选择地引入任何传统的编码概念和解码概念中。
根据一个方面,本发明描述了一种张量维度重新排序方案,以便能够在神经网络压缩框架(例如用于多媒体内容描述和分析的MPEG-7第17部分标准[2])中有效地处理张量,。例如,在张量编码之前,张量维度在编码器侧被重新排序。例如,在解码器侧,该重排顺序会被逆应用,以恢复原始维度。例如,在比特流中对如何推导原始维度的信息发出信号。
例如,允许任意维度顺序可能会导致巨大的信令开销,特别是对于高维度张量,因为排列的数量随着张量维度N的数量大量增加。相反,根据本发明的一个方面,例如,本发明所述方法只执行单个维度到另一个位置的移位。
下一节将简要说明张量维度重新排序的必要性。然后,在第3.2节中,将通过示例来说明该方法。之后,在第3.3节和第3.4节中,将以示例介绍该方法和相关语法。
3.1动机
正如在2.1节中所提到的,张量通常(但不一定)(例如在MPEG-7第17部分中)分别表示或解释为一维向量或二维矩阵,例如,第一维度的长度等于张量的第一维度,第二维度的长度等于所有其他维度的乘积。
因此,二维矩阵的形状可能本质上取决于张量的第一维度。例如,如果张量维度的排序使第一维度的长度较小(例如3x3滤波器核的宽度或高度),则输出比较“纤细”的矩阵。例如,这可能导致待编码的二维矩阵(解释)的低效处理,特别是对于2.2.4.1节所述的块扫描顺序,其中矩阵被分解为块。例如,MPEG-7第17部分标准指定了4种块扫描顺序,块大小为4x4、8x8、16x16和32x32。例如,假设矩阵的第一维度小于4(或8、16、32),这将产生一行被裁剪的块,这对于进一步处理并不是最佳选择。
根据一个方面,本发明例如是由2.4节中描述的方法进一步激发的,其中,例如多个相关张量被压缩在块中,例如在MPEG-7第17部分中使用方法。例如,这里相应张量的维度是从权重张量的维度推导出来的,或者例如更具体地,是从权重张量的第一维推导出来的。在某些情况下,这需要例如对张量进行排序,使第一维度与输出通道(全连接层)或滤波器(卷积层)的数量相关,否则在某些情况下,推导过程可能会失败。
例如,上述方面展示了高效的张量维度重新排序方法的优势,该方法将在以下几节描述。
3.2张量维度重新排序方案的说明(示例,细节是可选的)
如前所述,根据本发明的一个方面,该方法对张量进行重新排序,例如,将一个维度移位到另一个位置。首先,以图6所示的4维的示例来说明该概念。如前所述,图6示出了编码-解码流水线的张量维度重新排序概念的示意图。例如,每个方框对应于一个张量/矩阵表示/解释,方括号中给出维度。例如,黑色实线箭头/线表示一般处理流程,虚线/箭头表示语法元素first_tensor_dimension_shift的处理流程。(示例;编码和解码可单独使用;2维矩阵解释是可选的)。
例如,从编码器的角度来看,值first_tensor_dimension_shift(此处可以设置为2)表示张量维度,它在重新排序过程中被移位到张量维度的第一位置(参见示例中的D2)。因此,例如,第一步,对张量重新排序,第二步,该张量例如被(可选地)解释为2D矩阵,然后进行编码。在解码器侧,(可选的)2D矩阵(解释)例如被解码并例如被解释为张量。然后,例如按逆顺序进行重新排序,例如将维度D2移回位置2。例如,这里的值first_tensor_dimension_shift指定了重新排序后解码和重构的张量的第一维度的新位置。
对于给定的示例,编码器和解码器的重新排序过程例如如下所示:
编码器(示例;细节是可选的):
例如,假设给定了具有张量维度[D0,D1,D2,D3]的4D张量AEnc以及first_tensor_dimension_shift等于2,并且AEnc的元素可以通过AEnc[m][n][o][p]访问(m∈[0,D0-1],n∈[0,D1-1],o∈[0,D2-1],以及p∈[0,D3-1])),则
●例如(可选地)初始化重新排序的张量BEnc的维度[D2,D0,D1,D3]
●例如,根据以下设置BEnc的值:
解码器:(示例;细节是可选的)
例如,假设具有张量维度[D2,D0,D1,D3]的4D张量BDec以及first_tensor_dimension_shift等于2已从比特流中解码出来,且可以通过BDec[o][m][n][p]访问BDec的元素(m∈[0,D0-1],n∈[0,D1-1],o∈[0,D2-1]以及p∈[0,D3-1])),则:
例如,初始化重新排序的张量ADec的维度[D0,D1,D2,D3]
●例如,根据以下设置ADec的值:
因此,一般地,解码器(例如如图1所示的100,例如如图2所示的200,例如相应解码单元110、210)例如被配置为基于例如比特流650中的编码表示获得二维矩阵660,其第一维度是由第一维度值确定,例如如图6所示的D2,以及,其第二维度是由多个进一步维度值的乘积确定,例如如图6所示的D0*D1*D3。此外,这样的解码器例如可以被配置为基于二维矩阵660获得第一多维数组(例如111,例如211,例如如图6所示的670),其维度由第一维度值和进一步维度值中的单个维度值确定,以及这样的解码器可以被配置为基于第一多维数组获得重新排序的多维数组(例如111,例如221,例如图6所示的680),其中重新排序的多维数组的第一维度由进一步维度值之一定义。
3.3用于张量维度重新排序的方法(示例,细节是可选的)
本节以任意张量维度为例介绍本发明,其工作原理与3.2节中的示例类似。例如,在编码器对张量进行重新排序,从而将某个例如由值first_tensor_dimension_shift指定的张量维度,移位到第一位置。例如,在解码器以逆序完成这种移位(例如,将第一维度移位到first_tensor_dimension_shift表示的位置)。以下举例说明该方法。
例如,给出了N维张量其维度写成数组dimsT=[D0,D1,...,DN-1],其中例如,D0与张量的第一维度关联,D1与张量的第二维度关联,等等。Dk(k∈[0,1,...,N-1])的值例如表示关联维度的长度(例如D0是第一维度的长度)。例如,权重在张量T中的位置可以通过来指示,例如通过另一个数组其长度等于dimsT的长度。这里,dk∈[0,1,...,Dk-1]例如表示维度Dk中的位置,以及标量i∈[0,1,...,(D0·D1·...·DN-1)]例如指定张量中的位置。i到的映射例如是由扫描确定的,例如以行主扫描(细节见下文)。
此外,例如还有arrayIndexShift(inputArray[],shiftPos,reverseOrder)函数,该函数接受数组inputArray[]、值shiftPos和布尔值reverseOrder作为输入,输出例如是数组outputArray[],如下所示:
●例如,用inputArray[]的副本初始化outputArray[]。
●例如,如果reverseOrder==False:
○位于位置shiftPos的元素例如会从outputArray[]中删除。
○inputArray[]的位于位置shiftPos的元素例如插入到outputArray[]的第一位置。
●例如,否则:
○如果shiftPos>0:
■位于第一位置的元素例如从outputArray[]中删除
■inputArray[]的第一元素例如插入到outputArray[]中,例如在位置为shiftPos的元素之前以及位置为shiftPos-1的元素之后
然后,例如,在编码器可以获得重新排序的张量R(来自张量T),如下所示:
●例如,初始化张量的维度
dimsR=arraylndexShift(dimsT,first_tensor_dimension_shift,False)
●例如,对于(i=0;i<(D0·D1·...·DN-1);i++)
○
○
例如,在解码器可以获得重新排序的张量R(来自张量T),如下所示:
●例如,初始化张量R的维度
dimsR=arraylndexShift(dimsT,first_tensor_dimension_shift,True)
●例如,对于(i=0;i<(D0·D1·...·DN-1);i++)
○
○
在优选实施例中,该方法的解码器流程例如如下实现:
该流程的输入例如是:
●变量inputTensor,例如表示维度应被重新排序的张量
●变量inputTensorDims,例如指定inputTensor的维度
●变量firstTensorDimShift,例如表示inputTensor的第一维度的移位
例如,该流程的输出是变量reorderedTensor,例如,其维度等于ShiftArrayIndex(inputTensorDims,firstTensorDimShift)。例如,变量reorderedTensor的元素设置如下:
例如,函数Size、Prod、TensorIndex和ShiftArrayIndex定义如下:
Prod(arrayName[])例如返回数组arrayName[]的所有元素的乘积。
Size(arrayName[])例如返回名为arrayName的数组或张量中包含的元素的数量。如果arrayName[]是张量,则返回的例如是对应于张量的所有维度的乘积。
TensorIndex(tensorDimensions[],i,scan)例如返回与tensorDimensions[]具有相同维数的数组,其中,数组的元素例如被设置为整数值,这样该数组可以用作索引,指向具有维度tensorDimensions[]的张量的元素,如下所示:
例如,如果变量scan等于0:
例如,返回的数组指向张量的行主扫描顺序中的第i个元素
张量的维度tensorDimensions[],例如推导如下:
例如,变量outputArray[]被初始化大小设置为Size(tensorDimensions[])。
例如,变量idx设置为i
例如,outputArray[]的元素设置如下:
for(a=Size(tensorDimensions)-1;a>=0;a--){
outputArray[a]=idx%tensorDimensions[a]
idx=idx/tensorDimensions[a]
例如,返回的数组是outputArray[]。
例如,如果变量scan大于0:
例如,变量bs设置为4<<scan_order。
例如,变量h设置为tensorDimensions[0]。
例如,变量w设置为Prod(tensorDimensions)/h
例如,通过调用IndexToXY(w,h,i,bs),变量x和y分别设置为返回数组的第一元素和第二元素。
例如,返回的数组是TensorIndex(tensorDimensions,y*w+x,0)。
注意:运算符“/”被定义为为整数除法,其结果向零截断。例如,7/4和-7/-4被截断为1,-7/4和7/-4被截断为-1。
注意:运算符“++”被定义为递增,即x++等价于x=x+1;在数组索引中使用时,其值为变量在递增操作之前的值。
注意:运算符“--”被定义为递减,即x--等价于x=x-1;在数组索引中使用时,其值为变量递减操作之前的值。
注意:运算符“x%y”被定义为模数。x除以y的余数,仅对x≥0以及y>0的整数x和y定义。
注意:函数TensorIndex例如提供了从“i”到张量中的位置的映射,这样就相当于根据“scan”扫描扫描度等于[tensorDimensions[0],Prod(tensorDimensions)/tensorDimensions[0]]的二维矩阵(参见2.2.4.1)。
例如,ShiftArrayIndex(inputArray[],TensoshiftIndexPosition)返回数组outputArray[],它是inputArray[]的副本,但将inputArray中位于位置0的元素移位到shiftIndexPosition,例如如下:
例如,使用inputArray[]的副本初始化变量outputArray[]。
例如,如果shiftIndexPosition大于0:
例如,outputArray[]的第一元素从outputArray[]中删除。
例如,inputArray[]的第一元素插入到outputArray[]中位置为shiftIndexPosition的元素之前以及位置为shiftIndexPosition-1的元素之后。
一般来说,根据实施例的解码器,例如如图1所示的解码器100,例如如图2所示的解码器200,例如其相应的解码单元110、210,例如可以被配置为使用位置映射函数(例如TensorIndex(tensorDimensions[],i,scan))确定第一多维数组(例如111,例如211)中解码的神经网络参数的位置,该位置映射函数映射标量参数索引(例如i)到维度索引集合上。这种解码器特别可被配置为使用基于上下文的熵解码对编码的神经网络参数进行解码,例如如图2所示。
此外,一般来说,根据实施例的解码器,例如如图1所示的解码器100,例如如图2所示的解码器200,例如其相应的解码单元120、220,例如可以被配置为使用函数(例如TensorIndex(tensorDimensions[],i,scan))获得重新排序的多维数组(例如121,例如221),该函数将指定第一多维数组(例如111,211)的元素的整数元素索引i映射到数组索引集合上,其中返回的数组索引集合指定第一多维数组的行主扫描顺序中的第i个元素,或者其中返回的数组索引集合指定第一多维数组的块扫描的第i个元素,其中第一多维数组被认为是二维数组。
此外,一般来说,根据实施例的解码器,例如图1所示的解码器100,例如图2所示的解码器200,例如其相应的重新排序单元120,220,例如可以被配置为解码数组维度集合,例如tensor_dimensions[],并获得重新排序的数组维度集合。例如,参考图6,重新排序的数组维度集合可以是向量[D0,D1,D2,D3],例如表征重新排序的张量680,它是基于例如张量670或可选的张量660的解码的数组维度集合获得的。
此外,一般来说,根据实施例的解码器,例如图1所示的解码器100,例如图2所示的解码器200,例如其相应的解码单元110、210,例如可被配置为在由相应数组索引集合描述的相应位置将解码的神经网络参数输入到第一多维数组(例如111、211、670),其中,解码器被配置为使用映射函数获得相应的数组索引集合,该映射函数将标量整数参数索引映射到相应的数组索引集合,并定义了按块扫描。
此外,一般来说,映射函数可选地包括标量整数参数索引到两个坐标的映射,当块按块扫描时,这两个坐标指向对应于标量整数参数索引定义的扫描索引的位置,以及映射函数可以包括两个坐标到相应的数组索引集合的映射。
3.4张量维度重新排序的语法(示例,细节是可选的)
例如,语法元素first_tensor_dimension_shift被写入比特流。例如,从解码器的角度来看,它可以指定重新排序后从比特流中解码的第一张量维度的新位置。因此,first_tensor_dimension_shift的值是非负值,且小于张量维度的数量。例如,等于零的值意味着不对张量进行重新排序(例如,这等同于将第一维度移位到第一位置)。
例如,在优选实施例中,例如用count_tensor_dimensions表示张量维度的数量,general_profile_idc例如等于1,那么first tensor dimension被编码例如如下:
例如,如果irst_tensor_dimension_shift不存在,则推断为0。
例如,在另一个优选实施例中,first_tensor_dimension_shift使用指数哥伦布码编码。在这里,对较小的数值进行编码所需的比特数通常较低。因此,例如,值等于1所需的位数小于或等于值等于2所需的位数。例如,值等于2所需的位数小于或值等于3所需的位数,等等。
“用于神经网络编码的张量维度重新排序方法”章节的参考文献
[1]S.Chetlur et al.,"cuDNN:Efficient Primitives for Deep Learning,"arXiv:1410.0759,2014
[2]MPEG,“Text of ISO/IEC DIS15938-17Compression of Neural Networksfor Multimedia Content Description and Analysis”,Document of ISO/IEC JTC1/SC29/WG11,w19764,OnLine,Oct.2020
[3]D.Marpe,H.Schwarz und T.Wiegand,,,Context-Based Adaptive BinaryArithmetic Coding in the H.264/AVC Video Compression Standard,“IEEEtransactions on circuits and systems for video technology,Vol.13,No.7,pp.620-636,July 2003.
[4]H.Kirchhoffer,J.Stegemann,D.Marpe,H.Schwarz und T.Wiegand,,JVET-K0430-v3-CE5-related:State-based probalility estimator,“in JVET,Ljubljana,2018.
[5]ITU-International Telecommunication Union,,,ITU-T H.265Highefficiency video coding,“Series H:Audiovisual and multimedia systems-Infrastructure of audiovisual services-Coding of moving video,April 2015.
[6]B.Bross,J.Chen und S.Liu,,,JVET-M1001-v6-Versatile Video Coding(Draft 4),“in JVET,Marrakech,2019.
[7]S.Wiedemann et al.,"DeepCABAC:A Universal Compression Algorithmfor Deep Neural Networks,"in IEEE Journal of Selected Topics in SignalProcessing,vol.14,no.4,pp.700-714,May 2020,doi:10.1109/JSTSP.2020.2969554.
计划的国际标准ISO/IEC15938-17的拟议更新草案
(例如ISO/IECDIS15938-17:xxxx(E))
信息技术-多媒体内容描述接口-第17部分:多媒体内容描述和分析用神经网络的压缩(第2版)
一般说明:所有细节为可选的 内容
以下各节讨论了本发明的各个方面:前言,引言,1范围,2规范参考文件,3术语和定义,4缩写术语、约定和符号,4.1一般,4.2缩写术语,4.3符号列表,4.4数字格式和计算约定,4.5算术运算符,4.6逻辑运算符,4.7关系运算符,4.8位运算符,4.9赋值运算符,4.10范围表示,4.11数学函数,4.12数组函数,4.13运算优先顺序,4.14变量、语法元素和表,5概述,5.1一般,5.2压缩工具,5.3创建编码流水线,6语法和语义,6.1语法和语义规范,6.1.1以表格形式指定语法的方法,6.1.2位排序,6.1.3语法函数和数据类型的规范,6.1.4语义,6.2一般比特流语法元素,6.2.1NNR单元,6.2.2聚合NNR单元,6.2.3NNR比特流的组成,6.3NNR比特流语法,6.3.1NNR单元语法,6.3.2NNR单元大小语法、6.3.3NNR单元头部语法、6.3.4NNR单元有效载荷语法、6.3.5字节对齐语法、6.4语义、6.4.1一般、6.4.2NNR单位大小语义、6.4.3NNR单位头语义、6.4.4NNR单位有效载荷语义、7解码流程、7.1一般、7.2NNR解压缩数据格式、7.3解码方法、7.3.1一般、7.3.2NNR_PT_INT类型NNR压缩有效载荷解码方法、7.3.3NNR_PT_FLOAT类型NNR压缩有效载荷解码方法、7.3.4NNR_PT_RAW_FLOAT类型NNR压缩有效载荷解码方法,7.3.5NNR_PT_BLOCK类型NNR压缩有效载荷的解码方法,7.3.6整数权重张量的解码过程,8参数约简,8.1一般(信息性),8.2方法(信息性),8.2.1使用压缩性损失的稀疏化,8.2.2使用微结构剪枝的稀疏化,8.2.3结合的剪枝与稀疏化,8.2.4结构化稀疏化,8.2.5参数统一,8.2.6卷积层和全连接层的低秩/低位移秩,8.2.7批量归一化折叠,8.2.8局部缩放适应,8.3语法和语义,8.3.1使用压缩性损失的稀疏化,8.3.2使用微结构剪枝的稀疏化,8.3.3结合的剪枝和稀疏化,8.3.4结构化稀疏化,8.3.5权重统一,8.3.6卷积层和全连接层的低秩/低位移秩,8.3.7批量归一化折叠,8.3.8局部缩放,9参数量化,9.1方法,9.1.1均匀量化方法,9.1.2基于码本的方法,9.1.3依赖性标量量化方法,9.1.4迭代QP优化(信息性),9.2语法和语义,9.2.1均匀量化方法,9.2.2基于码本的方法,9.2.3依赖性标量量化方法,10熵编码,10.1方法,10.1.1DeepCABAC,10.2语法和语义,10.2.1DeepCABAC语法,10.3熵解码过程,10.3.1概述,10.3.2初始化过程,10.3.3二值化过程,10.3.4解码过程流,NNEF的附件A(规范性)实现,A.1概述,A.2标识符,A.3NNR比特流中使用的定义,A.4NNR比特流的NNEF数据的携带,的附件B(信息性)实现,B.1一般,B.2标识符,B.3NNR比特流中使用的定义,B.4NNR比特流的ONNX数据的携带,的附件C(信息性)实现,C.1一般,C.2标识符,C.3NNR比特流中使用的定义,C.4在NNR比特流中的PyTorch数据的携带,的附件D(信息性)实现,D.1通用,D.2标识符,D.3NNR比特流中使用的定义,D.4NNR比特流中携带TensorFlow数据,附件E(信息性)在其他容器中携带NNR比特流的建议,E.1在NNEF容器组织中携带NNR比特流的建议(在NNEF格式规范中指定),E.2在ONNX中携带NNR编码比特流的建议(在ONNX格式规范中指定),“信息技术-多媒体内容描述接口”的参考文献
此外,需要注意的是,为了简洁起见,上面的一些章(例如附件A至E)例如可以不全部包括在本文中,因为其中所公开的特征对于本发明的实施例而言是可选的。然而,需要注意的是,根据本发明的实施例可能包括包括各章节中公开的任何或全部特征,例如,各章节完整版本中公开的特征,例如,(例如计划中的)国际标准ISO/IEC15938-17草案(例如ISO/IECDIS15938-17:xxxx(E))中公开的特征。
前言
拟议的第二版取消并取代了经过技术修订的第一版(ISO/IEC15938-17)。
与前一版本相比,主要变化如下:
—xxx xxxxxxx xxx xxxx
引言(任何细节都是可选的)
人工神经网络已被广泛应用于多媒体分析与处理、媒体编码、数据分析和许多其他领域。与过去相比,人工神经网络(深度神经网络,DNN)具有更大、更复杂的处理能力,而且可以获得大规模的训练数据集,因此最近取得了巨大成功。因此,经过训练的神经网络包含大量参数和权重,导致规模相当大(例如几百MB)。许多应用可能需要部署特定的训练好的网络实例到大量的设备上,而这些设备可能在处理能力和内存(例如移位设备或智能相机)以及通信带宽方面受到限制。任何需要将训练好的神经网络(或其更新)部署到大量设备的使用用例,都可以从神经网络的压缩表示标准中受益。
考虑到神经网络的压缩可能会有依赖于硬件和独立于硬件的组件,本文件被设计为压缩技术的工具箱。其中一些技术需要在交换格式中的特征表示(例如稀疏表示、自适应量化),因此定义了表示这些技术的输出的标准规范。其他技术则完全不需要序列化表示(例如剪枝),但是,也为后者指定了所需的元数据。本文件与特定的神经网络交换格式无关,在附件中描述了与常见格式的互操作性。
因此,本文件定义了高级语法,指定了所需的元数据元素和相关语义。在需要指定二进制数据的结构(例如分解矩阵)的情况下,本文件还指定了相应块的实际比特流语法。本文件的附件指定了如本文件所定义的压缩的神经网络表示的要求和约束;以及如何应用。
-附件A,作为示例,指定了本文件使用神经网络交换格式(NNEF,Neural NetworkExchange Format)的实现,定义了在压缩的神经网络比特流中使用NNEF表示网络拓扑。
-附件B,作为示例,提供了使用开放神经网络交换格式(ONNX,Open NeuralNetwork Exchange Format)实现本文件的建议,定义了在压缩的神经网络比特流中使用ONNX表示网络拓扑。
-附件C,作为示例,提供了使用格式实现本文件的建议,定义了压缩的神经网络比特流的网络拓扑描述中对PyTorch元素的引用。
-附件D,作为示例,提供了使用格式实现本文件的建议,定义了压缩的神经网络比特流的网络拓扑描述中对Tensorflow元素的引用。
-附件E,作为示例,提供了以第三方容器格式携带根据本文件压缩的张量的建议。
本文件中描述的压缩工具是针对多媒体描述、分析和处理应用中使用的神经网络而选择和评估的。不过,这些工具也可用于压缩其他应用中的神经网络和其他类型的数据。
信息技术-多媒体内容描述接口-第17部分:用于多媒体内容描述和分析的神经网络的压缩(第2版)
1范围
本文件,作为示例,指定了训练后的神经网络的参数/权重的压缩表示,以及压缩表示的解码过程,
________________________
1ONNX是LF PROJECTS,LLC拥有的产品的商标。此信息是为方便使用本文件的用户而提供的,并不构成ISO/IEC对所命名产品的认可。
2PyTorch是Facebook,Inc.提供的产品的商标。此信息是为了方便使用本文档的用户而提供的,并不构成ISO/IEC对所命名产品的认可。
3TensorFlow是谷歌有限责任公司提供的产品的商标。此信息是为方便本文件的用户而提供的,不构成ISO/IEC对所述产品的认可。
补充了现有神经网络(交换)格式中对网络拓扑的描述。它建立了压缩方法的工具箱,(在适用的情况下)指定压缩比特流的结果元素。例如,所有这些工具都可以应用于整个神经网络的压缩,其中一些工具也可以应用于压缩神经网络相对于基础网络的差分更新。例如,当模型在微调或迁移学习后被重新分配时,或当提供具有不同压缩比的神经网络版本时,这种差分更新很有用。
例如,本文件指定了可以进一步纳入其他标准的神经网络的压缩表示。仅指定了现有交换格式中的语法格式、语义、相关解码过程要求、参数稀疏化、参数转换方法、参数量化、熵编码方法和集成/信令,而其他事项,如预处理、系统信令与多路复用、数据丢失恢复和后处理,则被视为不属于本文讨论范围。此外,在解码器内执行的内部处理步骤也被认为不属于本文件的范围;只有外部可观察的输出行为才需要符合本文件的规范。
2规范参考文件
文中引用的下列文件,其部分或全部内容构成本文件的要求。对于注明日期的引用文件,仅适用所引用的版本。对于未注明日期的引用文件,适用引用文件的最新版本(包括任何修订)。
ISO/IEC10646,信息技术-通用编码字符集(UCS,Universal coded characterset)
ISO/IEC60559,信息技术-微处理器系统-浮点运算
IETFRFC1950,ZLIB压缩数据格式规范3.3版,1996
NNEF-v1.0.3,神经网络交换格式,KhronosNNEF工作组,版本1.0.3,2020-06-12(https://www.khronos.org/registry/NNEF/specs/1.0/nnef-1.0.3.pdf)
3术语和定义
为本文件的目的,适用以下术语和定义。
ISO和IEC在以下地址维护标准化工作中使用的术语数据库:
-ISO在线浏览平台:可见https://www.iso.org/obp
-IEC电子百科:可见http://www.electropedia.org/
3.1
聚合NNR单元
NNR单元,在NNR单元的有效载荷中携带多个NNR单元
3.2
基础神经网络
用作差分更新参考的神经网络
3.3
压缩的神经网络表示
使用压缩工具编码带有模型参数的神经网络表示
3.4
分解
将张量表示为两个张量的乘积的变换
3.5
超参数
参数,其值用于控制学习过程
3.6
层
在神经网络中按特定深度共同运行的节点集合
3.7
模型参数
神经网络模型的系数,如权重和偏置
3.8
NNR单元
用于承载(压缩或未压缩的)神经网络数据和相关元数据的数据结构
3.9
修剪
减少神经网络(部分)的参数
3.10
稀疏
增加张量的零值条目数量
3.11
张量
多维结构分组相关模型参数
3.12
更新的神经网络
修改基础神经网络得到的神经网络
注:更新后的神经网络是通过对基础神经网络应用差分更新而重构的。
4缩写术语、约定和符号
4.1一般
本子条款包含本文件中使用的运算符、符号、函数、文本约定和流程的定义。
本文件中使用的数学运算符类似于C编程语言中使用的运算符。不过,本文更精确地指定了整除和算术移位运算的结果,并指定了额外的运算,如指数化和实值除法。编号和计数规则一般从0开始,例如,“第一个”相当于第0个,“第二个”相当于第1个,等等。
4.2缩写术语
DeepCABAC深度神经网络上下文自适应二进制算术编码
LR 低秩(Low-rank)
LDR 低位移秩(Low displacement rank)
LPS 层参数集合(Layer parameter set)
LSB 最低有效位(Least significant bit)
MSB 最高有效位(Most significant bit)
MPS 模型参数集合(Model parameter set)
NN 神经网络(Neural network)
NNEF 神经网络交换格式(Neural network exchange format)
NNR 压缩的神经网络表示(Compressed neural network representation)
SVD 奇异值分解(Singular value decomposition)
4.3符号列表
本文件定义了以下符号:
A 输入张量
B 输出张量
层k的超级块j中的块
b 偏置参数
Cin 卷积层的输入通道数
Cout 卷积层的输出通道数
层k中的张量的通道数
推导出的层k中的张量的通道数
在层k的张量的深度维度
e f循环矩阵Ze的参数
F 卷积层的参数张量
f f循环矩阵Zf的参数
Gk 矩阵Wk的低秩分解表示的左手侧矩阵
Hk 矩阵Wk的低秩分解表示的右手侧矩阵
层k的张量的高度维度
K 卷积核的维度
L 网络
Lcompressibility 压缩损失
Laiversity 分集损失
Ltask 任务损失
Ltrain 训练损失
M 特征矩阵
Mk 剪枝掩码
m 稀疏化超参数
mi 特征矩阵M的第i行
在层k的张量的核的大小
nk 的乘积产生的维度
P 随机转移矩阵
p 剪枝率超参数
pi,j 转换矩阵P的元素
q 稀疏率超参数
S 修剪参数的重要性
超级块
s 局部缩放因子
超级块的大小
u 统一比率超参数
W 参数张量
Wl 第l层的权重张量
Wk 层k的参数张量
Wk的低秩近似
w 参数向量
层k的张量的宽度维度
wl,i 第l层中的第i个滤波器的权重向量
w′l,i 第l层的第i个过滤器的归一化权重向量
X 到批量归一化层的输入
Ze f循环矩阵
Zf f循环矩阵
α 折叠的批量归一化参数
α′ 折叠的批量归一化参数和局部缩放因子的组合值
β 批量归一化参数
γc 压缩损失乘数
γ 批量归一化参数
δ 折叠的批量归一化参数
∈ 标量接近零以避免批量归一化中被零除
λ 特征向量
λc 压缩损失权重
λd 多样性损失权重
μ 批量归一化参数
π P的平衡概率
σ 批量归一化参数
τ 稀疏化剪枝阈值
平滑因子
4.4数字格式和计算约定
本文件定义了以下数字格式:
integer 整数,可以是任意大小。整数也称为带符号整数。
unsigned integer 无符号整数,可以是0或任意大。
Float 浮点数,符合ISO/IEC60559。
如果没有特别说明,所有运算符和数学函数的结果在数学上都是精确的。只要结果是浮点数,就会明确指定。
4.5算术运算符
定义了以下算术运算符:
+ 加法
- 减法(作为两个参数运算符)或否定(作为一元前缀运算符)
* 乘法,包括矩阵乘法
。 两个转置向量的元素乘法,或转置向量与矩阵行的元素乘法,或两个维度相同的矩阵的哈达玛乘积
xy 求幂。指定x的y次方。在其他上下文下,这种符号用于上标,而不解释为幂。
/ 将结果向零截断的整数除法。例如,7/4和-7/-4被截断为1,-7/4和7/-4被截断为-1。
÷ 在不需要截断或舍入的数学等式中用来表示除法。
用于表示数学等式中不打算进行截断或舍入的除法,其中,包括两个转置向量的元素除法 或一个转置向量与矩阵的行的元素除法。
f(i)的求和,其中,i取从x到y(包括y)的所有整数值。
f(i)与i的乘积,i取从x到到y(包括y)的所有整数。
x%y x除以y的余数,只适用于x≥0且y>0的整数x和y。
4.6逻辑运算符
定义了以下逻辑运算符:
x&&y x和y的布尔逻辑“和”
x‖y x和y的布尔逻辑“或”
! 布尔逻辑“非”
x?y:z 如果x为真或不等于0,则求值为y的值;否则,求值为z的值。
4.7关系运算符
以下关系运算符定义如下:
> 大于
≥ 大于或等于
< 小于
≤ 小于或等于
== 等于
!= 不等于
当关系运算符应用于被赋值为“na”(不适用)的语法元素或变量时,值“na”将被视为该语法元素或变量的独立值。值“na”被认为不等于任何其他值。
4.8位运算符
以下位运算符定义如下:
& 按位“和”。对整数参数进行运算时,对整数值的二进制表示进行运算。对二进制参数进行运算时,如果二进制参数包含的位数少于另一个参数,那么较短的参数将通过添加等于0的更多有效位来扩展。
| 按位“或”。对整数参数进行运算时,对整数值的二进制表示进行运算。对二进制参数进行运算时,如果二进制参数包含的位数少于另一个参数,那么较短的参数将通过添加等于0的更多有效位来扩展。
^ 按位“异或”。对整数参数进行运算时,对整数值的二进制表示进行运算。对二进制参数进行运算时,如果二进制参数包含的位数少于另一个参数,那么较短的参数将通过添加等于0的更多有效位来扩展。
x>>y 用y个二进制位数对x的二进制整数表示进行算术右移。该函数只针对y的非负整数值。右移后移入MSB的位的值等于移位操作前x的MSB。
x<<y 用y个二进制位数对x的二进制整数表示进行算术左移。该函数只针对y的非负整数值。左移后移入LSB的位的值等于0。
! 按位非运算符,对0运算返回1,对1运算返回0。
4.9赋值运算符
以下算术运算符定义如下:
= 赋值运算符
++ 递增,即x++等价于x=x+1;在数组索引中使用时,求值为变量在递增操作之前的值。
-- 递减,即x-等价于x=x-1;在数组索引中使用时,求值为变量在递减操作之前的值。
+= 指定的递增量,即x+=3等价于x=x+3,以及x+=(-3)等价于x=x+(-3)。
-= 按指定递减量,即x-=3等价于x=x-3,以及x-=(-3)等价于x=x-(-3)。
4.10范围表示
以下符号用于指定值的范围:
x=y..z x取从y到z(含z)的整数值,其中x、y和z是整数,z大于y。
array[x,y] 子数组,包括数组中位置x和y之间的元素。如果x大于y,则子数组为空。
4.11数学函数
定义了以下数学函数:
Ceil(x) 大于等于x的最小整数
Floor(x) 小于或等于x的最大整数
Log2(x) 以2为底x的对数
4.12数组函数
Size(arrayName[])返回名为arrayName的数组或张量中包含的元素个数。如果arrayName[]是张量,则返回张量所有维度的乘积。(可选的)
Prod(arrayName[])返回数组arrayName[]中所有元素的乘积。(可选的)
Tensor(arrayName[],tensorDimension[])使用以指定的tensorDimension[]重塑后的张量array_name[],但不改变其数据。(可选的)
例如,IndexToXY(w,h,i,bs)返回包含两个元素的数组。例如,第一元素是x坐标,第二元素是y坐标,例如指向宽度为w高度为h的二维数组。例如,当,x和y指向以块(例如大小为bs乘以bs)为单位扫描时与扫描索引i相对应的位置。例如,x和y的推导如下:
变量fullRowOfBlocks设置为w*bs
变量blockY设置为i/fullRowOfBlocks
变量iOff设置为i%fullRowOfBlocks
变量currBlockH设置为Min(bs,h-blockY*bs)
变量fullBlocks设置为bs*currBlockH
变量blockX设置为iOff/fullBlocks
变量blockOff设置为iOff%fullBlocks
变量currBlockW设置为Min(bs,w-blockX*bs)
变量posX设置为blockOff%currBlockW
变量posY设置为blockOff/currBlockW
变量x设置为blockX*bs+posX
变量y设置为blockY*bs+posY
例如,TensorIndex(tensorDimensions[],i,scan)返回与tensorDimensions[]具有相同维数的数组,其中数组的元素被设置为整数值,以便该数组可以用作指向具有维数tensorDimensions[]的张量的元素的索引,例如:
如果变量scan等于0:
例如,返回的数组指向张量的行主扫描顺序中的第i个元素
维度tensorDimensions[]。
如果变量scan大于0:(可选的)(示例)
例如,变量bs设置为4<<scan_order。
例如,变量h设置为tensorDimensions[0]。
例如,变量w设置为Prod(tensorDimensions)/h
例如,变量x和y分别被设置为数组的第一元素和第二元素,即
返回,例如:
通过分别调用IndexToXY(w,h,i,bs)。
例如,返回的数组是TensorIndex(tensorDimensions,y*w+x,0)。
注意:变量scan通常(但不一定)对应于语法元素scan_order。
GetEntryPointIdx(tensorDimensions[],i,scan((可选的),例如,如果索引i不是指向入口点的第一位置,则返回-1。如果索引i指向入口点的第一位置,则返回例如张量中的入口点索引。确定入口点的位置和索引的方法如下:(示例)
变量w设置为Prod(tensorDimensions)/tensorDimensions[0]
变量epIdx设置为i/(w*(4<<scan))-1
如果i>0和i%(w*(4<<scan))等于0,则索引i指向入口点的第一位置,入口点索引等于epIdx。
否则,索引i不指向入口点的第一位置。
例如,ShiftArrayIndex(inputArray[],shiftIndexPosition)返回数组outputArray[],该数组是inputArray[]的副本,但将inputArray中位于位置0的元素移到了shiftIndexPosition,例如如下:
例如,变量outputArray[]用inputArray[]的副本初始化。
如果shiftIndexPosition大于0:
例如,outputArray[]的第一元素从outputArray[]中删除。
例如,inputArray[]的第一元素会插入outputArray[],位于位置shiftIndexPosition的元素之前,
位置shiftIndexPosition-1的元素之后。
AxisSwap(inputTensor[],tensorDimensions[],numberOfDimensions,axis0,axis1)(可选的)返回从inputTensor(维度为tensorDimensions以及维度数量为numberOfDimensions)得出的张量,其中inputTensor的轴索引axis0和axis1中的值被交换。
TensorSplit(inputTensor[],splitIndices,splitAxis)(可选的)返回张量数组subTensors,该张量数组是使用提供的索引数组splitIndices沿提供的轴splitAxis将张量inputTensor划分为N=Size(splitIndices)+1个张量而得到的,如下所示:
数组inputDims设置为张量inputTensor的维度。
值为0的元素插入splitIndices,位于第一元素之前,值为inputDims[splitAxis]的元素插入splitIndices,位于最后一个元素之后。
张量subTensors[X](其中X是0到N的整数)的推导如下:
数组subTensorDims设置为inputDims。
元素subTensorDims[splitAxis]替换为值splitIndices[X+1]-splitIndices[X]。
subTensors[X]的元素设置如下:
for(i=0;i<Prod(subTensorDims);i++){
subIdx=TensorIndex(subTensorDims,i,0)
inputIdx=TensorIndex(inputDims,i,0)
inputIdx[splitAxis]+=splitIndices[X]
subTensors[subIdx]=inputTensor[inputIdx]
4.13运算优先顺序
当表达式中的优先顺序没有通过使用括号明确表示时,适用以下规则:
●优先级较高的运算先于优先级较低的运算之前求值。
●相同优先级的运算从左到右依次求值。
表1指定了运算的优先级,从最高到最低。表中位置越高表示优先级越高。
注意—对于C编程语言中也使用的运算符,本文件中使用的优先顺序与C编程语言中使用的相同。
表1.运算优先级,从最高(表的顶部)到最低(表的底部)。
4.14变量、语法元素和表
比特流中的语法元素以粗体表示。每个语法元素由其名称(均为小写字母,带下划线字符)及其编码表示方法的一种数据类型来描述。解码过程根据语法元素的值和之前解码的语法元素的值进行操作。当在语法表或文本中使用语法元素的值时,该值将以普通字体(即非粗体)显示。
在某些情况下,语法表可以使用从语法元素值衍生出来的其他变量的值。这样的变量出现在语法表或文本中,以小写字母和大写字母混合命名,不含任何下划线字符(驼峰符号)。以大写字母开头的变量用于当前语法结构和所有相关语法结构的解码。以大写字母开头的变量解码过程中可以用于以后的语法结构,而无需提及变量的原始语法结构。以小写字母开头的变量只在在其派生的(子)从句中使用。
在某些情况下,的语法元素值或变量值的“助记符”名称与其数值可以互换使用。有时“助记符”名称的使用不带任何相关的数值。值和名称的关联在文本中具体说明。名称由一组或多组字母组成,中间用下划线分隔。每组以大写字母开始,并可以包含更多的大写字母。
注意—语法的描述方式与c语言的语法结构非常接近。
指定比特流中当前位置属性的函数称为语法函数。这些函数在子条款6.3中指定,假定存在比特流指针,该指针表示解码过程从比特流读取的下一位的位置。语法函数由其名称描述,名称以语法元素名称的形式构造,以左右圆括号结束,包括零个或多个变量名(用于定义)或变量值(用于使用),由逗号分隔(如果变量不止一个)。
非语法函数的函数(包括子条款4.11中指定的数学函数和子条款4.12中指定的数组函数)由名称来描述,名称以大写字母开头,包含小写字母和大写字母,不含下划线,以左括号和右括号结束,括号中包括零个或多个变量名(用于定义)或变量值(用于使用),由逗号分隔(如果变量不止一个)。
一维数组称为列表。二维数组称为矩阵。数组既可以是语法元素,也可以是变量。下标或方括号用于数组的索引。参照矩阵的直观描述,第一下标用作行(垂直)索引,第二下标用作列(水平)索引。当使用方括号而不是下标进行索引时,索引顺序是相反的。因此,矩阵s中位于水平位置x和垂直位置y的元素可表示为s[x][y],也可以表示为syx。矩阵的单列可以称为列表,并省略行索引。因此,矩阵s位于水平位置x的列可以称为列表s[x]。
多维数组是具有多个维度的变量。多维数组的元素既可以通过指定所有所需的索引(如variable[x][y][z])来索引,也可以通过单个索引变量(其本身就是指定索引的一维数组)来索引。例如variable[i],其中i是元素为[x,y,z]的一维数组。例如,多维数组用于指定张量。
数组的行和列中条目的值的指定可以用{{...}{...}}表示,其中每一对内方括号按列递增顺序指定行内元素的值,行按行递增顺序排列。因此,设置矩阵s等于{{16}{49}}指定了s[0][0]等于1,s[1][0]等于6,s[0][1]等于4,s[1][1]等于9。
二进制符号用单引号括住位值字符串来表示。例如,‘01000001’表示8位字符串,只只有第二位和最后一位(从最高有效位到最低有效位计数)等于1。
当位数是4的整数倍时,可以使用十六进制符号来代替二进制符号,即在十六进制数前加“0x”。例如,0x41表示8位字符串,只有其第二位和最后一位(从最高有效位到最低有效位计数)等于1。
未用单引号括起来且也没有以“0x”作为前缀的数值是十进制值。
在测试语句中,等于0的值表示FALSE(假)条件。任何不同于0的值都表示TRUE(真)。
5概述
5.1一般
该条款提供了本文件中定义的压缩工具的概述,并描述了如何将这些工具与编码相结合。
5.2压缩工具(示例;所有细节都是可选的)
本文件包含以下几组压缩工具。
参数约简方法是对模型进行处理,以获得紧凑的表示。这些方法的示例包括参数稀疏化、参数剪枝、权重统一和分解方法。
稀疏化处理参数或参数组,以产生模型的稀疏表示,例如,通过用零替换一些权重值。稀疏化可以生成额外的元数据(例如掩码)。稀疏化可以是结构化的,也可以是非结构化的。此文档包括具有可压缩性损失的非结构化稀疏化方法(例如在相应的子条款中公开的方法)、使用微结构稀疏化的结构化稀疏化方法(例如在相应的子条款中公开的方法)、非结构化统计自适应稀疏化方法(例如在相应的子条款中公开的方法)和结构化稀疏化方法(例如在相应的子条款中公开的方法)。
统一处理参数,以产生一组相似参数。统一并不消除或限制权重为零,而是通过使参数彼此相似来降低模型参数的熵。此文档包括权重统一的方法(例如在相应的子条款中所公开的方法)。
剪枝通过删除参数或参数组来减少参数的数量。例如,通过从层中删除一些冗余的卷积滤波器,该过程可以得到与原始模型相比参数更少的密集表示。此文档包括剪枝和稀疏化相结合的方法(例如在相应的子条款中公开的方法)。
分解执行矩阵分解操作,以改变模型权重的结构。此文档包括卷积层和全连接层的低秩/低位移秩的方法(例如在相应的子条款中公开的方法)。
除了上述约简方法,此文档还包括作为参数量化技术的一部分引入和测试的分解方法。这些方法的示例包括批量归一化折叠(例如在相应的子条款中公开的)和局部缩放适应(例如在相应的子条款中公开的)。
参数约简方法可以组合使用,也可以顺序使用,从而得到紧凑的模型。
参数量化方法降低了参数表示的精度。如果得到推理引擎的支持,量化表示可以用于更有效的推理。本文件包括统一量化方法(例如在相应的子条款中公开)、基于码本的量化方法(例如在相应的子条款中公开)、依赖性标量量化方法(例如在相应的子条款中公开)和迭代QP优化方法(例如在相应的子条款中公开)。
熵编码方法对参数量化方法的结果进行编码。此文档包括DeepCABAC(子条款9.1.1),熵编码方法支持对DeepCABAC的扩展包括行跳(Row Skipping)和时态上下文建模(Temporal Context Modeling)。
行跳过通过跳过完全为零的矩阵行的解码,减少了需要解码的二进制数量和比特流的大小。为此,行跳为每个矩阵行发出一个标志信号。该方法在9.1.1.2子条款中描述。
时态上下文建模利用先前解码的增量更新信息改进DeepCABAC的上下文建模,从而提高编码效率。该方法在9.1.1.4子条款中描述。
5.3创建编码流水线(示例,所有细节是可选的)
本文中的压缩工具可以组合成不同的编码流水线。其中一些工具是解决具有不同类型特征的神经网络模型的替代方案,而其他工具则是按顺序工作而设计的。
图11示出了根据实施例的编码流水线的示意性概述,这些流水线可选择使用本文件中的压缩工具进行组装。图11示出了根据实施例的NNR编码流水线的示意性示例。从参数转换工具组中,可以依次应用多种工具。参数量化可以应用于源模型,也可以应用于参数约简方法进行的转换的输出。熵编码通常应用于量化的输出。如果需要,可以对未应用熵编码的前几步原始输出进行序列化。
以下编码流水线是使用本文件的典型示例:
1.依赖性标量量化(例如在相应的子条款中公开的)-DeepCABAC(子条款9.1.1)
2.稀疏化(例如在相应的子条款中公开的)-依赖性标量量化(例如在相应的子条款中公开的)-DeepCABAC(子条款9.1.1)
3.低秩分解(例如在相应的子条款中公开的)-依赖性标量量化(例如在相应的子条款中所公开的)-DeepCABAC(子条款9.1.1)
4.基于码本的量化(例如在相应的子条款中所公开的)—DeepCABAC(子条款9.1.1)
5.统一(例如在相应子条款中公开的)-DeepCABAC(子条款9.1.1)
本清单并非详尽无遗。
6语法和语义(所有细节都是可选的)
[编者注(HT)在MPEG135之后:关于第8节新增加的增量权重更新的更改可在稍后引入]
6.1语法和语义规范
6.1.1以表格形式指定语法的方法
语法表指定了所有允许的比特流语法的超集。其他条款可以直接或间接地指定对语法的其他限制。
表2列出了语法规范格式的示例。当出现syntax_element时,指定了从比特流解析出语法元素,并在比特流解析过程中将比特流指针向前移位到语法元素之外的下一个位置。
表2.语法规范格式的示例
6.1.2位排序(示例)
对于面向位的传递,语法表中语法字段的位顺序被指定为从MSB开始到LSB。
6.1.3语法函数和数据类型的规范(示例)
这里给出的函数用于语法描述。这些函数用比特流指针的值来表示,该指针指示解码过程从比特流中读取的下一位的位置。
byte_aligned()被指定如下:
●如果比特流中的当前位置在字节边界上,即比特流中的下一位是字节中的第一位,则byte_aligned()的返回值等于TRUE。
●否则,byte_aligned()的返回值为FALSE。
read_bits(n)从比特流中读取下一个n位,并将比特流指针向前移位n位。当n等于0时,指定read_bits(n)返回等于0的值,并且不将比特流指针向前移位。
get_bit_pointer()返回比特流指针相对于当前NNR单元起始位置的无符号整数值。get_bit_pointer()>>3指向比特流指针的当前字节。get_bit_pointer()&7指向比特流指针当前字节的当前位,其中0指示最高有效位。
set_bit_pointer(pos)设置比特流指针的位置,使get_bit_pointer()等于pos。
以下数据类型指定了每个语法元素的解析过程。
ae(v):上下文自适应算术熵编码语法元素。子条款9.3.4.3.2中指定了该数据类型的解析过程在。
at(v):算术熵编码的终止语法。子条款9.3.4.3.5中指定了数据类型的解析过程。
iae(n):使用子条款9.3.4.3.4中指定的DeepCABAC旁路模式,使用n个算术熵编码位的有符号整数。读取的旁路分区被解释为二进制整数表示,最重要的位被写在前面。
uae(n):使用子条款9.3.4.3.4中指定的DeepCABAC旁路模式,使用n个算术熵编码位的无符号整数。读取的旁路分区被解释为无符号整数的二进制表示,最重要的位先写入。当n=0时,uae(n)不会解码任何分区,并返回0。
f(n):固定模式的比特串,使用n位(从左到右),先写左位。该数据类型的解析过程由函数read_bits(n)的返回值指定。
i(n):使用n位的有符号整数。当n在语法表中是“v”时,位数的变化方式取决于其他语法元素的值。该数据类型的解析过程由函数read_bits(n)的返回值指定,该返回值被解释为最重要的位先写入的二进制整数表示。
u(n):使用n位的无符号整数。当n在语法表中是“v”时,位数的变化方式取决于其他语法元素的值。该数据类型的解析过程由函数read_bits(n)的返回值指定,该返回值被解释为无符号整数的二进制表示,其中最重要的位被写在前面。
ue(k):无符号整数k阶哥伦布编码语法元素。gai描述符的解析过程如下伪代码所示,结果为x:
ie(k):带符号整数k阶哥伦布编码语法元素。该描述符的解析过程如下伪代码所示,结果为x:
flt(n):使用n位的浮点值,其中n可以是32、64或128,按照ISO/IEC60559中指定的小字节顺序,分别为二进制32、二进制64或二进制128。
st(v):以空字符结尾的字符串,须根据ISO/IEC10646标准编码为UTF-8字符。解析过程如下:st(v)从比特流中按字节对齐的位置开始,从比特流中读取并返回一系列字节,从当前位置开始,直到但不包括等于0x00的下一个字节对齐的字节,并将比特流指针向前移位(stringLength+1)*8个比特位置,其中stringLength等于返回的字节数。
注意st(v)和flt(n)语法描述符在本文件中仅用于比特流中的当前位置为字节对齐位置时。
bs(v):Byte-sequence指定可变长度的字节序列,从字节对齐的位置开始。序列的长度由包含字节序列的NNR单元的大小决定。
more_data_in_nnr_unit()的定义如下:
-如果当前nnr_unit中有更多的数据,即当前nnr_unit中到目前为止解码的数据小于numBytesInNNRUnit,则more_data_in_nnr_unit()的返回值等于TRUE。
-否则,more_data_in_nnr_unit()的返回值等于FALSE。
6.1.4语义(示例)
与语法结构和每个结构中的语法元素相关的语义,在包含语法结构的子条款之后的子条款中指定。
以下定义适用于语义规范。
unspecified用于指定特定语法元素的某些值,以指示这些值在此文档中没有特定含义,而且作为此文档未来版本的组成部分,这些值在将来也不会有特定含义。
reserved用于指定特定语法元素的某些值供ISO/IEC将来使用,不得在符合本文件版本的比特流中使用,但可以在符合ISO/IEC对本文件的未来扩展的比特流中使用。
nnr_reserved_zero_0bit应为长度为0的元素。解码器应忽略nnr_reserved_zero_0bit的值。
nnr_reserved_zero_1bit存在时,在符合此文档此版本的比特流中应等于0。nnr_reserved_zero_1bit的其他值保留给ISO/IEC将来使用。解码器应忽略nnr_reserved_zero_1bit的值。
nnr_reserved_zero_2bits出现时,在符合此文档此版本的比特流中应等于0。nnr_reserved_zero_2bits的其他值保留给ISO/IEC将来使用。解码器应忽略nnr_reserved_zero_2bits的值。
nnr_reserved_zero_3bits出现时,在符合此文档此版本的比特流中应等于0。nnr_reserved_zero_3bits的其他值保留给ISO/IEC将来使用。解码器应忽略nnr_reserved_zero_3bits的值。
nnr_reserved_zero_5bits出现时,在符合此文档此版本的比特流中应等于0。nnr_reserved_zero_5bits的其他值保留给ISO/IEC将来使用。解码器应忽略nnr_reserved_zero_5bits的值。
nnr_reserved_zero_7bits出现时,在符合此文档此版本的比特流中应等于0。nnr_reserved_zero_7bits的其他值保留给ISO/IEC将来使用。解码器应忽略nnr_reserved_zero_7bits的值。
6.2一般比特流语法元素(示例,所有细节都是可选的)
6.2.1NNR单元
例如,NNR单元可以是用于承载神经网络数据和相关元数据的数据结构,这些数据和元数据使用本文件进行压缩或表示。
例如,NNR单元携带压缩的或未压缩的信息,例如关于神经网络元数据、拓扑信息、完整或部分层数据、滤波器、核、偏置、量化权重、张量或类似信息。
例如,NNR单元由以下数据元素组成(如图12所示)。图12示出了根据实施例的NNR单元数据结构的示意图示例):
●NNR单元大小(可选的):该数据元素例如表示NNR单元的总字节大小,包括NNR单元大小。
●NNR单元头部(可选的):该数据元素例如包含NNR单元类型和相关元数据等信息。
●NNR单元有效载荷:该数据元素包含与神经网络相关的压缩或未压缩数据。
6.2.2聚合NNR单元(可选的,示例)
例如,聚合NNR单元是在其有效载荷中携带多个NNR单元的NNR单元。例如,聚合NNR单元为多个相互相关的NNR单元提供了一种分组机制,这些单元可从聚合到一个NNR单元中获益(如图13所示。图13示出了聚合NNR单元数据结构的示意性示例)。
6.2.3NNR比特流的组成(可选的;示例)
例如,NNR比特流由一系列NNR单元组成(如图14所示)。图14示出了根据实施例的NNR比特流数据结构的示意性示例)。
例如,在NNR比特流中,除非本文文档另有说明或NNR配置文件另有定义,否则适用以下限制:
(例如,NNR_STR、NNR_MPS、NNR_NDU、NNR_LPS、NNR_TPL和NNR_QNT是例如子条款6.4.3的表3所指定的NNR单元类型)
例如,NNR比特流应以NNR起始单元(NNR_STR)开始(子条款6.4.3)。
例如,在NNR比特流中应有单一的NNR模型参数集(NNR_MPS)(子条款6.4.3),该参数集应位于NNR比特流中任何NNR_NDU(子条款6.4.3)之前
例如,NNR层参数集(NNR_LPS)应一直有效,直到NNR比特流中的下一个NNR层参数集或到达聚合NNR单元的边界为止。
例如,topology_elem_id和topology_elem_id_index(子条款6.4.3.7)值在NNR比特流中应是唯一的。
NNR_TPL或NNR_QNT单元;如果存在于NNR比特流中;应位于引用其数据结构(例如topology_elem_id)的任何NNR_NDU之前。
6.3 NNR比特流语法(示例,所有细节都是可选的)
6.3.1 NNR单元语法(示例)
6.3.2 NNR单元大小语法(细节是可选的)
6.3.3 NNR单元头部语法(细节是可选的)
6.3.3.1一般
6.3.3.2 NNR起始单元头部语法(细节是可选的)
6.3.3.3 NNR模型参数集单元头部语法(细节是可选的)
6.3.3.4 NNR层参数设置单元头部语法(细节是可选的)
6.3.3.5 NNR拓扑单元头部语法(细节是可选的)
| 描述符 | |
| u(8) | |
| u(8) | |
6.3.3.6 NNR量化单元头部语法(细节是可选的)
| 描述符 | |
| u(8) | |
| u(8) | |
6.3.3.7 NNR压缩数据单元头部语法(示例,所有细节都是可选的)
例如,integer_codebook()定义如下(所有细节都是可选的):
例如,tensor_dimension_list()定义如下(所有细节都是可选的):
例如,topology_elements_ids_list(topologyIndexedFlag)定义如下(所有细节都是可选的):
例如,topology_tensor_dimension_mapping()定义如下(所有细节都是可选的):
6.3.3.8NNR聚合单元头部语法(细节是可选的)
6.3.4 NNR单元有效载荷语法(示例,所有细节是可选的)
6.3.4.1一般(例如,所有细节是可选的)
6.3.4.2 NNR起始单元有效载荷语法(所有细节是可选的)
| 描述符 | |
| u(0) | |
6.3.4.3NNR模型参数集单元有效载荷语法(所有细节是可选的)
6.3.4.4 NNR层参数集单元有效载荷语法(所有细节是可选的)
6.3.4.5 NNR拓扑单元有效载荷语法(所有细节是可选的)
6.3.4.6 NNR量化单元有效载荷语法(所有细节是可选的)
6.3.4.7 NNR压缩数据单元有效载荷语法(示例,细节是可选的)
例如,decode_compressed_data_unit_payload()调用例如子条款7.3所指定的解码过程。
6.3.4.8NNR聚合单元有效载荷语法(所有细节都是可选的)
6.3.5字节对齐语法(所有细节是可选的)
6.4语义
6.4.1一般
例如,该子条款中指定了与语法结构和这些结构中的元素相关的语义。例如,当语法元素的语义是通过表格或一组表格来指定时,除非本文件另有指定,否则任何未在表格中指定的值都不应出现在比特流中。
6.4.2NNR单元大小语义(所有细节是可选的)
6.4.3NNR单元头部语义(示例,所有细节是可选的)
6.4.3.1一般(示例:所有细节是可选的)
例如,nnr_unit_type指定NNR单元的类型,如表3所示。
表3:NNR单元类型(示例)
例如,NNR_RSVD范围内的值是保留用于本规范或相关规范的未来版本。编码器不得使用这些值。例如,符合本规范的此版本的解码器可以忽略使用这些值的NNR单元。NNR_UNSP范围内的值未作指定,其使用超出了本规范的范围。例如,符合本规范的此版本的解码器可以忽略使用这些值的NNR单元。
例如,Independently_decodable_flag指定该压缩数据单元是否可独立解码。例如,值为1表示可独立解码的NNR单元。例如,值为0表示该NNR单元不可独立解码,其有效载荷应该与其他NNR单元结合才能成功解码/解压缩。例如,对于引用相同topology_elem_id或topology_elem_id_index值或相同topology_elem_id_list的所有NNR单元,independently_decodable_flag的值应该是相同的。
例如,partial_data_counter_present_flag等于1表示NNR单元头部中存在语法元素partial_data_counter。例如,partial_data_counter_present_flag等于0表示NNR单元头部中不存在语法元素partial_data_counter。
例如,partial_data_counter指定该NNR数据单元有效载荷中携带的部分数据相对于某个拓扑元素的全部数据的索引。例如,值为0表示没有部分信息(即该NNR单元中的数据是与拓扑元素相关联的所有数据,是完整的),例如,值大于0表示部分信息的索引(即该NNR单元中的数据应与伴随NNR单元中的数据连接,直到NNR单元的partial_data_counter达到1)。例如,该计数器向后计数,最初指示分区的总数。例如,如果不存在,则推断partial_data_counter的值为0。例如,如果independently_decodable_flag的值等于0,则partial_data_counter_present_flag的值应等于1,partial_data_counter的值应大于0。例如,在此文档的此版本中,如果independently_decodable_flag的值等于1,那么partial_data_counter_present_flag和partial_data_counter的值未定义。
注——在本文件的未来版本中,如果independently_decodable_flag的值等于1,且partial_data_counter_present_flag等于1,则partial_data_counter可以例如具有非零值,基于多个可独立解码的NNR单元被组合起来以构建一个模型的假设。
6.4.3.2NNR开始单元头部语义(细节是可选的)
6.4.3.3NNR模型参数集单元头部语义(细节是可选的)
6.4.3.4NNR层参数设置单元头部语义(细节是可选的)
6.4.3.5NNR拓扑单元头部语义(细节是可选的)
6.4.3.6NNR量化单元头部语义(细节是可选的)
6.4.3.7NNR压缩的数据单元头部语义(示例,细节是可选的)
例如,nnr_compressed_data_unit_payload_type(可选的)在子条款7.3的表7中定义。
例如,nnr_multiple_topology_elements_present_flag(可选的)指定比特流中是否存在多个拓扑单元。如果存在多个拓扑单元,则包括它们的ID列表。当nnr_compressed_data_unit_payload_type设置为NNR_PT_BLOCK时,该标志设置为1,NNR压缩数据单元头部中的topology_elements_ids_list()应根据NNR压缩数据单元头部中的compressed_parameter_type的值指示的存在情况,根据给定顺序列出RecWeight,RecWeightG,RecWeightH,RecLS,RecBeta,RecGamma,RecMean,RecVar和RecBias的拓扑元素或拓扑元素索引。
例如,nnr_decompressed_data_format_present_flag(可选的)指定比特流中是否存在解压缩后获得的数据格式。
例如,input_parameters_present_flag(可选的)指定比特流中是否存在包括张量维度、DeepCABAC单位长度和压缩参数类型在内的元素组。
例如,topology_elem_id(可选的)指定NNR压缩数据单元所引用的拓扑元素的唯一标识符。该字段的语义解释取决于上下文。
例如,topology_elem_id_index(可选的)指定拓扑元素的唯一索引值,该拓扑元素在有效载荷类型为NNR_TPL_REFLIST的拓扑信息中发出信号。第一索引应为0(即0索引)。
例如,node_id_present_flag(可选的)等于1表示存在语法元素device_id、parameter_id和put_node_depth。
例如:device_id(可选的)唯一标识生成当前NDU的设备。
例如,parameter_id(可选的)唯一标识存储在NDU中的张量与之相关的模型的参数。如果parent_node_id_type=ICNN_NDU_ID,parameter_id应等于对应的父NDU的parameter_id。
例如,put_node_depth(可选的)是当前NDU所在树的深度。深度为0对应根节点。如果parent_node_id_type=ICNN_NDU_ID,则put_node_depth-1必须等于关联的父NDU的put_node_depth。
例如,parent_node_id_present_flag(可选的)等于1表示存在语法元素parent_node_id_type。
例如,parent_node_id_type(可选的)指定父节点id类型。它指示还存在哪些用于唯一标识父节点的语法元素。在表4中定义parent_node_id_type的允许值。
表4:父节点id类型标识符。(示例)
例如,temporal_context_modeling_flag(可选的)指定是否启用时态上下文建模。temporal_context_modeling_flag等于1,则表示启用时态上下文建模。如果temporal_context_modeling_flag不存在,则推断为0。
例如,parent_device_id(可选的)等于父NDU的语法元素device_id。
例如,parent_node_payload_sha256(可选的)是父NDU的nnr_compressed_data_unit_payload的SHA256哈希值。
例如,parent_node_payload_sha512(可选的)是父NDU的nnr_compressed_data_unit_payload的SHA512哈希值。
例如,count_topology_elements_minus2+2(可选的)指定了该NNR压缩数据单元在有效载荷中携带数据的拓扑元素的数量。
例如,codebook_present_flag(可选的)指定是否使用码本。如果codebook_present_flag不存在,则推断为0。
例如,dq_flag(可选的)指定量化方法是否为根据子条款错误!未找到引用源。根据子条款的均匀量化。dq_flag等于0表示使用均匀量化方法。dq_flag等于1表示使用了依赖性标量量化方法。如果dq_flag不存在,则推断为0。
例如,nnr_decompressed_data_format(可选的)在子条款7.2的表6中定义。
例如,tensor_dimensions_flag(可选的)指定比特流中是否定义了张量维度。如果比特流中没有,则应从模型拓扑描述中获取。
例如,cabac_unary_length_flag(可选的)指定DeepCABAC二进制化中的一元部分长度是否包括在比特流中。
例如,compressed_parameter_types(可选的)指定NNR压缩数据单元引用的当前拓扑元素中存在的压缩参数类型。如果指定了多个压缩参数类型,则使用OR将它们组合。压缩的参数类型在表5中定义。
表5:压缩的参数类型标识符。(示例)
例如,当存在分解时,张量G和H表示原始张量分解的结果。如果(compressed_parameter_types&NNR_CPT_DC)!=0,推导出变量TensorDimensionsG和TensorDimensionsH,举例如下:
-变量TensorDimensionsG设置为[g_number_of_rows,decomposition_rank]。
-变量TensorDimensionsH设置为[decomposition_rank,hNumberOfColumns],其中hNumberOfColumns定义为
例如,如果(compressed_parameter_types&NNR_CPT_DC)!=0,并且如果nnr_compressed_data_unit_payload_type!=NNR_PT_BLOCK,则NNR单元包含分解的张量G,比特流中的下一个NNR单元包含相应的分解的张量H。
例如,变量TensorDimensions的推导如下:
-如果NNR单元包含分解的张量G,并且nnr_compressed_data_unit_payload_type!=NNR_PT_BLOCK,则TensorDimensions设置为TensorDimensionsG。
-否则,如果NNR单元包含分解的张量H,并且nnr_compressed_data_unit_payload_type!=NNR_PT_BLOCK,则TensorDimensions设置为TensorDimensionsH。
-否则,将TensorDimensions设置为tensor_dimensions。
例如,变量NumBlockRowsMinus1定义如下:
-如果scan_order=0时,则NumBlockRowsMinus1设置为0。
-否则,如果nnr_compressed_data_unit_payload_type==NNR_PT_BLOCK且(compressed_parameter_types&NNR_CPT_DC)!=0时,则NumBlockRowsMinus1设置为((TensorDimensionsG[0]+(4<<scan_order)-1)>>(2+scan_order))+((TensorDimensionsH[0]+(4<<scan_order)-1)>>(2+scan_order))-2。
-否则,NumBlockRowsMinus1设置为((TensorDimensions[0]+(4<<scan_order)-1)>>(2+scan_order))-1。
例如,decomposition_rank(可选的)指定相对于tensor_dimensions的低秩分解权重张量分量的秩。
例如,在对NNR_PT_BLOCK类型的NNR单元分解的张量进行重构的情况下,g_number_of_rows(可选的)指定矩阵G的行数
例如,cabac_unary_length_minus1(可选的)指定DeepCABAC二值化中的一元部分的长度减1。
例如,first_tensor_dimension_shift(可选的,在一些实施例中存在)指定用于张量维度重新排序的第一张量维度的移位,并且应该小于count_tensor_dimensions的值。如果不存在first_tensor_dimension_shift,则推断为0。
例如,scan_order(可选的,在一些实施例中重新设置)指定了维度多于1个的参数的块扫描顺序,例如,根据下表:
-0:不扫描块
-1:8x8块
-2:16x16快
-3:32x32块
-4:64x64块
例如,cabac_offset_list(可选的)指定值列表,用于在入口点开始时初始化变量IvlOffset。
例如,dq_state_list(可选的)指定值列表,用于在入口点开始时初始化变量stateId。
例如,bit_offset_delta1(可选的)指定列表BitOffsetList的第一个元素。
例如,bit_offset_delta2(可选的)指定列表BitOffsetList中除第一个元素外的其他元素,与列表BitOffsetList中前一个元素的差值。
例如,变量BitOffsetList(可选的)是位偏移量列表,用于在入口点开始时设置比特流指针的位置。
例如,codebook_egk(可选的)指定用于解码语法元素codebook_delta_left和codebook_delta_right的Exp-Golomb参数k。
例如,codebook_size(可选的)指定码本中元素的数量。
例如,codebook_centre_offset(可选的)指定访问码本中元素相对于码本中心的偏移量。它用于计算变量CbZeroOffset。
例如,codebook_zero_value(可选的)指定CbZeroOffset位置的码本的值。它参与创建变量Codebook(表示码本的数组)。
例如,codebook_delta_left(可选的)指定码本值与其右邻近值之差减去1(对于位于中心位置左侧的码本值)。它参与创建变量Codebook(表示码本的数组)。
例如,codebook_delta_right(可选的)指定码本值与其左邻近值之差减去1(对于位于中心位置右侧的码本值)。它参与创建变量Codebook(表示码本的数组)。
例如,count_tensor_dimensions(可选的)指定指定了多个少维度的计数器。例如,对于四维张量,count_tensor_dimensions是4。若未包括在比特流中,则需从模型拓扑描述中获取。
例如,tensor_dimensions(可选的)指定维度值的数组或列表。例如,对于卷积层,tensor_dimensions是长度为4的数组或列表。对于鞋带分解的张量元素G或H的NNR单元,tensor_dimensions设置为原始张量的维数。解码方法中G和H的实际张量维度由tensor_dimensions、decomposition_rank和g_number_of_rows得出。若未包括在比特流中,则应从模型拓扑描述中获取。例如,参考图6,其中张量680的tensor_dimensions可以是向量[D0,D1,D2,D3]。
例如,topology_elem_id_list(可选的)指定与NNR压缩数据单元所引用的拓扑元素相关的唯一标识符列表。topology_elem_id_list的元素在语义上等同于NNR_TPL_REFLIST类型的拓扑有效载荷中列出的语法元素topology_elem_id或其索引。该字段的语义解释取决于上下文。
例如,topology_elem_id_index_list(可选的)指定与有效载荷类型为NNR_TPL_REFLIST的拓扑信息中列出的拓扑元素相关的唯一索引列表。拓扑中的第一个元素的索引值应为0。
例如,concatentation_axis_index(可选的)表示基于0的连接轴。
例如,split_index[](可选的)指示沿concatentation_axis_index指示的连接轴的张量拆分索引,以便生成每个被连接的独立张量。
例如,number_of_shifts[](可选的)指示要执行多少次左移操作。
例如,shift_index[k][i](可选的)指示要左移的第k个拓扑元素的轴索引。
例如,shift_value[k][i](可选的)指示索引index[k][i]的坐标轴上左移的幅度
6.4.3.8 NNR聚合单元头部语义(细节是可选的)
6.4.4 NNR单元有效载荷语义
6.4.4.1一般
例如,指定以下NNR单位有效载荷类型:
6.4.4.2 NNR开始单元有效载荷语义(细节是可选的)
6.4.4.3 NNR模型参数集单元有效载荷语义(细节是可选的)
6.4.4.4 NNR层参数设置单元有效载荷语义(细节是可选的)
6.4.4.5 NNR拓扑单元有效载荷语义(可选的)
6.4.4.6 NNR量化单元有效载荷语义(细节是可选的)
6.4.4.7 NNR压缩数据单元有效载荷语义(示例,细节是可选的)
Raw_float32_parameter是浮点数参数张量。
6.4.4.8 NNR聚合单元有效载荷语义(细节是可选的)
7解码过程
7.1一般(示例,细节是可选的)
例如,符合本文件的解码器应采用子条款6.3中指定的NNR比特流作为输入,以及
●生成例如符合NNR解压缩数据格式(如表6所定义)的解压缩数据,或
●例如通过NNR_TPL和NNR_QNTNNR单位有效载荷(如子条款6.3.3所述)生成ASCII或压缩数据输出(可选的)
例如,对于解码过程,应满足以下条件:
●例如,解码NNR比特流的NNR单元所需的任何信息,应作为NNR比特流的一部分发出信号。如果该信息不是NNR比特流的一部分,则应以其他方式(例如,带外拓扑信息或解码所需但未在NNR比特流中发出信号或携带的参数)提供给解码过程。
●例如,解码过程应由NNR_STR类型的NNR单元启动。接收到NNR_STR单元后,解码器应重置其内部状态,并准备接收NNR比特流。上述NNR单元的存在和基数应在本文件的相关条款和附件中指定。
注:例如,解码器可通过NNR_MPS类型的NNR单元进一步初始化,以设置全局神经网络模型参数。
例如,符合此文档要求的解码器在解压缩后立即输出符合解压缩NNR数据格式的数据结构。这样,例如,输入NNR压缩数据单元与从其输出中访问解压缩数据结构之间的延迟较短。如何建立输入NNR单元与NNR解压缩输出数据之间的关系,不在本文的范围并且留待实施。
7.2 NNR解压缩数据格式(示例,细节是可选的)
例如,根据用于创建特定比特流的压缩方法,NNR解码器在解码NNR数据单元后,预计会输出不同的解压缩数据格式。例如,表6指定了例如在解压缩NNR压缩数据单元之后产生的这些NNR解压缩数据格式。
表6 NNR解压缩数据格式(示例)
7.3解码方法(示例,细节是可选的)
7.3.1一般(细节是可选的)
该条款例如指定了本文件的解码方法。例如,根据nnr_compressed_data_unit_payload_type的值,调用表7中指定的子条款。
表7NNR压缩数据有效载荷类型(示例,细节是可选的)
例如,如果有效载荷标识符是NNR_PT_INT、NNR_PT_FLOAT或NNR_PT_FLOAT_RAW以及多个拓扑元素被组合(例如NNR压缩数据单元头部中例如经由nnr_multiple_topology_elements_present_flag发出的信号),那么NNR解压缩张量应在解码过程之后进一步拆分为多个张量,例如,如下所示:
●例如,通过调用TensorSplit(RecParam,split_index,concatenation_axis_index),将张量RecParam拆分为多个张量。
●例如,函数TensorSplit的输出是与例如由topology_elem_id_list指定的拓扑元素关联的拆分输出张量的列表。
●例如,在topology_tensor_dimension_mapping()中,通过调用AxisSwap()对输出张量进行轴对调,从而进一步处理输出张量。
7.3.1.1使用第一张量维度移位进行张量维度重新排序(示例,细节是可选的)
例如,该过程的输入是:
●变量inputTensor,例如表示其维度应被重新排序的张量
●变量inputTensorDims,例如指定inputTensor的维度
该过程的输出例如是变量reorderedTensor,其维度等于ShiftArrayIndex(inputTensorDims,first_tensor_dimension_shift)。例如,变量reorderedTensor的元素设置如下:
因此,一般来说,解码器,如图1所示的100,如图2所示的200,例如,其相应的重新排序单元120、220,可以被配置为使用上述处理获得重新排序的多维数组,例如121、221。
7.3.2用于NNR_PT_INT类型NNR压缩有效载荷的解码方法(示例,细节是可选的)
例如,该过程的输入是:
●例如通过partial_data_counter和nnr_compressed_data_unit_payload_type字段标记为一起解压缩的一个或多个NNR压缩数据单元例如被设置为NNR_PT_INT。
例如,此过程的输出是TENSOR_INT类型的变量RecParam,如表6所示。例如,RecParam的维度等于ShiftArrayIndex(TensorDimensions,first_tensor_dimension_shift)。例如,对符合方法NNR_PT_INT的比特流进行解码时,只能为RecParam生成可以表示为32位二进制整数值的值。
例如可选地,如子条款9.3.2所指定的对算术编码引擎和上下文模型进行初始化。
例如可选地,根据子条款9.2.1.6从比特流解码语法结构shift_parameter_ids(cabac_unary_length_minus1),以及调用子条款9.3.2.2中指定的概率估计参数初始化过程。
例如可选地,根据子条款9.2.1.4从比特流中解码语法结构quant_tensor(TensorDimensions,cabac_unary_length_minus1,0),例如,RecParam被设置为等于QuantParam。
例如可选地,根据子条款9.2.1.2从比特流解码语法结构terminate_cabac()。
例如可选地,将RecParam和TensorDimensions作为输入调用子条款7.3.1.1,并将输出分配给RecParam。
7.3.3用于NNR_PT_FLOAT类型的NNR压缩有效载荷的解码方法(示例,细节是可选的)
例如,该过程的输入是:
●通过partial_data_counter以及例如它们的nnr_compressed_data_unit_payload_type字段标记为一起解压缩的一个或多个NNR压缩数据单元被设置为NNR_PT_FLOAT。
例如,该过程的输出是TENSOR_FLOAT类型的变量RecParam,如表6所示。例如,RecParam的维度等于ShiftArrayIndex(TensorDimensions,first_tensor_dimension_shift)。
例如,如子条款9.3.2所指定的对算术编码引擎和上下文模型进行初始化。
例如可选地,调用子条款7.3.6,例如以TensorDimensions、0和(codebook_present_flag?0:1)作为输入,例如将输出分配给RecParam。
例如可选地,根据子条款9.2.1.2从比特流解码语法结构terminate_cabac()。
例如可选地,调用子条款7.3.1.1,例如以RecParam和TensorDimensions作为输入,并将输出分配给RecParam。
例如,对符合方法NNR_PT_FLOAT的比特流进行解码时,只能为RecParam生成可无精度损失地表示为浮点值的值。
7.3.4用于NNR_PT_RAW_FLOAT类型的NNR压缩有效载荷的解码方法(示例,细节是可选的)
例如,该过程的输出是TENSOR_FLOAT类型的变量RecParam,例如如表6所示。例如,RecParam的维度等于ShiftArrayIndex(TensorDimensions,first_tensor_dimension_shift)。
例如,RecParam设置为等于raw_float32_parameter。
例如可选地,调用子条款7.3.1.1,例如以RecParam和TensorDimensions作为输入,并将输出分配给RecParam。
7.3.5用于NNR_PT_BLOCK类型的NNR压缩有效载荷的解码方法(示例,细节是可选的)
例如,该过程的输入是:
●例如通过partial_data_counter以及它们的nnr_compressed_data_unit_payload_type字段标记为一起解压缩的一个或多个NNR压缩数据单元被设置为NNR_PT_BLOCK。
例如,该过程的输出是例如根据compressed_parameter_types的值的一个或多个例如TENSOR_FLOAT类型的变量(如表6所示),如下:
If(compressed_parameter_types&NNR_CPT_DC)==0:RecWeight(可选的,示例)
If(compressed_parameter_types&NNR_CPT_DC)!=0:RecWeightG,RecWeightH(可选的,示例)
If(compressed_parameter_types&NNR_CPT_LS)!=0:RecLS(可选的,示例)
If(compressed_parameter_types&NNR_CPT_BN)!=0:RecBeta,RecGamma,RecMean,RecVar(可选的,示例)
If(compressed_parameter_types&NNR_CPT_BI)!=0:RecBias(可选的,示例)
如果存在,则RecWeight的维度等于ShiftArrayIndex(TensorDimensions,first_tensor_dimension_shift)。
(可选的,示例)
如果存在,则RecWeightG的维度等于TensorDimensionsG(可选的,示例)。
如果存在,则RecWeightH的维度等于TensorDimensionsH(可选的,示例)。
如果存在,变量RecLS,RecBeta,RecGamma,RecMean,RecVar和RecBias是一维的,其长度等于TensorDimensions的第一维度(可选的,示例)。
例如可选地,如子条款9.3.2所指定的对算术编码引擎和上下文模型进行初始化。
如果(compressed_parameter_types&NNR_CPT_LS)!=0,则调用子条款7.3.6,以RecLS、-1和1的维度作为输入,以及输出分配给RecLS(可选的,示例)。
如果(compressed_parameter_types&NNR_CPT_BI)!=0,则调用子条款7.3.6,以RecBias,-1和-1的维度作为输入,以及输出分配给RecBias(可选的,示例)。
如果(compressed_parameter_types&NNR_CPT_BN)!=0,则调用子条款7.3.6,以RecBeta,-1和-1维度作为输入,以及输出分配给RecBeta(可选的,示例)。
如果(compressed_parameter_types&NNR_CPT_BN)!=0,则调用子条款7.3.6,以RecGamma,1和-1维度作为输入,以及输出分配给RecGamma(可选的,示例)。
如果(compressed_parameter_types&NNR_CPT_BN)!=0,则调用子条款7.3.6,以RecMean,1和-1维度作为输入,以及输出分配给RecMean(可选的,示例)。
如果(compressed_parameter_types&NNR_CPT_BN)!=0,则调用子条款7.3.6,以RecVar,1和-1维度作为输入,以及输出分配给RecVar(可选的,示例)。
如果(compressed_parameter_types&NNR_CPT_DC)==0,则调用子条款7.3.6,以RecWeight,0和(codebook_present_flag?0:1)维度作为输入,以及输出分配给RecWeight(可选的,示例)。
如果(compressed_parameter_types&NNR_CPT_DC)!=0,则执行以下:(可选的,示例)
例如,调用子条款7.3.6,例如以TensorDimensionsG、0和(codebook_present_flag?0:-1)作为输入,输出分配给RecWeightG。
例如,调用子条款7.3.6,例如以TensorDimensionsH、(TensorDimensionsG[0]+(4<<scan_order)-1)>>(2+scan_order))-1和(codebook_present_flag?1:-1)作为输入,例如,输出分配给RecWeightH。
注意—例如从解码后的RecWeightG和RecWeightH中,可以推导出变量RecWeight如下:
RecWeight=TensorReshape(RecWeightG*RecWeightH,TensorDimensions)
例如可选地,调用子条款7.3.1.1,例如以RecWeight和TensorDimensions作为输入,并将输出分配给RecWeight。
例如,可选地,根据子条款9.2.1.2从比特流解码语法结构terminate_cabac()。
例如,可选地,如果(compressed_parameter_types&NNR_CPT_DC)==0,则调用子条款7.3.1.1,例如以RecWeight和TensorDimensions作为输入,并将输出分配给RecWeight。
7.3.6整数权重张量的解码过程(例如,细节是可选的)
例如,该过程的输入是:
●变量tensorDims,指定要解码的张量的维度(可选的,示例)。
●变量entryPointOffset,指示是否存在用于解码的入口点,如果存在,则指示入口点偏移量(可选的,示例)。
●变量codebookId,指示是否应用了码本,如果应用了码本,则应使用哪个码本(可选的,示例)。
例如,该过程的输出是TENSOR_FLOAT类型的变量recParam,如表6所示,其维度等于tensorDims。
例如,可选地,从比特流解码根据子条款9.2.1.3的语法结构quant_param(QpDensity)。
例如,可选地,从比特流解码根据子条款9.2.1.6的语法结构shift_parameter_ids(cabac_unary_length_minus1),以及例如调用子条款9.3.2.2中指定的概率估计参数的初始化过程。
例如,可选地,从比特流解码根据子条款9.2.1.4的语法结构quant_tensor(tensorDims,cabac_unary_length_minus1,entryPointOffset),以及recParam设置如下(示例):
例如,可选地,变量stepSize推导如下:
mul=(1<<QpDensity)+((qp_value+QuantizationParameter)&((1<<QpDensity)-1))
shift=(qp_value+QuantizationParameter)>>QpDensity
stepSize=mul*2shift-QpDensity
例如,可选地,变量recParam更新如下:
recParam=recParam*stepSize
注意——例如,根据上述计算,recParam可以始终表示为二进制分数。
8参数约简(细节是可选的)
9熵编码(示例,细节是可选的)
9.1方法
9.1.1 DeepCABAC(示例,细节是可选的)
9.1.1.1二值化(示例,细节是可选的)
例如,编码方法以例如由函数TensorIndex()定义的方式扫描参数张量。例如,使用整数参数‘maxNumNoRemMinus1’对每个量化参数级别都根据以下过程进行编码:
例如,可选地,在第一步中,为量化参数级别编码二进制语法元素sig_flag,该语法元素例如用于指定对应的级别是否等于0。例如,如果sig_flag等于1,则编码另一个二进制语法元素sign_flag。例如,该二进制(bin)指示当前参数的水平是正还是负。例如,接下来对一元二进制序列进行编码,然后是固定长度的序列,如下所示:
例如,变量k初始化为0,X初始化为1<<k。例如,对语法元素abs_level_greater_x/x2进行编码,例如,指示量化参数级别的绝对值大于x。例如,如果abs_level_greater_x/x2等于1且x大于maxNumNoRemMinus1,变量k例如增加1。例如,之后,1<<k被加到x,例如,再编码一个abs_level_greater_x/x2。例如,该过程会一直持续到abs_level_greater_x/x2等于0。例如,现在很明显,X必须是(x,x-1,…X-(1<<k)+1)中的一个值。例如,对长度为k的代码个编码,该代码例如指向绝对量化参数级别列表中的值。
9.1.1.2跳行(示例,细节是可选的)
例如,如果启用row_skip_flag_enabled_flag标志,则跳行技术可以为参数张量第一轴上的每个值i发出一个row_skip_list[i]标志信号。例如,如果标志row_skip_list[i]为1,则参数张量的第一轴的索引等于i的所有元素都设置为0。例如,如果标志row_skip_list[i]为0,则参数张量的第一轴的索引等于i的所有元素都被单独编码。
通常,根据实施例的解码器,例如图1所示的解码器100,例如图2所示的解码器200,例如,其相应的解码单元110、210,例如可被配置为解码跳过行列表,以在由相应数组索引集描述的相应位置,将解码的神经网络系数输入第一多维数组(例如111、211),并根据第由一多维数组的第一维度的当前数组索引引用的跳过行列表的条目,决定是否使用给定神经网络参数的默认值,或者是否使用解码确定给定神经网络参数。
9.1.1.3上下文建模(示例,细节是可选的)
例如,上下文建模对应于将三种类型的标志sig_flag、sign_flag和abs_level_greater_x/x2与上下文模型关联起来。例如,通过这种方式,具有相似统计行为的标志应与相同的上下文模型相关联,以便概率估计器(例如在上下文模型内部的概率估计其)能够适应底层统计。
例如,所提出方法的上下文建模如下:
例如,根据状态值和左侧相邻的量化参数级别是零、小于零还是大于零,sig_flag可以区分出二十四个上下文模型。
例如,如果dq_flag为0,则只使用前三个上下文模型。
例如,根据左侧相邻量化参数级别是零、小于零还是大于零,sign_flag可以区分其他三个上下文模型。
例如,对于abs_level_greater_x/x2标志,每个x使用一个或两个单独的上下文模型。例如,如果x<=maxNumNoRemMinus1,则根据sign_flag区分两个上下文模型。例如,如果x>maxNumNoRemMinus1,则只使用一个上下文模型。
9.1.1.4时间上下文建模(示例,细节是可选的)
例如,如果启用temporal_context_modeling_flag标志,则标志sig_flag、sign_flag和abs_level_great_x的附加上下文模型集是可用的。例如,ctxIdx的推导也是基于先前编码的参数更新张量中的量化同位参数级别的值,例如,可以通过参数更新树进行唯一标识。例如,如果同位参数级别不可用或等于零,则根据子条款9.1.1.3应用上下文建模。否则,例如,如果同位参数级别不等于零,则所提出方法的时间上下文建模例如如下:
例如,sig_flag可以根据状态值和量化的同位参数水平的绝对值是否大于1来区分16个上下文模型。
例如,如果dq_flag为0,则只使用前两个附加上下文模型。
例如,量化的同位参数级别是小于零还是大于零,sign_flag又可以区分另外两个上下文模型。
例如,对于abs_level_greater_x标志,每个x使用两个单独的上下文模型。例如,这两个上下文模型的区分取决于量化的同位参数水平的绝对值是否大于或等于x-1。
9.2语法和语义(示例,细节是可选的)
9.2.1 DeepCABAC语法(示例,细节是可选的)
9.2.1.1一般
此子条款指定了熵编码语法,例如用于子条款7的解码过程。
9.2.1.2 DeepCABAC终止语法(细节是可选的)
9.2.1.3量化参数语法(细节是可选的)
9.2.1.4量化张量语法(示例,细节是可选的)
例如,row_skip_enabled_flag指定是否使能跳行。例如,row_skip_enabled_flag等于1指示启用跳行。
例如,row_skip_list指定标志列表,其中,第i个标志row_skip_lsit[i]指示QuantParam中第一维度索引等于i的的所有张量元素是否为零。例如,如果row_skip_list[i]等于1,那么QuantParam中第一维度索引等于i的所有张量元素都为零。
例如,init_prob_est_param()调用例如9.3.2.2子条款指定的初始化过程。
例如,二维整数数组StateTransTab[][]指定依赖性标量量化的状态转移表,例如如下:StateTransTab[][]={{0,2},{7,5},{1,3},{6,4},{2,0},{5,7},{3,1},{4,6}}
9.2.1.5量化参数语法(细节是可选的)
9.2.1.6移位参数索引语法(细节是可选的)
9.2.1.7移位参数语法(细节是可选的)
9.3熵解码过程(细节是可选的)
9.3.1一般(细节是可选的)
9.3.2初始化过程(细节是可选的)
9.3.2.1一般(细节是可选的)
9.3.2.2概率估计参数的初始化过程(细节是可选的)
9.3.2.3上下文变量的初始化过程(细节是可选的)
9.3.2.4算术解码引擎的初始化过程(细节是可选的)
9.3.3二值化处理(细节是可选的)
9.3.3.1一般(细节是可选的)
9.3.3.2固定长度的二值化处理(细节是可选的)
9.3.4解码处理流程(细节是可选的)
9.3.4.1一般(细节是可选的)
9.3.4.2ctxIdx和bypassFlag的推导过程(细节是可选的)
9.3.4.2.1一般(细节是可选的)
9.3.4.2.2语法元素sig_flag的ctxInc的推导过程(细节是可选的)
9.3.4.2.3语法元素sign_flag的ctxInc的推导过程(细节是可选的)
9.3.4.2.4语法元素abs_level_greater_x[j]的ctxInc的推导过程(细节是可选的)
9.3.4.3算术解码过程(细节是可选的)
9.3.4.3.1一般(细节是可选的)
9.3.4.3.2二进制决策的算术解码过程(细节是可选的)
9.3.4.3.2.1一般(细节是可选的)
9.3.4.3.2.2状态转换过程(可选的)
9.3.4.3.3算术解码引擎中的重归一化过程(细节是可选的)
9.3.4.3.4二进制决策的旁路解码过程(细节是可选的)
9.3.4.3.5终止前二进制决策的解码过程(细节是可选的)
另一附件A可以与NNEF的实施有关或对其实施进行了定义。
为简明起见,未包括附件A至E或未包括附件A至E的全部内容。值得注意的是,对于本发明的实施例,这些附件中的功能和特征的各自细节对于本发明的实施方案来说是可选的,既可以单独使用,也可以组合使用。
用于“信息科技-多媒体内容描述接口”的参考文献
[1]Open neural network Exchange,VERSION 7,2020-05-09(https://github.com/onnx/onnx/blob/master/onnx/onnx.proto)
[2]PyTorch,VERSION 1.5.1,2020-10-22(https://github.com/pytorch/pytorch/tree/v1.5.1)
[3]TensorFlow,VERSION 2.2.0,2020-10-22(https://github.com/tensorflow/tensorflow/tree/v2.2.0)
替代实施方案:
尽管某些方面是在设备的背景下描述的,但显然这些方面也代表了对相应方法的描述,其中模块或装置对应于方法步骤或方法步骤的特征。同样,在方法步骤背景下描述的各个方面也代表了对相应设备的相应模块或项目或特征的描述。部分或全部方法步骤可由(或使用)硬件设备执行,例如微处理器、可编程计算机或电子电路。在某些实施例中,一个或多个最重要的方法步骤可由此类设备执行。
根据某些实施要求,本发明的实施例可以在硬件或软件中实现。实施可以使用数字存储介质,例如软盘、DVD、蓝光、CD、ROM、PROM、EPROM、EEPROM或闪存,这些介质上存储有电子可读控制信号,可与可编程计算机系统协作(或能够协作),以便执行相应的方法。因此,数字存储介质可以是计算机可读的。
根据本发明的一些实施例,包括具有电子可读控制信号的数据载体,电子可读控制信号能够与可编程计算机系统协作,从而执行本文所述方法之一。
一般来说,本发明的实施例可以实现为具有程序代码的计算机程序产品,当计算机程序产品在计算机上运行时,该程序代码可操作以执行上述方法之一。例如,程序代码可以存储在机器可读载体上。
其他实施例包括用于执行本文所述方法之一的计算机程序,该程序存储在机器可读载体上。
因此,换句话说,本发明方法的实施例是计算机程序,当计算机程序在计算机上运行时,具有用于执行本文所述方法之一的程序代码。
因此,本发明方法的进一步实施例是数据载体(或数字存储媒体或计算机可读媒体),其上记录有用于执行本文所述方法之一的计算机程序。数据载体、数字存储介质或记录介质通常是有形的和/或非暂时性的。
因此,本发明方法的进一步实施例是表示用于执行本文所述方法之一的计算机程序的数据流或信号序列。例如,数据流或信号序列可被配置为经由数据通信连接(例如经由互联网)进行传送。
进一步实施例包括处理装置,例如被配置为或适于执行本文所述方法之一的计算机或可编程逻辑器件。
进一步实施例包括在其上安装用于执行本文所述方法之一的计算机程序的计算机。
根据本发明的进一步实施例包括一种装置或系统,该装置或系统被配置为将用于执行本发明所述方法之一的计算机程序(例如,电子地或光学地)传送到接收器。接收器例如可以是计算机、移位设备、存储设备等。例如,该装置或系统可包括用于将计算机程序传送到接收器的文件服务器。
在一些实施例中,可编程逻辑器件(例如现场可编程门阵列)可用于执行本文所述方法的部分或全部功能。在一些实施例中,现场可编程门阵列可与微处理器合作,以执行本文所述的方法之一。一般来说,这些方法优选地由任何硬件装置执行。
本文所述的装置可以使用硬件装置,或使用计算机,或使用硬件装置和计算机的组合来实现。
本文所述的装置或本文所述的装置的任何组件,可以至少部分地以硬件和/或软件实现。
本文描述的方法可以使用硬件装置,或使用计算机,或使用硬件装置和计算机的组合来执行。
本文所述的方法,或本文所述的装置的任何组件,至少可以部分通过硬件和/或软件来实现。
所述实施例仅说明本发明的原理。可以理解的是,对于本领域的其他技术人员来说,本发明所述的布置和细节的修改和变化是显而易见的。因此,本发明的意图仅受即将提出的专利权利要求范围的限制,而不受本文通过对实施例的描述和解释而提出的具体细节的限制。
Claims (39)
1.一种解码器(100,200),用于基于编码表示提供神经网络的解码参数,
其中,解码器被配置为使用神经网络参数的解码(652)获得包括多个神经网络参数值的第一多维数组(111,211,670);
其中,解码器被配置为使用重新排序(672)获得重新排序的多维数组(121,221,680),其中第一多维数组的第一维度重排到重新排序的多维数组中的不同维度。
2.根据权利要求1所述的解码器(100,200),
其中,解码器被配置为解码维度移位值(112,212,630),以及
其中,维度移位值描述了当执行重新排序时,第一多维数组(111,211,670)的第一维度应移位多少维度。
3.根据权利要求1或2所述的解码器(100,200),
其中,解码器被配置为解码维度移位值(112,212,630),以及
其中,维度移位值描述了第一多维数组(111,211,670)的第一维度在重新排序的多维数组(121,221,680)中的新位置。
4.根据权利要求3所述的解码器(100,200),
其中,维度移位值是经Exp哥伦布编码的。
5.根据权利要求1至4中任何一项所述的解码器(100,200),
其中,解码器被配置为使用单个标量维度移位值(112,212,630)作为描述重新排序的多维数组(121,221,680)中维度的新顺序的唯一参数来执行重新排序。
6.根据权利要求1至5中任何一项所述的解码器(100,200),
其中,解码器被配置为执行单个维度到另一个位置的单次移位,以获得重新排序的多维数组(121,221,680)。
7.根据权利要求1至6中任何一项所述的解码器(100,200),
其中,解码器被配置为从第一多维数组(111,211,670)的第一维度推导辅助数组的维度。
8.根据权利要求1至7中任何一项所述的解码器(100,200),
其中,解码器被配置为将第一多维数组(111,211,670)的单个维度移位到不同的位置,以获得重新排序的多维数组(121,221,680)。
9.根据权利要求1至8中任何一项所述的解码器(100,200),
其中,解码器被配置为基于编码表示获得二维矩阵(660),所述二维矩阵的第一维度由第一维度值确定,以及所述二维矩阵的第二维度由多个进一步维度值的乘积确定;以及
其中,解码器被配置为基于二维矩阵(660)获得第一多维数组(111,211,670),所述第一多维数组的维度由第一维度值和进一步维度值中的各个维度值确定;以及
其中,解码器被配置为基于第一多维数组获得重新排序的多维数组(121,221,680),其中重新排序的多维数组的第一维度由进一步维度值中的一个维度值定义。
10.根据权利要求1至9中任何一项所述的解码器(100,200),
其中,解码器被配置为使用基于上下文的熵解码对编码的神经网络参数进行解码,以及
其中,解码器被配置为使用位置映射函数确定解码的神经网络参数在第一多维数组(111,211,670)中的位置,所述位置映射函数将标量神经网络参数索引映射到维度索引集。
11.根据权利要求1至10中任何一项所述的解码器(100,200),
其中,解码器被配置为沿第一多维数组(111,211,670)的给定维度连续存储多个解码的神经网络参数,多个解码的神经网络参数在解码顺序上直接相邻。
12.根据权利要求1至11中任何一项所述的解码器(100,200),
其中,解码器被配置为通过以下形式的处理获得重新排序的多维数组(121,221,680):
其中,i是运行变量;
其中,Prod(inputTensorDims)是第一多维数组(111,211,670)的维度的长度的乘积;
其中,TensorIndex(.,.,.)是将整数值映射到指定第一多维数组的元素的数组索引集的函数;
其中,inputTensorDims是值的集合,描述了第一多维数组的维度的长度;
其中,idxA是变量;
其中,ShiftArrayIndex(.,.)是将输入的数组索引集映射到返回的数组索引集的函数,其中返回的数组索引集是输入的数组索引集的副本,但将输入的数组索引集中位于位置0的元素移位到firstTensorDimShift指定的位置;
其中,firstTensorDimShift是维度移位值(112,212,630);
其中,idxB是变量;
其中,inputTensor[.]是第一多维数组;
其中,reorderedTensor[.]是重新排序的多维数组;
其中,inputTensor[idxA]是第一多维数组中位于idxA指定位置的元素;
其中,reorderedTensor[idxB]是重新排序的多维数组中位于idxB指定位置的元素。
13.根据权利要求1至12中任何一项所述的解码器(100,200),
其中,解码器被配置为使用函数来获得重新排序的多维数组(121,221,680),所述函数将指定第一多维数组(111,211,670)的元素的整数元素索引i映射到数组索引集,
其中,返回的数组索引集指定第一多维数组(111,211,670)行主扫描顺序中的第i个元素,或
其中,返回的数组索引集指定第一多维数组按块扫描的第i个元素,其中第一多维数组被视为二维数组。
14.根据权利要求1至13中任何一项所述的解码器(100,200),
其中,解码器被配置为对跳过行列表进行解码;
其中,解码器被配置为将解码的神经网络系数输入到第一多维数组(111,211,670)中由相应数组索引集描述的相应位置;
其中,解码器被配置为根据第一多维数组的第一维度的当前数组索引所引用的跳过行列表的条目,决定是否使用给定神经网络参数的默认值,或者是否使用解码确定给定神经网络参数。
15.根据权利要求1至14中任何一项所述的解码器(100,200),
其中,解码器被配置为对数组维度集进行解码;以及
其中,解码器被配置为获得重新排序的数组维度集。
16.根据权利要求1至15中任何一项所述的解码器(100,200),
其中,解码器被配置为将解码的神经网络参数输入到第一多维数组(111,211,670)中由相应数组索引集描述的相应位置;
其中,解码器被配置为使用映射函数获得相应的数组索引集,所述映射函数将标量整数参数索引映射到相应的数组索引集,并定义了按块扫描。
17.根据权利要求16所述的解码器(100,200),
其中,映射函数包括标量整数参数索引到两个坐标上的映射,所述坐标指向按块进行块扫描时与标量整数参数索引所定义的扫描索引相对应的位置;以及
其中,映射函数包括两个坐标到相应数组索引集的映射。
18.根据权利要求1至17中任何一项所述的解码器(100,200),
其中,解码器被配置为将解码的神经网络参数输入到第一多维数组(111,211,670)由相应数组索引集描述的相应位置;
其中,解码器被配置为基于标量整数参数索引i,使用函数TensorIndex(tensorDimensions[],i,scan)获得相应的数组索引集;
其中,函数TensorIndex(tensorDimensions[],i,scan)返回与数组tensorDimensions[]维数相同的数组索引的数组,
其中,数组索引的数组的元素设置为整数值,以使数组索引的数组能用作指向具有维度tensorDimensions[]的数组的元素的索引,如下所示:
如果变量scan等于0:
返回的数组索引的数组指向具有由tensorDimensions[]定义的维度的数组的行主扫描顺序中的第i个元素;
如果变量scan大于0:
变量bs设置为4<<scan_order;
变量h设置为tensorDimensions[0];
变量w设置为Prod(tensorDimensions)/h;
两个变量x和y设置为返回的数组的第一元素和第二元素,
通过分别调用IndexToXY(w,h,i,bs);
返回的数组是TensorIndex(tensorDimensions,y*w+x,0);
其中,函数IndexToXY(w,h,i,bs)返回包含两个元素的数组;
其中,函数IndexToXY返回的第一元素是x坐标,以及函数IndexToXY返回的第二元素是y坐标,指向宽度为w高度为h的二维数组;
其中,当以bs乘以bs大小的块进行块扫描时,x、y指向与扫描索引i对应的位置;
其中x和y的推导如下:
变量fullRowOfBlocks设置为w*bs;
变量blockY设置为i/fullRowOfBlocks;
变量iOff设置为i%fullRowOfBlocks;
变量currBlockH设置为Min(bs,h-blockY*bs);
变量fullBlocks设置为bs*currBlockH;
变量blockX设置为iOff/fullBlocks;
变量blockOff设置为iOff%fullBlocks;
变量currBlockW设置为Min(bs,w-blockX*bs)
变量posX设置为blockOff%currBlockW;
变量posY设置为blockOff/currBlockW;
变量x设置为blockX*bs+posX;
变量y设置为blockY*bs+posY;
其中,tensorDimensions[]是描述第一多维数组不同维度的长度的值的数组;以及
其中scan是描述扫描模式的整数变量。
19.一种用于提供神经网络参数的编码表示的编码器(300),
其中,编码器被配置为使用重新排序获得重新排序的多维数组(321,620),其中神经网络参数的给定多维数组(302,610)的给定维度(301)重排到重新排序的多维数组中的第一维度;
其中,编码器被配置为对重新排序的多维数组进行编码。
20.根据权利要求19所述的编码器(300),
其中,编码器被配置为对维度移位值(112,212,630)进行编码;以及
其中,维度移位值描述了给定多维数组(302,610)的哪个给定维度重排到重新排序的多维数组(321,620)中的第一维度,或
其中,维度移位值描述了在执行解码器侧重新排序(672)时,编码的重新排序的多维数组的第一维度应移位多少维度。
21.根据权利要求19或20所述的编码器(300),
其中,编码器被配置为对维度移位值(112,212,630)进行编码(632),以及
其中,维度移位值描述了编码的重新排序的多维数组的第一维度在解码器中应移动至的新位置。
22.根据权利要求21所述的编码器(300),
其中,编码器被配置为使用Exp哥伦布码对维度移位值进行编码。
23.根据权利要求19至22中任何一项所述的编码器(300),
其中,编码器被配置为使用单个标量维度移位值(112,212,630)作为描述重新排序的多维数组(321,620)中维度新顺序的唯一参数执行重新排序。
24.根据权利要求19至23中任何一项所述的编码器(300),
其中编码器被配置为执行单个维度到另一个位置的单次移位,以获得重新排序的多维数组(321,620)。
25.根据权利要求19至24中任何一项所述的编码器(300),
其中,编码器被配置为将包括在编码表示中的辅助数组的维度,设置为等于重新排序的多维数组(321,620)的第一维度。
26.根据权利要求19至25中任何一项所述的编码器(300),
其中,编码器被配置为将给定多维数组(302,610)的单个维度移位到不同的位置,以获得重新排序的多维数组(321,620)。
27.根据权利要求19至26中任何一项所述的编码器(300),
其中,编码器被配置为基于给定多维数组(302,610)获得重新排序的多维数组(321,620),重新排序的多维数组的维度由与第一维度关联的第一维度值和与第一维度以外的进一步维度关联的进一步维度值中的各个维度值确定;以及
其中,编码器被配置为基于重新排序的多维数组(321,620)获得二维矩阵(640),二维矩阵的第一维度由第一维度值确定,第二维度由进一步维度值的乘积确定;以及
其中编码器被配置为对二维矩阵进行编码(642)。
28.根据权利要求19至27中任何一项所述的编码器(300),
其中,编码器被配置为使用基于上下文的熵编码对神经网络参数进行编码,以及
其中,编码器被配置为使用位置映射函数确定重新排序的多维数组(321,620)中的待编码的神经网络参数,所述位置映射函数将标量神经网络参数索引映射到维度索引集。
29.根据权利要求1至28中任何一项所述的编码器(300),
其中,编码器被配置为沿重新排序的多维数组(321,620)的给定维度连续读取待编码的多个神经网络参数,待编码的多个神经网络参数在编码顺序上直接相邻。
30.根据权利要求19至29中任何一项所述的编码器(300),
其中,编码器被配置为通过以下形式的处理获得重新排序的多维数组(321,620):
其中,i是运行变量;
其中,Prod(inputTensorDims)是给定多维数组(302,610)的维度的长度的乘积;
其中,TensorIndex(.,.,.)是将整数值映射到指定给定多维数组的元素的数组索引集的函数;
其中,inputTensorDims是值的集合,描述了给定多维数组的维度的长度;
其中,idxA是变量;
其中,ShiftArrayIndexEnc(.,.)是将输入的数组索引集映射到返回的数组索引集的函数,其中返回的数组索引集是输入的数组索引集的副本,但输入的数组索引集中位于firstTensorDimShift指定位置的元素移位到了位置0;
其中,firstTensorDimShift是维度移位值(112,212,630);
其中,idxB是变量;
其中,inputTensor[.]是给定多维数组;
其中,reorderedTensor[.]是重新排序的多维数组;
其中,inputTensor[idxA]是给定多维数组中位于idxA指定位置的元素;
其中,reorderedTensor[idxB]是重新排序的多维数组中位于idxB指定位置的元素。
31.根据权利要求19至30中任何一项所述的编码器(300),
其中,编码器被配置为使用函数来获得重新排序的多维数组(321,620),所述函数将指定给定多维数组(302,620)中的元素的整数元素索引i映射到数组索引集,
其中,返回的数组索引集指定了给定多维数组的行主扫描顺序中的第i个元素,或
其中,返回的数组索引集指定了给定多维数组的按块扫描的第i个元素,其中给定多维数组被视为二维数组。
32.根据权利要求19至31中任何一项所述的编码器(300),
其中,编码器被配置为对跳过行列表进行编码;
其中,编码器被配置为在由相应数组索引集描述的相应位置对重新排序的多维数组(321,620)的神经网络系数进行编码;
其中,编码器被配置为根据由重新排序的多维数组的第一维度的当前数组索引引用的跳过行列表中的条目,决定是否对当前位置的编码神经网络参数进行编码。
33.根据权利要求19至32中任何一项所述的编码器(300),
其中,编码器被配置为获得数组维度集;
其中,编码器被配置为对数组维度集进行编码。
34.根据权利要求19至33中任何一项所述的编码器(300),
其中,编码器被配置为在由相应数组索引集描述的相应位置对重新排序的多维数组(321,620)的神经网络参数进行编码;
其中,编码器被配置为使用映射函数获得相应的数组索引集,所述映射函数将标量整数参数索引映射到相应的数组索引集,并定义了按块扫描。
35.根据权利要求34所述的编码器(300),
其中,映射函数包括标量整数参数索引到两个坐标的映射,所述坐标指向按块进行块扫描时与标量整数参数索引所定义的扫描索引相对应的位置;以及
其中,映射函数包括两个坐标到相应数组索引集的映射。
36.根据权利要求19至35中任何一项所述的编码器(300),
其中,编码器被配置为在由相应数组索引集描述的相应位置对重新排序的多维数组(321,620)的神经网络参数进行编码;
其中,编码器被配置为基于标量整数参数索引i,使用函数TensorIndex(tensorDimensions[],i,scan)获得相应的数组索引集;
其中,函数TensorIndex(tensorDimensions[],i,scan)返回与数组tensorDimensions[]维数相同的数组索引的数组;
其中,数组索引的数组的元素设置为整数值,以使数组索引的数组能用作指向具有维度tensorDimensions[]的数组的元素的索引,如下所示:
如果变量scan等于0:
返回的数组索引的数组指向具有由tensorDimensions[]定义的维度的数组的行主扫描顺序中的第i个元素;
如果变量scan大于0:
变量bs设置为4<<scan_order;
变量h设置为tensorDimensions[0];
变量w设置为Prod(tensorDimensions)/h;
两个变量x和y设置为返回的数组的第一元素和第二元素,
通过分别调用IndexToXY(w,h,i,bs);
返回的数组是TensorIndex(tensorDimensions,y*w+x,0);
其中,函数IndexToXY(w,h,i,bs)返回包含两个元素的数组,
其中,函数IndexToXY返回的第一元素是x坐标,以及函数IndexToXY返回的第二元素是y坐标,指向宽度为w高度为h的二维数组,
其中,当以bs乘以bs大小的块进行块扫描时,x、y指向与扫描索引i对应的位置;
其中x和y的推导如下:
变量fullRowOfBlocks设置为w*bs;
变量blockY设置为i/fullRowOfBlocks;
变量iOff设置为i%fullRowOfBlocks;
变量currBlockH设置为Min(s,h-blockY*bs);
变量fullBlocks设置为bs*currBlockH;
变量blockX设置为iOff/fullBlocks;
变量blockOff设置为iOff%fullBlocks;
变量currBlockW设置为Min(bs,w-blockX*bs)
变量posX设置为blockOff%currBlockW;
变量posY设置为blockOff/currBlockW;
变量x设置为blockX*bs+posX;
变量y设置为blockY*bs+posY;
其中,tensorDimensions[]是描述第一多维数组不同维度的长度的值的数组;以及
其中scan是描述扫描模式的整数变量。
37.一种用于基于编码表示提供神经网络的解码参数的方法(400),
其中,所述方法包括使用神经网络参数的解码(652)获得(410)包括多个神经网络参数值的第一多维数组(111,211,670);
其中,所述方法包括使用重新排序(672)获得(420)重新排序的多维数组(121,221,680),其中第一多维数组的第一维度重排到重新排序的多维数组中的不同维度。
38.一种用于提供神经网络的参数的编码表示的方法(500),
其中所述方法包括使用重新排序(612)获得(510)重新排序的多维数组(321,620),其中神经网络参数的给定多维数组(302,620)的给定维度(301)重排到重新排序的多维数组中的第一维度;
其中,所述方法包括对重新排序的多维数组进行编码(520)。
39.一种计算机程序,当计算机程序在计算机上运行时,用于执行权利要求37至38中的一项所述的方法。
Applications Claiming Priority (3)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| EP22168623 | 2022-04-15 | ||
| EP22168623.1 | 2022-04-15 | ||
| PCT/EP2023/059638 WO2023198817A1 (en) | 2022-04-15 | 2023-04-13 | Decoder for providing decoded parameters of a neural network, encoder, methods and computer programs using a reordering |
Publications (1)
| Publication Number | Publication Date |
|---|---|
| CN119384673A true CN119384673A (zh) | 2025-01-28 |
Family
ID=81328181
Family Applications (1)
| Application Number | Title | Priority Date | Filing Date |
|---|---|---|---|
| CN202380046551.9A Pending CN119384673A (zh) | 2022-04-15 | 2023-04-13 | 使用重新排序提供神经网络的解码参数的解码器、编码器、方法和计算机程序 |
Country Status (6)
| Country | Link |
|---|---|
| US (1) | US20250045973A1 (zh) |
| EP (1) | EP4508573A1 (zh) |
| JP (1) | JP2025513886A (zh) |
| KR (1) | KR20250003860A (zh) |
| CN (1) | CN119384673A (zh) |
| WO (1) | WO2023198817A1 (zh) |
Families Citing this family (3)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| KR102878350B1 (ko) * | 2024-01-24 | 2025-10-29 | 한국과학기술원 | 신경망 기반 텐서-열차 분해를 활용한 텐서 손실 압축 기법 |
| US20250324069A1 (en) * | 2024-04-12 | 2025-10-16 | Interdigital Vc Holdings, Inc. | Video coding based on bitstreams associated with feature compression |
| CN119623464B (zh) * | 2024-11-22 | 2025-11-04 | 重庆邮电大学 | 一种基于指针网络的乱序文本纠错方法 |
Family Cites Families (7)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| WO2020190772A1 (en) * | 2019-03-15 | 2020-09-24 | Futurewei Technologies, Inc. | Neural network model compression and optimization |
| JP7285950B2 (ja) * | 2019-11-22 | 2023-06-02 | テンセント・アメリカ・エルエルシー | ニューラル・ネットワーク・モデル圧縮のための3次元(3d)ツリー・コーディング方法及び装置 |
| WO2021158378A1 (en) * | 2020-02-06 | 2021-08-12 | Interdigital Patent Holdings, Inc. | Systems and methods for encoding a deep neural network |
| US20210326710A1 (en) * | 2020-04-16 | 2021-10-21 | Tencent America LLC | Neural network model compression |
| GB2588986B (en) * | 2020-05-14 | 2022-02-23 | Imagination Tech Ltd | Indexing elements in a source array |
| EP4168942A4 (en) * | 2020-06-22 | 2024-07-17 | Nokia Technologies Oy | GRAPHITE DIFFUSION FOR STRUCTURED PRUNING OF NEURAL NETWORKS |
| WO2022045738A1 (ko) * | 2020-08-24 | 2022-03-03 | 현대자동차주식회사 | 딥러닝 기반 인루프 필터를 이용하는 영상 부호화 및 복호화 |
-
2023
- 2023-04-13 EP EP23720777.4A patent/EP4508573A1/en active Pending
- 2023-04-13 CN CN202380046551.9A patent/CN119384673A/zh active Pending
- 2023-04-13 JP JP2024560705A patent/JP2025513886A/ja active Pending
- 2023-04-13 KR KR1020247038135A patent/KR20250003860A/ko active Pending
- 2023-04-13 WO PCT/EP2023/059638 patent/WO2023198817A1/en not_active Ceased
-
2024
- 2024-10-11 US US18/913,085 patent/US20250045973A1/en active Pending
Also Published As
| Publication number | Publication date |
|---|---|
| JP2025513886A (ja) | 2025-04-30 |
| WO2023198817A1 (en) | 2023-10-19 |
| US20250045973A1 (en) | 2025-02-06 |
| KR20250003860A (ko) | 2025-01-07 |
| EP4508573A1 (en) | 2025-02-19 |
Similar Documents
| Publication | Publication Date | Title |
|---|---|---|
| Kirchhoffer et al. | Overview of the neural network compression and representation (NNR) standard | |
| CN119384673A (zh) | 使用重新排序提供神经网络的解码参数的解码器、编码器、方法和计算机程序 | |
| US5818877A (en) | Method for reducing storage requirements for grouped data values | |
| Zepeda et al. | Image compression using sparse representations and the iteration-tuned and aligned dictionary | |
| JP6923677B2 (ja) | ビデオ圧縮におけるエントロピーコーディングのための選択的ミキシング | |
| US7982641B1 (en) | Context-based adaptive binary arithmetic coding engine | |
| WO2006062993A2 (en) | Lossy data compression exploiting distortion side information | |
| CN115087988A (zh) | 用于编码神经网络参数的构思 | |
| CN112399181B (zh) | 图像编解码的方法、装置和存储介质 | |
| KR20070026512A (ko) | 컬러 이미지 인코딩을 위한 방법, 시스템 및 소프트웨어제품 | |
| CN112398484A (zh) | 一种编码方法及相关设备 | |
| CN106899848B (zh) | 用于图像和视频编码的自适应二进制化器选择 | |
| US20240046100A1 (en) | Apparatus, method and computer program for decoding neural network parameters and apparatus, method and computer program for encoding neural network parameters using an update model | |
| GB2545305A (en) | Residual entropy compression for cloud-based video applications | |
| Becking et al. | Nncodec: An open source software implementation of the neural network coding iso/iec standard | |
| CN107018426B (zh) | 用于图像和视频编码的二进制化器选择 | |
| US8305244B2 (en) | Coding data using different coding alphabets | |
| US12425042B2 (en) | Method, an apparatus and a computer program product for neural network compression | |
| KR101577848B1 (ko) | 규칙적인 지점의 네트워크에서 벡터를 카운팅하는 방법 | |
| CN114731446B (zh) | 用于信息值序列的编码概念 | |
| KR20240132484A (ko) | 신경 네트워크 파라미터를 인코딩 및 디코딩하는 컨셉 | |
| JPH11225075A (ja) | 符号化方法及び装置 | |
| JP2025186542A (ja) | 更新モデルを使用して、ニューラルネットワークパラメーターを復号化する装置、方法及びコンピュータープログラム、並びにニューラルネットワークパラメーターを符号化する装置、方法及びコンピュータープログラム | |
| US6794999B1 (en) | Resilient parameterized prefix codes for adaptive coding | |
| Mohamed | Wireless communication systems: Compression and decompression algorithms |
Legal Events
| Date | Code | Title | Description |
|---|---|---|---|
| PB01 | Publication | ||
| PB01 | Publication | ||
| SE01 | Entry into force of request for substantive examination | ||
| SE01 | Entry into force of request for substantive examination |