目录
- 摘要
- 1.前言
- 2.编码器框架
- 3.增强RD模型
- 3.1 头部比特的速率模型
- 3.2 源比特的码率模型
- 3.3 失真模型
- 3.4 块类型的确定
- 4.面向H264 Baseline Profile的码率控制算法
- 5.实验结果
- 6.结论和未来工作
《Rate Control for H.264 Video With Enhanced Rate and Distortion Models》
Author: Do-Kyoung Kwon; Mei-Yin Shen; C.-C. Jay Kuo
Published in: IEEE Transactions on Circuits and Systems for Video Technology ( Volume: 17, Issue: 5, May 2007)
Page(s): 517 - 529
Date of Publication: 30 April 2007
ISSN Information:
Print ISSN: 1051-8215
Electronic ISSN: 1558-2205
DOI: 10.1109/TCSVT.2007.894053
Publisher: IEEE
摘要
这项工作提出了一种新的H.264视频编码的速率控制方案,该方案增强了速率和失真模型。与现有的H.264速率控制方案相比,我们的方案提供了几个新特性。首先,通过量化参数估计和更新,解决了H.264中速率失真优化(RDO)和速率控制之间的相互依赖性。其次,由于头部信息的比特可能占据总比特预算的较大部分,特别是在低比特率编码时,这一点尤其正确,因此开发了一个用于头部信息的速率模型,以更准确地估计头部比特。头部比特的数量被建模为非零运动向量(MV)元素数量和MV数量的函数。第三,提出了一个新的源速率模型和一个失真模型。为此,识别了编码的4x4块,并将源比特数和失真建模为量化步长和编码的4x4块复杂性的函数。最后,提出了一个在宏块(MBs)之间的R-D优化的比特分配方案,以提高图像质量。基于上述思想,为H.264基线配置编码器在恒定比特率约束下开发了一个速率控制算法。实验结果表明,新算法能够准确控制比特率,并且其R-D性能显著优于H.264软件编码器JM8.1a中实现的速率控制算法。
1.前言
在视频编码器的实现中,需要确定几个编码参数,如宏块(MB)模式、量化参数(QP)、帧类型和帧率。尽管这些参数的选择在标准中没有具体规定,但它们很重要,因为它们的值对结果编码器的性能有很大的影响。此外,QP还有另一个重要性,它可以调节编码比特流。QP可以有效地用来控制比特流,使得在不违反信道速率、编码器/解码器缓冲区大小和恒定端到端延迟所施加的约束的情况下,编码效率最大化。其他编码参数也应该被选择以保证不违反这些约束。这意味着它们应该与QP一起优化。例如,[1]和[2]中研究了联合MB模式和QP决策的方法。[3]到[5]中分别研究了与QP决策一起的帧类型和帧率选择算法。由于其在视频编码中的重要性,速率控制已经在各种视频编码标准下的各种应用中得到了广泛的研究[6]-[14]。
H.264视频标准最近因其出色的编码性能而受到广泛关注,这一性能超越了以前的标准。在采用的几种新编码技术中,被称为RDO的速率失真(R-D)优化运动估计和模式决策,以及各种内部和预测模式和多个参考帧,对H.264的高编码效率做出了重要贡献[15],[16]。相比之下,这些特性使得H.264的速率控制变得更加复杂。例如,在将基于模型的速率控制方法应用于H.264编码器时,需要残差信息,如平均绝对差(MAD)或方差,来确定适当的QP。然而,残差信息只有在使用预定的QP生成它的RDO过程之后才可用。这种RDO和速率控制之间的相互依赖性,在[17]中被描述为“先有鸡还是先有蛋”的困境,使得H.264的速率控制比以前的标准更具挑战性。
RDO和速率控制之间的相互依赖性导致了两个问题。首先,在RDO过程的模式选择之前,残差信号及其相关信息是不可用的,因此很难估计源比特数和相应的失真。其次,MB模式、运动向量(MVs)和参考帧等头部信息在RDO过程之前也是不可用的。这使得头部比特数难以估计。大多数先前的工作[17]-[22]试图仅通过检查残差信号的MAD或方差来解决RDO和速率控制之间的相互依赖性。然而,这种方法可能不够准确。由于H.264允许多种编码模式,与头部信息相关的比特数在帧与帧之间变化很大。有时,它们甚至可能占据总比特预算中比源比特更大的部分。在低比特率下,头部比特的影响更为明显。因此,准确估计头部比特对H.264速率控制至关重要。
针对H.264,已经提出了几种基于模型的速率控制算法。在[17]中,采用了[23]中提出的二次速率模型来确定基本单元的QP,这个基本单元可以是一帧、一个切片或一个宏块(MB)。由于在RDO过程之前残差信号不可用,所以通过使用线性模型,根据前一帧中相应基本单元的MAD来估计当前帧中每个基本单元的MAD。[19]中使用了相同的二次速率模型和线性MAD估计模型。然而,为了提高[17]的性能,开发了一种新的复杂度度量方法,该方法使用MAD比率和PSNR下降比率来改进比特分配。
在[18]中,采用了[10]中提出的H.263 TMN8速率和失真模型。首先,通过使用减少的参考帧集合、内部和预测模式执行RDO过程,来估计每帧的残差信号。之后,将估计的残差信号的标准差输入到H.263 TMN8速率和失真模型中,以细化每个MB的QP。然后,使用细化的QP再次执行RDO过程。其他H.264速率控制算法,例如[20]和[21],也是按照类似的想法开发的。值得指出的是,上述方法中没有一个解决了头部比特的重要性。此外,它们中的大多数对于由具有可变特性的帧组成的视频工作得不好,因为在这种情况下,由于对残差信号复杂度的估计不准确,速率控制性能会下降。
针对上述缺点,我们提出了一个增强的H.264视频速率控制方案,具有一些新特性。首先,通过在RDO过程和量化过程中分别允许不同的QP值,解决了RDO和速率控制之间的相互依赖性。只要这些QP值彼此接近,我们就能得到一个很好的近似值。其次,为了解决头部比特重要性的增加,建立了一个头部速率模型,以便更准确地估计头部比特。具体来说,头部比特的数量被建模为非零运动向量(MV)元素数量和MV数量的函数。第三,提出了一个新的源速率模型和失真模型。为此,识别了编码的4x4块,并将源比特数和失真建模为量化步长和编码的4x4块复杂性的函数。最后,提出了一个在宏块(MBs)之间的R-D优化的比特分配方案,以提高图像质量。基于上述思想,为H.264基线配置编码器在恒定比特率(CBR)约束下开发了一个速率控制算法。实验结果表明,新算法能够准确控制比特率,并且其R-D性能显著优于H.264软件编码器JM8.1a中实现的速率控制算法。
本文的其余部分安排如下。第二节提出了所提出的编码器结构概述,其中通过QP估计和更新解耦了H.264中RDO和速率控制之间的相互依赖性。第三节描述了改进的速率和失真模型,而第四节介绍了H.264基线配置编码器的恒定比特率控制算法。第五节提供了实验结果。最后,第六节得出了结论性意见。
Comments:
(1)蛋鸡悖论问题描述的是RDO和码率控制之间互相依赖的关系,具体的联系是QP。RDO根据给定的QP,从众多模式中选择一个最佳模式,根据这个最佳模式确定失真Distortion;但是,码率控制需要这个Distortion来确定QP。JM中的解决方案是,第一帧使用预定义QP,能够计算出当前帧的Distortion,后续的帧根据前面已编码帧的Distortion来预测当前帧的Distortion,这样就能够获得后续帧的QP值
(2)本文的作者认为H264的码率控制主要有几点问题:(a) JM中的实现方式来预测MAD不够准确,引入了一个新的编码框架,来解决RDO和RC之间的依赖关系,这解决了MAD预测不准确的问题,因为MAD预测不准确就会影响QP,而QP是RDO和RC之间具体的联系。这是一个帧级别的实现;(b) H264中的头部比特预估的不准确,提出了一个估计头部比特的模型;(c) 提出了一个新的MB级别的RDO模型
2.编码器框架
RDO和速率控制之间的相互依赖性是H.264与之前标准速率控制问题之间的主要区别。在本节中,我们提出了一个编码器结构,该结构通过使用两个QP值来解耦这种依赖性。在接下来的讨论中,我们使用QP1和QP2分别表示在RDO过程和量化过程中使用的QP值。
如果对于RDO和量化存在一个已知的QP值,即QP = QP1 = QP2,那么可以通过RDO确定最佳的参考帧集合、每个分区的MVs(运动向量)以及每个宏块(MB)的MB模式,通过最小化以下拉格朗日代价函数[24]:
其中
S
Q
P
S_{QP}
SQP表示MVs,参考帧和MB模式的集合,
λ
(
Q
P
)
\lambda(QP)
λ(QP)表示拉格朗日乘子,请注意,这里有两个拉格朗日乘数(一个用于运动估计,另一个用于模式决策),并且这两个乘数都依赖于预先确定的QP值。尽管已经提出了各种RDO方法及其低复杂度变体,例如快速运动估计和模式决策,以加快编码过程[25],[26],但所有这些算法最终都通过最小化上述方程(1)来确定MVs、参考帧和MB模式。
但是,由于RDO和码率控制之间的依赖关系,很难找到QP = QP1 = QP2这样的关系。实际上,我们从一个QP值开始,记为
Q
P
1
QP_1
QP1,用于RDO过程以确定一组运动向量(MVs)、参考帧和宏块(MB)模式。随后,基于这样的设定,我们能够确定用于码率控制中量化过程的
Q
P
2
QP_2
QP2。如果
Q
P
1
=
Q
P
2
QP_1=QP_2
QP1=QP2,这个过程就结束。如果
Q
P
1
=
Q
P
2
QP_1=QP_2
QP1=QP2,就修改
Q
P
1
(
2
)
=
Q
P
1
+
Q
P
2
2
QP_1^{(2)}=\frac{QP_1+QP_2}{2}
QP1(2)=2QP1+QP2,随后基于更新的
Q
P
1
(
2
)
QP_1^{(2)}
QP1(2),能够确定下一轮迭代中的MVs、参考帧和宏块模式,随后我们可以找到
Q
P
2
(
2
)
QP_2^{(2)}
QP2(2),用于量化。通常来讲,
Q
P
1
k
QP_1^{k}
QP1k和
Q
P
2
k
QP_2^{k}
QP2k之间的差异会随着
k
k
k的增大而增大,这种迭代可以继续进行,直到满足以下停止准则:
其中,
δ
\delta
δ是待确定的参数,由于迭代过程计算成本较高,我们期望选择合适的初始
Q
P
1
QP_1
QP1,
Q
P
2
QP_2
QP2和
δ
\delta
δ来控制复杂度,同时保证好的编码效果。
下面的两个发现为选择合适的
Q
P
1
QP_1
QP1,
Q
P
2
QP_2
QP2和
δ
\delta
δ提供了有效的指导:
(1)发现1:
为了实现平滑的视频播放,两个连续帧之间的QP变化通常被限制在一个小范围内;即
其中,
Q
P
n
QP_n
QPn和
Q
P
n
−
1
QP_{n-1}
QPn−1分别表示第
n
n
n帧和第
n
−
1
n-1
n−1帧的平均QP值。
(2)发现2:
如果
Q
P
1
QP_1
QP1和
Q
P
2
QP_2
QP2之间的差异不大,那么带来的性能减少也不会很大。
发现1经常在基于模型的速率控制算法[10]、[12]、[17]-[20]中被利用,以平滑帧与帧之间以及宏块(MBs)之间的质量变化。图1为观察2提供了证据。这张图展示了对于使用固定QP1进行RDO和变化QP2进行量化的QCIF分辨率“Foreman”视频序列,编码时使用五个参考帧的R-D(速率-失真)曲线。从图中能够看到,当
∣
Q
P
1
−
Q
P
2
∣
=
3
|QP_1 - QP_2 | = 3
∣QP1−QP2∣=3时,编码损失大约为0.2dB,如果
∣
Q
P
1
−
Q
P
2
∣
=
1
|QP_1 - QP_2 | = 1
∣QP1−QP2∣=1时,编码损失几乎忽略不计。很显然,发现2能够用于选择
δ
\delta
δ参数,请注意,我们观察到许多测试序列的结果几乎相同,而在图中仅以“Foreman”作为一个代表性的例子进行展示。
图2中展示了所提出的编码模式,共分为两个阶段。
- 第一阶段:
为了编码一个新帧,根据观察1,很自然地选择QP1作为前一帧QP2的平均值,并对当前帧的所有宏块(MBs)执行RDO,以确定残差信号和头部信息。。由于帧内预测的递归特性要求先前宏块被重建,因此所有宏块的残差信号都需要经过DCT/Q和IDCT/IQ过程以获得重建帧,这对于后续宏块的帧内预测是必需的。在整个第一阶段,仅使用QP1。 - 第二阶段:
给定帧的目标比特数,所有宏块(MBs)的QP2值由速率控制算法(将在第三节和第四节讨论)确定,并用于量化残差信号。如果一个宏块是间编码的,其残差信号简单地使用QP2进行重新量化。如果一个宏块是帧内编码的,由于其邻近像素可能与第一阶段的不同,因此需要更新残差信号。对于这种情况,残差信号使用与第一阶段编码相同的帧内模式进行更新。最终的重建帧是通过IQ/IDCT为后续宏块的帧内预测和后续帧的帧间预测获得的。输出比特流也可以像图中所示的那样通过熵编码轻松生成。在整个第二阶段,仅使用QP2。
经过上述两阶段过程后,我们可以验证QP1和QP2之间的差异。如果一个宏块(MB)的QP1和QP2之间的差异小于或等于3,则完成。如果不是,一种可能的解决方案是进行一些迭代以缩小它们之间的差距。然而,这种复杂性可能过高,不切实际。另一种解决方案是选择QP2为QP1 + 3或QP1 - 3,并接受R-D性能下降的后果。后一种解决方案在这项工作中被采用。需要注意的是,H.264编码器的高编码复杂性主要来自RDO过程。提出的两阶段编码方案只要求额外进行一次前向和逆向DCT以及一次量化过程。相对于整体H.264编码复杂性而言,额外的计算成本相对较小,这取决于RDO的复杂性、参考帧的数量等。例如,随着参考帧数量的增加,两阶段编码方案对总编码复杂性的影响进一步减小。由于残差信号和头部信息在第一阶段已经确定,除了帧内宏块的残差信号外,它们在整个编码过程中都不会改变,我们得出结论,基于第一阶段获得的信息,可以准确估计速率和失真。
在接下来的两节中,我们将重点关注在第一阶段信息的基础上,通过改进的速率控制方案来选择QP2。
Comments:
(1)本文提出了two-stage的方法来解决蛋鸡悖论的问题。在视频编码当中,RDO过程用于确定最佳的模式,RC用于确定量化参数。在RDO过程中,会使用QP来进行不同模式的变换量化、熵编码操作,根据
J
=
D
+
λ
∗
R
J=D+\lambda*R
J=D+λ∗R来确定最佳的模式;在RC过程中,会使用
t
a
r
g
e
t
B
i
t
=
c
1
∗
M
A
D
Q
S
t
e
p
+
c
2
∗
M
A
D
Q
S
t
e
p
2
targetBit = c1*\frac{MAD}{QStep}+c2*\frac{MAD}{QStep^2}
targetBit=c1∗QStepMAD+c2∗QStep2MAD,根据给定的目标比特和残差值MAD,来确定量化参数QStep。这里的蛋鸡悖论在于,RDO过程需要量化参数QStep来获取残差值,而RC过程需要残差值来计算QStep,互相依赖。
(2)JM当中的做法是,第一帧给定QP,这样会计算出第一帧的残差值,第二帧的残差值由第一帧的残差使用线性预测模型给出,随后获取第二帧的QStep,进而进行第二帧的RDO操作。
(3)本文当中的做法是,第一帧使用
Q
P
1
QP1
QP1,第二帧使用
Q
P
2
QP2
QP2,这两个QP值不同,但互相有影响。其中,
Q
P
2
QP_2
QP2属于
Q
P
1
QP_1
QP1正负3的范围之内。这样在一定程度上将RDO和RC进行了解耦。
3.增强RD模型
准确的速率和失真模型对于基于模型的速率控制算法中的速率控制性能有着重大影响。在本节中,提出了用于头部比特和源比特的增强速率模型以及一个新的失真模型。它们被用来估计在第一节提出的编码器的第一阶段获得的残差信号的速率和失真。
3.1 头部比特的速率模型
在为MPEG-1/2、H.263和MPEG-4等先前标准设计基于模型的速率控制算法时,头部中的比特数较不关键,原因有二。首先,与源比特相比,头部比特的数量较小。其次,对于相同类型的帧,头部比特的数量几乎恒定,因此可以通过之前帧的平均头部比特轻易估计。然而,对于H.264来说,情况有所不同。图3(a)展示了在不同量化参数(QP)下,使用H.264软件编码器对QCIF格式的“Foreman”视频序列进行编码时,P帧头部比特的平均百分比,其中使用了单个参考帧进行编码。当使用量化参数(QP)为35对同一视频序列进行编码时,源比特和头部比特的逐帧变化情况如图3(b)所示。请注意,运动向量(MV)比特和宏块(MB)模式比特都被包含在头部比特中。尽管编码块模式(CBP)也是一种类型的头部信息,我们将CBP比特归类为源比特,因为它们与残差比特有很强的关系。例如,如果没有残差信号需要编码,残差比特和CBP比特的数量都等于零。
如图3(a)所示,头部比特占据了总比特量的很大一部分,并且随着量化参数(QP)值的增大,头部比特的百分比也会增加。当一个视频序列以非常低的比特率进行编码时,头部比特的数量甚至可能超过源比特的数量。此外,从图3(b)中我们可以看到,头部比特的大小在帧与帧之间波动很大,这意味着头部比特不能简单地通过前几帧的平均值来估计。还观察到,随着参考帧数量的增加,头部比特的百分比也会增加。因此,很明显,头部信息对于H.264的速率控制来说,与残差信号同样重要。让
R
T
R_T
RT,
R
s
r
c
R_{src}
Rsrc和
R
h
d
r
R_{hdr}
Rhdr分别表示分配给一帧的总比特数,以及相应的源比特和头部比特。我们可以在RDO(率失真优化)过程后首先估计头部比特,然后计算可用的源比特作为
在这里,我们考虑一个头部比特率模型,该模型估计编码运动向量(MVs)、参考帧和宏块(MB)模式所需的总比特数。由于不同的宏块(inter-MBs)和内部宏块(intra-MBs)有很大的不同,我们分别估计它们的头部比特。
在视频编码中,宏块(Macroblock,简称MB)之间的头信息位与非零水平/垂直运动矢量元素的数量(
N
n
z
M
V
e
N_{nzMV_e}
NnzMVe)以及运动矢量的数量(
N
m
v
N_{mv}
Nmv)之间存在密切的关系。举个例子,假设一个宏块(MB)被分成四个8x8的块,并且这四个运动矢量(MVs)分别是(4,1)、(2,0)、(3,7)和(0,0)。那么,非零运动矢量元素的数量
N
n
z
M
V
e
N_{nzMV_e}
NnzMVe=5(即4、1、2、3和7),而运动矢量的数量
N
m
v
N_{mv}
Nmv=4。随着非零运动矢量元素数量的增加,编码它们的值所需的位数也会增加。同样地,当一个宏块被更精细地划分时,与它相关联的运动矢量数量会增加,从而导致头部比特数的增加。实验观察到,当前帧中宏块之间的头部比特可以通过以下模型进行估计:
其中,
γ
1
\gamma_1
γ1和
γ
2
\gamma_2
γ2是模型参数。此外,(4)能够在最小的估计误差前提下简化成为
其中,
γ
\gamma
γ是模型参数,并且
ω
\omega
ω是一个依赖于参考帧数量的权重因子。需要注意的是,参考帧数量是影响头部比特的另一个重要因子。显然,随着参考帧数量的增加,编码参考帧索引所需的比特数也会增加。因此,如果用于帧间预测的参考帧越多,那么应该给予
N
m
v
N_{mv}
Nmv更大的权重。我们通过经验发现:
图4中给出了QCIF测试序列的
R
h
d
r
,
i
n
t
e
r
R_{hdr,inter}
Rhdr,inter和
N
n
z
M
V
e
+
w
∗
N
m
v
N_{nzMVe}+w*N_{mv}
NnzMVe+w∗Nmv之间关系。我们分开考虑P和B帧,并且将他们的结果分别展示在图4(a)和(b)中。对于每个图表,使用从15到45的每3个QP值(量化参数)编码30帧,并使用三个参考帧(即
w
=
0.4
w=0.4
w=0.4)。从这些图表中,我们可以看到所有测试序列的P帧和B帧都紧密遵循给定的头部速率模型(5)。
对于同一实验,表I分别展示了通过(4)和(5)计算的P帧的RMSE(均方误差)估计值以及
R
2
R^2
R2值。
R
2
R^2
R2是一个用来测量数据偏离给定模型程度的量[27]。它的定义是:
其中,
X
i
X_{i}
Xi和
X
i
^
\hat{X_{i}}
Xi^分别表示数据点
i
i
i处的实际值和预测值,并且
X
‾
\overline{X}
X表示的是所有数据点的平均值,估计值
X
i
^
\hat{X_{i}}
Xi^通过数据模型获取。对于任何一个合理的模型,我们期望右手一侧的二次项小于1。因此,
R
2
R^2
R2的值位于0到1之间。模型越合理,
R
2
R^2
R2就越接近于1。如表I所示,基于(5)式模型的估计误差对于大多数序列来说并不比基于(4)式模型的估计误差大很多。因此,我们为了简化起见,使用(5)式来估计间编码宏块(inter-MBs)的头部比特数。
对于帧内编码宏块(intra-MBs),头部信息只包括宏块模式,因此头部比特的数量远小于源比特。所以,与间编码宏块相比,精确估计的重要性并不那么高。我们简单地通过以下方式估计当前帧中帧内编码宏块的头部比特数:
其中
N
i
n
t
r
a
N_{intra}
Nintra 是当前帧中帧内编码宏块的数量,
b
i
n
t
r
a
b_{intra}
bintra 是之前帧中帧内编码宏块的平均头部比特数。然后,当前帧的总头部比特数等于帧中间编码和帧内编码宏块的头部比特数之和,即:
Comments:
(1)早期的编码器使用的头部比特预估方法,是使用前面已编码的MB的头部比特的平均值来获取的。
(2)H264中引入了一系列的编码工具,使得头部比特的预测比早期的编码器要更复杂一点,这主要体现在帧间预测中使用的MV之中。由于不同的MB使用的MV数量和数值不尽相同,头部比特的数量也不相同。对于帧间预测块,需要考虑MV的数量和数值,对于帧内预测块,使用的是之前帧中intra-MB的平均头部比特书获取的。通过这样的方式,预测的头部比特更加的精确。
3.2 源比特的码率模型
在
q
q
q域和
ρ
\rho
ρ域中分别考虑了两种类型的速率和失真模型。在
q
q
q域方法中,源速率被建模为量化步长的函数和残差信号的复杂性。过去研究了几种源速率模型,例如[8]-[10]、[23]。在[23]中,假设源是拉普拉斯分布的,并采用量化步长的二次函数来估计源比特。以下是一个二次模型:
其中,
α
1
\alpha_1
α1和
α
2
\alpha_2
α2是模型参数,并且
Q
Q
Q是量化步长,已被广泛的研究。它被作为非规范性指导,用于几个标准中的速率控制实现,比如MPEG-4[28]、[29]和H.264[17]。
在 ρ \rho ρ域方法中, ρ \rho ρ是零DCT系数的百分比,源比特数被建模为 ( 1 − ρ ) (1-\rho) (1−ρ)的线性函数[12],[13]。为了从 ρ \rho ρ确定量化步长Q,可以找到它们之间的一一对应关系。也就是说,我们可以构建一个DCT系数直方图,找到 ρ \rho ρ和 Q Q Q之间的关系,以确定相应的 Q Q Q。 ρ \rho ρ域源速率模型通常比 q q q域源速率模型更准确。 q q q域源速率模型的不准确性主要是由于对残差信号复杂度的粗略估计,如(10)中给出的MAD。
在H.264中,DCT(离散余弦变换)和量化的基本单元是一个4x4块,这些块可以被编码或者跳过。如果一个4x4块的所有4x4 DCT系数在量化后都是零,则该块被跳过。否则,它就是一个编码块。需要注意的是,跳过的块不需要任何比特。因此,在这项工作中,我们只考虑编码块的复杂性,以更精确地估计残差信号的复杂度。设( \text{SATD} )为编码4x4块的绝对变换差之和(Sum of Absolute Transform Differences)。通过稍微修改(10),我们可以推导出另一个源速率模型。
其中,
α
1
\alpha_1
α1和
α
2
\alpha_2
α2为模型参数,
Q
Q
Q是量化步长。很明显,(10)和(11)之间的差异在于用
S
A
T
D
c
(
Q
)
SATD_c(Q)
SATDc(Q)替换了
M
A
D
MAD
MAD来表征残差信号的复杂性。需要注意的是,这里的括号中的
Q
Q
Q表示的是
S
A
T
D
c
(
Q
)
SATD_c(Q)
SATDc(Q)依赖于量化步长。尽管编码块的
M
A
D
c
MAD_c
MADc可以用来代替
S
A
T
D
c
(
Q
)
SATD_c(Q)
SATDc(Q),SATD(Sum of Absolute Transformed Differences)被使用是因为其在源码率模型中略胜一筹的性能。
实验证实,通过只考虑编码后的4x4块的复杂性,可以显著降低(10)中二次速率模型的估计误差。此外,观察到(11)中的二阶项
Q
−
2
Q^{-2}
Q−2可以被省略,而不会牺牲太多的建模性能。因此,我们可以得到一个大大简化的源码率模型,如下所示:
其中,
α
\alpha
α是模型参数,
p
p
p是一个依赖于帧类型的值,观察到对于P帧和B帧,p的最佳值是1.0,而对于I帧是0.8。源码率与
S
A
T
D
c
(
Q
)
Q
p
\frac{SATD_c(Q)}{Q^p}
QpSATDc(Q)之间的关系对于QCIF测试序列在图5中绘制。对于每个图,使用从15到45的每三个QP值编码30帧,对于P帧和B帧使用三个参考帧。从图5中我们可以看到,所有帧类型都证实了(12)中所示的线性关系。
我们通过比较表II中P帧的估计误差和
R
2
R^2
R2值,研究了不同源码率模型的性能,即(11)中提出的二次模型、(12)中的简化模型、[23]中的
q
q
q域模型(10)以及[12]、[13]中的
ρ
\rho
ρ域模型。我们发现,除了“Carphone”测试序列外,对于所有测试序列,简化模型提供了比
q
q
q域和
ρ
\rho
ρ域模型更小的均方根误差(RMSE)值和更大的
R
2
R^2
R2值。此外,简化模型的估计误差仅略大于提出的二次模型。因此,由于其简单性,我们采用(12)来估计我们的速率控制算法中的源比特。
Comments:
(1)作者认为使用原有的二次模型来预测目标比特不够准确,引入了
ρ
\rho
ρ域预测目标比特的思想,因为
q
q
q域模型由于MAD有可能预测不准确,带来的预测误差会比
ρ
\rho
ρ域要大一些。在
ρ
\rho
ρ域当中,考虑的是非零的DCT系数,因此本文中仅考虑编码块的复杂度,这样就更加的精确,使用的评估标准变成了
S
A
T
D
SATD
SATD而不是
M
A
D
MAD
MAD,因为
S
A
T
D
SATD
SATD会带来略好一些的性能表现。
(2)随后,根据一些数据拟合的效果,将公式中的二次项去掉,简化了预测模型。这个模型实际上就替代了
t
a
r
g
e
t
B
i
t
=
c
1
∗
M
A
D
Q
S
t
e
p
+
c
2
∗
M
A
D
Q
S
t
e
p
2
targetBit = c1*\frac{MAD}{QStep}+c2*\frac{MAD}{QStep^2}
targetBit=c1∗QStepMAD+c2∗QStep2MAD。
3.3 失真模型
一般来说,失真可以用源比特的指数函数来近似。在[13]中,失真被建模为 ρ \rho ρ域中源比特的指数函数,并表明在 ρ \rho ρ域而不是 q q q域中可以更准确地估计源比特和失真数量。然而, q q q域中的性能较差主要归因于源比特估计的不准确。由于第三部分B节提出的源码率模型更准确,失真模型的准确性也相应提高。然而,在这一部分,我们考虑一种新的方法来进一步改进失真估计。
记
D
c
D_c
Dc和
D
s
D_s
Ds分别代表所有编码的4x4块和跳过的4x4块的失真度量。那么,总失真就是两种失真度量的和,即:
由于跳过的4x4块的残差信号没有被编码,因此可以直接从其残差信号计算其失真。因此,我们只需要估计编码的4x4块的失真。编码块的失真可以通过以下方式估计:
其中,
β
1
\beta_1
β1和
β
2
\beta_2
β2为模型参数,与速率模型相似,二次模型可以被简化为
其中,
β
\beta
β是模型参数,
p
p
p是一个基于帧类型的数值。对于I帧而言,
p
p
p为1.2,对于P帧和B帧而言,
p
p
p为1.0。编码的4x4块的失真,以平方误差和(SSE)为度量,与QCIF测试序列的量
S
A
T
D
c
(
Q
)
∗
Q
p
SATD_c(Q)*Q^p
SATDc(Q)∗Qp的关系在图6中绘制。图6应用了与图5相同的实验条件。从这个图中我们可以看到它们之间大约呈线性关系,这证实了(15)中给出的模型。然而,我们应该注意,我们关心的是整个帧的总失真(包括跳过和编码的4x4块),而不仅仅是编码的4x4块的失真。图7绘制了实际总失真(即
D
c
+
D
s
D_c+D_s
Dc+Ds)与估计总失真(即
D
c
^
+
D
s
\hat{D_c}+D_s
Dc^+Ds),其中
D
^
c
\hat{D}_c
D^c由(15)估计)之间的关系。图7还在每个图中显示了一条虚线
y
=
x
y=x
y=x)。我们可以看到,在识别出编码的4x4块之后,总失真可以通过所提出的估计方法紧密估计。
我们比较了不同失真模型的性能,即(14)和(15)给出的模型以及[13]中的
ρ
\rho
ρ域失真模型,在表III中以P帧的估计误差和
R
2
R^2
R2值作为衡量标准。我们从表III看到,对于所有测试序列,采用所提出的编码块失真模型的估计方法显著降低了估计误差。在我们的速率控制算法中,我们采用了(15)中的简化模型来估计编码块的失真,因为它简单且性能良好。
Comments:
(1)基于前面的考虑,预估目标比特时,将MB分成了coded block和skip block,这里也有类似的思考。在计算失真时,为了更加精准的描述失真,对于skip4x4块,因其不会实际编码,其失真直接使用残差信号计算;对于coded 4x4块,
S
A
T
D
SATD
SATD的计算依赖于预测块和当前块,预测块是使用第一阶段获取的重建块预测而来的。
3.4 块类型的确定
为了正确应用所提出的源码率和失真模型,我们必须在DCT和量化后的不同QP值下识别一个4x4块是否被编码。在H.264中,为了避免乘法和除法运算,对4x4块应用了整数DCT和相应的标量量化[30]。记
X
(
i
,
j
)
X(i,j)
X(i,j)和
X
q
(
i
,
j
)
X_{q}(i,j)
Xq(i,j)分别为位于
(
i
,
j
)
(i,j)
(i,j)处的经过量化前后的DCT系数。系数
X
(
i
,
j
)
X(i,j)
X(i,j)通过下列公式进行量化
其中
Q
M
=
Q
P
m
o
d
6
Q_{M}=QP mod 6
QM=QPmod6,
Q
E
=
Q
P
/
6
Q_E=QP/6
QE=QP/6,
A
(
Q
M
,
i
,
j
)
A(Q_M,i,j)
A(QM,i,j)是由量化表指定的函数,它给出了在点
(
i
,
j
)
(i,j)
(i,j)处的整数量化缩放因子,并控制靠近原点处的量化宽度。如前所述,
Q
M
Q_M
QM和
Q
E
Q_E
QEA依赖于QP值,因此,量化过程会有所不同。
在我们的提议的编码器结构的第一个阶段,即DCT和量化模块中,编码的4x4块被识别出来,如图2所示。由于
Q
P
1
QP_1
QP1和
Q
P
2
QP_2
QP2之间的差异由
Δ
\Delta
Δ决定(本文中设置为3),我们只需要在
Q
P
−
Δ
QP - \Delta
QP−Δ到
Q
P
+
Δ
QP + \Delta
QP+Δ范围内决定MB的类型。为了决定一个4x4块是否是编码块,首先需要找到一个DCT系数
X
m
a
x
X_{max}
Xmax,能够使用
Q
P
1
QP_1
QP1,给出
∣
X
(
i
,
j
)
∗
A
(
Q
M
,
i
,
j
)
∣
|X(i,j)*A(Q_M, i, j)|
∣X(i,j)∗A(QM,i,j)∣的最大值
随后,
X
m
a
x
X_{max}
Xmax使用所有允许的值进行重新量化。需要注意的是,由于
A
(
Q
M
,
i
,
j
)
A(Q_M,i,j)
A(QM,i,j)依赖于
Q
P
QP
QP,他们的排名顺序不论如何都保持不变。换句话说,
X
m
a
x
X_{max}
Xmax在其他的QP值下,也取得最大值。所以,通过对
X
m
a
x
(
i
,
j
)
X_{max}(i,j)
Xmax(i,j)所有可取值进行量化,我们能够知道在这样的QP范围下,4x4块是否是编码块。具体来说,如果
X
m
a
x
X_{max}
Xmax在特定QP下的量化值为0,4x4的块就是skip块,否则就是编码块。
4.面向H264 Baseline Profile的码率控制算法
尽管 ρ \rho ρ域RD模型已经成功应用于很多的视频编码器当中,他们确难以用于H264编码器。主要的问题在于难以在H264当中寻找到 ρ \rho ρ到到 Q Q Q的一对一的关系,这可以由(16)中复杂的表达式中可以得到解释。为了应用 ρ \rho ρ域的RD模型,我们需要使用所有可取的QPs值,对DCT系数进行量化,来获得 ( ρ , Q ) (\rho, Q) (ρ,Q)对。它比上述的编码4x4块识别方法需要更多的计算量。总的来说,与第三节A至C讨论的增强型速率和失真模型相比, ρ \rho ρ域方法不如 q q q方法直接。在本节中,为了展示两阶段编码结构以及增强型速率和失真模型的效率,我们提出了两种恒定比特率控制算法,用于H.264基线配置文件编码器,这些算法可以应用于实时对话视频编码应用,如视频会议。
基于两阶段编码结构和增强型速率模型,我们提出了一种直接的H.264速率控制算法,用于基线配置文件编码器,如下所述:
无需比特分配的速率控制算法:
- 对帧进行初始比特分配。
为当前帧分配一定的比特预算, R T R_T RT。一个简单的帧级比特分配方法在第五节中进行了描述。 - 第一阶段编码
使用 Q P 1 QP_1 QP1进行第一阶段的编码过程,从而获得残差信号和当前帧的头部信息,其中 Q P 1 QP_1 QP1被选择为前一帧的 Q P 2 QP_2 QP2的平均值。编码的4x4块通过使用第三节-D以及在 Q P ∈ ( Q P 1 − Δ , Q P 1 + Δ ) QP \in (QP_1 - \Delta, QP_1 + \Delta) QP∈(QP1−Δ,QP1+Δ)范围内计算的所有MB的 S A T D c ( Q ) SATD_c(Q) SATDc(Q)值。通过(9)能够计算出所需要的头部比特,从而获取可用的 R s r c R_{src} Rsrc源比特数。 - 第二阶段编码
假设当前MB的编号为 m m m。记 R s r c R_{src} Rsrc为编码第 m m m个MB之前的源比特数。我们能够按照如下方式确定第 m m m个MB的QP, Q P 2 , m QP_{2,m} QP2,m。首先,在 Q P ∈ ( Q P 1 − Δ , Q P 1 + Δ ) QP \in (QP_1 - \Delta, QP_1 + \Delta) QP∈(QP1−Δ,QP1+Δ)范围内的所有剩余MB的 S A T D c ( Q ) SATD_c(Q) SATDc(Q)之和。使用(12)和 S A T D c ( Q ) SATD_c(Q) SATDc(Q)值,我们能够在 Q P 1 − Δ QP_1 - \Delta QP1−Δ到 Q P 1 + Δ QP_1 + \Delta QP1+Δ范围内预估源比特, R s r c ^ ( Q ) \hat{R_{src}}(Q) Rsrc^(Q),从中选择能够让源比特和目标比特最接近的值,即
其中,
Q
(
q
)
Q(q)
Q(q)是由QP值
q
q
q对应的实际量化步长。随后,我们可以使用
Q
P
2
,
m
QP_{2,m}
QP2,m来编码第
m
m
m个MB的残差信号,并且通过减去第
m
m
m个MB的实际编码比特来更新
R
s
r
c
R_{src}
Rsrc。上述流程对当前帧的所有MB都会重复。
4) 更新模型
更新模型参数
γ
\gamma
γ,
α
\alpha
α和缓冲区填充度。模型参数通过使用前五帧的数据进行最小二乘近似来更新。然后,我们继续处理下一帧,直到最后一帧为止。
需要注意的是,对于每个 M B MB MB而言都有 2 ( Δ + 1 ) 2(\Delta+1) 2(Δ+1)个 S A T D c ( Q ) SATD_c(Q) SATDc(Q)值,以及 2 ( Δ + 1 ) 2(\Delta+1) 2(Δ+1)个预估的源比特 R ^ s r c ( Q ) \hat{R}_{src}(Q) R^src(Q),对应的 Q P QP QP范围是 Q P 1 − Δ QP_1 - \Delta QP1−Δ到 Q P 1 + Δ QP_1+\Delta QP1+Δ。因此, Q P 2 , m QP_{2,m} QP2,m是通过最小化与可用源比特的距离从一组离散值中确定的,而不是直接通过封闭形式的源速率模型计算得出。
Comments:
(1)上述不进行比特分配的算法,执行流程可以简单描述一下:(a)根据剩余需要编码的帧数目和剩余的比特数,给定当前帧的目标比特;(b)使用
Q
P
1
QP_1
QP1执行第一阶段的流程,对于所有coded MB,会在
(
Q
P
1
−
Δ
,
Q
P
1
+
Δ
)
(QP_1 - \Delta, QP_1 + \Delta)
(QP1−Δ,QP1+Δ)范围内去计算
S
A
T
D
SATD
SATD,进而获取所有可用的
R
h
d
r
(
Q
)
R_{hdr}(Q)
Rhdr(Q);(c)执行第二阶段的流程,根据前面已经计算的
S
A
T
D
SATD
SATD值,通过求和剩余MB允许分配的
S
A
T
D
SATD
SATD值,这样可以算出预估的源比特
R
^
s
r
c
(
Q
)
\hat{R}_{src}(Q)
R^src(Q)。前面计算了所有可用的头部比特,因为已有总目标比特
R
T
R_T
RT,所以现在能够获取不同
Q
P
QP
QP对应可用的源比特
R
s
r
c
R_{src}
Rsrc,将可用的源比特和预估的源比特进行对比,选择最小的可用源比特所对应的
Q
P
2
,
m
QP_{2,m}
QP2,m值作为当前MB的
Q
P
2
QP_2
QP2;(d)更新模型参数
(2)不进行比特分配的算法当中,通过计算不同
Q
P
QP
QP的预估源比特,找到最合适的一个。这种做法类似于RDO过程中选择最佳模式,会引入一些计算开销。由于原有的模型是计算MAD,现在计算的是SATD,且计算的次数为7次,感觉这种计算开销不低。
上述没有进行比特分配的码率控制算法,在决定 Q P 2 , m QP_{2,m} QP2,m时没有将失真纳入到其中。为了进一步提升图像质量,提出了一个面向所有MB类别的RD优化的比特分配模型。记 L c L_{c} Lc为类别的数量, R s r c , l R_{src,l} Rsrc,l和 D l D_l Dl为源比特的数目以及第 l l l个类别的失真。给定一帧可用的源比特 R s r c R_{src} Rsrc,我们的目标是找到对于 1 ≤ l ≤ N c 1 \leq l \leq N_c 1≤l≤Nc的 R s r c , l R_{src,l} Rsrc,l,使得当前帧总的失真最小,即
一些MB分类的方法因为不同的目标而被提出。一个好的MB分类方法能够提升编码性能。在本文中,一个简单的分类模式被使用,即相同一行的MB会被分类成为相同的类,来验证这个算法。
为了执行所有MB类别的RD优化的比特分配算法,一个离散的,用于第 l l l个类的RD数据集会被评估,其中 1 ≤ l ≤ N c 1 \leq l \leq N_c 1≤l≤Nc。举例来说,每个类别的 S A T D c ( Q ) SATD_c(Q) SATDc(Q)通过该类别所有的MB的 S A T D c ( Q ) SATD_c(Q) SATDc(Q)计算而来, Q P QP QP范围是KaTeX parse error: Undefined control sequence: \Detla at position 6: QP_1-\̲D̲e̲t̲l̲a̲到 Q P 1 + Δ QP_1+\Delta QP1+Δ。然后,对于每个可接受的量化参数(QP),可以估算出每类的源比特数和相应的失真。也就是说,源比特和失真分别通过简化的源速率模型(见式(12))和简化的失真模型(见式(15))来估算。使用估算出的R-D数据集合,可以执行以下算法,该算法使用梯度下降法在宏块(MB)类之间进行R-D优化的比特分配 [32]。
所有MB类别的比特分配:
- 初始化
q
l
=
Q
P
1
−
Δ
q_l=QP_1 - \Delta
ql=QP1−Δ
我们使用最佳的 Q P QP QP来初始化码率分配,并且计算 1 ≤ l ≤ N c 1 \leq l \leq N_c 1≤l≤Nc范围内的 R ^ s r c , l = R ^ s r c , l ( Q ( q l ) ) \hat{R}_{src,l}=\hat{R}_{src,l}(Q(q_l)) R^src,l=R^src,l(Q(ql)),其中 Q ( q l ) Q(q_l) Q(ql)是对应于 q l q_l ql的量化步长。记 R ^ s r c = σ l = 1 N c R ^ s r c , l \hat{R}_{src}=\sigma_{l=1}^{N_c}\hat{R}_{src,l} R^src=σl=1NcR^src,l为所有分配的比特。如果 R ^ s r c ≤ R s r c \hat{R}_{src} \leq R_{src} R^src≤Rsrc,我们停止比特分配流程,因为最大的比特也小于可用的比特率。随后,我们简单的将比特分配给第 l l l个类别,通过 R s r c , l = R ^ s r c , l R_{src,l}=\hat{R}_{src,l} Rsrc,l=R^src,l,其中 1 ≤ l ≤ N c 1 \leq l \leq N_c 1≤l≤Nc。否则,如果 R s r c , l > R ^ s r c , l R_{src,l}>\hat{R}_{src,l} Rsrc,l>R^src,l,我们需要通过进入下一步骤,来增大量化参数。 - R-D优化
基于简化之后的速率和失真模型,我们能够计算
其中,
1
≤
l
≤
N
c
1 \leq l \leq N_c
1≤l≤Nc,
q
l
+
1
≤
k
≤
Q
P
1
+
Δ
q_l + 1 \leq k \leq QP_1 + \Delta
ql+1≤k≤QP1+Δ,选择能够让
λ
(
l
,
k
)
\lambda(l,k)
λ(l,k)取得最小值的
l
′
l^{'}
l′和
k
′
k^{'}
k′。这意味着使用
l
′
l^{'}
l′和
k
′
k^{'}
k′在一个单位的码率减小下,带来最小的质量损失。随后,我们设置
q
l
′
=
k
′
q_{l^{'}}=k^{'}
ql′=k′,并且
R
^
s
r
c
,
l
′
=
R
^
s
r
c
,
l
′
(
Q
(
k
′
)
)
\hat{R}_{src,l^{'}}=\hat{R}_{src,l^{'}}(Q(k^{'}))
R^src,l′=R^src,l′(Q(k′)),并且更新
R
^
s
r
c
=
σ
l
=
1
N
c
R
^
s
r
c
,
l
\hat{R}_{src}=\sigma_{l=1}^{N_{c}}\hat{R}_{src,l}
R^src=σl=1NcR^src,l。我们重复这个步骤,直到满足下列的终止标准。
3) 终止标准
如果对于所有的
1
≤
l
≤
N
c
1 \leq l \leq N_c
1≤l≤Nc,有
R
^
s
r
c
=
R
s
r
c
\hat{R}_{src}=R_{src}
R^src=Rsrc或者
q
l
=
Q
P
1
+
Δ
q_l=QP_1+\Delta
ql=QP1+Δ,终止步骤2并将最终分配的比特数分配给第
l
l
l类,
R
s
r
c
,
l
R_{src,l}
Rsrc,l会被赋值给
R
^
s
r
c
,
l
\hat{R}_{src,l}
R^src,l,其中
1
≤
l
≤
N
c
1 \leq l \leq N_c
1≤l≤Nc。
上述比特分配方法的基本思想可以简单表述如下。首先,它使用最小的量化参数(QP)为所有类分配最大比特数。通常,这个速率会高于可用的比特速率。然后,我们必须从某些类中减少分配的比特数。在步骤2中,我们选择每比特率减少时失真增加最小的类。这个过程重复进行,直到达到目标比特数为止。通过宏块类(MB-class)比特分配,所提出的速率控制算法可以在同一类中的宏块(MBs)上执行。
Comments:
(1)进行比特分配的模型当中,引入了失真的考量,这种模型将一行的MB作为一个类别(行级码控),给定一个初始
Q
P
QP
QP值,在所有可用的
Q
P
QP
QP值当中,找到一个
Q
P
QP
QP值,使得对应的
λ
\lambda
λ最小,这个点就是最佳的
Q
P
QP
QP点。
(2)
λ
\lambda
λ描述的是一个
t
a
n
θ
tan\theta
tanθ值,
λ
\lambda
λ越小,说明该处的斜率约为平缓,这个点就是以
−
λ
-\lambda
−λ为斜率的直线与R-D曲线的切点,也是最佳性能的点。(【视频编码】视频编码中拉格朗日乘子法的简单理解)
5.实验结果
提出的带和不带比特分配的速率控制算法与JM8.1a [33]中的H.264基准配置文件编码器的速率控制算法进行了比较。在我们的实验中,除了第一个I帧外,所有帧都被编码为P帧。一般来说,编码视频的质量在很大程度上依赖于帧级比特分配方法。许多速率控制算法为了根据单调性特性提高平均质量[6],会将更多的比特分配给I帧和前面的P帧。然而,由于我们实验的主要目的是展示新编码器结构在增强速率和失真模型方面的优势,我们采用了一种简单的基于帧的比特分配方法,具体说明如下。
因为我们使用JM8.1a [17]中的速率控制方案作为基准,所以第一个I帧使用与JM8.1a中相同的规则确定的QP进行编码,以便公平比较。后续的P帧的比特分配会按照下列的方法进行确定。记 N r ( n ) N_{r}(n) Nr(n)和 T r ( n ) T_r(n) Tr(n)为剩余帧的数目和编码第 n n n帧之前剩余的比特数。随后,第 n n n帧的目标比特可以简单确定为 T r ( n ) N r ( n ) \frac{T_r(n)}{N_r(n)} Nr(n)Tr(n)。 Δ \Delta Δ设置为3,第一个P帧的模型参数 α , β , γ \alpha,\beta,\gamma α,β,γ分别设置为6.0,0.4,0.04。在所有实验中,缓冲区大小设置为通道速率的两倍,初始缓冲区满度设置为缓冲区大小的一半。
几个QCIF序列以30fps的单参考帧进行编码。如第四节所述,同一GOB中的MB被分类到同一个类中用于比特分配。表IV显示了三种不同速率控制算法的实验结果。请注意,此表中的编码增益都是相对于JM81a中的速率控制方案计算得出的。结果表明,无论是否带比特分配,所提出的算法在所有比特率下的所有测试序列中都能更准确地达到目标比特率。图像质量也有所提高。在没有比特分配的情况下,平均编码增益和最大编码增益分别为0.25dB和0.39dB;而在带比特分配的情况下,它们分别可以达到0.60dB和1.02dB。
在简化的RD模型当中,有3个参数需要被优化:(5)中的头部码率模型参数 ω \omega ω,(12)中的源码率模型参数 p p p以及(15)中的失真模型参数 p p p。它们分别用于简化由(4)、(11)和(14)给出的模型。第三节中指定的这些参数对所有测试序列都表现良好。换句话说,它们对表IV中所示的测试序列具有鲁棒性。
所提出的无比特分配速率控制方案所带来的编码增益主要来自于节省了用于编码两个连续MB之间QP差异的比特数。图8展示了在不同比特率下几个序列中一帧的QP变化情况。我们看到,即使每个MB可以有自己的QP,但由于准确的速率模型,变化很小。大多数帧的最大值和最小值之间的差异最多为2。因此,编码这些差异所需的比特数较少。相反,JM8.1a中的不准确源速率和头部比特估计方法导致QP变化较大,因此需要更多的比特来编码它们的差异。这也导致在一帧内质量显著波动。作为证据,我们可以很容易地从图8推测出,JM8.1a速率控制算法在一帧的开始部分产生较高质量MB,而在结束部分产生较低质量MB。此外,通过采用比特分配,我们可以进一步提高PSNR值,平均比没有比特分配的情况下高出0.35dB。改进的幅度取决于视频序列的特性。当一帧中的MB具有更多不同的R-D特性时,额外的编码增益更大。
图9展示了Foreman和News两个序列的
Q
P
1
−
Q
P
2
QP_1 - QP_2
QP1−QP2的分布,目标码率为64kbps,使用无比特分配的码率控制算法。对于Foreman序列,
∣
Q
P
1
−
Q
P
2
∣
≤
1
|QP_1 - QP_2| \leq 1
∣QP1−QP2∣≤1的概率大于95%,
∣
Q
P
1
−
Q
P
2
∣
≥
3
|QP_1 - QP_2| \geq 3
∣QP1−QP2∣≥3的概率小于2%。对于News这个序列而言,这些概率分别是大于80%和小于4%。根据第二章节的讨论,
∣
Q
P
1
−
Q
P
2
∣
≤
1
|QP_1 - QP_2| \leq 1
∣QP1−QP2∣≤1的高概率说明了使用两阶段编码的编码损失是非常小的。
∣
Q
P
1
−
Q
P
2
∣
≥
3
|QP_1 - QP_2| \geq 3
∣QP1−QP2∣≥3的低概率说明
Δ
\Delta
Δ选择为3是一个合理的值。此外,观察到无论序列的活动性高低,这两个QP值之间的差异在大多数帧中都很小。它们之间的大差异(即KaTeX parse error: Undefined control sequence: \eq at position 1: \̲e̲q̲ ̲3)出现在场景切换帧中。在News序列中,
∣
Q
P
1
−
Q
P
2
∣
≥
3
|QP_1 - QP_2| \geq 3
∣QP1−QP2∣≥3概率要大一些是因为在第90,150,240帧中的背景变化,并且我们能够通过设置
Δ
=
3
\Delta=3
Δ=3来降低这种质量突变。一般来说,我们从图9中得出结论,在这个基准配置文件的应用中,前一帧的平均QP2提供了对当前帧QP1的良好估计。
我们在图10-12中展示了通过所提出的带比特分配的速率控制算法和JM8.1a中的速率控制算法,三个测试序列分配的比特数和PSNR值随帧号变化的函数关系。如图所示,所提出的速率控制算法可以非常精确地达到每帧的目标比特数。当解码器缓冲区大小有限时,这非常重要,因为如果比特数不能很好地控制,可能会经常发生帧跳过。此外,与JM8.1a中的速率控制算法相比,所提出的速率控制方案的PSNR改进是显而易见的。
6.结论和未来工作
在本研究中,我们提出了一种基于两阶段编码的新颖模型化速率控制算法,用于H.264基准配置文件编码器。通过两阶段编码方案解决了RDO和速率控制之间的相互依赖性,代价是可接受的额外编码复杂性。为了更准确地估计头部比特数,建立了增强的头部速率模型,因为头部比特在H.264中的重要性增加。还基于已编码的4x4块识别提出了增强的源速率和失真模型。实验结果表明,所提出的模型可以很好地估算速率和失真。此外,提出了一种基于MB的比特分配方法以提高图像质量。与JM8.1a中的速率控制算法相比,所提出的速率控制算法能够更准确地达到帧的目标比特率,并改善了R-D性能。值得指出的是,我们可能需要一种更复杂的QP2估计方法来提高不同视频编码应用的性能,例如需要有限GOP结构且包含B帧的非会话应用。此外,如果采用更复杂的分类方法而不是基于GOB的分类方法,编码增益可能会进一步提高。这些未解决的问题是我们当前研究的重点。
Comments:
(1)本文首先将RDO和RC中连接的桥梁,QP进行了解耦,组成了一个二阶段的编码框架。
(2)修改了头部比特预测方式,分成intra和inter两个部分,其中inter部分的头部比特预测相对复杂
(3)修改了源比特的预测方式,引入了
ρ
\rho
ρ域的考量,将编码块分成coded block和skip block,实现更加精细的源比特估计。将原有的二次模型中的
M
A
D
MAD
MAD用
S
A
T
D
SATD
SATD来代替,并且通过拟合的方式说明去掉二次项的合理性。
(4)修改了失真的度量方式,按照coded block和skip block两种情况来计算
(5)提出了不比特分配的码率控制算法,按照两个阶段执行:(a)第一阶段计算
S
A
T
D
SATD
SATD和头部比特;(b)第二阶段计算MB使用的
Q
P
QP
QP,随后更新模型参数
(6)提出了使用比特分配的码率控制算法,在(5)的基础之上,引入了失真的度量方式,通过计算
λ
\lambda
λ的最小值,进一步确定最佳的
Q
P
QP
QP值
(7)综上来看,上述每个步骤都在各自的模块起到的更好的效果,但代价是引入了不低的复杂度,尤其是在
(
Q
P
1
−
Δ
,
Q
P
1
+
Δ
)
(QP_1 - \Delta, QP_1 + \Delta)
(QP1−Δ,QP1+Δ)这个范围内进行的遍历QP计算
S
A
T
D
SATD
SATD的操作。作者也提到后续应该采用更加合理的方法来确定#QP_2#,而不是通过brute force的方法。