高血压专题网,内容丰富有趣,生活中的好帮手!
高血压专题网 > HEVC码率控制

HEVC码率控制

时间:2019-04-18 12:39:49

相关推荐

HEVC码率控制

参考资料:

[1]万帅,杨付正编著. 新一代高效视频编码H.265/HEVC 原理、标准与实现[M]. 北京:电子工业出版社, .12.

上一章:HEVC率失真优化

码率控制概述

码率控制的主要工作是建立编码速率R与量化参数QP的关系,公式化描述为:

Q∗=(Q1∗,⋯,QN∗)=argmin(Q1,⋯,QN)∑i=1NDis.t.∑i=1NRi≤Rc(1)Q^* = (Q^*_1,\dotsb,Q^*_N)=argmin_{(Q_1,\dotsb,Q_N)}\sum_{i=1}^{N}{D_i} \,\,\,\,\, s.t.\sum_{i=1}^{N}{R_i} \leq R_c \tag{1}Q∗=(Q1∗​,⋯,QN∗​)=argmin(Q1​,⋯,QN​)​i=1∑N​Di​s.t.i=1∑N​Ri​≤Rc​(1)

码率控制算法组成

比特分配:依据视频内容、缓冲区状态、信道带宽为每个编码单元(GOP、帧、CTU)分配最优的目标比特数。HEVC多种预测技术的采用使得不同编码单元间具有高度相关性,需要在该部分着重考虑。量化参数确定:依据码率R-量化参数QP模型为每个编码单元选择最优编码参数QP。QP选择受其他参数影响较小,但其采用的模型高度依赖于视频内容特征。

缓冲区模型

缓冲区用于平衡编码器输出码率和信道速率。缓冲越大,适应信源、信道码率波动的性能越好,但相应地会引入较大延迟。

缓冲区采用流体流量模型建模:

Bc(n+1)=max{0,Bc(n)+A(n)−u(n)}(2)B_c(n+1) = max \lbrace 0 , B_c(n)+A(n)-u(n) \rbrace \tag{2}Bc​(n+1)=max{0,Bc​(n)+A(n)−u(n)}(2)

其中:

Bc(n)B_c(n)Bc​(n)为第n时刻缓冲区占用A(n)A(n)A(n)为第n时刻编码器输出码率u(n)u(n)u(n)为第n时刻信道速率

目标比特分配概述

该部分给出码率控制算法理论上的指导思想,而非具体实现。

码率控制算法需要作用于不同层级依次分配比特。HEVC中层级的顺序为:GOP-Frame-CTU。

图像层目标比特分配

由于HEVC中采用了复杂的时域参考关系,因此当前图像的编码比特数分配依赖于其参考的图像。该部分详细推导见[1]第12章,这里只给出结论:

假设已编码的图像失真确定后,当前编码图像的失真D只与其比特数R有关。(拓展:该问题具有马尔可夫性?)

假设变换系数服从参数为α的拉普拉斯分布:

p(x)=α2e(−α∣x∣)p(x)=\frac{\alpha}{2}e^{(-\alpha|x|)}p(x)=2α​e(−α∣x∣)

其中:α反映视频内容特性

定义失真度为绝对误差,得率失真函数:

R(D)={ln(1αD),0<D≤1α0,otherR(D) = \begin{cases} ln(\frac{1}{\alpha D}), & 0<D\leq\frac{1}{\alpha} \\ 0, & other \end{cases}R(D)={ln(αD1​),0,​0<D≤α1​other​

根据[1]中描述的依赖关系:

∂Di∂Ri=−λωi\frac{\partial D_i}{\partial R_i} = -\frac{\lambda}{\omega_i}∂Ri​∂Di​​=−ωi​λ​

∂Di∂Ri=−1αie−R\frac{\partial D_i}{\partial R_i} = -\frac{1}{\alpha_i}e^{-R}∂Ri​∂Di​​=−αi​1​e−R

结合上式:

Ri=−ln(αiωiλ)(3.1)R_i = -ln(\frac{\alpha_i}{\omega_i}\lambda) \tag{3.1}Ri​=−ln(ωi​αi​​λ)(3.1)

其中:

αi,ωi\alpha_i \, , \, \omega_iαi​,ωi​与视频内容相关ωi\omega_iωi​与时域预测结构相关λ由总比特数RcR_cRc​确定

上述公式的意义:只要找到λ-总比特数RcR_cRc​的关系,即可为每帧图像分配最优比特数!

实际中考虑复杂度,往往做出如下假设:

时域预测结构固定,内容特性稳定,不同图像之间最优目标比特数具有较为稳定的关系。

此时问题可简化为下式:

RiRj=ln(αiωiλ)ln(αjωjλ)=ηi,j(3.2)\frac{R_i}{R_j} = \frac{ln(\frac{\alpha_i}{\omega_i}\lambda)}{ln(\frac{\alpha_j}{\omega_j}\lambda)} = \eta_{i,j} \tag{3.2}Rj​Ri​​=ln(ωj​αj​​λ)ln(ωi​αi​​λ)​=ηi,j​(3.2)

∑i=1NRi=Rc(3.3)\sum_{i=1}^{N}R_i = R_c \tag{3.3}i=1∑N​Ri​=Rc​(3.3)

其中:

ηi,j\eta_{i,j}ηi,j​为第i、j图像之间的相关参数,由视频内容特性、时域预测结构、总目标比特数确定。

优化:

这里假设内容特性稳定,但实际该条件不一定满足。码率控制的不少文献中也指出了该问题。

量化参数模型概述

[1]中给出了多种目前研究得到的R-QP模型,其中各个模型均包含与视频序列相关的参数。这里省略推导过程。文中详细讲述二次率失真模型的推导,可以参见H264中模型的推导。

JM编码器码率控制算法笔记:以JVT-G012r1为例

JCTVC-K0103码率控制算法实现

目标比特分配

GOP级比特分配

GOP级比特分配根据目标码率、缓冲区状态、信道速率为每个GOP分配码率。JCTVC-K0103码率控制算法根据每帧的平均比特数计算GOP的可用比特数,公式如下:

Tg=T‾f⋅NG(4.1)T_g = \overline{T}_f \cdot N_G \tag{4.1}Tg​=Tf​⋅NG​(4.1)

T‾f=uFr+uFr×Nv,c−Rv,cSW(4.2)\overline{T}_f = \frac{u}{F_r}+\frac{\frac{u}{F_r}\times N_{v,c}-R_{v,c}}{SW} \tag{4.2}Tf​=Fr​u​+SWFr​u​×Nv,c​−Rv,c​​(4.2)

其中:

u为信道速率FrF_rFr​为帧率Nv,cN_{v,c}Nv,c​为视频序列已编码总帧数Rv,cR_{v,c}Rv,c​为已编码帧消耗比特SW为滑动窗口尺寸,用于平均比特波动,一般取值40

理解:

第一项uFr\frac{u}{F_r}Fr​u​为目标码率下平均每帧的比特数第二项uFr×Nv,c−Rv,cSW\frac{\frac{u}{F_r}\times N_{v,c}-R_{v,c}}{SW}SWFr​u​×Nv,c​−Rv,c​​为已编码帧消耗比特与目标消耗比特之间的偏差,反映缓冲区充盈度,该项的目的在于根据缓冲区状态对GOP的目标比特进行修正。SW反映了对于缓冲区状态的修正程度,较小SW容易导致GOP之间较大比特波动。

图像级目标比特分配

设GOP共有NGN_GNG​帧,第j帧的目标比特数为:

Tf(j)=β⋅T~f(j)+(1−β)⋅T^f(j)(4.3)T_f(j)=\beta\cdot\widetilde{T}_f(j) + (1-\beta)\cdot\hat{T}_f(j) \tag{4.3}Tf​(j)=β⋅Tf​(j)+(1−β)⋅T^f​(j)(4.3)

T~f(j)=TG×ωf(j)∑k=1Ngωf(k)(4.4)\widetilde{T}_f(j) = T_G \times \frac{\omega_f(j)}{\sum_{k=1}^{N_g}\omega_f(k)} \tag{4.4}Tf​(j)=TG​×∑k=1Ng​​ωf​(k)ωf​(j)​(4.4)

T^f(j)=TG−RG,c∑k=1Ngωf(k)⋅ωf(j)(4.5)\hat{T}_f(j) = \frac{T_G - R_{G,c}}{\sum_{k=1}^{N_g}\omega_f(k)}\cdot\omega_f(j) \tag{4.5}T^f​(j)=∑k=1Ng​​ωf​(k)TG​−RG,c​​⋅ωf​(j)(4.5)

其中:

β\betaβ为权重,典型值0.9RG,cR_{G,c}RG,c​为当前GOP已编码图像实际消耗比特ωf(j)\omega_f(j)ωf​(j)为GOP中每帧图像权重T~f(j)\widetilde{T}_f(j)Tf​(j)为根据当前GOP目标比特按每帧图像权重分配的比特数T^f(j)\hat{T}_f(j)T^f​(j)为根据当前GOP剩余可用比特按每帧图像权重分配的比特数

不同参考结构GOP每帧具有不同的权重,帧间编码图像权重如下表所示:

帧内编码图像目标比特数TfT_fTf​需要进行修正:

CTU级比特分配

设图像共有NLN_LNL​个CTU,第m个CTU目标比特数为:

TL(m)=Tf−Hf−RL,C∑k=1NLωL(k)⋅ωL(m)(4.6)T_L(m) = \frac{T_f-H_f-R_{L,C}}{\sum_{k=1}^{N_L}\omega_L(k)}\cdot\omega_L(m) \tag{4.6}TL​(m)=∑k=1NL​​ωL​(k)Tf​−Hf​−RL,C​​⋅ωL​(m)(4.6)

其中:

RL,cR_{L,c}RL,c​为当前GOP已编码图像实际消耗比特HfH_fHf​为图像头信息比特数预测值ωL(m)\omega_L(m)ωL​(m)为CTU权重,以当前图像相同层且距离最近图像对应位置CTU的MAD平方值计算

思考:

公式中ω为反映图像变化程度的量,但可能不准确:相同位置变化很大不代表运动预测后残差也大。

量化参数选择

图像级量化参数确定

实验表明,双曲函数可反映HEVC中码率-失真关系:

D(R)=CR−kD(R) = CR^{-k}D(R)=CR−k

λ=−∂D∂R=α⋅Rβ\lambda = -\frac{\partial D}{\partial R}=\alpha\cdot R^{\beta}λ=−∂R∂D​=α⋅Rβ

QP与lnλ之间存在如下关系:

QP=4.lnλ+13.7122(5.1)QP = 4.ln\lambda+13.7122 \tag{5.1}QP=4.lnλ+13.7122(5.1)

图像对应的拉格朗日乘子为:

bpp=Tf(j)/Npixels,fbpp = T_f(j)/N_{pixels,f}bpp=Tf​(j)/Npixels,f​

λ=α⋅bppβ(5.1)\lambda = \alpha \cdot bpp^{\beta} \tag{5.1}λ=α⋅bppβ(5.1)

其中:

Tf(j)T_f(j)Tf​(j)为第j帧图像的目标比特数Npixels,fN_{pixels,f}Npixels,f​为该帧图像的像素数α、β为相同层距离最近图像编码完成后α、β的更新值相邻图像λ比值限定为[1/210/3,210/3][1/2^{10/3},2^{10/3}][1/210/3,210/3]相同时间层相邻图像λ比值限定为[0.5,2][0.5,2][0.5,2]相邻图像QP差异不超过10相同时间层相邻图像QP差异不超过3

编码参数更新:

其中:

δα=0.1\delta_{\alpha} = 0.1δα​=0.1δβ=0.05\delta_{\beta} = 0.05δβ​=0.05α范围[0.05,20]β范围[-3.0,-0.1]

当实际编码bpp’太小时,按下式更新参数:

CTU量化参数确定

CTU对应的拉格朗日乘子为:

bpp=TL(j)/Npixels,Lbpp = T_L(j)/N_{pixels,L}bpp=TL​(j)/Npixels,L​

λ=α⋅bppβ(5.1)\lambda = \alpha \cdot bpp^{\beta} \tag{5.1}λ=α⋅bppβ(5.1)

其中:

TL(j)T_L(j)TL​(j)为第j个CTU的目标比特数Npixels,LN_{pixels,L}Npixels,L​为该CTU的像素数α、β为相同层距离最近图像相同位置CTU编码完成后α、β的更新值相邻CTU的λ比值限定为[1/21/3,21/3][1/2^{1/3},2^{1/3}][1/21/3,21/3]CTU的λ与图像λ比值限定为[1/22/3,22/3][1/2^{2/3},2^{2/3}][1/22/3,22/3]相邻CTU的QP差异不超过1CTU的QP与所属图像的QO差异不超过2

编码参数更新方式同图像级模型。

总结:

与H264的码率控制策略在速录上基本相同。该算法模型大多由经验得到,准确度尚有优化空间。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。