【JVET G1001v1翻译2】QTBT块划分结构及编码实现

写在前边:本文档翻译自JVET组织在都灵会议发布的文档Algorithm description of Joint Exploration Test Model 7 (JEM7)。附上下载链接http://phenix.it-sudparis.eu/jvet/doc_end_user/documents/7_Torino/wg11/JVET-G1001-v1.zip。

这篇主要介绍JEM相对HM中最明显的编码框架改动,即将CTU-PU-TU结构改为QTBT结构。

1.QTBT块划分结构

在HEVC中,一个CTU能以四叉树的树结构划分为多个CU以适应多变的局部特征。将图像区域使用帧内或帧间编码的决策是在CU层决定的。每个CU可以进一步划分成一个、两个或四个预测单元(PredictionUnit, PU)。在PU内部预测过程都是相同的,并且相关(预测)信息会以PU为单位传到解码端。在基于PU划分结构施加预测操作并得到残差块后,CU可以进一步划分为另一个变换单元(TransformUnit, TU)四叉树结构。HEVC块结构的一个关键特征就是它的多划分概念,即CU、PU和TU。

 

QTBT结构移除了多类型划分的概念,即不存在单独的CU、PU及TU概念,并且QTBT支持更加灵活的CU划分形状。在QTBT块结构中,一个CU可以有方形或长方形的形状。如图1所示,一个CTU首先以四叉树的形式划分。四叉树的叶节点进一步以二进制树的形式划分。二进制树划分有两种类型,对称水平划分和对称垂直划分。二进制树的叶节点被称为编码单元(Coding Units,CUs),并且预测和变换过程均以CU为单位进行不会再进行更深层的划分。也就意味着在QTBT结构中的CU、PU、TU有着相同的大小。在JEM中一个CU有时由多个不同色度分量的编码块(Coding Blocks,CBs)组成,举例来说,4:2:0色度格式序列的P帧和B帧一个CU包含一个亮度CB和两个色度CB;有时一个CU仅包含单一色度分量,举例来说,4:2:0色度格式序列的I帧仅包含一个CB或仅包含两个色度CBs。

在QTBT划分框架内定义有如下参数:

–    CTU size: 四叉树根节点尺寸,与HEVC中概念相同

–    MinQTSize: 允许的最小四叉树叶节点尺寸

–    MaxBTSize: 允许的最大二进制树根节点尺寸

–    MaxBTDepth: 允许的最大二进制树深度

–    MinBTSize: 允许的最小二进制树尺寸

在一个QTBT划分结构的示例中,CTU的亮度分量尺寸为128x128,两个对应色度分量的尺寸为64x64,MinQTSize设置为16x16,MaxBTSize设置为64x64,MinBTSize(宽高一致)设置为4x4,MaxBTDepth设置为4。CTU首先以四叉树的形式划分产生数个四叉树叶节点。四叉树叶节点的尺寸范围为16x16(即MinQTSize)至128x128(即CTU的尺寸)。若四叉树叶节点尺寸为128x128则其不会进一步以二进制树的形式向下划分,因128x128超过了MaxBTSize(该示例中MaxBTSize为64x64),反之则四叉树叶节点会继续以二进制树的形式向下划分。因此,四叉树叶节点同时也为二进制树的根节点,并且四叉树叶节点在二进制树中的深度为0。当二进制树划分深度与MaxBTDepth相同时,则不会再向下一层划分。当二进制树叶节点宽度与MinBTSize(该示例中MinBTSize为4)相等时,不会再进行水平划分。类似地,当二进制树叶节点高度与MinBTSize(该示例中MinBTSize为4)相等时,不会再进行垂直划分。二进制树划分完成后,二进制树的叶节点进一步进行预测及量化操作时不会再向下划分。在JEM中,最大CTU的尺寸为256x256。

图1(左)以一个使用QTBT划分结构的图像块为例,图1(右)是其对应树结构表示。图1(右)中实线表示四叉树结构划分,虚线表示二进制树结构划分。在二进制树的每个划分节点(即非叶子节点)会有一个标志位标示划分类型(即水平或垂直划分),0表示水平划分,1表示垂直划分。对于四叉树划分则无此标志位,因为四叉树划分时总是将一个块分为四个大小相等的子块。

【JVET G1001v1翻译2】QTBT块划分结构及编码实现_第1张图片

图 1: QTBT结构示例

此外,QTBT结构支持亮度和色度分量的划分结构互相独立。当前,P帧和B帧的亮度、色度CTB共有一个相同的QTBT编码结构,但是在I帧中亮度CTB有一个QTBT划分结构,色度CTB为另一个QTBT划分结构。这种配置也意味着I帧中一个CU包含一个亮度编码块或两个色度编码块,而P帧或B帧中的CU则包含所有3个颜色分量的编码块。

       

在HEVC中,小尺寸编码块的帧间预测由于为降低运动补偿内存读取而限制使用,例如8x4和4x8编码块不支持双向预测方式,帧间预测不支持4x4预测方式。在JEM的QTBT中,这些限制被移除。


 2.编码器实现


编码器中决定QTBT结构块划分的率失真优化(Rate-Distortion Optimization, RDO)过程伪代码如图2所示。

【JVET G1001v1翻译2】QTBT块划分结构及编码实现_第2张图片

图 2: QTBT RDO过程的伪代码

如图2所示,函数QTBT_RDO()为编码器中做编码块划分决策的主要函数,编码块由四个参数x, y, widthheight(分别对应编码块中左上顶点的横坐标、纵坐标,编码块宽度及高度)指定。首先,输入编码块被当作编码树的叶节点(即CU或CB)在不进行进一步划分的情况下测试所有可能的编码模式,被选中模式的RD开销存在CostNoPart中。之后,若满足水平二进制树划分的条件,输入的编码块会水平地分为两个子块,每个子块的宽度与输入编码块相同,但高度为输入编码块的一半。上方的子块左上顶点坐标与输入编码块相同,下方子块的纵坐标为输入子块纵坐标加上高度的一半,横坐标不变。每个子块会递归地调用函数QTBT_RDO()决定划分。水平二进制树划分的RD消耗存储在变量CostHorBT中。类似地,针对输入编码块的垂直二进制树划分RD消耗和四叉树划分RD消耗分别存储在变量CostVerBTCostQT中。在比较CostNoPart, CostHorBT, CostVerBTCostQT后,从中选择RD消耗最小对应的划分作为最终的QTBT结构划分。

对于I帧,由于色度CB在编码时需要参考亮度分量的预测信息(与HEVC中类似),因此亮度CTB调用QTBT_RDO()在两个色度CTB调用CTB之前。

在四叉树划分及二进制树划分最优化决策过程中递归调用函数QTBT_RDO()非常耗时,为了在JEM中加速整个RDO过程,JEM中集成了一些快速编码框架,如下所述:

若一个编码块的不划分RD消耗CostNoPart小于其二进制编码水平和垂直划分RD消耗CostHorBTCostVerBT,则其四叉树RD消耗CostQT大概率会比CostNoPart大,因此测试四叉树RD的过程可以略过;

一个节点的四叉树划分可以通过水平二进制树划分和垂直二进制树划分等价表示。相同的分块形状可以通过不同顺序地应用水平和垂直二进制树划分生成。即使编码表示树结构的标志位和生成CU的处理顺序不相同,由于分块形状的相同其RD表现也将是相同的(除表示某些头信息外)。因此会限制二进制树划分以避免冗余情况的出现。

在QTBT_RDO()过程,一个编码块可能被多次访问。图3(左)中编码块首先被垂直划分,右侧的子块进一步被水平划分。在图3(右)中,编码块首先被水平划分,上方的编码块进一步被水平划分。在这两个示例中,右上方标注的子块被访问两次。整个编码块自身也可能被多次访问。由于特定区域块的被选模式在多个RDO访问过程中很可能保持不变,因此为节约RDO时间,被选模式的信息在第一次RDO过程中会被存储以备后续RDO过程复用。举例来说 ,对于一个被多次RDO过程访问的CU来说,当其临近的编码块在不同的RDO过程中有着相同的编码/解码信息时,当前CU的被选模式在多次RDO访问时仍保持相同。在这种情况下,后续的RDO过程中当前CU的RDO计算被跳过,早起保存的RDO信息会被复用。在JEM软件实现时,邻近块的编码/解码信息会被检查。相关术语和方法在本文后续章节进行叙述,以下属性在该过程(检查过程)被检查:

a.      EMT flag and index

b.      NSST index

c.      PDPC flag

d.      FRUC flag

e.      LAMVR flag

f.       LIC flag

g.      Affine flag

h.      Merge flag

i. Inter prediction direction

 

在较早期RDO过程中保存的CU信息也可以在当同一个CU在后期RDO过程中被用于提前终止RDO过程。若一个CU被决策使用帧内模式编码,在后续的RDO过程中该CU的帧间预测模式(如放射模式,FRUC模式和整像素MV AMVP模式)都会被跳过。若一个CU被决策使用Skip模式编码,则在后续RDO过程中LIC启用的情况下,后续LIC模式的RD检查会被跳过。

【JVET G1001v1翻译2】QTBT块划分结构及编码实现_第3张图片

图 3: 一个编码块被访问两次图示

若当前CU被选模式为Skip模式且当前CU的深度足够深,则当前CU不再需要考虑向下进行四叉树或二进制树划分。在JEM中,当被选的CU模式为Skip模式切当前二进制树深度大于等于SKIP_DEPTH时,更进一步的四叉树及二进制树划分被停止。SKIP_DEPTH值在低延时配置下编码所有图像时为2。对于最高时间层的编码图像,SKIP_DEPTH的值被设置为等于2,并且对于随机接入配置中的其他时间层的编码图像被设置为等于3。

maxBTSizeminQTSize是对RD性能和编码时间来说很重要的两个参数。在JEM软件中,这两个帧级参数当前帧已编码图像的CU平均尺寸变大时会自适应变大,反之亦然。该帧级自适应设置仅在P或B帧中使用。JEM软件中使用的这两个参数及maxBTDepthminBTSize默认值如表1所示。

 表1: QTBT高层参数设置及实验结果

QTBT高层参数

I slice

P or B slice

CTU size

128×128

128×128

minQTSizeLuma

8×8

8×8 (init)

minQTSizeChroma

4×4

n/a

maxBTSizeLuma

32×32

128×128 (init)

maxBTSizeChroma

64×64

n/a

maxBTDepthLuma

3

3

maxBTDepthChroma

3

n/a

minBTSize

4

4

表1中minQTSizeChroma maxBTSizeChroma的值是以亮度分量被衡量。举例来说,在色度格式为4:2:0的视频中,在maxBTSizeChroma设置为64x64时,最大允许的二进制树根节点尺寸对于色度分量来说是32x32



你可能感兴趣的:(266技术提案,JVET,H266,视频编码)