本系列主要介绍视频编解码芯片的设计,以HEVC视频编码标准为基础,简要介绍编解码芯片的整体硬件架构设计以及各核心模块的算法优化与硬件流水线设计。
视频编码的实际应用中,编码器往往需要包含码率控制模块以确保编码器的输出码率满足存储设备可提供的存储空间、传输信道可提供的传输带宽以及传输延迟的限制等条件。本章首先简要说明了码率控制的概念与三种基本方法,然后详细说明了R-Q模型、URQ模型、R-λ模型以及R-λ模型的改进。
01
概 述
码率控制的目的是在精确达到目标码率的同时尽可能改善编码视频的质量,其主要分为两个步骤,即比特分配和比特控制。比特分配过程通常是根据目标码率和视频序列特性为每一个GOP、帧和基本单元分配适当的目标比特数。比特控制过程是根据目标比特数,利用率失真模型计算量化参数或拉格朗日乘子进行编码,使编码器输出每一个基本单元、帧和GOP的比特数尽可能等于预先的目标比特。
为了更好地理解具体的码率控制模型,首先介绍一些码率控制方法。固定比特率编码是指编码器每秒输出的比特数是常数。固定比特率编码模式的编码效率通常比较低,且在传输画面细节较多的视频序列时会出现画面模糊等现象。可变比特率编码是相对固定比特率编码提出的概念,优点是在保证视音频质量的情况下尽可能减小文件体积,缺点是不适用于对比特率稳定程度要求较高的图传系统。平均比特率编码是上述两种方法的折中,通常设定有传输比特率的上下限。
02
AVC的R-Q模型(JVT-N046)
JVT-N046提案中的码率控制算法由GOP级码率控制、图像级码率控制和基本单元级码率控制组成。GOP级码率控制完成以下工作:1)计算该GOP中剩余图片的总目标比特数;2)刷新第一个参考帧的初始量化参数。具体来说,当第i个GOP中的第j帧编码时,该GOP中的剩余图片的目标比特数按下式计算:
其中f为预定义的编码帧率,Ni是第i个GOP中的图片总数,Ri(j)是编码第i个GOP中的第j帧时的信道速率,Bi(j)和bi(j)分别是目标比特数和编码实际产生的比特数。Vi(j)是编码第i个GOP中的第j帧时虚拟缓冲区已占用的比特数,会随着编码的进行按下式更新:
第一个GOP的第一个参考帧的量化参数QP由其像素深度(bpp)决定,其余GOP的第一个参考帧的QP值由其前一层GOP的初始QP或最后一帧QP值决定:
其中NP(i-1)是第(i-1)个GOP中的参考帧总数,SumQP(i-1)是第(i-1)个GOP中参考帧的平均量化参数之和。
JVT-N046提案在GOP级码率控制后紧接着进行图像级码率控制,主要完成两步工作:预编码和后编码。预编码是为了计算每一张图片的量化参数,后编码则是根据实际的编码结果更新预编码中的参数。预编码阶段的非参考帧和参考帧的量化参数的计算方式略有不同。对于非参考帧量化参数的计算分为两种情况,一是非参考帧的前后恰好均为参考帧:
另一种情况是两个参考帧之间有多个非参考帧:
对于参考帧量化参数的计算,此提案分两步计算,第一步为计算参考帧的目标比特:
其中等式左项为参考帧的目标比特数,等式右项从左到右则分别表示图像本身和缓冲区对于参考帧目标比特数的影响。第二步为计算量化参数和进行率失真优化:
其中σ~i(j)表示第i个GOP中第j帧的平均绝对误差(MAD)。
其中a1和a2初始为1和0,会随着编码的进行不断更新。
③ 完成帧编码与模型参数(即c1和c2,a1和a2)的更新。
JVT-N046提案的R-Q模型最后进行基本单元层的码率控制。在一般情况下,一个基本单元由多个连续的宏块组成。基本单元级的码率控制与图像级的码率控制有相似之处,具体来说此级的码率控制按照以下五步进行:
① 计算基本单元的MAD值。
② 计算基本单元的目标图片比特数。
③ 使用二阶抛物线模型计算量化步长并转换为量化参数。
④ 进行率失真优化和基本单元编码。
⑤ 更新当前帧的剩余比特数和模型参数。
03
HEVC的URQ模型
(JCTVC-H0213)
随着编码标准的不断更新,起源于AVC标准的R-Q模型已不适用于HEVC。JCTVC-H0213提案在JVT-N046的基础上提出了基于像素级码率控制的URQ模型。URQ模型使用与R-Q模型中相似的二阶抛物模型,不过针对HEVC编码标准做出了一定修改:
使用上式计算QP前需要完成以下两步:1)帧级或LCU级比特分配,得到第i个GOP中第j帧的目标比特;2)根据线性预测模型计算当前帧的平均绝对误差MADpred,i(j)。此提案中计算MAD依旧使用线性预测模型:
对于每一个GOP的第一个参考帧,由于不存在用于预测MAD的参数,无法计算其QP。在此提案中,针对第一个GOP中的第一个参考帧和其余GOP中的第一个参考帧两种情况进行不同的处理。对于第一个GOP中的第一个参考帧,直接使用预设的QP值,而对于其余GOP中的第一个参考帧则通过下式确定:
其中NGOP为当前GOP中的参考帧数量。可以看出,除第一个GOP以外的其余GOP,其第一个参考帧QP取值几乎由前一个GOP决定,而参考帧的QP又通过影响其MAD值影响其余帧的QP计算,因此预设QP的值对码率控制的效果有着重要的影响。而HEVC的编码模式相较H.264更加灵活多变,为不同视频源在不同编码模式下选择合适初始QP值的难度更大。
04
HEVC的R-λ模型
(JCTVC-K0103)
R-λ模型是通过建立R-λ的关系,而后根据λ进行码率控制的模型。由率失真理论与率失真优化中的拉格朗日成本函数可知-λ是R-D曲线的斜率,因此只要知道R-D曲线的关系即可知R-λ的关系。该提案采用了更好反映H.265/HEVC视频码率和失真关系的双曲线模型:
通过上式λ和R可以互相确定。为了将图像本身的特点和码率控制联系起来,利用bpp表示R:
其中f为视频源的帧率,w和h分别为图像的宽与高。
在此提案的模型中,码率控制分为两步:1)比特分配步骤确定目标码率R;2)由R-λ模型根据目标R确定λ,由Q-λ模型根据λ确定QP,使用QP和λ完成编码后更新模型参数α与 β。
比特分配过程分为GOP级、帧级和LCU级,首先GOP级比特分配如下进行:
其中TAvgPic为每帧的目标比特数,RPicAvg为目标信道速率下的每帧的目标比特数,Ncoded为视频序列已经编码的总帧数,Rcoded为这些帧的实际编码比特数。
在帧级与LCU级码率分配中引入了权重ω的概念,每一帧和每一LCU依照自身权重与未编码内容的总权重之比在剩余的比特数中分配比特。帧级比特分配如下:
其中权重参数根据帧的编码结构以及bpp查表决定。
LCU级比特分配如下:
其中权重参数根据前一已编码图片中的同级LCU的MAD计算:
在比特分配完成后,使用R-λ关系确定λ,并根据确定的λ使用QP-λ关系式确定QP。确定QP与λ后,便可对一个LCU或帧进行编码。编码完成后,便是更新编码参数一步,α与β会按照一定的规则进行更新。
R-λ模型的摆脱了蛋鸡悖论,另外λ在编码过程中以浮点数参加运算,而R-Q模型中QP仅能以整数形式变化,相比于QP,模型对于λ的调整更加精细。不过,R-λ模型也存在一定问题。一是模型主要针对帧间预测编码,而对帧内预测编码涉及较少。二是模型在更新α和β参数时方法较为简单粗糙。三是模型在比特分配时权重参数不能很好地体现图像特点。
05
改进的R-λ模型
(JCTVC-M0257,
JCTVC-M0036)
01
JCTVC-M0257
M0257提案提出了一种帧内码率控制方案。在R-λ关系上进一步加入了复杂度C的影响:
其中复杂度C基于SATD来度量,SATD是将Hadamard变换应用于原始8×8块后获得的系数绝对值之和。复杂度C还被用于LCU级的比特分配过程,LCU的权重为当前单元的复杂度和同帧中所有未编码的单元的复杂度累加结果之比:
此提案对LCU级比特分配时剩余比特数的计算进行了修正:
其中等式左项是修正后的剩余可分配总比特数,W是平滑窗口系数,此提案设为4,M是当前帧的总单元数。
其中等式左项是计划分配给每个单元(CTU)的初始比特数,Rtarget是当前帧的目标比特数。
最后,针对K0103提案中参数更新较为粗糙的问题,该提案使用了更为复杂的参数更新模型。
02
JCTVC-M0036
JCTVC-M0036提案提出了一种自适应比特分配方法,应用于帧级和LCU级。该方法与M0257提案大致相同,不同的是此提案不是依靠复杂度计算权重,而是通过求解数值方程的方法解出当前帧的权重。用于求解的方程组如下式所示:
:
该式表示了帧级比特分配的理想情况,即所有帧被分配的比特之和恰好等于GOP的目标比特。另外,在未应用码率控制时对 HM 分析可知,各帧的λ之比和权重之比相等,如下式所示:
M0036提案针对帧内编码帧的码率控制也做了一定改进,考虑到帧内编码所需比特数往往多于帧间编码的特点,一方面将α的取值范围上限由20扩大至500,这样模型可通过大λ和大QP降低帧内编码消耗的比特数,使其与帧间编码消耗的比特数接近;另一方面将log(bpp)的范围由[-5.0,1.0]更改为[-5.0,-0.1]使模型在大bpp下能够更精细地调整参数更新的速度。