【论文解读】基于分层判断的 x264 快速模式选择算法

news2025/2/21 21:38:26

简介

题目: 基于分层判断的 x264 快速模式选择算法
原文: https://www.nstl.gov.cn/paper_detail.html?id=77880ade9a55b3cc527192010242d90e
级别: EI
年份: 2010 年
机构: 上海交通大学
结论: 相比较 HEX 运动搜索算法,平均节省27%的编码时间,质量和码率的变化可忽略不计。
资源下载: https://download.csdn.net/download/yanceyxin/88036641?spm=1001.2014.3001.5503

论文解读

核心原理

○ x264 采用了灵活而精细的模式判断算法,在几乎不损失压缩性能的前提下较穷举法提速明显,算法基于如下思想设计:若大尺寸模式预测性能良好,则小尺寸模式极有可能导致更大的编码代价,因此判断过程可被跳过,反之,若小尺寸模式预测性能良好,则大尺寸模式可被跳过,将上述关系称为尺寸单调性原理;基于此,x264 首先对 P16x16 和 P8x8 进行判断,利用上述 2 种模式编码代价的相对关系确定宏块适合大尺寸模式编码还是小尺寸模式编码,进而指导其余模式的选择过程。

大致步骤:
■ 若空域邻块存在 skip 块,进行 skip 模式判断,若通过,采用 skip 模式,提前终止;
■ p16x16 判断,若残差足够小,且运动向量 M 与邻块相近,进行 skip 模式判断,若通过,采用 skip 模式,提前终止;
■ p8x8 帧间预测;
■ 若 Cp8x8 < Cp16x16,采用 Psub8x8 模式对 P8x8 模式进行优化;
■ 若 Cp8x8 + Cmv(tr) + Cmv(dl) < Cp16x16,进行 P16x8、P8x16 判断;(这块跟最新 x264代码里不太一样,应该是Cp8x8 < Cp16x16)+ Cmv(tr) + Cmv(dl)),其中Cmv(tr)与Cmv(dl)分别代表右上/左下位置子宏块运动矢量的编码代价;
■ 进行 I16x16 判断,若 2Cinter < CI16x16 且 b=1,则不再进行更小的 I8x8 和 I4x4 判断,终止;(这块跟最新 x264代码里不太一样,x264 里是直接跳转到 intra 里,进行 i16x16、i8x8、i4x4 顺序判断)
■ 进行 I4x4 判断;
■ 选择最佳模式;

x264 的快速模式选择算法存在的冗余:
■ 帧内宏块在很多视频序列中占有客观的比重,如果能够提前检测出来适合帧内编码的宏块,就可以省去帧间模式判断的冗余过程;
■ p8x8 耗费计算资源显著,且出现的概率有限,针对 p8x8 的不必要的判断过程将带来大量的计算冗余;
■ Psub8x8 耗费计算资源显著,适度提高改模式被跳过的概率能够提升编码速度;

分层判断改进模式选择
■ 对于帧间预测,令 P16x16、skip 为主要模式,其余为辅助模式,,对于帧内预测,令 I16x16 为主要模式,其余辅助模式(原文忽略了 I8x8 模式);主要模式保证基本压缩质量,辅助模式起到编码性能优化作用;
■ 模式判断先对主要模式进行展开,之后由主要模式的判断结果构建若干判断条件,决定是否跳过各个辅助模式;
在这里插入图片描述
帧间辅助模式失效条件:
● 为了在主要模式判断结果的基础上提前识别处不适合帧间编码的宏块,从而跳过其余帧间模式的判断过程;
● 帧间主辅模式均采用运动估计进行预测,辅模式的优越性仅仅来自更小的预测尺寸,但二者代价相近;因此结论,帧间预测时,主要模式能够为最优辅助模式的编码代价提供基本的估计;
● 当帧间主要模式的编码代价显著大于帧内主要模式时,帧间辅助模式编码代价大于帧内模式的概率也很高,此时帧间辅助模式失效,可跳过判断;
● 当视频内容剧烈变化时,当前宏块 P16x16 编码代价较之时域邻块的 p16x16 编码代价将产生较大上升,此时采用帧内预测更有优势;
● 其次,帧内宏块往往具有空域连续性,邻块采用帧内模式较多时当前块采用帧内模式编码的概率也较高;
在这里插入图片描述
帧间主要模式有效条件:
● 为了在帧间主要模式判断基础上提前识别出适合采用 P16x16 模式编码的宏块,从而跳过其余帧间模式的判断过程,依据尺寸单调性原理,该条件可以通过门限运算实现;
● P16x16 编码代价小于某门限,认为主要模式良好,跳过辅助模式集合检验过程;
● 利用上公式 1 得到时域邻块,以其最终编码代价作为当前宏块的提前终止门限,其中 x、y 表示当前宏块的坐标,xref、yref 表示参考帧内时域邻块的坐标,Mx、My 表示当前宏块运动矢量在 x、y 方向的分量;
● 考虑公式 1 的存在的优化余地,增加公式 3 来判断是否发生突变的界定条件
在这里插入图片描述

具体的门限计算步骤:
○ 由公式 1 找到时域参考宏块,若公式 3 满足,将其最佳帧间编码代价加入统计列表;
○ 若正左/左上/正上/右上侧邻块存在,且公式 3 满足,讲起最佳帧间编码代价加入统计列表;
○ 求取统计列表中参考代价均值 Ce,若当前宏块没被提供任何门限参考信息,设置 Ce=0;
○ 若 Ce < 16SAD(QP),则 Ce = Ce + 12SAD(QP);(此步骤应对较小门限时进行修正调整)
○ 存储当前最优帧间编码代价,为下一帧门限计算提供参考依据;

改进的帧间辅助模式选择算法:
● 对 x264 原有的算法进行继承,为了提高 Psub8x8 模式被跳过的概率,先对 p16x8/p8x16 进行检验,以其结果指导 Psub8x8 的判断过程;
● 帧间辅助模式选择过程:
○ P8x8 帧间预测;
○ 若 Cp8x8 + Cmv(tr) + Cmv(dl) < Cp16x16,进行 P16x8、P8x16 判断;(这块跟代码里不太一样,应该是Cp8x8 < Cp16x16)+ Cmv(tr) + Cmv(dl)),其中Cmv(tr)与Cmv(dl)分别代表右上/左下位置子宏块运动矢量的编码代价;
○ 若 min(Cp8x8,Cp16x8,Cp8x16)= Cp8x8,采用 Psub8x8 对 P8x8 进行优化;

算法全局概览
在这里插入图片描述

应用到 B 切片
● 因为 B slice 一般在 rtc 中应用较少,具体不介绍,可参考原文;

结果

在这里插入图片描述

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

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

相关文章

汽车+ChatGPT 车内生活体验再升级

这两年&#xff0c;人工智能工具ChatGPT爆火&#xff0c;在全球掀起了大模型之战。如今&#xff0c;最前沿的自然语言处理大模型应用到了人类的出行工具上&#xff0c;梅赛德斯-奔驰和微软官宣正在合作测试车载ChatGPT人工智能&#xff0c;并将面向约90万车主开启测试&#xff…

对象存储、数据库、NAS、标注数据集,均支持元信息配置|ModelWhale 版本更新

七月中旬&#xff0c;暑气渐浓&#xff0c;ModelWhale 新一轮的版本更新&#xff0c;期待为每个领域的你带来更好的使用体验。 本次更新中&#xff0c;ModelWhale 主要进行了以下功能迭代&#xff1a; • 新增 对象存储、数据库、NAS、标注数据的元信息展示&#xff08;专业版…

flutter开发实战-Theme主题切换

flutter开发实战-Theme主题切换 之前做的应用中有用到Theme主题切换&#xff0c;一直没有整理&#xff0c;这里整理一下。 使用的是Android studio 一、效果图 二、创建ThemeModel // 提供五套可选主题色 const _themes <MaterialColor>[Colors.blue,Colors.cyan,Co…

缓存 - Caffeine 不完全指北

文章目录 官网概述设计CodePOMPopulationEviction PolicyRefreshStatistics 官网 https://github.com/ben-manes/caffeine wiki: https://github.com/ben-manes/caffeine/wiki 概述 Caffeine是一个用于Java应用程序的高性能缓存框架。它提供了一个强大且易于使用的缓存库&a…

如何判定是否一份适合工作呢

核心指标&#xff1a;喜欢 春节仿佛还在昨天&#xff0c;转眼间2023年已经过半。分享和总结一下自己过去的这6个月吧&#xff01;你可以从以下几个方面展开谈谈。 23年上半年已经过去啦。结合工作多年经历简单写一写。 主要写自己&#xff1a; 工作非常努力&#xff0c;但是…

Java 一文掌握全部阻塞队列的使用

1、简介 本文主要对Java常用阻塞队列进行介绍和提供相关使用案例 2、 阻塞队列作用 阻塞队列提供了一种线程安全、高效的数据传递和同步机制 &#xff0c; 主要用于缓冲数据、限流、削峰填谷&#xff0c;生产者-消费者模型&#xff0c;线程间的协作等等。 3、 各阻塞队列区…

人工智能学术顶会——NeurIPS 2022 议题(网络安全方向)清单、摘要与总结

按语&#xff1a;随着大模型的崛起&#xff0c;将AI再次推向一个高峰&#xff0c;受到的关注也越来越大。在网络安全领域&#xff0c;除4大安全顶会外&#xff0c;一些涉及AI的安全话题&#xff0c;包括对AI的攻防研究&#xff0c;以及应用AI做安全的研究方向&#xff0c;也会发…

在vite创建的vue3项目中使用Cesium加载纽约建筑模型、设置样式,划分城市区域并着色

在vite创建的vue3项目中使用Cesium加载纽约建筑模型、设置样式&#xff0c;划分城市区域并着色 使用vite创建vue3项目 npm create vitelatestcd到创建的项目文件夹中 npm install安装Cesium npm i cesium vite-plugin-cesium vite -D配置 vite.config.js文件&#xff1a;添加Ce…

系统架构设计师 8:系统质量属性与架构评估

软件系统属性包括功能属性和质量属性&#xff0c;软件架构重点关注的是质量属性。为了精确、定量地表达系统的质量属性&#xff0c;通常会采用质量属性场景的方式进行描述。 在确定软件系统架构&#xff0c;精确描述质量属性场景后&#xff0c;就需要对系统架构进行评估。软件…

前端|CSS(二)

参考视频&#xff1a;黑马程序员前端CSS3基础教程&#xff0c;前端必备基础 目录 &#x1f4da;CSS 布局的三种机制 &#x1f407;普通流 &#x1f407;浮动 ⭐️浮动介绍 ⭐️浮动(float)的应用 ⭐️浮动(float)的扩展 ⭐️清除浮动 &#x1f407;定位 ⭐️定位 ⭐️…

shell? 变量!

目录 ​编辑 &#x1f428;什么是shell &#x1f428;编译型语言和解释型语言 &#x1f428;解释型语言 &#x1f428;变量 &#x1f428;1.局部变量&#xff1a; &#x1f428;2.环境变量通常又称“全局变量” &#x1f428;3.设置环境变量&#xff1a; &#x1f4…

NZ系列工具:NZ11:VBA光标跟随策略

【分享成果&#xff0c;随喜正能量】生活就像是一杯苦茶&#xff0c;而情感是茉莉花&#xff0c;调兑在一起&#xff0c;才会馥郁芬芳。人活在世上&#xff0c;有诸多苦楚萦心&#xff0c;若不懂得自我调解&#xff0c;终究会被纷呈的世相掩埋。所以&#xff0c;更多的时候&…

Ubuntu18.04修改file descriptors(文件描述符限制),解决elasticsearch启动报错问题

最近在学习elasticsearch&#xff0c;使用的平台是Ubuntu18.04&#xff0c;在部署过程中的坑记录一下。 下载安装的过程就不说了&#xff0c;在启动es的时候报错 1 max file descriptors [4096] for elasticsearch process is too low, increase to at least [65535] 看了下…

TIOBE 7月编程语言榜出炉,这个语言强势突围,前三发生重大变化

TIOBE 公布了 2023 年 7 月的编程指数信息&#xff0c;在这个月&#xff0c;语言榜有什么新变化&#xff0c;让我们一起去看看吧&#xff01; JavaScript 创历史新高 几个月前&#xff0c;编程语言 C 占据了 TIOBE 指数的第 3 位&#xff08;超过了 Java&#xff09;。 但C的…

Golang 中的流程控制

1、Golang 中的流程控制 Go 语言中最常用的流程控制有 if 和 for &#xff0c;而 switch 和 goto 主要是为了简化代码、降低重复 代码而生的结构&#xff0c;属于扩展类的流程控制。 2、if else(分支结构) if 语句 if 语句 由一个布尔表达式后紧跟一个或多个语句组成。…

JDBC技术【SQL注入、JDBC批量添加数据、JDBC事务处理、其他查询方式】(三)-全面详解(学习总结---从入门到深化)

目录 SQL注入 JDBC批量添加数据 JDBC事务处理 Blob类型的使用 插入Blob类型数据 其他查询方式 动态条件查询 SQL注入 什么是SQL注入 所谓 SQL 注入&#xff0c;就是通过把含有 SQL 语句片段的参数插入到需要 执行的 SQL 语句中&#xff0c; 最终达到欺骗数据库服务器执行…

如何将各个阶段的数据进行对比?Sugar BI 教你快速搞定

折线图可以将当前和某个时间段的数据进行对比&#xff0c;比如前一天、上周、去年。 数据对比开启条件 当折线图 X 轴有且只有一个日期或时间字段&#xff0c;并且聚合方式为年-xx&#xff0c;Y 轴有且只有一个度量字段时&#xff0c;可以开启并配置折线图数据对比。 支持数据…

VMware使用ubuntu虚拟机的一些使用技巧

VMware安装Ubuntu虚拟机一般相对比较容易&#xff0c;本文记录一些VMware使用ubuntu虚拟机的其他使用技巧。 一、Ubuntu共享文件夹 1.1、 挂载镜像文件&#xff1a; 虚拟机->设置->硬件->CD/DVD.右边“连接”下面选择“使用IOS镜像文件”&#xff0c;浏览选择虚拟机…

【独家揭秘】微信居然可以自动通过好友申请并自动打招呼啦!

最近有客户来咨询&#xff0c;说是因为做内容引流到微信&#xff0c;所以每天很多人加她&#xff0c;微信都快被加爆了&#xff0c;每天手动通过好友申请和打招呼&#xff0c;回答了很多一模一样的问题&#xff0c;就一个小时已经让她很疲惫了&#xff0c;很机械的重复这些事。…

caj文件怎么转成pdf文件格式?分享两个免费方法!

在数字化的世界中&#xff0c;文件格式转换是我们日常生活和工作中常见的需求。CAJ文件是中国学术文献网络出版总库使用的一种文件格式&#xff0c;而PDF是全球广泛接受的文件格式&#xff0c;具有良好的兼容性和稳定性。本文将介绍两种免费的方法&#xff0c;帮助你将CAJ文件转…