基于MCMC的X265编码参数优化方法

一、背景介绍

新一代视频编码标准,包括高效视频编码HEVC和音频视频编码标准AVS2近年来已被提出以进一步提高H.264/AVC编码标准的压缩性能。在相同的主观视觉的前提下,HEVC相比其上一代编码器H.264/AVC实现了大约40%的比特率降低。更加复杂的编码树结构和高级运动矢量预测之类的新技术已经在压缩比方面带来了很大的改进,但是它们也导致复杂度的显著增加。因此,作为HEVC标准的正式提供的参考软件,HM一般只用于验证压缩算法,由于其过于复杂而难以直接应用于实际应用。

为了加速HEVC编码,许多研究围绕着并行和提前终止展开。HEVC标准本身兼容波前并行处理(WPP)并行编码。提前终止算法包括快速CU深度决策方法,快速PU模式判决方法以及有效的预测方案来降低速率失真优化(RDO)复杂度。事实上,除了局部算法优化之外,通过调整参数的方法,也可以实现复杂度的优化。文献[1]通过分析编码器,建立了不同的复杂度可扩展系统,分析所有编码参数并分析重要因素,并将分析结果用于控制编码时间。这种思路一般是基于Pareto法则,即大部分的编码结果一定是由小部分的因素决定。尽管如此,HM并非实用编码器。基于HM的复杂性控制只具有有限的实用价值。

x265[2]是当今最广泛使用的HEVC视频编码器,它由于自己并行的编码模式和一些提前终止算法的使用能够在家用计算机上实现720p 30fps的实时编码,十分具有实用价值。由于x265采用并行,因此某些参数的码率-失真-时间(RDT)性能的影响与文献[3]中分析的单线程相比有很大差异。而且,由于并行特性和提前终止算法,x265拥有比HM更多的参数,因此非常需要对这些参数的影响进行彻底分析指导实际应用。然而现有工作尚未报告对x265参数的影响进行全面分析。当前,编码效率和复杂度一般通过经验性的参数设定,这显然有可优化的空间。因此,需要对x265编码参数进行细致全面的研究。

二、x265编码参数分析筛选

对x265编码参数的研究从默认配置的编码速度-编码性能表现入手。

图1 x265默认配置编码性能对比

我们分别用x265的10个默认编码配置编码ClassA~ClassF中所有的编码器通用测试序列,并记录编码时间与编码性能,得到如上图所示的表现,将所有数据取代数平均得到下表所示的x265默认配置编码速度-编码性能配比。

表1 x265默认配置编码性能-相对时间

从上表中可以看出,Slow配置参数处于编码速度-编码性能的拐点,因此具有最高的"性价比",另一方面,Slower虽然编码时间是Slow的三倍,但是从平均性能看来甚至还不如Slow,这从侧面印证编码器进行了很多计算,但是大多数都属于"空转",x265默认编码参数一般都沿用上一个版本,但随着编码器内部工具的增多,初始编码参数已经不是最优值。事实上,Slow和Medium配置在实际应用中使用最多,因此基于Slow配置进行优化是比较合理的方案。既然要基于Slow配置进行优化,首先需要了解x265默认编码参数值从Slow到Ultrafast都有哪些更改。如下表所示,其中加粗的字体是Slow配置的参数值:

表2 Slow到Ultrafast相关编码参数

可以发现,参数及参数值的选择非常多,其中部分参数对编码速度-编码性能的影响粒度较大,有些影响粒度较小。在同样编码性能损失下,不同参数带来的时间增益也不同,因此需要一个评价指标评判各编码参数修改的性价比:

其中TS代表着改变编码参数带来的编码时间节省,BDBR代表随之而来的编码性能损失。有了该评价指标,我们每次在Slow的默认配置上修改一个参数的参数值,并观察本次修改带来的效果,经过RDTscore以及BDBR和TS的筛选,表2精简为表3所示:

表3 Slow到Ultrafast精简的编码参数

表中的编码参数及参数值的改变均可以对编码时间和编码性能带来明显的变化。

三、基于MCMC的更优编码参数配置的生成

在有限因素的前提下,为了获取最优值,传统有两种方法。第一种是遍历所有的组合,以获取最优解,一种是使用贪婪法,以最快速度获取较优解。但是遍历所有组合效率较低,基于RDTscore的贪婪法又只考虑单个参数改变带来的影响。为了考虑到不同参数之间的相互影响,本工作采用MCMC的思想,设计了一个参数自适应算法。

MCMC的思想,即蒙特卡洛法马尔可夫链,是通过随机采样的方法构筑状态机中的不同状态的跳转情况下结果的几率,并通过各种结果的概率决定当前状态需不需要进行转移。其思想主要用于围棋AI算法。

在编码参数的自适应中,参数的改变也是一个状态跳转的过程。我们设置目标编码时间,使用初始编码参数进行编码,从旧编码参数生成新编码参数,并根据新编码参数的编码结果决定新的参数组合是否被接受,即是否进行跳转。

图2 模拟状态跳转图

图2展示了一个目标时间为0.3的模拟状态跳转图,其中红色的箭头代表被拒绝的新参数组合,绿色箭头代表被接受的新参数组合。可以看出,经过有限次的跳转,初始编码参数可以逐步收敛到目标编码时间一定阈值内,编码性能相对x265默认编码配置较优的编码参数。具体的跳转方法和边界条件请参考论文细节[4]。将目标编码时间分别设置为0.9~0.1,按照设计的MCMC算法,在不遍历所有参数组合的前提下,即可生成一系列比x265默认编码参数更优,并且接近最优的编码参数。

表4 生成的新编码配置表

通过对比生成的编码参数和x265默认的编码参数,可以算得在保证同样编码性能的前提下,节省26.72%的编码时间,这对于本身编码速度就很快的x265编码器可以说效果十分显著,具有实用价值。

本贴文章IEEE下载链接:https://ieeexplore.ieee.org/document/8351034/

参考文献

[1] Corrêa G, Assunção P A, Agostini L V, et al. Pareto-based method for high efficiency video coding with limited encoding time[J]. IEEE Transactions on Circuits and Systems for Video Technology, 2016, 26(9): 1734-1745.

[2] x265.x265 Software [Online].Available:https://bitbucket.org/multicoreware/x265/downloads/.

[3] M. Grellert, S. Bampi, and B. Zatt, "Complexity-scalable hevc encoding,"in 2016 Picture Coding Symposium (PCS), Dec 2016, pp. 1-5.

[4] Huang Y, Song L, Xie R, et al. An MCMC based Efficient Parameter Selection Model for x265 Encoder[C]//Circuits and Systems (ISCAS), 2018 IEEE International Symposium on. IEEE, 2018: 1-5.

原文发布于微信公众号 - 媒矿工厂(media_tech)

原文发表时间:2018-06-15

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏机器学习算法与Python学习

神经网络图灵机

摘要 本文通过引入一个使用注意力程序进行交互的外部存储器(external memory)来增强神经网络的能力。新系统可以与图灵机或者冯·诺依曼体系相类比,但每...

35390
来自专栏javascript趣味编程

3.1 Contour绘制

首先一起学习利用百度的开源项目绘制contour,百度搜索“echarts heatmap”,找到热力图的一个案例(http://echarts.baidu.c...

13200
来自专栏吕晟的专栏

机器学习库初探之 TensorFlow

什么是TensorFlow?TensorFlow™ 是一个采用数据流图(data flow graphs),用于数值计算的开源软件库。节点(Nodes)在图中表...

77610
来自专栏一心无二用,本人只专注于基础图像算法的实现与优化。

SSE图像算法优化系列五:超高速指数模糊算法的实现和优化(10000*10000在100ms左右实现)。

      今天我们来花点时间再次谈谈一个模糊算法,一个超级简单但是又超级牛逼的算法,无论在效果上还是速度上都可以和Boxblur, stackblur或者是G...

421100
来自专栏ATYUN订阅号

【学术】不懂神经网络?不怕,一文教你用JavaScript构建神经网络

AiTechYun 编辑:xiaoshan.xiang 本文的内容并不是关于神经网络的深度教程,在这里既不会深入研究输入层、激活函数的内部原理,也不会教你如何使...

35140
来自专栏深度学习之tensorflow实战篇

数据挖掘PageRank算法(网页排名原理)及Map-Reduce实现

方法/步骤 1 一、什么是pagerank PageRank的Page可是认为是网页,表示网页排名,也可以认为是Larry Page(google...

47490
来自专栏UAI人工智能

实战派 | PaddlePaddle 你其实也可以真正地上手

19240
来自专栏大数据挖掘DT机器学习

R语言数据处理:飞机航行距离与到达延误时间有什么关系??

数据分析有一半以上的时间会花在对原始数据的整理及变换上,包括选取特定的分析变量、汇总并筛选满足条件的数据、排序、加工处理原始变量并生成新的变量、以及分组汇总数...

37940
来自专栏Python爬虫与算法进阶

爬取 Stackoverflow 100 万条问答并简单分析

作为一个热爱编程的大学生,怎么能不知道面向 stackoverflow 编程呢。 打开 stackoverflow 主页,在 questions 页面下选择按...

34950
来自专栏ACM算法日常

除以3,乘以2(STL+排序)- Codeforces 997D

Polycarp likes to play with numbers. He takes some integer number x, writes it d...

12220

扫码关注云+社区

领取腾讯云代金券