【论文解读】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…

【Python】—— Numpy 初体验

Numpy 初体验 第1关:Numpy 创建数组任务描述相关知识创建数组 编程要求测试说明运行代码 第2关:Numpy 数组的基本运算任务描述相关知识向量与向量之间1. 加法2. 减法3. 乘法(X乘)4. 乘法(点乘)5. 除法 向量…

【老牌期刊】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…

【视点合成】代码解读:生成demo视频

变换工具 def render_3dphoto(src_imgs, # 输入的源图像,维度为 [batch_size, 3, height, width]mpi_all_src, # 输入的所有源图像的MPI,维度为 [batch_size, num_planes, 4, height, width]disparity_all_src, # 所有源图像的视差信息&…

【Python】从文本中提取数字

使用以下正则表达式的下列模式用以提取文本中包含的数字: pattern r[^\-\d]*([-]?\d([.,]\d)?).*模式 1:正整数 text 123 result re.match(pattern, text) print(result[1]) # > 123text 123 result re.match(pattern, text) print(result[…

【博士论文写作 笔记01】绪论的写作

文章目录 1.1 研究背景与意义1.2 国内外研究现状1.3 主要研究内容1.4 本文组织架构 1.1 研究背景与意义 介绍本文研究的需求 行业现状:首先介绍一下课题涉及的行业是怎样的蓬勃发展。新问题:由于这种蓬勃发展带来了什么样的新问题。总结句:…

太阳能电池效能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;也就意味着多模态最后一块版图…

工作中git工具分支和主干合并

克隆下载一个现有的 Git 仓库到本地 git clone ssh仓库地址下载后查看工作区状态包括哪些文件被修改、新增或删除等。 git status在本地建立我自己的分支&#xff08;取名Bms-Dev&#xff09;或者切换到指定的分支&#xff0c;才能提交到远程仓库上Bms-Dev的分支 git checko…

关于前端学习的思考-浮动元素嵌套块级元素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;最终…

Poco SendHttpRequest PocoServer 2021-03-31

PocoServer // PocoHttpServer.cpp : 定义控制台应用程序的入口点。 //#include "stdafx.h" #include <Poco/Net/HTTPRequestHandler.h> #include <Poco/Net/HTTPRequestHandlerFactory.h> #include <Poco/Net/HTTPServerRequest.h> #include <…

面试题:vue3获取dom的方式

在 Vue 3 中&#xff0c;可以通过以下几种方式来获取 DOM 元素&#xff1a; 使用 ref&#xff1a;ref 是 Vue 3 中新增的响应式引用对象。可以通过给 DOM 元素添加 ref 属性来创建一个 ref 对象&#xff0c;并使用该对象来获取 DOM 元素的引用。 <template><div ref…

算法——分治

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