音视频之H.265/HEVC率失真优化
H.265/HEVC系列文章:
1、音视频之H.265/HEVC编码框架及编码视频格式
2、音视频之H.265码流分析及解析
3、音视频之H.265/HEVC预测编码
4、音视频之H.265/HEVC变换编码
5、音视频之H.265/HEVC量化
6、音视频之H.265/HEVC环路后处理
7、音视频之H.265/HEVC熵编码
8、音视频之H.265/HEVC网络适配层
9、音视频之H.265/HEVC编解码并处理
10、音视频之H.265/HEVC率失真优化
为了将具有庞大数据量的视频在有限信道内传输、存储,高压缩率的编码算法往往会造成编码重建视频与原始视频存在差别,即重建视频产生失真,该类压缩被称为有损压缩。对于有损压缩算法,其性能需要根据编码输出的比特率和编码带来的失真度共同衡量。编码比特率和失真度相互制约、相互矛盾,如降低比特率往往会增加视频的失真度,相反要想获得更好的视频质量,又会提高视频的编码比特率。因此,视频编码的主要目的就是在保证一定视频质量的条件下尽量减少编码比特率,或在一定编码比特率限制条件下尽量地减小编码失真。在固定的编码框架下,为了应对不同的视频内容,往往有多种候选的编码方式,编码器的一个主要工作就是以某种策略选择最优的编码参数,以实现最优的编码性能。基于率失真理论的编码参数优化方法被称为率失真优化,率失真优化技术是保证编码器编码效率的主要手段。
一、率失真优化技术:
在系列文章7中音视频之H.265/HEVC熵编码讨论了熵编码,即无失真信源编码,它可以保证解码重建信息与编码前的原始信息完全一致。但针对视频信息,无失真编码并非必需。如传送图像时,并不需要全部精确地把图像传送到观察者,电视信号每一像素的黑白灰度级只需要分成256级,屏幕上的画面就已足够清晰悦目了。又如静止图像或视频帧中,从空间频域来看,若将高频分量丢弃,只传输或存储低频分量,数据率可以大大减少,多数图像质量仍能令人满意,这是因为人的视觉特性允许传送的图像存在一定的误差。
另外,由系列文章2中音视频之H.265/HEVC编码框架及编码视频格式可知视频的数据量极大,采用无损压缩仍然无法满足通常的信道带宽限制。因此,需要采用量化等手段进一步提高压缩率,这也会导致解码重建信息与编码前的原始信息不一致,产生失真。只使用压缩率无法衡量有损压缩算法的性能,需要同时考虑重建信息的质量和压缩率。
在允许一定程度失真的条件下,能够把信源信息压缩到什么程度,即最少需要多少比特数才能描述信源。针对这个问题,香农在1959年发表了“保真度准则下的离散信源编码定理”,定义了信息率失真函数R(D),并论述了其相关基本定理。之后逐渐受到了人们的重视,Berger的著作比较系统、完整地给出了一般信源的信息率失真函数及其定理证明。
1、互信息量:
设有两个离散的符号消息集合X和Y,X是信源发出的符号集合,Y是信宿收到的符号集合。接收者事先不知道信源发出的是哪一个符号消息,信源发送每个符号消息是一个随机事件。信源发出符号通过信道传递给信宿,如图11.1所示,信源发出的消息称为信道输入消息,信宿收到的消息称为信道输出消息。由于信道噪声,信道输入消息与信道输出消息不一定相同。
通常信源集合X包含的各个符号消息X={}及它们的概率分布
已知,也就是预先知道信源集合X的概率空间。即
其中为集合X中各个符号消息的取值,概率
为符号
消息出现的先验概率。
信宿收到的符号消息集合了的概率空间可以表示为
其中,为集合Y中各个消息的取值,概率
为符号消息
出现的概率。当信宿收到集合中的一个符号消息
后,接收者重新估计关于信源各个消息发生的概率就为条件概率
,这种条件概率又被称后验概率。
对于两个离散随机事件集X和Y,事件为的出现给出的关于事件
的信息量定义为互信息量
。其定义式为:
即互信息量定义为后验概率与先验概率比值的对数。互信息量的单位与自信息量一样取决于对数的底。由式(11-1)又可得 :
即互信息量等于自信息量减去条件自信息量。或者说,互信息量是一种消除的不确定性的度量,亦即互信息量等于先验的不确定性减去尚存在的不确定性。互信息量可取正值,也可取负值。如果互信息
取负值,说明信宿在未收到消息
以前对消息
是否出现的猜测的难易程度较小,但由于噪声的存在,接收到消息
后,反而使信宿对消息是否出现的猜测难易程度增加了。也就是,信宿接收到消息万后对出现的不确定性反而增加,所以获得的信息量为负值。
为了从整体上表示从一个随机变量Y所给出关于另一个随机变量X的信息量,定义互信息在X和Y的联合概率空间中的统计平均值为随机变量X和了间的平均互信息量。
2、失真度:
图11.3给出了一个通信系统的框图,由于率失真理论只涉及信源编码问题,所以可以将信道编码和译码看成信道的一部分,把信道编码、信道、信道译码这3部分看成一个没有任何干扰的广义信道。从直观感觉可知,若允许失真越大,信息传输速率可越小;若允许失真越小,则信息传输速率越大。所以信息传输速率与信源编码所引起的失真是相关的,并且信宿收到消息的失真只是由信源编码引起的,讨论信息传输速率和失真的关系可以略去广义的无扰信道。另外可以用虚拟手法拿信道来表示失真信源编码的作用,把信源编码和信源译码等价成一个信道,由于是失真编码,所以信道不是一一对应的,用信道传递概率来描述编译码前后关系,简化的通信系统如图11.4所示。
失真函数可有多种形式,但应尽可能符合信宿的主观特性,如人们的实际需要、失真引起的损失、风险大小等。常用的失真函数如下。
- 平方失真:
- 绝对失真:
- 相对失真:
- 误码失真:
式中,x——信源输出消息;
y——信宿收到消息。
前3种失真函数适用于连续信源,后一种适用于离散信源。均方失真和绝对失真只与(x-y)有关,数学处理上比较方便,且与主观特性比较匹配。不同的信源可以根据实际需求,选择合适的失真函数。
由于X和Y都是随机变量,故单个符号失真度也是随机变量。显然,规定了单个符号失真度
之后,传输一个符号引起的平均失真,即信源的平均失真为
它是在X和Y的联合概率空间求平均。对于不同的信源符号和不同的接收符号,产生的失真不同。但平均失真度已对信源和信道进行了统计平均,所以此值是描述某一信源在某一试验信道传输下的失真大小,是从总体上描述整个系统的失真情况。若信源符号的平均失真不大于所允许的失真D,即≤D,称为保真度准则。
可以看到,平均失真度不仅与单个符号的失真度有关,还与信源的概率分布和信道的转移概率有关。当信源和单个符号失真度固定,即P(X)和
给定时,选择不同的试验信道相当于选择不同的编码方法,所得的平均失真度
不同,在有些试验信道下
≤D,而有些试验信道下
>D。凡满足保真度准则的信道被称为D失真许可的试验信道,所有D失真许可的试验信道的集合用
表示,即
在这集合中,任一个试验信道矩阵下的平均失真度都不大于 D。
3、率失真函数:
假设信源输出的信息速率为R,在信道容量为C的信道上传输。如果R>C,就需要对信源进行压缩,使压缩后信源输出的信息速率R*小于信道容量C,这一压缩过程也势必会引入失真。因此,对于这一压缩过程,总是希望在满足一定信息速率限制的情况下(如不大于信道容量C),使其引起的失真尽量小。而对于很多实际的应用,该问题等价于希望在满足一定失真的情况下,使信源必须传输给收信者的信息传输速率R尽可能小。从接收端来看,就是在满足保真度准则下,寻找再现信源消息所必需获得的最低平均信息量。
接收端获得的平均信息量可用平均互信息量来表示,这就变成了在满足保真度准则的条件下(
≤D),寻找平均互信息量
的最小值。
是所有满足保真度准则的试验信道集合,可以在失真D的限制下在试验信道集合
中寻找某一个信道
,使
取最小值。由于平均互信息量
是
的U型凸函数,所以在
集合中,极小值存在。这个最小值就是在
≤D的条件下,信源必须传输的最小平均信息量,即
这就是信息率失真函数,简称率失真函数。
注意,在研究R(D)时,引用的条件概率并没有实际信道含义,只是为了求平均互信息的最小值而引用的假想可变试验信道,实际上这些信道反映的仅是不同的信源编码方法。所以改变试验信道求平均互信息的最小值,实质上是选择一种编码方式使信息传输速率最小。
在实际应用中,研究信息率失真函数是为了在已知信源和允许失真度的条件下,使信源必须传送给信宿信息的传输速率最小,即用尽可能少的码符号尽快地传送尽可能多的消息,以提高通信的有效性,这是信源编码问题。离散信源率失真函数
的一般曲线图形如图11.5所示。由此图可知,当限定失真度等于
时,信息率失真函数(D是信息压缩所允许的最低限度。若
>
,则必有
<
,即如果信息率压缩至
<
,则最小失真度
必大于限定失真度
。所以说,信息率失真函数给出了限定失真条件下信息压缩允许的下界。
率失真函数 对于信源编码具有指导意义。然而,对于一个实际信源,计算其
函数很困难。这是因为信源符号的概率分布很难确知,而且即便知道了概率分布,求解其
也极为困难,它是一个条件极小值的求解问题。利用上述理论知识,可以得到几种典型的信源率失真函数,例如高斯信源、拉普拉斯信源等。在率失真理论中,这些典型的率失真函数常常作为给定失真条件下信息可被压缩的下界。
当信源服从参数为的拉普拉斯分布:
4、率失真信源编码定理:
对于无失真信源编码来说,每一个信源符号(或符号序列)必须对应一个码字(或码字序列),信源输出信息率不能减少。而在允许一定失真的情况下,信源输出信息率最少可减少到信息率失真函数,有可能是多个信源符号(或符号序列)对应一个码字(或码字序列)。率失真信源编码定理就是关于信息率和失真关系的一个极限定理,也称香农第三定理,即保真度准则下的离散信源编码定理。
定理11.1 保真度准测下信源编码定理:
设是离散无记忆平稳信源的信息率失真函数,并且有有限的失真测度。对于任意的允许失真度
≥0和任意小的正数
> 0,
> 0,当信源序列长度1足够长时,一定存在一种信源编码
,其码字个数为
而编码后码的平均失真度
定理告诉我们:对于任何失真度 > 0,只要码长
足够长,总可以找到一种编码
,使编码后每个信源符号的信息传输速率
即
而码的平均失真度。即在允许失真
的条件下,信源可达到的最小传输速率是信源的
。
定理11.2保真度准测下信源编码逆定理:
不存在平均失真度为 ,而平均信息传输率
的任何信源码。亦即对任意码长为
的信源码
,若码字个数
,一定有
,逆定理告诉我们:如果编码后平均每个信源符号的信息传输速率
小于信息率失真函数
,就不能在保真度准则下再现信源的消息。
保真度准则下的信源编码及其逆定理在实际通信理论中有着重要的意义。这两个定理证实了在允许失真确定后,总存在一种编码方法,使编码后的信息传输速率
大于
且可任意接近于
,而平均失真度小于允许失真
。反之,若
,那么编码后的平均失真度将大于
。如果用二进制符号来进行编码的话,在允许一定量失真
的情况下,平均每个信源符号所需二进制码符号的下限值就是
。可见,从香农第三定理可知,
确实是允许失真度为
的情况下信源信息压缩的下限值。比较香农第一定理和第三定理可知,当信源给定后,无失真信源压缩的极限值是信源熵
;而有失真信源压缩的极限值是信息率失真函数
。在给定某
后,一般
。香农第三定理是有失真信源压缩的理论基础。
香农第三定理只是一个最优编码方法的存在定理,对于复杂信源的有损编码实际中还存在大量的问题。
实际信源的函数的计算相当困难。第一,需要对实际信源的统计特性有确切的数学描述。第二,需要对符合主客观实际的失真给予正确的度量,否则不能求出符合主客观实际的
函数。例如,通常采用均方误差来表示信源的平均失真度,但对于视频信源来说,均方误差与人眼主观失真感受不一致,如何定义符合主观感受的失真测度非常困难。第三,即便对实际信源有了确切的数学描述,又有符合主观感受的失真测度,率失真函数
的计算是一个条件极小值的求解问题,复杂信源往往无法得到具体的率失真函数。即便求得了符合实际的信息率失真函数,如何寻找最佳压缩编码方法才能达到
。目前,对于视频编码通常采用统一的编码框架,如基于块的混合编码框架,率失真优化是指从有限多种候选编码参数中选择最优编码参数。
二、视频编码中的率失真优化:
视频压缩的目标为在保证视频质量的前提下尽量降低视频流的压缩码率。但编码输出的码率和压缩后的失真度这两者之间的关系是相互制约和矛盾的。低码率更适应于网络传输带宽需求,但会加大视频的失真度。相反,想要获得更好的视频重构质量必然会提高传输的码率。如何在视频质量和压缩码率之间取得好的平衡无疑是一个必须解决的问题。
1、视频失真测度:
准确度量视频的失真是权衡编码性能的先决条件。一般来说,视频的客观失真测度应与人类视觉系统的感知失真一致。主观评价方法是由观看者根据主观感受来给出视频质量的整体好坏,这种评价结果必然符合人的视觉感受。但其耗时耗力,无法用数学模型描述,不能直接用于度量视频编码中的失真,而且主观评价易受主观因素影响。
近期客观质量评估模型一直是视频领域的研究热点,但由于人们对人眼的视觉和认知机制仍不清楚,使用已有的客观评估方法得到的视频质量仍与主观体验质量一致性较差。在实际应用中常常采用平方误差和(SSE)、均方误差(MSE)、绝对误差和(SAD)以及峰值信噪比(PSNR)等客观评价方法来作为失真测度。
其中,和
为位于(x,y)处的原始像素值和重构像素值,MxN 为视频的空间分辨率。
2、视频率失真曲线:
码率和失真的关系可以用一条光滑的下凸单调曲线刻画,称为率失真曲线。当率失真曲线已知时,对于给定的失真限制D*,在率失真曲线上可以直接得到最小速率R(D*),如图11.5所示。在实际编码系统中,通常对系统的编码复杂度、延时和内存等都有一定的要求,因此实际系统的最优性能并不能达到率失真曲线定义的理论值。能够满足约束条件的最优编码方案所能达到的最好性能是实际编码系统的最优性能,高效视频编码的任务就是找到更靠近实际率失真曲线的压缩方法。
对于一个特定的视频编码系统,如H.265/HEVC 视频压缩标准,编码结构及可采用的编码技术已经确定。使用不同的编码参数可以得到不同的率失真性能,具体的编码参数包括量化参数、编码单元的分割模式、预测模式、变换模式等。使用一组特定的编码参数对视频源进行编码,就可以获得该编码参数条件下的编码速率和失真,即率失真性能,这组编码参数对应的(R,D)称为实际率失真曲线的一个可操作点。
遍历所有可行的编码参数组合就可以得到所有可操作点,由于实际编码系统中参数的取值是有限的,比如在H.265/HEVC中量化参数只有52个,得到的可操作点的数量也是有限的,如图11.6所示。对于任意给定的速率限制R*,总可以找到一个D最小的可操作点,该操作点就是满足速率限制R*下的最优可操作点,相应的编码参数则为最优的编码参数。遍历速率限制R*,就可以得到一组最优的可操作点,这些最优可操作点的连线称为可操作率失真曲线,如图11.6所示。该曲线反映的是系统实际可达到的性能,其下边界也就是可操作率失真曲线的凸包络定义的系统最优的率失真性能。在给定码率约束的条件下,最小失真的可操作点出现在凸包络上,可操作点越靠近率失真曲线的凸包络,它的率失真性能就越好。率失真优化的目的就是找到一组编码参数使得对应的可操作点尽可能接近凸包络,也就是在一组可能的操作点中确定能使系统性能最优的操作点。
3、视频编码率失真优化:
不同的编码参数可以得到不同的率失真性能,最优的编码方案就是在编码系统定义的所有编码参数中使用能够使系统性能最优的参数值,视频编码系统中的率失真优化就是基于率失真优化理论选择最优的编码参数。对于一个典型的基于混合编码框架的视频编码系统,有大量编码参数,包括预测模式、运动估计、量化、编码模式等,且每个参数都有多个候选值,如在H.265/HEVC 中帧内预测模式包括33种角度模式、DC模式和 Planar 模式。
对需要编码的视频序列,遍历所有的参数候选模式对视频进行编码,满足码率限制的失真最小的一组参数集即为最优的视频编码参数。将一个视频序列作为编码单元,遍历大量的参数组合需要极大的计算量,实际的视频编码中无法使用这类穷举搜索方法。视频编码过程往往将视频序列分为多个较小的子任务,分别为每个子任务确定最优的参数集。这里的子任务可以是编码一个CU、一幅图像或一个GOP。假设编码中共包含N个子任务,第i个子任务有M种不同的参数组合,其对应M个可操作点,即码率和失真
,
=1,2,…,M,则确定最优参数集的过程等价于最小化所有子任务的失真和:
值得注意的是,这里假设失真,具有可加性,实际的视频质量在空时域都不是加性的,但由于目前视频编码中常用的质量测度MSE是加性的,后续内容仍使用这一加性假设。另外,实际视频编码系统中子任务之间的可操作点有一定的相关性,这就导致当前子任务的参数选择结果会影响下一个子任务参数选择的结果。如图像编码单元使用帧间预测时,参考图像选择不同的编码参数会影响当前图像的编码性能。
关于上述的限定性优化问题,它的求解方法通常有动态规划法(Dynamic Programming)和拉格朗日优化法。拉格朗日优化方法是视频率失真优化中最常见和最有力的优化工具,它是由H.Everett在1963年提出的,在1988年首次被应用在信源编码中,接着被用于树裁剪和熵受限的资源分配问题中,之后拉格朗日优化方法得到了广泛应用。假设S表示变量B的有限,B的目标函数和限定函数分别是D(B)和R(B)。则约束性优化问题可以描述为在给定一个限定码率R下,寻找最优的 B,使得
根据上述理论,在给定非负数的下,最优解
可以通过式(11-5)获取。不同的
则对应不同的限定码率
。但在约束性优化问题中常常是先给定
。而不是,因此应该在进行优化之前就确定出
。那么,如何得到合适的入来在给定限定码率
下确定最优解
。一种途径是根据经验选择合适的
,如采用二分法搜索算法尝试不同的
取值,最终得到满足限定码率
的
。视频编码中的取值与量化参数有较固定的函数关系,已有的速率控制往往首先根据限定码率预测编码单元的量化参数,然后利用量化参数与之间的映射关系确定出合适的入。最近直接根据限定码率
计算的方法被提出,并应用到H.265/HEVC的速率控制算法中,即直接根据限定码率预测出
的取值。
动态规划法通过构造网格来代表所有可能的解,网格的每一个阶段代表每一个子任务的输入,每一个状态都表示每一组参数集对应的累积失真和码率,如图11.8所示。在编码中,查看每一个阶段上所有状态的累积失真和码率,删除那些率失真性能较差的路径,最终得到一条失真最小的路径作为最优路径,该路径上的参数集作为最优的编码模式。该算法可以求解可操作率失真曲线上的任何点,而不受率失真曲线凸包络的限制。动态规划法适用于编码单元的率失真性能相互依赖的情况,然而其复杂度随着网格数的增加而递增,这使得动态规划法在实际编码系统中难以得到应用。
三、H.265/HEVC编码器中的率失真优化方法:
率失真优化技术在视频编码中扮演了重要的角色,使用其选择最优的编码参数是保证视频编码效率的关键。但值得注意的是,率失真优化技术不属于视频编码标准化的范畴,编码器可以使用不同的优化方法选择编码参数。不过,为了追求高编码效率,率失真优化方法是最主要的编码参数选择优化技术。与以往的编码标准相比,H.265/HEVC采用了更先进的编码算法和多种高效的编码工具,因此编码过程也面临着更多的编码参数选择。针对H.265/HEVC标准,
接下来首先从理论的角度讨论拉格朗日率失真优化方法在图像组层、片层、CTU层、CU层和PU层如何应用,继而从实现的角度介绍H.265/HEVC参考模型HM中确定最优编码参数的具体过程。由于主要编码参数属于CTU及其以下层,接下来的内容只关注CTU及其以下层编码单元编码参数的优化过程。
1、视频图像组的率失真优化:
时域预测允许使用其他图像组(GOP)的图像,图像组已经不是完全独立的编码单元。但是简单起见,本节讨论的图像组仍看成相互独立编码,但后续的优化方法仍然适用于现有标准的编码结构。不同图像组的编码过程相互独立,不同图像组间的编码参数及率失真性能互不影响,因此不同图像组可以独立优化编码参数。一个图像组包含多幅图像,时域预测技术把当前编码图像与参考图像关联起来,图11.9给出了一个低时延编码结构。可以看到第1幅图像作为后续多图像的参考图像,这就使得这些图像的率失真性能相互依赖。因此,图像组率失真优化过程需要考虑图像之间的依赖关系。
对于给定的图像组,视频编码的率失真优化是在满足该图像组编码比特数(目标比特数)限制下获取一组最佳的编码参数集,使用该参数集可以获得最优的重建视频质量。
其中,N为图像组包含的图像数,和
分别表示第
幅图像采用第
组编码参数所产生的失真和比特数,
为目标比特数。假设对每一幅图像,可以选择M个编码参数集中的任一组,那么对于一个含有幅图像的图像组,一共有
组选择。为了获得最优的编码参数,应该计算使用每一组编码参数时的比特数和失真,从中选择出满足目标比特数条件下失真最小的那一组编码参数作为图像组的最优编码参数。这种穷举算法的计算复杂度极高,在实际视频编码中无法应用。
根据"视频编码中率失真优化"的方法,可以将这一约束问题,通过拉格朗日优化方法转化为一个等价的无约束问题:
如果图像间的编码比特数和失真互不相关,可以通过最小化每一幅图像的率失真代价分别确定图像的最优编码参数。
其中,的值是获得优化参数的关键,其值由总目标码率
决定的。
在实际视频编码中,如H.265/HEVC 标准使用了帧间预测技术,包括运动估计补偿、运动矢量预测等。这种帧间预测技术使得不同图像的编码比特数和失真具有相互依赖的关系,即不同图像的率失真性能相互依赖,式(11-7)中率失真代价的计算应考虑图像间的依赖关系。下面将针对如图11.9所示的低时延编码结构,分析图像组的率失真优化技术。
式(11-7)中和
分别表示第
幅图像的编码失真和比特数。由于当前图像会使用前面已编码图像作为参考,因此当前图像的失真
不但与其编码比特数
相关,也与已编码的重构图像质量相关,即
因此,图像组率失真优化可以通过依次独立确定每幅图像的最优编码参数来实现,每一幅图像通过值来反映其与后续图像率失真性能的依赖关系。
主要与视频的内容特性和总的目标比特数相关,可以通过实验方法获取。
需要强调的是,以上分析中失真以图像为单位,假设图像的率失真性能有稳定的依赖关系。实际图像不同空间区域的内容不同,导致不同区域的率失真性能与其他区域的依赖关系也不同。因此,该优化方法推广到CTU 级可以获得更优的编码性能。
2、片层的率失真优化:
在H.265/HEVC标准中,片(Slice)是相对独立的编码单元,如编码、帧内预测、运动矢量预测等关键编码模块都不使用当前图像其他片的信息,只是在片边界进行环路滤波时可能会使用相邻片的信息。一个片包含整数个CTU编码单元,其编码参数的率失真优化问题可描述为
其中,N为片包含的CTU数,和
,分别表示第
个CTU采用第i组编码参数所带来的失真和码率,
为片的目标码率。
同理,可以将这一约束问题,通过拉格朗日优化方法转化为一个等价的无约束问题:
如果Slice 中不同CTU的码率和失真互不相关,可以通过最小化每个CTU的率失真代价分别确定CTU的最优编码参数:
其中,的值是获得优化参数的关键,其值由Slice总目标码率
决定
然而,空域预测技术使CTU间的率失真性能相互影响,如内预测使用相邻CTU的重建像素值,运动矢量预测使用相邻CTU的运动矢量。这种空域预测关系复杂多变,CTU间率失真性能的相互关系更难描述,片层的率失真优化的关键是明晰CTU间率失真性能的关系。目前率失真优化中CTU间率失真性能的相关性还未被考虑,通常按CTU具有独立的率失真性能进行优化。
3、CTU层率失真优化:
CTU是H.265/HEVC的基本编码单元,每一个CTU可以被划分为不同的编码单元 CU,每个CU 可以使用不同的PU 模式和 TU 模式,每个PU 又可以选择不同的预测模式。因此,可以把CTU编码参数的优化过程分成:CTU层主要选择不同的CU分式、CU层主要选择不同的PU 模式和 TU 模式、PU 层主要选择不同的预测模式。
每一个CTU 以四叉树的形式可以被划分为不同的编码单元CU,包括64x64、32x32、16x16和8x8,具体的CU划分模式是 CTU的关键编码参数。CTU层的率失真优化的目的是确定最优的CU划分模式,也称CU 模式选择。CTU层的CU模式选择的率失真优化问题可以描述为:在总比特数R受限的情况下,选择一个CU划分模式,使得一个CTU的总失真 D最小。
其中,为CTU的限定码率,
和
分别表示一种CU模式组合中第
个CU采用第
组编码参数所带来的失真和码率。将该约束问题使用拉格朗日优化法转化为无约束问题:
对每一个CU划分模式,按编码顺序对每个CU进行编码,并选取最优CU的编码参数,按式(11-11)求该划分模式中所有CU代价和,代价最小的划分模式则为最优划分模式。
不同的划分模式中,一个CU可能使用其他CU的重建像素值(如帧内预测)或编码参数(如运动矢量预测),这将导致不同划分模式会形成CU间不同的依赖关系。为了降低计算复杂度,实际优化过程往往按顺序对CTU进行四叉树递归分割,当前CU编码参数的优化过程不考虑对后续CU率失真性能的影响。
4、CU层率失真优化:
在H.265/HEVC中,每个CU可以采用不同的PU划分,不同的PU又包含着不同的预测模式,PU划分和预测模式的组合称为CU层的PU模式。如P-Slice或B-Slice下的CU层可选PU模式有SKIP模式、帧内PART_2Nx2N、帧内PART_NxN、PCM、帧间PART_2Nx2N、帧间PART_NxN、帧间PART_2NxN、帧间PART_Nx2N、帧间 PART_2NxnU、帧间PART_2NxnD、帧间PART_nLx2N和帧间PART_nRx2N。
经过预测后的残差信息还需要进行变换,H.265/HEVC 中允许采用不同大小的变换单元 TU,TU 的大小有 32x32、16x16、8x8和4x4。以CU为单位采用基于四叉树的结构进行TU划分,形成了多种TU组合,称为CU 层的 TU 模式。CU 层不同的 PU 模式和 TU 模式又形成了大量的组合每一种组合都是CU的一种候选模式。
CU层率失真优化的目的是确定最优的PU模式和TU模式,可以描述为:在总比特数R受限的情况下,适当的选择一个PU模式和 TU 模式,使得一个CU的总失真D最小:
在可选的候选集中,遍历每种 PU模式和TU模式,计算出相应的编码比特数和压缩失真,以及各个模式的率失真代价,可以确定出CU层的最优编码模式。同理,对于一个具体的PU模式,不同PU的率失真性能相互依赖。为了降低计算复杂度,实际优化过程常按顺序确定所有PU的编码参数,当前PU编码参数的优化过程不考虑对后续PU率失真性能的影响。另外,TU 模式会影响PU编码参数的选取,而往往为了降低计算复杂度,只对最优的PU 模式尝试不同的TU模式。
5、PU层率失真优化:
预测单元PU的主要模式可分为两类:内预测模式和帧间预测式。PU层率失真优化的目的是为PU选择最优的预测模式及预测参数。
帧内预测是利用当前图像已编码的像素对当前编码块进行预测,H.265/HEVC 提供了35 种帧内预测模式,包括33种角度模式、DC模式和 Planar 模式。帧内预测就是从35种帧内预测模式中选择出一种最优的预测模式,可以采用基于拉格朗日的率失真优化方法:
其中,D(Mode)、R(Mode)分别表示采用不同内预测模式时的失真和比特数, 为拉格朗日因子,最优的预测模式为率失真代价最小的模式。
帧间预测是利用已编码其他图像的像素预测当前编码块,H.265/HEVC 除了允许使用不同的运动矢量、多个参考图像,还增加了Merge、AMVP等新技术。因此,间预测模式需要结合Merge、AMVP等技术,为每个 PU选择运动矢量、参考图像、预测权值等编码参数。可以采用基于拉格朗日的率失真优化方法
其中,D(Motion)、R(Motion)分别表示采用不同运动模式(包括运动矢量、参考图像、预测权值等)时的失真和比特数,为拉格朗日因子,最优的预测模式为率失真代价最小的运动模式。
对于一个采用帧间预测的PU,包含大量的运动模式,计算每种运动模式下的D(Motion)和R(Motion)都需要使用该运动模式进行编码,计算复杂度极高。因此,通常可以简化式(11-14)为
其中,DFD(Motion)为采用不同运动模式时运动补偿预测误差,Rwv(Motion)为运动矢量相关信息(运动量、参考图像索引、参考队列索引等)的编码比特数,为拉格朗日因子。
6、编码参考模型HM中的率失真优化方法:
目前实际的视频编码率失真优化过程包括两部分:速率控制部分将视频序列分成编码单元,考虑编码单元的相关性通过码率分配技术确定每个编码单元目标码率,根据目标码率独立确定关键编码参数--量化参数;利用拉格朗日优化确定每个编码单元的其他编码参数(除量化参数)。本节的率失真优化内容主要包括量化参数外其他编码参数的确定方法。本节主要介绍H.265/HEVC参考模型HM10.0中使用的确定CTU编码参数的率失真优化方法。
CTU优化方法:
H.265/HEVC参考模型HM采用拉格朗日优化方法为每个CTU确定除量化参数外的编码参数,主要包括CU划分模式、CU的PU模式和TU模式、PU的预测参数等。一个CTU包含大量的编码参数组合,其采用分级的方式确定不同层的编码参数,主要步骤如下。
- 遍历所有的CU 划分模式进行编码,按式(11-11)确定最优的CU 划分模式。
- 对其中的每个CU,遍历所有的PU模式和TU模式组合,按式(11-12)确定最优的 PU 模式和 TU 模式。
- 对其中的每个PU,遍历所有的预测模式,按式(11-13)或式(11-14)确定最优的预测模式。
计算每个编码参数组合的率失真代价都需要采用这组编码参数对CTU 进行编码,这会导致计算复杂度非常高。为了降低计算复杂度,可以根据不同的编码参数采用不同的简化方法,如式(11-15)中的失真为运动补偿预测误差,可以为
其中,表示编码单元经过运动补偿后预测误差位于
处的值。
另外,采用Hadamard 变换代替实际的DCT(DST)也可以有效降低计算复杂度,且其率失真性能与使用DCT(或DST)相近。
由关键优化公式(11-11)、公式(11-12)、公式(11-13)、公式(11-15)可以看到,拉格朗日因子是采用拉格朗日优化方法确定编码参数的关键。速率控制已经为每个CTU确定了量化参数,然后可以根据拉格朗日因子与量化参数的关系进一步确定拉格朗日因子。HM中使用了两个拉格朗日因子:式(11-11)、式(11-12)、式(11-13)中的,式(11-14)中的
,具体为
其中,QP为量化参数,表示加权因子,该值由编码配置和编码图像在GOP中所处的位置决定。变量
的取值依赖于当前图像是否作为参考图像,计算方法如下:
其中,表示B参考图像个数。
以上为亮度分量的拉格朗日因子,而色差分量的拉格朗日因子计算方法为
其中,为色差分量的量化参数。
快速模式判决策略:
为了降低编码器的计算复杂度,HM采用多种快速优化方法。
- 提前终止策略(Early CU):若当前CU的最优编码模式是MODE_SKIP 模式,则终止该CU后续四叉树划分及模式判决。
- 早期跳出策略(Early SKIP):若CU的PU划分模式为PART_2Nx2N,预测模式为MODE_INTER(帧间预测),运动矢量差(MVD)为(0,0),且预测残差不包含非零的变换系数,则判定当前模式为该CU的最优编码模式,跳过其剩余候选模式,直接进行下一步的四叉树分割及子 CU 模式判决。
- 快速 CBF 策略(CBF Fast):若CU的预测模式为 MODE_INTER其对应的预测残差不包含非零的变换系数,则跳过该CU的其余候选模式判决,当前模式为该CU的最优编码模式,且直接进行下一步的四叉树分割。
- 缩减AMP模式:依据两个参数来判断是否缩减当前AMP模式。具体是利用在进行 AMP模式判决前的最优分割模式,以及父节点C内采用的分割模式和预测模式,来确定后续编码中可使用的AMP模式。
CTU编码参数优化流程:
下面将给出HM10.0中利用拉格朗日率失真优化方法确定一个CTU编码参数的过程,具体参数包括CU划分模式、CU的PU模式和TU 模式、PU的预测参数等。这一过程即为从众多候选模式集中得到一组最优模式,这也称CTU的模式判别。主要步骤如下。
- 分层递归遍历所有的CU划分模式进行编码,按式(11-11)选取率失真代价最小的划分模式确定为最优的CU划分式,这一过程称为CU 划分模式判别。
- 对其中的每个CU,遍历所有的PU 模式进行编码,按式(11-12)选取率失真代价最小的PU模式作为最优的PU模式,这一过程称为PU模式判别。并在此基础上,选择最优的TU模式。
- 对其中的每个PU,遍历所有的预测模式,帧内预测和帧间预测分别按式(11-13)或式(11-14)选取率失真代价最小的预测模式作为最优的预测模式,这一过程被称为预测模式判别。预测模式判别可以分为帧内预测模式判别和帧间预测模式判别。
帧内预测模式判别:
每个PU的候选帧内预测模式包括33种角度模式、DC模式和Planar模式。帧内预测模式判别的目的是为PU从候选模式中选取最优的预测模式。一个PU的亮度块的最优帧内预测模式判别过程如下。
- 遍历所有的预测模式得到采用每种预测模式时的残差信号,再对残差信号进行Hadamard变换(代替DCT或DST)计算SATD值;
- 按式(11-13)计算每种预测模式的率失真代价,其中D(Mode,)为SATD 值、R(Mode,)为该帧内预测模式所需的编码比特数,选取率失真代价最小的几种模式(与PU大小相关)为最可能预测模式集。
- 将已编码相邻块的预测模式补充到最可能预测模式集。
- 遍历最可能预测模式集中的所有预测模式,并对残差信号进行正常编码,根据式(11-13)计算率失真代价,其中D(
)为编码失真,R(
)为表示预测模式和残差变换系数的编码比特数。
- 选取率失真代价最小的预测模式作为该PU亮度块的最优帧内预测模式。
当PU亮度块的最优帧内预测模式确定后,将该预测模式以及DC模式、Planar 模式、水平方向模式、垂直模式作为色度块的候选模式,按步骤4、5确定色度块的最优帧内预测模式。
帧间预测模式判别:
帧间预测模式判别是指为PU选择最优的间预测参数,主要参数包括参考图像列表、参考图像索引、运动矢量和加权值等。由于 H.265/HEVC采用了Merge和AMVP技术,可以更高效地表示帧间预测参数,且这两种方式有较大区别。因此,帧间预测模式又可以分为Merge帧间预测模式和非Merge帧间预测模式(采用AMVP技术),分别选取最优 Merge 帧间预测模式和非 Merge 帧间预测模式,然后从这两种最优模式中选择率失真代价最小的模式作为最终的候选模式。
对于 Merge 帧间预测模式,遍历Merge 候选集中的候选模式,根据式(11-14)计算每种模式的率失真代价,其中D(Motion)为SATDR(Motion)为Merge索引的编码比特数。选择率失真代价最小的模式为最优 Merge帧间预测模式。当采用Merge 帧间预测模式编码,且预测残差信号的编码比特数为零时,只需要编码skip标识和Merge 索引两个语法元素,这时该模式称为MODE_SKIP模式。
对于非 Merge 帧间预测模式,需要搜索不同的运动参数组合,根据式(11-15)计算每种模式的率失真代价,选择率失真代价最小的模式为最优非 Merge 帧间预测模式。运动参数包括参考图像索引、MVP索引、运动矢量差值、加权值等,搜索过程为在每个参考图像中考虑AMVP技术获取最优运动预测块。HM10.0中的在一个参考图像中的运动预测过程如下。
- 根据AMVP技术确定MVP列表,计算每个候选 MVP的率失真代价,得到最优 MVP。
- 以最优 MVP为起始点,进行整像素运动预测,得到最优的整像素运动矢量。
- 以整像素的运动矢量为中心,进行半像素搜索,从周围的8个点中确定最优的半像素精度运动矢量。
- 以最优半像素精度运动矢量为中心,进行1/4像素精度的运动搜索,确定最优的1/4像素精度运动矢量。
PU模式判别:
PU模式判别就是遍历所有的PU模式进行编码,确定最优的P模式。HM10.0中的PU模式判别过程如图11.10所示,具体步如下。
CU划分模式判别:
CU划分模式判别就是遍历所有的CU分式,确定率失真代价最小的划分为最优 CU划分模式。具体步骤如下。
- 将CTU作为CU,计算其最小率失真代价(最优PU式时),此时应包含CU分割标识(spit_flag)的编码比特数。
- 对CU进行四叉树划分,计算每个子CU的最小率失真代价,并对该CU内所有子CU的最小率失真代价求和,得到该CU的率失真代价。
- 为每个子 CU 作为 CU 重复步骤2。
- 重复步骤3直到最大编码深度。
- 从最大编码深度,比较4个子CU与CU的率失真代价,依次确定出最优的划分方式。
对于每个CU,如果其帧间PART 2NX2N模式为MODESKIP,则满足Early_SKIP条件,直接结束该CU的进一步划分。
参考资料:
《新一代高效视频编码 H.265/HEVC 原理、标准与实现》——万帅 杨付正 编著