来源:SPIE2021 主讲人:Gaurang Chaudhari 内容整理:王珅 本次演讲主题为针对 UGC 视频编码优化的基于机器学习的编码系数调整,主讲人为 Gaurang Chaudhari。在新冠疫情期间,视频对于数十亿居家办公的人来说是非常重要的。two-pass 视频编码可以根据第一遍获得的编码统计数据对编码参数进行细化。由于 UGC 内容特性千差万别,这种编码参数的细化是有极大的潜力的。主讲人展示了如何通过线性和非线性函数得到更好的预测模型实现码率控制来取代传统的模型。此外,主讲人介绍可以利用 first-pass 得到的统计数据来进一步完善编码参数。最后主讲人展示了在Facebook视频序列上的测试结果,这种方法在不同的编码器上均能够带来码率的节省。
目录
- 引言
- Libvpx 帧级提高
- 动态提升缩放方案
- 实验结果
- 结论
本次演讲主题为针对 UGC 视频编码优化的基于机器学习的编码系数调整,主讲人从五个部分分别介绍了所提出的方法,最后提供了在Facebook视频序列上的测试结果,展示了这种方法在不同的编码器上均能够带来码率的节省。
引言
视频编码领域的许多新兴工作都应用了基于机器学习的算法来进一步提高编码效率或质量,或者减少最佳编码的搜索空间加快决策实现复杂度的降低。主讲人首先介绍了机器学习在视频编码中速率控制方面的应用,尤其是在选择合适的量化参数(Qp)方面。
速率控制(RC)是视频编码的一个重要组成部分。它可以通过优化为每一个编码单元分配的比特数来最大限度地提高视频质量,以满足视频流带宽的限制。一个典型的速率控制方法依赖于比特使用统计(已使用的比特数)、 Qp(量化参数)、目标比特、缓冲区约束,以及帧级统计信息(编码质量、过去和当前帧编码复杂性等)作为输入,并输出下一个编码视频帧的 Qp。Qp 决定了失真和编码比特数之间的权衡,较大的 Qp 值一般对应较低的质量。需要注意的是,虽然下一帧的 Qp 值是由速率控制根据先前的统计数据和编码器数据决定的,但最终的编码结果在编码器完成对该视频帧的编码之前仍旧是无法知晓的。只有在真正编码完成之后,编码器才会更新速率控制单元中的信息,用于后续帧的决策目的。在一个典型的视频编码器中,速率控制机制如图 1 所示:
- 1.估计编码帧的复杂性和编码帧的目标比特。
- 2.选择一个能在比特率和整体质量之间做出最佳权衡的 Qp。
- 3.对该帧进行编码。
- 4.更新编码位数和其他帧的统计数据。
VP9编码器中的速率控制算法
主讲人介绍他们提出的方法可以用于任何类型的视频编码器,但他们将针对第二节中介绍的 VP9 标准的 libvpx 实现来描述它。第三节概述了如何使用基于 first-pass 统计的机器学习模型来更好地预测帧级 Qp,最后第四节和第五节介绍了所提方法的结果和结论。
Libvpx 帧级提高
Libvpx 是开源的 VP9 编码器实现,许多研究者以此为参考进行研究开发。在 Libvpx 中有一个 2-pass 的编码方法,首先对整个视频进行非常快速地第一轮分析,所得到的统计数据将被用来调整第二轮的编码参数,计算目标帧的大小和规划整个视频流的比特分布。
速率控制能够调整 2-pass 参数,并确定关键帧(KF)组,过程如下图所示:
KF组确定过程
当根据场景切换和用户限制决定了下一个关键帧和关键帧间隔,就会根据剩余的比特和该部分的相对复杂性计算分配给关键帧组的比特数。对 KF 组进行扫描以收集和积累各种统计数据,这有助于确定用于 KF 组的比特数,并决定 KF boost。frame boost 的计算方法如下:
frame_boost = (err_per_mb * active_area)/inter_error
动态提升缩放方案
速率控制过程中的 frame boost 有助于更有效地在 GOP 中分配每帧比特并选择 Qp 值。上式中的 frame boost 计算是基于每个宏块误差的经验数据得出的,由于它是基于最近的历史,所以预测比特分配时效率较低。主讲人提出了一种方法,用一个系数来衡量计算出的 boost,该系数考虑了帧复杂性随时间的变化,如下式所示。这有助于防止 libvpx 中由于使用 err_per_mb的经验值而出现的过度提升关键帧的问题。
frame_boost = (BSF * err_per_mb * active_area)/inter_error
在 two-pass 编码中 first-pass 统计信息可以提供每一帧编码复杂性的相关信息,主要有五种类型的原始数据被计算:
- 帧内预测的SSE
- 上一帧的帧间预测SSE
- GOLDEN帧的帧间预测SSE
- 块噪声能量
- 运动向量
这些数据可以被速率控制算法用于调整 two-pass 的参数。主讲人使用 first-pass 数据预测 boost 缩放系数(BSF),下面对帧内和帧间预测分别提出预测模型。
对于帧内预测模型,在 first-pass 统计数据中选择了 4 个与关键帧复杂度有关的参数,用于线性回归模型。
- intra_error(每像素帧内预测编码误差估计)
- frame_noise_energy(对每块(16x16)噪声水平的估计)
- intra_skip_pct 和 intra_smooth_pct ( intra_skip_pct 和intra_smooth_pct 都表示帧内预测编码误差小于某一阈值的编码块百分比)
得到的线性回归参数如下表所示:
帧内预测模型线性回归系数和截距
对于帧间预测模型,通过主成分分析,选择了 4 个变量,用于线性回归模型。
- sr_coded_error(每个编码块帧间编码误差估计)
- frame_noise_energy
- pcnt_motion(用最后一帧编码的块的百分比)
- pcnt_second_ref(用 GF 编码的块的百分比)
- pcnt_intra_low
- pcnt_intra_high
- intra_skip_pct
- intra_smooth_pct
得到的线性回归参数如下表所示:
帧间预测模型线性回归系数和截距
实验结果
可以看到,提出的方案相较于 Baseline 使用的比特数更少。虽然质量指标也有降低,但差值非常小。
实验结果
结论
在这项工作中,主讲人提出了一种新的方法,将 first-pass 统计数据作为预测模型的输入,动态地调整量化参数的 frame boost。我们可以用更好的预测模型取代传统模型,使用线性模型函数进行 frame boost 计算。使用 PCA 方法分别为关键帧和黄金帧确定两组特征统计。使用线性回归比较了相关的编码性能,并提出了典型的 Facebook 视频内容的实验结果,显示与原始的libvpx VP9 编码器相比, BD-rate 性能有所提高。所提出的方法通过考虑内容中的各种特性,主要针对UGC内容,有助于防止关键帧和黄金帧的过度提升,这对所有应用来说都是一个有益的功能。