参考:Complexity Control of High Efficiency Video Encoders for Power-Constrained Devices
《HEVC标准介绍、HEVC帧间预测论文笔记》系列博客,目录见:http://www.cnblogs.com/DwyaneTalk/p/5711333.html
2011 期刊
 
核心思想:
        通过以frame为单位,限制帧内每个CU的最大depth来实现对视频序列编码复杂度的控制。
思路分析:
        实验环境:HM2, low delay and low complexity, 1280*768  504-frames Basketball、BQTerrace and Cactus video sequence。64-bits and 2.27GHz CPU
        复杂度(computional complexity)衡量:通过特殊的检测软件分析器(software profiler)统计编码过程中,各个部分消耗的时间。
        图1、不同CU深度在编码中所占复杂度比例
       

如图1:统计的是视频序列中,对于64x64的CTU编码过程中,depth=1、2、3和4 对应的CU块的编码复杂度。灰色区域是对应depth下的CU进行帧间预测复杂度,黑色是对应depth下其他操作的复杂度。编码64x64的CTU时,在CTU的树形结构中depth=1对应的32x32的CU进行帧间预测复杂度占据整个CTU的编码复杂的14.6%,对应depth=2、3和4时,占据的整个CTU复杂度比例分别是15%、17.4%和47.2%。

        上图数据说明:在CTU的递归编码过程中,随着depth的增加,所需要的计算复杂度逐渐增加,特别是当depth为4时,此时CU size为8*8,由于一个64*64的CTU,包含64个8*8的CU,所以在不进行加速优化时,depth占据将近一般的计算复杂度,因此限制CTU的maxinum depth是本论文的核心和出发点。
图2、视频序列中co-location的CTU实际编码深度的连续性       

如图2:显示了对于BQTerrace视频序列,对于505个frame中随意某个位置的CTU的编码深度变化,可以看出:1、编码过程中编码深度为4的frame约50%左右,有很大的复杂度优化空间;2、CTU编码深度在时域上有很大的temporal consistency,最小的两次CTU depth变化也在20帧以上,这个特性为预测优化CTU深度提供前提和优化空间。

算法介绍:
        总体思想:
图3、视频序列编码过程中控制示意图
        Fu(unconstrained frame):不加深度限制的帧,视频序列第一帧一般定义为Fu,帧内按标准流程进行编码;
        Fc(constrained frame):对于帧内所有CTU都进行最大depth限制的帧,编码复杂度降低的帧。

如图:将视频帧定义为Fu和Fc两类。对于每个Fu,编码过程中按照标准中正常的流程进行编码,Fu编码结束后,记录每一个64*64CTU的最大编码深度。Fu随后的Nc个Fc帧,编码时,对于每个CTU,编码的最大CU depth为前一个Fu的对应位置CTU的最大编码深度(Fu帧编码时以存储先来)。编码过程中,NC个Fc帧之后,Nc的值会根据目标复杂度、已编码序列的复杂度和剩余未编码帧数进行动态调整。

        具体步骤:
图4、编码步骤伪代码
        变量含义:(下面叙述中,计算复杂度可以理解为计算资源)
                Nt:视频序列中,所有帧的数目;
                Nd:当前已处理的帧数;
                Nc:连续Fc帧的数目;
                Tt:对于当前视频序列,预先定义的目标计算复杂度,可以根据CPU资源、电量或者用户自定义来确定。
                Td:当前已处理的Nd帧,所消耗的计算复杂度;
                Te:对于最新的Fu帧和其随后的Nc帧Fc帧,所消耗的计算复杂度(只有Nc个Fc帧编码完成后,才会用到Te的值);
                Tp:根据估计,计算得到的剩余的Nt-Nd帧,还剩余的计算复杂度,按照线性比例估计。公式如下:
        根据上面伪代码,初始化相关变量之后:
            S1、先编码Fu帧,按照没有优化的流程记性所有深度的CU搜索尝试,然后将每个CTU的depth存储到MaxCUD_history[n]中,Nd++;
            S2、对于之后的Nc个Fc帧,按照每个CTU的最大depth为MaxCUD_history[i]进行编码,每处理一帧Nd++;
            S3、重新获得Te、Td(=Td+Te)和Tp(=公式1)的值;
            S4、更新Nc的值:1、如果Td+Tp>Tt*1.1(预计全部帧编码完成消耗的计算复杂度多余目标),那么Nc++,使得下一个Fu帧之后,有更多的Fc帧,从而节省计算复杂度。2、如果Td+Tp<Tt*0.9(预计全部帧编码完成消耗的计算复杂度少于目标),那么Nc--,使得下一个Fu帧之后,有更少的Fc帧,从而使用更多的计算复杂度。3、否则,NC的值保持不变。
            S5、如果编码所有帧没有完成,那么从S1继续。
            PS:对于FR(帧率)的使用,是为了保证每一秒的视频序列内有一个Fu帧,避免长期编码Fc帧,使得质量下降太多。而对于当Nc达到FR是,预计使用的编码复杂度仍然大于目标复杂度时,通过使用MaxCUD_history[i]-1来作为最大CTU深度,对计算复杂度进一步控制。
实验展示:

        Fig6展示的是对于三个视频序列,目标计算复杂度和实际计算复杂度,表明算法在对复杂度的控制,基本上达到了目标计算复杂度的要求。Fig7展示的是在编码一个视频序列的504帧过程中,Nc的编码过程,从图中可以看出帧率是大于25fps的。

        Fig8展示的是,对于50帧测试序列,编码过程中每帧平均CU深度(黑色、左边坐标)的变化和码率(灰色、右边坐标)变化,可以看出二者都是每隔一定帧数会有一个峰值,这一帧就对应着Fu帧,而在其他帧,CU深度和码率都有一定的下降。Fig9展示的是平均CU深度和PSNR,Fig10展示的是平均CU深度和编码时间,二者与Fig8有相同的规律。

        Fig11-13,分辨从不同目标计算复杂度(不进行优化时计算复杂度的40%、60%、80%和100%)下码率、PSNR个率失真性能三个方面衡量了算法的性能,可以看出在60%、80%和100%时,码率、PSNR和率失真性能基本没有变化。只有当40%时,码率略有增加,PSNR略有降低,率失真曲线略有下降。

        表2-4,则分别展示了三个视频序列,在四个不同目标计算复杂度下,运行时间、码率、PSNR的表现和变化。

【HEVC帧间预测论文】P1.8 Complexity Control of High Efficiency Video Encoders for Power-Constrained Devices的更多相关文章

  1. 【HEVC帧间预测论文】P1.9 Coding Tree Depth Estimation for Complexity Reduction of HEVC

    Coding Tree Depth Estimation for Complexity Reduction of HEVC <HEVC标准介绍.HEVC帧间预测论文笔记>系列博客,目录见: ...

  2. 【HEVC帧间预测论文】P1.4 Motion Vectors Merging: Low Complexity Prediction Unit Decision

    Motion Vectors Merging: Low Complexity Prediction Unit Decision Heuristic for the inter-Prediction o ...

  3. 【HEVC帧间预测论文】P1.7 Content Based Hierarchical Fast Coding Unit Decision Algorithm

    Content Based Hierarchical Fast Coding Unit Decision Algorithm For HEVC <HEVC标准介绍.HEVC帧间预测论文笔记> ...

  4. 【HEVC帧间预测论文】P1.6 A Fast HEVC Inter CU Selection Method Based on Pyramid Motion Divergence

    A Fast HEVC Inter CU Selection Method Based on Pyramid Motion Divergence <HEVC标准介绍.HEVC帧间预测论文笔记&g ...

  5. 【HEVC帧间预测论文】P1.5 Fast Coding Unit Size Selection for HEVC based on Bayesian Decision Rule

    Fast Coding Unit Size Selection for HEVC based on Bayesian Decision Rule <HEVC标准介绍.HEVC帧间预测论文笔记&g ...

  6. 【HEVC帧间预测论文】P1.3 Fast Inter-Frame Prediction Algorithm of HEVC Based on Graphic Information

    基于图形信息的HEVC帧间预测快速算法/Fast Inter-Frame Prediction Algorithm of HEVC Based on Graphic Information <H ...

  7. 【HEVC帧间预测论文】P1.2 An Efficient Inter Mode Decision Approach for H.264 Video Codin

    参考:An Efficient Inter Mode Decision Approach for H.264 Video Coding <HEVC标准介绍.HEVC帧间预测论文笔记>系列博 ...

  8. 【HEVC帧间预测论文】P1.1 基于运动特征的HEVC快速帧间预测算法

    基于运动特征的 HEVC 快速帧间预测算法/Fast Inter-Frame Prediction Algorithm for HEVC Based on Motion Features <HE ...

  9. H.264学习笔记3——帧间预测

    帧间预测主要包括运动估计(运动搜索方法.运动估计准则.亚像素插值和运动矢量估计)和运动补偿. 对于H.264,是对16x16的亮度块和8x8的色度块进行帧间预测编码. A.树状结构分块 H.264的宏 ...

随机推荐

  1. Python作业之购物商城

    作业:购物商场 1.商品展示,价格 2.银行卡余额 3.付账 程序流程图如下: 代码如下: ShopDisplay = {'} print(ShopDisplay) ShoppingCartPrice ...

  2. data对象转化成后端需要的json格式

    data=JSON.stringify(json_data); $.ajax({type:'post',url:url+'warehouse/create_alliance_out/',data:da ...

  3. Code-NFine:jqgrid 数据绑定

    ylbtech-Code-NFine:jqgrid 数据绑定 1. jqgrid 基本列展示返回顶部 1. 1.1..cshtml $(function () { gridList(); }) fun ...

  4. Codeforces - 1114C - Trailing Loves (or L'oeufs?) - 简单数论

    https://codeforces.com/contest/1114/problem/C 很有趣的一道数论,很明显是要求能组成多少个基数. 可以分解质因数,然后统计各个质因数的个数. 比如8以内,有 ...

  5. lightoj 1025【区间DP】

    题意: 给出一个word,求有多少种方法你从这个word清除一些字符而达到一个回文串. 思路: 区间问题,还是区间DP: 我判断小的区间有多少,然后往外扩大一点. dp[i,j]就代表从i到j的方案数 ...

  6. python __builtins__ bytes类 (8)

    8.'bytes', 字符串转换成字节流.第一个传入参数是要转换的字符串,第二个参数按什么编码转换为字节. class bytes(object) | bytes(iterable_of_ints) ...

  7. firewall-cmd 使用总结

    firewalld的简要说明: firewalld .firewall-cmd .firewall-offline-cmd它们Python脚本,通过定义的在/usr/lib/firewalld下面的x ...

  8. 一些CSS的备忘

    text-transform 文本转换 属性值是 none表示没有 不转换 同时也是默认的 capitalize 表示首字母大写 uppercase全部转换为大写 lowercase全部转为小写 te ...

  9. 自适应的两端对齐:text-align:justify

    <!DOCTYPE HTML> <html> <head> <title>文本两端对齐 by hongchenok</title> < ...

  10. Python标准库 urllib

    urllib是python的一个获取url的模块.它用urlopen函数的形式提供了一个非常简洁的接口.这使得用各种各样的协议获取url成为可能.它同时 也提供了一个稍微复杂的接口来处理常见的状况-如 ...