参考: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. codeforces 414A A. Mashmokh and Numbers(素数筛)

    题目链接: A. Mashmokh and Numbers time limit per test 1 second memory limit per test 256 megabytes input ...

  2. bzoj3198

    容斥原理+哈希表 恰好k个,那么上容斥原理,我们先2^6枚举相同的位置,用哈希表判断有多少个对应位置相同的元素,然后用容斥原理计算,似乎这里的容斥没有那么简单,详见这里 http://www.cnbl ...

  3. 【推荐】 体验SubSonic

    SubSonic简介 SubSonic配置 利用sonic.exe来生成代码 通过Substage来生成代码 简单操作示例 1.SubSonic简介 一句讲完就是:SubSonic就是一个ORM开源框 ...

  4. C++ 动态多维数组的申请与释放

    今天在实验室的项目中遇到了一个问题,直接上代码: void ViBe::init(Mat img) { imgcol = img.cols; imgrow = img.rows; // 动态分配三维数 ...

  5. 004--linux命令tar 软硬链接

    一.tar命令介绍: -c:创建一个新的tar文件 -t:列出tar文件中目录的内容 -x:从tar文件中抽取文件 -f:指定归档文件或磁带(也可能是软盘)设备(一般都要选) -v:显示所打包的文件的 ...

  6. 在线抠图网站速抠图sukoutu.com全面技术解析之canvas应用

    技术关键词 Canvas应用,泛洪算法(Flood Fill),图片缩放,相对位置等比缩放,判断一个点是否在一个平面闭合多边形,nginx代理 业务关键词 在线抠图,智能抠图,一键抠图,钢笔抠图,矩阵 ...

  7. Swift3的闭包相关

    几乎所有编程语言里都有简化的函数写法,c语言里是宏函数(#define),c++里是内联函数(inline,顺带一说,inline是内联的意思,在html里display里指定的inline也是内联的 ...

  8. (水题)洛谷 - P1618 - 三连击(升级版)

    https://www.luogu.org/problemnew/show/P1618 枚举所有的A,最多 $A_9^3$ ,然后生成B和C(先判断是不是能够生成),判断有没有重复数字(比之前那个优雅 ...

  9. 黑客攻防技术宝典web实战篇:攻击验证机制习题

    猫宁!!! 参考链接:http://www.ituring.com.cn/book/885 随书答案. 1. 在测试一个使用joe和pass证书登录的Web应用程序的过程中,在登录阶段,在拦截代理服务 ...

  10. <%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>

    那么 pageEncoding , contentType 分别用来做什么那?在解释之前让我们先了解下jsp从被请求到响应经历的三个阶段: 第一阶段:将jsp编译成Servlet(.java)文件.用 ...