HEVC(十四):再谈RDO
在视频编码中率失真优化Rate-Distortion Optimization, RDO是决定编码器画质与压缩效率的“大脑”。HEVCH.265之所以能比 H.264 提升 50% 的压缩效率除了引入更灵活的划分结构外最核心的原因就在于它在极其复杂的选择空间中利用 RDO 找到了数学上的最优解。简而言之RDO 的核心任务是在码率Rate受限的死命令下通过挑选最佳的编码参数让画面失真Distortion降到最低。一图总结一句话总结RDO率失真优化就是视频编码器里的“性价比终极考量”它把画面切成无数个小块让每一种画质配置和划分方式都去PK同一个公式——“谁能用最少的流量码率换来最清晰的画面最小失真谁就胜出”。RDO 的数学本源拉格朗日乘子法视频编码本质上是一个受约束的优化问题minDs.t.R≤Rmax\min D \quad \text{s.t.} \quad R \le R_{\text{max}}minDs.t.R≤Rmax即在总比特数RRR不超过最大限制RmaxR_{\text{max}}Rmax的前提下寻找一种编码模式组合使重构图像与原始图像之间的失真DDD最小。直接求解这个有约束的非线性规划问题在工程上极难实现。为了打破僵局信号处理领域引入了拉格朗日乘子法将约束问题转化为无约束的率失真代价R-D Cost, 记为JJJ最小化问题JDλ⋅RJ D \lambda \cdot RJDλ⋅RDDDDistortion失真代表编码后的画面偏离原始画面的程度。常用指标有SSD平方误差和数学性质好最常用和SAD绝对误差和计算快。RRRRate率编码当前模块实际消耗的比特数包括残差系数、运动矢量 MV、语法元素等熵编码后的总和。λ\lambdaλLambda拉格朗日乘子核心调节杠杆。它决定了编码器对“比特”和“画质”的敏感程度。λ\lambdaλ的值通常由量化参数QPQPQP决定在 HEVC 中经验公式通常为λc⋅2QP−123\lambda c \cdot 2^{\frac{QP-12}{3}}λc⋅23QP−12。QPQPQP大→λ\rightarrow \lambda→λ大意味着比特非常昂贵。公式中RRR的权重极大编码器会为了省比特求更低的JJJ而忍受大失真画面变糊。QPQPQP小→λ\rightarrow \lambda→λ小意味着比特很便宜。编码器会为了压低失真DDD而疯狂砸比特换取高画质。HEVC 为什么要进行全方位的 RDO在 H.264 时代模式选择相对简单。但在 HEVC 中编码器的决策空间呈爆炸式增长块划分的爆炸组合CTU最大64×6464\times6464×64可以递归划分为 CU最小8×88\times88×8CU 内部又派生出 PU预测单元和 TU变换单元。一个64×6464\times6464×64的区域有上万种可能的划分方式。帧内预测模式剧增从 H.264 的 9 种方向飙升到 HEVC 的 35 种33 种角度 DC Planar。帧间预测的灵活性支持 Merge、Skip、AMVP 模式以及 8 种不对称运动划分AMP如nLxMnLxMnLxM等。面对如此庞大的选择组合编码器无法只靠经验盲猜必须让每一种可能的组合都走一遍JDλ⋅RJ D \lambda \cdot RJDλ⋅R的考场谁的JJJ最小谁就是最后的赢家。HEVC RDO 的分层决策架构为了防止计算量彻底失控HEVC 官方参考软件HM及主流商用编码器如 x265采用了自底向上Bottom-Up递归决策与分级筛选的经典 RDO 架构。帧内预测Intra的 RDO 流程对于一个给定的 CU要从 35 种模式中挑出最优直接做全套 RDO 计算量会让人崩溃。因此HM 引入了粗选Rough Mode Decision, RMD与全 RDO结合的两级筛选机制第一级RMD 粗选低复杂度代价不进行真正的变换、量化和熵编码。直接计算 35 种模式下原始像素与预测像素之间的SADSADSAD加上模式本身的比特估计代价JRMDSADλmotion⋅RmodeJ_{\text{RMD}} SAD \lambda_{\text{motion}} \cdot R_{\text{mode}}JRMDSADλmotion⋅Rmode。按JRMDJ_{\text{RMD}}JRMD从小到大排序筛选出前几名根据块大小保留 3 种或 8 种候选模式并加入最可能预测模式MPM。第二级全 RDO 决胜负对通过粗选的极少数精英候选模式执行完整的预测→\rightarrow→变换→\rightarrow→量化→\rightarrow→反量化→\rightarrow→反变换→\rightarrow→重构。此时计算最精确的DSSDD SSDDSSD重构与原始的平方差并通过实际的 CABAC 估计出精准的比特数RRR。计算JSSDλ⋅RJ SSD \lambda \cdot RJSSDλ⋅R代价最小的模式胜出。帧间预测Inter的 RDO 流程帧间预测主要解决运动估计ME和模式选择Merge/Skip vs AMVP的问题Skip/Merge 模式代价计算由于 Skip 和 Merge 模式不需要传输运动矢量残差MVD只传一个索引所以比特数RRR极低。编码器会先计算它们的JJJ作为后续对比的“基准线”。AMVP 模式下的运动搜索ME整数像素搜索为了快通常使用JSADλmotion⋅RMVDJ SAD \lambda_{\text{motion}} \cdot R_{\text{MVD}}JSADλmotion⋅RMVD作为代价函数寻找最佳匹配块。分像素搜索半像素、1/4像素由于需要插值计算量大通常改用SATDSATDSATD经哈达玛变换后的绝对误差和替代SADSADSAD使之更接近真实频域失真。终极全 RDO 裁决将求出的最佳运动矢量MV进行残差编码与 Skip/Merge 模式一起进入全 RDOSSDλ⋅RSSD \lambda \cdot RSSDλ⋅R进行终极PK。树状划分CU/PU/TU的递归 RDO这是 HEVC RDO 最消耗算力的部分。以一个64×6464\times6464×64的 CTU 为例它的最优划分是通过深度优先递归算出来的假设当前在深度 064×6464\times6464×64。编码器首先尝试不划分把它当成一个单一的 CU。计算该情况下最优预测模式的全 RDO 代价记为JParentJ_{\text{Parent}}JParent。然后编码器将该块强行切分为 4 个32×3232\times3232×32的子块深度 1。对这 4 个子块分别进行递归每一个子块内部又会继续尝试往下切分直到8×88\times88×8。每一层都会计算出子块的最优代价。当 4 个32×3232\times3232×32的子块全部计算完毕后将它们的最小代价相加JChildren∑i14JchildiRsplit_flag⋅λJ_{\text{Children}} \sum_{i1}^4 J_{\text{child}_i} R_{\text{split\_flag}} \cdot \lambdaJChildren∑i14JchildiRsplit_flag⋅λ。做出决断比较JParentJ_{\text{Parent}}JParent和JChildrenJ_{\text{Children}}JChildren。如果JParent≤JChildrenJ_{\text{Parent}} \le J_{\text{Children}}JParent≤JChildren说明“不切分”更划算该块维持64×6464\times6464×64。如果JParentJChildrenJ_{\text{Parent}} J_{\text{Children}}JParentJChildren说明“切分”能用更少的比特换来更好的画质编码器决定执行切分。RDO 的核心痛点计算复杂度与工程优化虽然 RDO 在数学上完美但它的计算复杂度极其恐怖。如果开启全 RDO编码器需要对每一个最小单元进行无数次的变换、量化、反量化、反变换和通电重构。在商用实时编码如直播、4K/8K 传输中“全盲搜索”的 RDO 是绝对无法接受的。因此现代视频编码器如开源的 x265的核心科技就在于如何优雅地“偷懒”降低 RDO 复杂度Early Skip / Early Termination提前终止机制在递归进行 CU 划分时如果发现当前64×6464\times6464×64的块在 Skip 模式下的 R-D Cost 已经小于一个特定阈值且残差基本为 0编码器就会断定这是一个“静态背景静态区”直接终止向下划分直接跳过后面几万次的递归计算。基于机器学习/统计学的划分预测利用邻近块的时空相关性或者通过轻量级的纹理分析如计算当前块的梯度、方差提前预测该块大概率不需要切分或者大概率只能走某些帧内方向从而将 35 种模式裁剪到 3-5 种。Hadamard 代价SATD替代SSDSSDSSD在非最终决策层级用计算极为简单的哈达玛变换能量SATD来模拟频域量化后的失真DDD避免了真正走一遍量化、反量化和重构的硬件流水线。RDOQ率失真优化量化在量化阶段普通的量化只是机械地做四舍五入。而 RDOQ 会对变换系数中的每一个非零系数进行微调比如把一个接近 0.5 的系数强制变成 1 还是变成 0看哪种选择带来的JDλ⋅RJ D \lambda \cdot RJDλ⋅R综合代价更低。这能为 HEVC 额外带来 5% 左右的省带宽增益。总结HEVC 的RDO率失真优化是通过拉格朗日乘子λ\lambdaλ架起的一座桥梁它把本无法直接相加的两个物理量——主观画质的物理损耗失真DDD与客观世界的网络资源码率RRR成功统一在同一个价值评价体系内。通过自底向上的树状递归模式比对RDO 确保了编码器输出的每一帧画面、每一段运动矢量、每一个划分语法都符合“性价比最高”的原则。理解了 RDO 的拉格朗日代价函数就理解了现代视频编码器在性能、画质与带宽之间进行极限拉扯与平衡的底层逻辑。