【论文解读】Kvazaar 2.0: Fast and Efficient Open-Source HEVC Inter Encoder

时间:2020
级别:SCI
机构:Tampere University

摘要:高效视频编码(HEVC)是当前多媒体应用中经济的视频传输和存储的关键,但解决其固有的计算复杂性需要强大的视频编解码器实现。本文介绍了Kvazaar 2.0 HEVC编码器,它是我们学术开源软件(github.com/ultravideo/kvazaar)的新版本。Kvazaar 2.0引入了新的帧间编码功能,该功能建立在先进的率失真优化(RDO)方案之上,并通过多种提前终止机制、simd优化的编码工具和并行化策略来加速。实验结果表明,在Intel Xeon E5-2699 v4 22核处理器上,Kvazaar的编码速度是HEVC参考软件HM的125倍,而平均编码代价仅为2.4%。在固定 QP 模式下,实验结果表明,保持同样的客观视觉质量下,Kvazaar的编码速度是x265的3倍,平均码率比x265低10.7%。这些结果表明,Kvazaar已经成为实际高效视频编码领域领先的开源HEVC编码器之一。

介绍:据思科称,从2017年开始全球IP视频流量将增加四倍,到2022年,将占所有IP流量的82%。这爆炸式增长主要是由先进技术的扩散驱动的多媒体设备、无处不在的连接和流行视频具有沉浸式用户体验的应用程序。
高效视频编码(High Efficiency video coding, HEVC/H.265)是针对当前视频传输和存储日益增长的问题而制定的最新视频编码标准。与之前的高级视频编码(AVC/H.264)标准相比,在相同的目标视觉质量下,编码效率提高了近40%,但复杂度开销增加了约40%。因此,在世界范围内促进HEVC的部署需要开放和强大的实现,这些实现能够解决HEVC的复杂性,并获得吸引人的编码速度、编码效率和功率预算。
目前,有几个值得注意的开源软件HEVC编码器,其中仅HEVC参考软件模型(HM) , x265和Kvazaar 积极开展学术研究与发展。HM支持所有规范的HEVC编码工具是能够达到最好的,然而其巨大的计算复杂性限制了其应用仅限于研究。x265可能是最好的,被用作我们工作的主要参考。
Kvazaar是一个学术开源HEVC软件编码器,由我们在坦佩雷大学的Ultra Video小组开发。它可以在GitHub上在线下载:https://github.com/ultravideo/kvazaar 。在GNU LGPLv2.1许可证下。我们之前的工作已经彻底考虑了第一代Kvazaar版本,该版本被证明是HEVC帧内编码的学术领先者。介绍了Kvazaar的第二代实现,即Kvazaar 2.0,它针对HEVC的帧间编码进行了优化。

Kvazaar 2.0 HEVC Encoder:

图 1 展现 kvazaar2.0 总体框架,支持 main profile、10 种 preset、8bit 420.
在这里插入图片描述
表1列出了Kvazaar中可用的所有基本编码参数和本工作中基准测试的参数子集。
在这里插入图片描述
RDO:
Kvazaar支持多阶段率失真优化(RDO)方案,具有近似(快速)和精确(复杂)RDO阶段。这些阶段在确定块结构和模式参数之前,通过比较每个探索过的候选编码的RD成本,使总体编码成本最小化。
近似RDO阶段根据和来比较成本绝对变换差(SATD)的亮度通道和编码模式的相关位。通常,这个阶段用于探索许多不同的选择,只有最好的才能进入精确的RDO阶段。
精确的RDO级同时考虑了亮度和色度失真以及剩余四叉树位。采用差分平方和(SSD)作为失真度量,对图像进行重构成本计算和比较前预测的块划分。

编码树结构:
Kvazaar实现了一种完整的HEVC四叉树编码结构其中每个输入帧被分割成大小相等的正方形称为编码树单元(CTUs)的块。在Kvazaar,一个CTU尺寸是64 × 64像素。在4:2:0颜色格式中,一个CTU包含 一个亮度块,两个色度块,以及相关的语法元素。
CTU被递归地划分为四个大小相等的单元平方编码单元(CUs)直到最大层次深度到达四叉树的顶点。指定亮度块的大小如2N×2N和4:2:0颜色格式限制了色度的大小块到N×N,其中N∈{32,16,8,4}。这四叉树在z-扫描中采用深度优先搜索策略确定分解扫描顺序。在搜索过程中,将准确的RD成本分配给所有被评估的CUs,并在其产生的RD代价低于不拆分方案时做出拆分决策。

通过以下两种提前终止机制降低了递归搜索的复杂度:1)当计算出的子CU的累计代价超过父CU的累计代价时,由于剩余子CU的计算已经不再影响拆分决策,可以跳过对四叉树中子CU的进一步搜索;2)在找到一个没有非零系数的CU后,可以停止对进一步划分CU的递归搜索,因为继续搜索不太可能带来任何显著的RD改进。后一种机制源自参考文章 20。

预测模式决策:
CU可以进一步分割成矩形的 PU,kvazaar 支持的PU 的位置模式有方形模式2Nx2N、NxN;SMP 模式有2N×N 和 N×2N;AMP 模式 2N×nU, 2N×nD, nL×2N, 和 nR×2N;帧内只有NxN;skip 模式 2Nx2N。

帧间预测:
在帧间预测阶段,合并模式的运动参数隐式地继承相邻PUs的运动参数。合并列表构建候选亮度块,并使用所有可用的候选亮度块生成相应的亮度预测块。每个合并候选都要经历近似的RDO过程,以找到最佳的合并模式参数。

在合并候选后尝试早期跳过模式决策分析。如果最好的合并候选节点残差为零,则选择跳过模式,即提前跳过进行模式决策,在这个深度的任何其他模式不再执行搜索。

之后是 AMVP 过程。AMVP模式选取由运动估计获得的,先整数ME,再分数 ME。在对基于运动划分的所有pu进行参数化后,计算各帧间CU的精确RD代价。

帧内预测:
帧内预测阶段分为帧内图像估计(IPE)和帧内图像预测(IPP)。IPE 支持 35 种模式,IPE将最佳模式输出给IPP进行帧内计算对当前PU的预测。

变换和量化:
预测阶段结束后,变换阶段 T 将预测残差 D从空间域转换到变换域系数TCOEFFs。Kvazaar支持转换单位(TUs)的大小32×32, 16×16, 8×8。它实现帧内4×4亮度块编码用整数离散正弦变换(DST) ,其余分块用整数离散余弦变换(DCT)。

量化(Q)阶段将TCOEFFs映射为量化的TCOEFFs。kvazaar 也实现了RDOQ 技术。

解码步骤与之相反。此外,为了提高变换和量化效率,应用了transform skip和sign bit hiding编码工具。

环路滤波:
Kvazaar实现了两个顺序的环路滤波器,即 DF(Deblocking Filter) 和 SAO(Sample-Adaptive Offset)。

熵编码:
熵编码(Entropy Coding, EC)通过上下文自适应的二进制算术编码(Context-Adaptive Binary Arithmetic Coding, CABAC)对量化TCOEFFs、IP模式、MV、idx、SAO参数等二进制语法元素进行压缩。Kvazaar支持两种编码代价估算方法。第一种方法对TCOEFFs和相关元素执行CABAC。第二种是HM中基于表的估计。根据当前上下文状态估计分数比特。为了在可接受的RD损失下限制编码时间,Kvazaar在实际的比特流中主要在CTU级别更新上下文的一代。

并行计算:
除了 slice和 tile 机制,kvazaar 还增加了 WPP(Wavefront Parallel Processing)、OWF(Overlapped Wavefront)。

在数据层,最耗时的编码工具,如SAD、SATD、SSD、插值滤波器、IPP和变换,都是使用Intel intrinsic或x86-64汇编语言进行优化的。Kvazaar包含了一种针对SIMD优化函数的动态调度机制,即根据所支持的指令集自动选择最优的SIMD优化CPU。支持对SSE2, SSE4.1, AVX和AVX2的优化,但大多数是AVX2。

率失真复杂度分析

在本次实验中,编码参数设置如表 2。
在这里插入图片描述
三者的编码参数整体趋于相同,但也有一些不同点,如表 3。
在这里插入图片描述
实验设置:
实验设置如表 4,支持AVX2指令集的SIMD扩展。执行从A类到E类的所有18个 8 bit 的HEVC公共测试序列。它们在帧、帧速率和空间分辨率都有所不同。QP 设置 22、27、32、37,以PSNR 为评价标准,采用恒定 QP 编码方案。
在这里插入图片描述
实验结果:
表5报告了Kvazaar v2.0.0相对于HM16.20和x265 v3.2 RC1的RD特性和编码速度。
在这里插入图片描述
结论:
在QP编码方式下,提出并行实现 Kvazaar的速度是x265各自非常慢的预设速度的3倍编码器BD-BR平均提升-10.7%。Kvazaar的第一代实现已经被证明是HEVC帧内编码和这项工作结果的领跑者。此次实验结果证明Kvazaar 2.0是目前所有实用开源HEVC编码器的领先解决方案之一。

由于Kvazaar 2.0,整个多媒体社区以后可以在各种多媒体应用中部署一个学术性的、尖端的HEVC间编码替代方案。Kvazaar已经得到了流行的FFmpeg和Libav多媒体框架的支持,这些框架便于Kvazaar与其他多媒体处理工具的部署。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/230419.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

RDD编程

目录 一、RDD编程基础 (一)RDD创建 (二)RDD操作 1、转换操作 2、行动操作 3、惰性机制 (三)持久化 (四)分区 (五)一个综合实例 二、键值对RDD &am…

SpringBoot + Vue前后端分离项目实战 || 三:Spring Boot后端与Vue前端连接

系列文章: SpringBoot Vue前后端分离项目实战 || 一:Vue前端设计 SpringBoot Vue前后端分离项目实战 || 二:Spring Boot后端与数据库连接 SpringBoot Vue前后端分离项目实战 || 三:Spring Boot后端与Vue前端连接 SpringBoot V…

【老牌期刊】IF:12,持续飙升,同领域期刊中的“佼佼者“,国人友好!

01 期刊概况 ARTIFICIAL INTELLIGENCE REVIEW ​ 【出版社】Springer 【ISSN】0269-2821 【EISSN】1573-7462 【检索情况】SCI&EI&Scopus在检 【WOS收录年份】1988年 【出刊频率】双月刊,最新一期December 2023 【期刊官网】 https://link.springe…

【Linux】进程周边005之环境变量

👀樊梓慕:个人主页 🎥个人专栏:《C语言》《数据结构》《蓝桥杯试题》《LeetCode刷题笔记》《实训项目》《C》《Linux》 🌝每一个不曾起舞的日子,都是对生命的辜负 目录 前言 1.环境变量是什么&#xff1…

太阳能电池效能IV测试PV检测太阳光模拟器

目录 概述 一、系统组成 产品特点: 技术参数 数字源表 本系统支持Keithley24xx系列源表 标准太阳能电池 低阻测试夹具 自动化测试软件 概述 太阳能光伏器件的所有性能表征手段中,IV特性测试无疑是最直观、最有效、最被广泛应用的一种…

【OS】操作系统总复习笔记

操作系统总复习 文章目录 操作系统总复习一、考试题型1. 论述分析题2. 计算题3. 应用题 二、操作系统引论(第1章)2.1 操作系统的发展过程2.2 操作系统定义2.3 操作系统的基本特性2.3.1 并发2.3.2 共享2.3.3 虚拟2.3.4 异步 2.4 OS的功能2.5 OS结构2.5 习…

Android studio 按键控制虚拟LED

一、activity_main.xml代码&#xff1a; <?xml version"1.0" encoding"utf-8"?> <androidx.constraintlayout.widget.ConstraintLayout xmlns:android"http://schemas.android.com/apk/res/android"xmlns:app"http://schemas.a…

《Linux C编程实战》笔记:进程操作之创建进程

进程是一个动态的实体&#xff0c;是程序的一次执行过程。进程是操作系统资源分配的基本单位。 以下是一些概念&#xff0c;我就直接抄书了 进程是操作系统的知识&#xff0c;简单理解的话&#xff0c;你写的代码运行起来算一个进程&#xff1f; 创建进程 每个进程由进程ID号…

GPT-4.5!!!

GPT-4 还没用明白&#xff0c;GPT-4.5 就要发布了。 最近&#xff0c;OpenAI 泄露了 GPT-4.5 的发布页面&#xff0c;除了进一步增强复杂推理和跨模态理解&#xff0c;GPT-4.5 增加了一个更加强大的功能——3D。 3D 功能的进一步支持&#xff0c;也就意味着多模态最后一块版图…

关于前端学习的思考-浮动元素嵌套块级元素12.18

1、块级元素嵌套浮动元素 先摆图片&#xff0c;当橘色的盒子高度减少的时候&#xff0c;NK AD TB PK NN并不会减少。如何解决呢&#xff1f; 加一个overflow&#xff1a;clip或者hidden 2、浮动元素嵌套块级元素 加一个overflow&#xff1a;clip或者hidden 综上所述&#xff0…

giee 添加公匙 流程记录

一、安装 百度网盘CSDN4文件夹下&#xff0c;或者官网下载&#xff1a;https://git-scm.com/downloads 二、生成密钥 1.右击打开git bash 2.$ ssh-keygen -t rsa -C “个人邮箱地址”&#xff0c;按3个回车&#xff0c;密码为空。 3.在C:\Users{windows用户名}.ssh目录下得到…

[Ray Tracing in One Weekend] 笔记

前言 本文参照自raytracing in one weekend教程&#xff0c;地址为&#xff1a;https://raytracing.github.io/books/RayTracingInOneWeekend.html 什么是光线追踪&#xff1f; 光线追踪模拟现实中的成像原理&#xff0c;通过模拟一条条直线在场景内反射折射&#xff0c;最终…

算法——分治

思想&#xff1a;分而治之&#xff0c;将大问题转化为若干个相同或相似的子问题。快排的题目常见的方法是利用三指针法将数组分三块搭配随机选择基准元素的思想 颜色分类&#xff08;分治_快排&#xff09; 颜色分类 题目解析 原地对它们进行排序&#xff0c;使得相同颜色的元…

Oracle-应用会话集中在RAC集群一个节点问题

问题&#xff1a; 用户一套Oracle19c RAC集群&#xff0c;出现一个奇怪的现象&#xff0c;通过SCAN IP访问的连接会话都集中在节点一实例&#xff0c;而且用户并没有做任何的节点服务访问去控制会话的连接节点&#xff0c;比如常见的通过集群的高可用服务去控制应用访问连接集中…

Spring IOC—基于注解配置和管理Bean 万字详解(通俗易懂)

目录 一、前言 二、基于注解配置Bean 1.基本介绍 : 2.应用实例 : 3.注意事项 : 三、手动实现Spring 注解配置机制 1.需求 : 2.思路 : 3.实现 : 3.1 自定义注解类 3.2 自定义配置类 3.3 自定义容器类 3.4 在测试类中进行测试 四、自动装配 0.总述 : 1.AutoWired自动装…

LeetCode力扣每日一题(Java):69、x 的平方根

一、题目 二、解题思路 1、 我的思路 我的思路是直接循环暴力破解&#xff0c;定义计数器i&#xff0c;从1开始递增&#xff0c;直到i*i大于或等于x 于是有了如下代码 int i 1;while(true){if(i*i<x){i;}else if(i*ix){return i;}else{return i-1;}} 但提交之后超出了…

亚马逊、target、eBay、沃尔玛等平台采退、下卡,技术技巧大揭秘

今天想和大家分享一些关于做测评、采退和撸卡项目时所需的防关联和防封号环境的底层技术原理。这些内容相对比较复杂&#xff0c;相信很少有人能够完全掌握&#xff0c;因为涉及到一些比较高级的IT技术原理。 如果正在考虑开始做采退或者撸卡项目&#xff0c;或者已经在进行相…

libxls - 编译

文章目录 libxls - 编译概述笔记静态库工程测试控制台exe工程测试备注备注END libxls - 编译 概述 想处理.xls格式的excel文件. 查了一下libxls库可以干这个事. 库地址 https://github.com/libxls/libxls.git 但是这个库的makefile写的有问题, 在mingw和WSL下都编译不了. 好在…

高德地图绘制区域的地理围栏

官网示例 https://lbs.amap.com/demo/javascript-api-v2/example/overlayers/polygon-draw/ <!doctype html> <html> <head><meta charset"utf-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta …

黑马点评06分布式锁 2Redisson

实战篇-17.分布式锁-Redisson功能介绍_哔哩哔哩_bilibili 1.还存在的问题 直接实现很麻烦&#xff0c;借鉴已有的框架。 2.Redisson用法 3.Redisson可重入原理 在获取锁的时候&#xff0c;看看申请的线程和拿锁的线程是否一致&#xff0c;然后计算该线程获取锁的次数。一个方法…