【论文解读】Efficient SAO Coding Algorithm for x265 Encoder

时间:2015年
级别:IEEE
机构:上海交通大学

摘要

x265是一款开源的HEVC编码器,采用了多种优化技术,具有较快的编码速度和优良的编码性能。作为HEVC的一项关键技术,x265还采用了样本自适应偏移(sample adaptive offset, SAO)来减少重建帧与原始帧之间的失真。尽管x265采用了多种并行加速技术,但对SAO相关计算量的减少研究较少,使得SAO因计算量大而成为速度瓶颈。首先,深入研究和分析了x265中SAO的实现和复杂度;然后,基于帧间预测模式、CTU的空间相关性以及亮度和色度之间的关系,提出了一种提前终止SAO过程的快速算法。实验结果表明,在BDBR仅增加0.52%或BDPSNR损失0.014 dB的情况下,该算法可以节省 72.2% 的SAO处理时间。

介绍

与H.264/AVC相比,高效视频编码(HEVC)在相同视频质量下码率降低了50%。HEVC采用了更灵活的编码树块(CTB)和样本自适应偏移量(SAO)等先进技术。作为一种新采用的技术,SAO在去块滤波之后,通过给每个像素增加一个偏移量来减少重建帧与原始帧之间的失真。SAO包括两种类型的偏移量:带偏移量(BO)和边缘偏移量(EO)。对于每种类型,将每个像素分为不同的类别,并计算重建像素值与原始像素值之间的差异,以确定最佳偏移量。因此,每对像素之间的差值需要计算5次(BO 1次,EO 4次),计算复杂度很高。

x265是一个开源的编码器,旨在提供世界上最快和计算效率最高的HEVC编码器。该编码器采用帧并行和波前并行,在多核处理器上可以显著提高编码速度。在环路滤波器之前,还对编码过程进行了许多优化,如简化模式选择、利用单指令多数据流(SIMD)和多媒体扩展(MMX)等。

然而,对SAO相关计算的优化研究较少,使得SAO成为x265的速度瓶颈。通过分析x265的计算复杂度,SAO约占总编码时间的22.1%。

同时,SAO是一种非常有效的编码工具,可以大大提高编码性能。在HEVC参考软件HM上实现了平均2%的码率下降,在x265编码器上实现了6.7%的码率下降。因此,在x265的实时实现中,迫切需要快速、高效、低复杂度的SAO算法。

目前,有关的研究工作较少,以获得编码性能损失较小的低复杂度SAO算法。利用帧内预测模式信息,在[4]中提出一种SAO快速编码算法,简化最佳SAO边缘偏移类型的决策过程。在[5]中,利用减少SAO类型候选项、下采样统计和预去块效应重建技术,提出了一种优化的SAO算法。在[6]中提出了一种减少BO候选波段数和EO类别计算的SAO快速编码算法。

然而,这些快速SAO算法仅在HM上表现良好,不适用于x265。例如,在x265编码器中,为节省编码时间,对B帧禁用了intra-in-inter rate-distortion optimization (RDO)过程。由于没有帧内预测信息,因此不能采用[4]中提出的方法。而在x265中采用下采样的方法会造成一定程度的编码性能损失。

本文提出了一种快速的SAO算法,该算法利用了帧间模式选择过程中的skip模式信息、CTU的空间域相关性以及亮度和色度之间的关系。由于x265的更快设置比其他设置具有更好的编码速度和RD性能权衡,因此本文的所有测试和讨论都是基于x265版本1.2的更快设置。本文的其余部分组织如下。第二节分析了x265中的SAO过程。第三节详细介绍了所提出的算法。第四节和第五节分别给出了实验结果和结论。

x265中SAO

SAO是在去块滤波之后应用的一种环路滤波器,旨在减少主要由量化误差引起的振铃效应。SAO参数包括合并标志、SAO类型和四个偏移量,分别对应BO的四个连续波段或EO的五类中的四类。该算法通过在每个频带或每个类别中增加像素的偏移量来减少重建帧与原始帧之间的失真。SAO由两种不同的类型组成,即带偏移(BO)边缘偏移(EO)

带偏移BO

在带偏移(BO)中,所有像素被划分为32个固定的带,每个带具有相同的强度间隔。每个带有一个偏移量,定义为该带内重建像素值与原始像素值之间的平均差值。由于某一CTU内的像素值都集中在少数几个带,为了节省码率,通过RD代价只选择4个连续的带,如图1所示。将4个对应的偏移量和第一选择频带的位置传输给解码器进行采样补偿。
在这里插入图片描述

边缘偏移EO

采用0度90度135度45度4种1-D 3像素模式对边缘偏移进行像素分类,如图2所示。每个模式对应于一个EO类型。对于每一种类型,通过与相邻的两个像素进行比较,将像素分为5类。这五个类别的分类规则如表1所示。除类别0外,每个类别都有相应的偏移量。编码器尝试每一种EO类型,通过计算每种EO类型的RD代价来选择最佳的EO类型。将最佳EO类型及其对应于类别1234的4个偏移量分别编码到比特流中。
在这里插入图片描述

x265 中的 SAO

SAO处理在x265的CTU级上执行。对于特定的CTU,首先采集每个SAO类型的统计信息;在某一类图像的采集过程中,将像素分为不同的类别,并计算每类中重建像素与原始像素值之间的总差值,即偏移量的原始值。然后,利用这些统计信息,实现对各类数据中各类别偏移量的估计;然后,基于RD代价选择最优类型及其对应的偏移量;最后,通过检查SAO的合并模式来决定是否使用相邻CTU的SAO参数来替换当前参数。

通过在x265编码器中禁用SAO和启用SAO,对编码性能和编码时间进行了分析。作为比较,我们还分析了HEVC参考软件HM 12.0在“随机接入”配置下的RD性能损失和编码时间。

通过测试A类(2560x1600)和B类(1920x1080)进行实验。结果如表2所示。

如表2所示,禁用SAO导致x265的平均比特率增加6.69% ,HM的平均比特率增加1.98%。因此SAO在x265中更为重要。此外,在x265中禁用SAO使得整个编码时间减少了22.1% ,即SAO在总编码时间中所占的比例很大。因此,降低SAO的计算复杂度对于加速x265至关重要。
在这里插入图片描述

提出的SAO算法

使用性能分析工具进一步研究了SAO的复杂性。各部分编码时间占比如图3所示。由此可见,对每种SAO类型的统计收集是最耗时的部分,约占x265中SAO编码总时间的87% 。因此,为了提高SAO处理速度,需要尽早确定SAO类型,以减少不必要类型的统计量收集计算。
在这里插入图片描述
将某个CTU限制在BOEO(0,1,2,3)的一种或两种SAO类型是不合理的。然而,我们发现大部分的CTU最终被识别为SAO OFF,这意味着SAO并没有被应用在这些CTU上。如果我们能够预先将这些CTU与其他CTU区分开来,并将它们设置为SAO OFF,那么就可以保存所有与SAO相关的计算,如统计信息的收集或每种SAO类型的RDO计算。

本文提出了三种基于帧间预测模式、CTU的空间相关性和亮度与色度的关系来准确区分CTU的方法,并将其设置为SAO OFF。

基于64x64跳过模式的SAO提前终止

将SAO应用于消除量化误差引起的振铃效应。但如果将64x64大小的CTU的最佳模式确定为跨层预测的skip模式,则该CTU将主要集中在背景或简单运动的区域,振铃效应很少。此外,以skip模式为最优模式的64x64尺寸的CTU,其残差较小,在量化过程中被量化为零,并且没有残差系数被编码到比特流中。因此,这些CTUs采用低码率编码,这意味着它们对SAO参数引起的码率增加更加敏感。这些观察结果表明,skip模式下的CTUs被设置为SAO OFF的概率很大,这与接下来的研究结果一致。

我们调查了被选择为SAO的64x64_skip CTUs和其他CTUs的命中率,如表3所示。值得一提的是,每个序列的命中率都是QP=22273237的平均值。从表3中,我们可以注意到命中率从左到右递减。在64x64_skip CTUs的情况下,命中率相当高,从76.9%到96.7%不等。因此,我们可以提前确定64x64_skiped CTUs的SAO类型为SAO OFF。在进一步分析的基础上,在下章节介绍了其他CTU的解决方案。
在这里插入图片描述

基于CTU空间相关性的SAO提前终止

研究者发现空域相邻CTU的深度搜索范围与RD代价之间存在相关性。这也适用于SAO类型的决策。相邻的CTU可能具有相似的纹理和运动特征。因此,如果当前的CTU左邻域和上邻域的CTU都是SAO OFF,那么当前的CTU很可能被设置为SAO OFF。我们进一步实现了一个实验来验证这一点,测试命中率,被定义为SAO关闭的CTU在左侧和上述相邻CTU中所占的比例。结果如表4所示。
在这里插入图片描述
在这种情况下,高达96.3%的CTU经过充分的统计收集和RDO后被选择为SAO OFF,我们可以提前确定它们为SAO OFF,而不需要任何统计信息收集和RDO计算。

为了实现进一步的减少,对于相邻的CTU不全是SAO的CTU,我们选择BOEO 0EO 1(即EO 0度EO 90度)作为SAO类型的候选。由于很少有CTU编码为EO 2EO 3,因此SAO EO 类型 2和3被禁用且不被检查,从而可以成比例地减少SAO的计算量几乎没有RD性能损失。

基于亮度和色度关系的SAO提前终止

在x265和HM中,亮度和色度的SAO模式选择和编码过程是独立实现的。然而,由于亮度和色度分量的高度相关性,一个CTU的亮度和色度块共享相同的帧间预测模式和相同的MV。因此,选择其中最优的亮度块来预测色度的SAO类型也是可行的。与SAO具有相同类型的亮度分量和色度分量所占比例如表4所示,平均高达96.11%。因此,如果亮度分量被判定为SAO OFF,则提前终止其色度分量的SAO处理,并将其设置为SAO OFF,从而在保证RD性能损失可忽略的情况下节省色度处理时间。

整体SAO算法

基于上述分析,提出的整体算法如图4所示。由于P帧和I帧分别是B帧和相邻P帧的参考帧,它们对SAO类型的错误判断更加敏感,因此对P帧和I帧采用严格的策略以保持SAO性能。也就是说,对于64x64_skied CTUs,我们不检查两种类型的EO 2和3,而对于其他CTUs,完整的SAO过程应该通过检查所有的SAO类型来实现。
所提算法总结如下:
步骤1:检查当前CTU的帧类型,然后检查CTU类型。如果是I帧或P帧,请执行步骤2;否则请执行步骤4。

步骤2:如果当前64x64大小的CTU的最优模式为skip模式,执行“BO”、“EO 0”和“EO 1”的SAO处理,然后转到步骤7。否则,请执行步骤3。

步骤3:执行亮度的整个SAO过程,然后转到步骤7。

步骤4:如果当前64x64大小的CTU的最优模式为skip模式,请提前确定亮度的SAO类型为SAO OFF,然后执行步骤7;否则,请执行步骤5。

步骤5:如果当前CTU左侧和上方相邻的CTUs都是SAO OFF,则提前确定亮度的SAO类型为SAO OFF,执行步骤7;否则,请执行步骤6。

步骤6:执行亮度的BOEO 0EO 1的SAO过程,执行步骤7。

步骤7:检查当前CTU亮度是否SAO OFF。如果是,提前确定色度的 SAO类型为 SAO OFF;否则,对色度做相同的分析亮度从步骤1到步骤6。
在这里插入图片描述

实验结果

提出的SAO算法在x265 v1.2上进行了快速实现。选取JCT-VC推荐的A类(1920x1080)和B类(2560x1600)中的测试序列,在QP 22273237上评估本文方法的性能。实验结果如表5所示。锚点是启用SAO的原始x265。这里的SAO时间节省定义为
在这里插入图片描述
实验结果表明,所提算法在BDBR仅增加0.52%或BDPSNR损失0.014dB的情况下,平均可以节省72.2% 的SAO时间。由于在x265中禁用SAO, BDBR平均增加了6.69% ,如表2所示,因此可以得出结论,该算法仅用原始SAO编码过程的27.8%计算量就可以保持92.2%的SAO性能。因此,所提方法是非常有效和有价值的。
在这里插入图片描述
序列“BQTerrace”在SAO开启、SAO关闭和所提算法下的RD性能曲线如图5所示。可以看出,本文算法得到的RD曲线与原算法得到的RD曲线具有较高的一致性,并且远优于SAO OFF算法得到的RD曲线。
在这里插入图片描述

结论

本文对x265中的SAO进行了性能分析,提出了一种快速的SAO算法。该算法利用帧间预测的64x64跳过模式、CTU的空间域相关性以及亮度和色度之间的关系等信息,提前判断SAO类型为SAO OFF或减少SAO类型搜索候选集。实验结果表明,该算法在BDBR仅增加0.52%或BD-PSNR损失0.014dB的情况下,使SAO的计算复杂度降低了约72.2%。

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

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

相关文章

工作流引擎的架构设计与对比

所谓工作流引擎是指 workflow 作为应用系统的一部分,并为之提供对各应用系统有决定作用的,根据角色、分工和条件的不同决定信息传递路由、内容等级 等核心解决方案。工作流引擎可以灵活地配置工作流程,并且可以自动化的根据配置进行状态变更和…

WebRPC开发基础流程

一、WebRTC 使用入门 WebRTC(全称 Web Real-Time Communication),即网页即时通信。 是一个支持网页浏览器进行实时语音对话或视频对话的技术方案。从前端技术开发的视角来看,是一组可调用的API标准。 WebRTC API 官网&#xff1…

Observability:捕获 Elastic Agent 和 Elasticsearch 之间的延迟

在现代 IT 基础设施的动态环境中,高效的数据收集和分析至关重要。 Elastic Agent 是 Elastic Stack 的关键组件,通过促进将数据无缝摄取到 Elasticsearch 中,在此过程中发挥着至关重要的作用。 然而,显着影响此过程整体有效性的关…

金融CRM有用吗?金融行业CRM有哪些功能

市场形式波诡云谲,金融行业也面临着资源体系分散、竞争力后继不足、未知风险无法规避等问题。金融企业该如何解决这些问题,或许可以了解一下CRM管理系统,和其提供的金融行业CRM解决方案。 金融行业是银行业、保险业、信托业、证券业和租赁业…

Windows 终端与 PowerShell:它们有何不同?

如果您使用的是 Windows 11 或 Windows 10,你会发现预安装了 PowerShell 和 Windows 终端。两者都是命令行界面,允许您输入文本命令来执行各种任务,但它们有何不同? PowerShell 是对命令提示符的改进 Windows 11 中的 Windows Po…

基于SSM的双减后初小教育课外学习生活活动平台的设计与实现

末尾获取源码 开发语言:Java Java开发工具:JDK1.8 后端框架:SSM 前端:Vue 数据库:MySQL5.7和Navicat管理工具结合 服务器:Tomcat8.5 开发软件:IDEA / Eclipse 是否Maven项目:是 目录…

odoo17核心1——概述

odoo17发布了,如果说odoo16是一个承前启后的版本,那么odoo17则完全抛弃了历史包袱,全面简化了前端代码,是一个里程碑式的版本。 在学习odoo的过程中,结合对源码的阅读,对odoo的设计哲学有了一些自己的感悟…

分享一些实用工具和学习网站

1 前言 虽然已经工作过几年的时间了,但是学习的脚步是不能停止的,对于学习,特别是自学,善于搜索网上的一些资源来辅助,还是非常有必要的,下面我就把这几年私藏的各种资源,网站贡献出来给你们。…

BSWM 模式管理(二)ESH

BSWM 模式管理 ESH 1 ECU State Handling (ESH)2 BSWM ESH 五大模式与六大通用状态机3 状态机对应的切换条件 conditions or rules4 默认主要的 ACTION 或者 ACTION LIST1 ECU State Handling (ESH) 与 ECUM 相关,整个 ECU 状态管理的状态机制 2 BSWM ESH 五大模式与六大通…

时间序列预测模型全家桶-最全教程

时序预测:LSTM、ARIMA、Holt-Winters、SARIMA模型的分析与比较-CSDN博客 风速预测(二)基于Pytorch的EMD-LSTM模型-CSDN博客 风速预测(三)EMD-LSTM-Attention模型-CSDN博客 风速预测(四)基于P…

Spring Boot学习随笔- 文件上传和下载(在线打卡、附件下载、MultipartFile)

学习视频:【编程不良人】2021年SpringBoot最新最全教程 第十二章、文件上传、下载 文件上传 文件上传是指将文件从客户端计算机传输到服务器的过程。 上传思路 前端的上传页面:提交方式必须为post,enctype属性必须为multipart/form-data开发…

Maven将Jar包打入本地仓库

Maven将Jar包打入本地仓库 Maven将Jar包打入本地仓库嘚吧嘚下载Maven配置Maven新建MAVEN_HOME编辑Path验证Maven配置 Jar包打入Maven仓库 Maven将Jar包打入本地仓库 嘚吧嘚 最近项目用到一个Jar包,不能从远程仓库拉取,只有一个Jar包,所以需…

IDEA Community html文件里的script标签没有syntax highlighting的解决方案

在网上找到的解决方法有的是针对Ultimate版本才可以下载的plugin,对我所用的Community版本无法生效,找了一圈最后在stackoverflow上找到一个有效的方案,给需要的小伙伴分享一下:IntelliJ Community Edition: Javascript syntax hi…

还在用nvm?来试试更快的node版本管理工具——fnm

前言 📫 大家好,我是南木元元,热衷分享有趣实用的文章,希望大家多多支持,一起进步! 🍅 个人主页:南木元元 目录 什么是node版本管理 常见的node版本管理工具 fnm是什么 安装fnm …

优维科技荣获第二届中国赛宝信息技术应用创新优秀解决方案三等奖

近日,“第二届中国赛宝信息技术应用创新优秀解决方案”评选活动圆满结束。优维科技所提交的《Hyperlnsight超融合持续观测解决方案》、《EasyOps一体化运维平台》从全国近300份申报方案中脱颖而出,荣获2023中国赛宝信息技术应用创新优秀解决方案奖。 本…

持续集成交付CICD:HELM 自动化完成前端项目应用发布与回滚

目录 一、实验 1.环境 2. GitLab 共享库新建HELM CI流水线 3.Jenkins新建HELM CI流水线 5.Jenkins构建前端项目 6.GitLab 共享库新建HELM CD流水线 7.Jenkins新建HELM CD流水线 8.HELM完成前端项目应用发布与回滚 9.Jenkins再次构建前端项目 10.HELM再次完成前端项目…

Leetcode—179.最大数【中等】

2023每日刷题&#xff08;六十五&#xff09; Leetcode—179.最大数 算法思想 实现代码 其中sort的lambda自定义排序策略参考自官方文档 class Solution { public:string largestNumber(vector<int>& nums) {string ans;vector<string> strs;for(auto num: …

【离散数学】——期末刷题题库(图论应用题)

&#x1f383;个人专栏&#xff1a; &#x1f42c; 算法设计与分析&#xff1a;算法设计与分析_IT闫的博客-CSDN博客 &#x1f433;Java基础&#xff1a;Java基础_IT闫的博客-CSDN博客 &#x1f40b;c语言&#xff1a;c语言_IT闫的博客-CSDN博客 &#x1f41f;MySQL&#xff1a…

10 Vue3中v-html指令的用法

概述 v-html主要是用来渲染富文本内容&#xff0c;比如评论信息&#xff0c;新闻信息&#xff0c;文章信息等。 v-html是一个特别不安全的指令&#xff0c;因为它会将文本以HTML的显示进行渲染&#xff0c;一旦文本里面包含一些恶意的js代码&#xff0c;可能会导致整个网页发…

Leetcode 1005 K 次取反后最大化的数组和

题意理解&#xff1a; 有k次对元素取反的次数&#xff0c;要求k次取反&#xff0c;消耗完&#xff0c;且使最后的数组和最大。 解题思路&#xff1a; 采用贪心的思路来解题。则需要定义局部最优解和全局最优解。 全局最优解&#xff1a;最终的数组和最大 则我们需要保证绝对值大…