【论文解读】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.mfbz.cn/a/260421.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

c++ qt 模态框和阻拦器 优先级 问题 修复 已解决

在c项目中。有 加载动画 和 模态框提醒的功能, 导致发生一个问题,有提示框的时候,动画也停止,必须点击 按钮 所有代码才能有效。 解决办法 谨慎使用 deleteLater,因为和模态框拦截有冲突, 使用 隐藏 或者 删除指针。 deleteLater 使用逻辑是 …

自动气象监测站助力生活生产

随着科技的发展,我们的生活和生产方式正在发生着日新月异的变化。其中,WX-CQ12 自动气象监测站作为一项气象监测设备,正在发挥着越来越重要的作用。它不仅为我们提供了更加准确、实时的天气信息,还为农业、交通、旅游等领域提供了…

全新「机械手」算法:辅助花式抓杯子,GTX 1650实现150fps推断

新方法结合扩散模型和强化学习,将抓取问题分解为「如何抓」以及「何时抓」,平价显卡即可实现实时交互。 手是人类与世界交互的重要部分,手的缺失(如上肢残障)会大大影响人类的正常生活。 北京大学董豪团队通过将扩散模…

stm32学习总结:4、Proteus8+STM32CubeMX+MDK仿真串口收发

stm32学习总结:4、Proteus8STM32CubeMXMDK仿真串口收发 文章目录 stm32学习总结:4、Proteus8STM32CubeMXMDK仿真串口收发一、前言二、资料收集三、STM32CubeMX配置串口1、配置开启USART12、设置usart中断优先级3、配置外设独立生成.c和.h 四、MDK串口收发…

VS ASP.Net Core项目还原Packages包到本地(解决服务器没有网无法重新生成的问题)

问题背景 ASP.Net Core MVC项目,无法重新生成。 现场服务器没有网,放上去的代码无法通过nuget还原包到服务器,导致无法编译无法运行。 解决办法 将Packages还原到本机(有网),然后再将代码放到服务器运行。 在有网的…

内网渗透测试基础——分析域内网段划分情况及拓扑结构

内网渗透测试基础——分析域内网段划分情况及拓扑结构 ​ 掌握了内网的相关信息后, 渗透测试人员可以分析目标网络的结构和安全防御策略,获取网段信息、各部门的IP地址段,并尝试绘制内网的拓扑结构图。当然,渗透测试人员无法了解…

深入了解Java中的锁机制

目录 1. synchronized关键字 1.1 基本概念 1.2 内置锁 1.3 限制 2. ReentrantLock 2.1 概述 2.2 公平性与非公平性 2.3 条件变量 3. 读写锁(ReadWriteLock) 3.1 概念 3.2 适用场景 4. StampedLock 4.1 概述 4.2 乐观读与悲观读 4.3 适用场…

仓储1代电子标签接口文档

标签注册 仓储1代注册 侧面按钮连按三次, 注册成功:红灯变绿灯 查询电子标签信息接口 接口地址:192.168.1.200/wms/associate/getTagsMsg 请求类型:multipart/form-data 请求方式:get 接口备注:暂无描…

如何设计用户评论表

作者简介:大家好,我是smart哥,前中兴通讯、美团架构师,现某互联网公司CTO 联系qq:184480602,加我进群,大家一起学习,一起进步,一起对抗互联网寒冬 上一篇提到树形结构是非…

C++_动态二维数组的两种方法

介绍 本文主要介绍使用 动态二维数组的两种方法 (PS:仅作创建 动态二维数组参考,详细使用方法根据需求自行改变) 第一种:连续存储结构的 二维动态数组(需固定 列 大小,可通过下标访问) 缺点: 1.需要在设计二维数组前写死 列 的大小 2.空间利用率不高 优点…

netty源码:(29)ChannelInboundHandlerAdapter

它实现的方法都有一个ChannelHandlerContext参数,它的方法都是直接调用ChannelHandlerContext参数对应的方法,该方法会调用下一个handler对应的方法。 可以继承这个类,重写感兴趣的方法,比如channelRead. 这个类有个子类:SimpleC…

调度算法(一)-第二十一天

目录 各种调度算法的学习思路 先来先服务(FCFS) 短作业优先(SJF) 各种调度算法的学习思路 1、算法思想 2、算法规则 3、算法用于作业调度还是进程调度 5、抢占式还是非抢占式 6、优点和缺点 7、是否会导致饥饿(进程…

【音视频 | AAC】AAC格式音频文件解析

😁博客主页😁:🚀https://blog.csdn.net/wkd_007🚀 🤑博客内容🤑:🍭嵌入式开发、Linux、C语言、C、数据结构、音视频🍭 🤣本文内容🤣&a…

C++刷题 -- KMP算法

C刷题 – KMP算法 文章目录 C刷题 -- KMP算法1.算法讲解2.算法实现 https://leetcode.cn/problems/find-the-index-of-the-first-occurrence-in-a-string/description/ 1.算法讲解 KMP算法是一种字符串匹配算法,当出现字符串不匹配时,可以记录一部分之…

PSP - 结构生物学中的机器学习 (NIPS MLSB Workshop 2023.12)

欢迎关注我的CSDN:https://spike.blog.csdn.net/ 本文地址:https://spike.blog.csdn.net/article/details/135120094 Machine Learning in Structural Biology (机器学习在结构生物学中) 网址:https://www.mlsb.io/ Workshop at the 37th Co…

计算机网络-进阶

目录 易混淆物理层数据链路层网络层nat如何实现私有ip通信IP数据报 格式解析tcp 连接tcp流量控制滑动窗口拥塞控制 报文捕获 wireshark路由模拟器 enspcdn代理服务器 VS cdn VS web cache 计算机有了物理地址,为什么还要有ip地址?单播 多播 广播 传输层会…

基于Java+SpringBoot+Mybaties-plus+Vue+ElementUI+Vant 电影院订票管理系统 的设计与实现

一.项目介绍 基于SpringBootVue 电影院订票管理系统 分为前端和后端。 前端(用户): 登录后支持查看首页、电影、影院和我的信息 支持查看正在热映和即将上映的电影信息 支持购票(需选择影院座位)、看过(评论…

力扣:203. 移除链表元素(Python3)

题目: 给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val val 的节点,并返回 新的头节点 。 来源:力扣(LeetCode) 链接:力扣(LeetCode)官网 …

基于springboot+mybatis+mysql+jsp房屋租赁管理系统

基于springbootmybatismysqljsp房屋租赁管理系统 一、系统介绍二、功能展示1.项目内容2.项目骨架3.数据库3.登录4.首页5.房源管理6.个人中心7.房屋详情 四、其它1.其他系统实现五.获取源码 一、系统介绍 项目名称:基于Spring boot的房屋租赁管理系统 项目架构&…

对77,539个基因组进行的遗传关联分析揭示了罕见疾病的病因

今天给同学们分享一篇实验文章“Genetic association analysis of 77,539 genomes reveals rare disease etiologies”,这篇文章发表在Nat Med期刊上,影响因子为82.9。 结果解读: 稀有水库 关系型数据库(RDB)提供了一…
最新文章