参考资料:
[1]万帅,杨付正编著. 新一代高效视频编码H.265/HEVC 原理、标准与实现[M]. 北京:电子工业出版社, 2014.12.
视频率失真曲线
对于某一视频编码标准,其编码框架已经确定,在给定的编码框架中选择不同的编码参数可以获得不同的率失真性能。HEVC中可选的编码参数有CTU分割模式、预测模式、变换模式和量化参数等,不同的编码参数对应一组(R,D),称为一个可操作点。
遍历所有编码参数组合,对于当前给定的视频序列和任意码率限制Rc,总可以找到一组编码参数最小化失真D。不同码率Rc下的(R,D)组成的凸包络曲线称为可操作率失真曲线,代表系统可以达到的率失真性能。
率失真优化的目标为:给定码率下找到一组编码参数是的操作点尽可能靠近可操作率失真曲线。
视频编码的率失真优化
实际应用中遍历所有编码参数是不现实的,因此需要利用问题分解的思想,将视频序列的编码参数决策分解为多个子任务,为每个子任务确定最优参数集。
m i n ∑ i = 1 N D i , j s . t . ∑ i = 1 N R i , j < R c (1) min \sum_{i=1}^{N}{D_{i,j}} \,\, s.t. \sum_{i=1}^{N}{R_{i,j}} < R_c \tag{1} mini=1∑NDi,js.t.i=1∑NRi,j<Rc(1)
其中:
- 共有N个子任务,i为子任务的序号
- 共有M中可操作点,j为操作点序号
实际中视频质量在时域、空域不具备可加性,但常用的客观质量评价指标(如MSE)具有可加性,可以假设问题可被拆分求解。
实际编码中子任务之间存在相关性,即当前子任务的决策会影响下一个子任务的结果。如:帧间预测的参考帧选择会影响后续运动搜索的结果,进而影响率失真性能。
常用优化算法
拉格朗日优化法
用S代表可选操作B的集合,定义失真D(B)为操作B的目标函数,码率R(B)为B的限定函数。约束性优化问题可以表达为:给定限定码率Rc,寻找最优操作B,使得:
m i n B ∈ S D ( B ) , s . t . R ( B ) < R c (2.1) min_{B \in S} D(B), \,\, s.t. \, R(B)<R_c \tag{2.1} minB∈SD(B),s.t.R(B)<Rc(2.1)
引入拉格朗日乘子,转化为非约束性问题:
m i n B ∈ S D ( B ) + λ R ( B ) (2.2) min_{B \in S} {D(B)+\lambda R(B)} \tag{2.2} minB∈SD(B)+λR(B)(2.2)
给定一个 λ \lambda λ,存在一个当前的最优操作 B ∗ ( λ ) B^{*}(\lambda) B∗(λ),使得当 R c = R ( B ∗ ( λ ) ) R_c = R(B^{*}(\lambda)) Rc=R(B∗(λ))时, D ( B ) D(B) D(B)取得最小值。注意这里是先给出λ再得到Rc
实际中,常常是先给出Rc,而后希望找出合适的λ来确定最优操作 B ∗ ( λ ) B^{*}(\lambda) B∗(λ)!
根据研究,视频编码中的λ取值与量化参数QP往往存在较为固定的函数关系。已有的码率控制算法通常根据Rc -> QP -> λ的路径进行编码参数选择。较新的研究也有通过Rc直接计算λ的方法。
在问题分解为子任务的情况下,限定性问题表达为:
m i n J , J = ∑ i = 1 N D i , j + λ R i , j = ∑ i = 1 N J i , j (2.3) min J, \,\, J = \sum_{i=1}^{N}{D_{i,j} + \lambda R_{i,j}} \\ = \sum_{i=1}^{N}{J_{i,j}} \tag{2.3} minJ,