论文来源:ICASSP 2019
论文概要:AV1是一个开源并且版权免费(royalty-free)的视频压缩格式,是VP9发展的延续。由于帧结构的不同,现有的CU快速算法没办法应用于AV1标准。本文提出一种新型的基于中间深度的AV1块划分快速算法,从中间深度中提供信息去估计划分决策的后验概率分布,并对PU划分进行剪枝。实验结果证明所提出的方法可以在0.95%BD-rate的增益下节省29.06%的时间。
Introduction
AV1的块划分有10种,如图1所示。此外,AV1的LCU尺寸是128x128,更高灵活度的块划分结构提高了ME的性能,但是也带来了很高的复杂度。块划分是编解码标准里面时间花销最大的技术,已经有很多基于分类的块划分快速算法用来加速(expedite)块划分决策过程。AV1的参考软件里面已经集成了一些针对PU划分的快速算法,包括基于RD成本的快速算法等。但是这些快速算法都是利用标准的编码顺序进行加速,随着编码的进行可能没办法提供可靠的特征去进行分类。本文提出的新型放啊发会首先检查中间深度,而不是自上而下地对编码进行加速。子CU的预测信息会被用作对ME和PU划分进行加速。
相关工作
现有的基于VP9和HEVC的快速算法都致力于跳过一些不必要的模式,它们主要由以下几个限制:1)对CU和PU的划分不能提供足够可靠的信息;2)这些快速算法都使用自顶向下单向的加速,但是选择大块的概率其实很小。
为了解决第一个限制,[5]发现CU划分成下一深度的概率和运动散度成正比,所以提出了基于下采样帧的光流估计作为附加信息,但是这种方式非常耗时。[12]提出了一种面向HEVC标准的CU早期划分顺序,编码器在非方形PU划分决策之前检查划分模式,从而为PU划分提供子CU的编码输出信息。与之类似的方法在AV1中已经存在,如图2所示。
为了解决第二个限制,[13]首次提出了帧内双向深度搜索,首先检查32x32的块,其决策信息被用来检查手否需要更深的深度或者更浅的深度,从而能够提供很多空间去跳过不必要的计算,然而这种方法只适用于帧内预测,在大多数应用下都不适用。
受到[5]和[13]算法的启发,本文提出了一种基于中间深度的块划分快速算法。本文的新颖之处如下:1)使AV1的帧间预测的中间深度编码结构整合起来,使得可以利用更多的可靠信息。2)它使用细度而不是光流来进行分割剪枝,实现了单通编码和实时性能。
提出的方法
收到[13]的启发,我们从中间深度出发,利用决策信息去决定是否去检查更高的深度或者更低的深度层,剪枝过程可以变成双向的。这个框架可以用图3表示。假设编码器冲深度出发,很明显可以看出
越大,节省的编码时间越多的同时视频的质量越差。为了使得时间节省和视频质量达到不错的平衡,我们设置初始
。
为了避免歧义,我们定义一个预测单元的绝对深度如公式(1)所示,其中和
分别是宽度和高度上的深度,W和H分别表示当前PU的宽和高,
和
分别表示当前CU的宽和高。
一个快速结构选择贝叶斯推断模型
[5]已经证明了MV的方差对PU划分决策和CU划分决策来说是一个很有效的参考工具,[5]中的MV来自于下采样帧的光流估计,nxn大小的块X的MV方差可以表示为公式(2)。其中表示在点i出的MV,并且
。
我们可以利用块的MV代替光流MV。不过块级MV不如光流MV准确并且有时候帧内块是不存在MV的。另一种选择是我们利用块的划分程度去代替MV的方差(如果块中的每个点共享一个MV那这个块就不会被划分),块的分割程度越大,MV的方差就很有可能越大。
为了更好的理解MV散度和划分程度的关系,我们进行以下分析。不划分的MV散度设为0,一旦一个块开始划分,MV散度就变为正数。如果X的子块Y又被分割成了两部分Y1和Y2,Y1和Y2的面积都是S,Y在不划分情况下的MV为。其他划分方式比如水平A划分和水平B划分的情况可以看做是这种情况的进一步划分。给定两个独立的二维正态分布的随机变量
,块X中每个点的新的MV可以用(3)表示,即把块X本身的MV和分块后的MV的插值看成是符合正态分布的,然后新的MV方差就可以用(4)表示,其中
,
(这里我算了一下这个分子上应该有个S才对。。),然后MV的方差的变化就可以用(5)表示。
将(2)和(4)代入(5),可以得到(6)(7),从而得到(8),其中表示一个常量,
表示一个常MV。
可以看出也是服从正态分布的并且
,因此很明显的
概率大于1/2,又因为C>0,因此
的概率也就大于1/2,换言之当划分程度增加时MV的方差也会增加。[5]中提到的是高MV方差代表着划分的可能性很大,我们假设PU的划分程度与CU划分程度也是正相关的,我们用(9)来表示一个CU的PU划分程度(感觉这个计算方法有点像计算信息熵那样,只不过是用面积占比来算信息熵,以及(9)有点写错了,应该有个除以2才对),其中w表示PU所占CU的面积。这样算出来不划分、竖直划分、竖直A划分和四叉树划分的划分程度分别是1,1.5,1.75,2.0和2.0(我算出来是0,0.5,0.75,1.0和1.0)。
为了证明PU划分程度和选择划分模式的关系,本文用Johnny序列的100帧在QP=27时做了统计,图4就是当CU大小为128x128和64x64的时候统计的CU选择划分或者不划分和划分程度之间的关系,可以看出当划分程度增加的时候选择划分的概率也增加了,与预期相符合。
在大块CU的决策错误会带来性能损失,本文又引入了贝叶斯风险决策那一套逻辑去进行分析。把一个CU的决策分类成两类,一类是需要检查更高层的深度,记为CHECK,另一类是跳过检查过程,记为SKIP。当预测正确的时候是0风险,但是当实际是SKIP但是预测为CHECK时损失记为,表示不必要的RDO过程带来的时间开销,反之当实际是CHECK但是预测为SKIP时损失记为
,,表示RD的性能损失。贝叶斯风险用公式(10)(11)表示。因此选择SKIP的条件就变成了
,选择CHECK也是同理,不过这里的
是个平衡因子,应该跟前面的
没啥关系。
通过贝叶斯原理,我们通过公式(12)计算所需要的先验概率,然后决策规律就可以用(13)表示。
但是由于很难衡量时间节省和RD性能之间的关系,就很难确定一个合适的。不过从图4已经可以看出当PU划分程度增加时
减小,因此假设(13)的右边是固定的,那me只需要为每个深度选一个合适的阈值
,当划分程度大于这个值时选择SKIP,否则选择选择CHECK。由于还需要限制RD损失,因此设置一个错误率阈值
,这个阈值比较小就可以减小RD损失,当这个阈值比较大就可以增大时间节省。
由于要提前知晓划分深度和最终决策的相关性的先验知识,每当场景变换时前5帧不进行快速算法。这样就确保了大多数帧能够被加速,同时模型还可以不断更新。
改进的PU划分剪枝算法
AV1中已经有一些基于RD成本对PU划分进行剪枝的快速算法,本文提出了一种基于划分程度的PU划分快速算法。我们将非方形划分方式基于划分程度分成3类,水平和竖直一刀被分到类别1,水平AB和竖直AB被分成类别2,水平4和竖直4倍分成类别3。
对于类别1和类别2,之前已经分析过当子CU的划分程度很大时将两个子CU结合成一个矩形PU的可能性很小。表1记录了划分程度小于2的位于PU中两个子CU没有进一步分裂的概率,可以看出平均概率超过了94.3%。
如果最优的划分模式属于类别3,最直接假设就是子CU硬要有一个具有方向特点的划分,我们定义的划分程度并不能区分方向,因此我们定义水平和垂直两个方向的划分划分程度和
。在实验中我们发现,当
时,选择水平四划分的概率降低至12.7%,相同的,当
时,选择竖直4划分的概率降低至10.7%。因此水平和竖直上的划分程度可以用来跳过水平4和竖直4的决策过程。1.25就成为了禁止掉水平和竖直4模式划分的阈值。
总的工作流程图如图5所示。每个深度的划分决策的后验概率分布从中深度检查的框架中得到。每个深度的阈值就可以在未来的决策过程中被用来加速。
实验结果
AV1的通测条件如表2所示,QP值跟VVC相同。不同错误率阈值的结果如表3和表4所示。