基于上下文的自适应二进制算术编码 CABAC 熵编码介绍

介绍

CABAC(Context-Based Adaptive Binary Arithmetic Coding,基于上下文的自适应二进制算术编码)是H.265/HEVC视频编码标准中使用的一种高效的熵编码技术。其核心原理是将自适应二进制算术编码与上下文模型相结合,以实现对视频数据的有效压缩。CABAC主要包括以下几个步骤:二进制化、上下文建模、二进制算术编码以及概率更新 。

  • 二进制化:将输入的语法元素转换为二进制形式。H.265/HEVC中包括截断莱斯二元化(TR)、K阶指数哥伦布二元化(EGK)和定长二元化(FL)等方法 。
  • 上下文建模:利用已编码元素的相关性,通过上下文模型对概率进行条件编码。上下文模型使用两个变量:最大概率符号MPS和概率状态索引pStateIdx。CABAC中预设了64个概率值,用于初始化概率模型 。
  • 二进制算术编码:对每个二元化后的Bin根据概率模型进行编码。CABAC使用区间划分方式,递归地保存编码区间的长度和下限。包括常规编码和旁路编码两种方式。常规编码利用自适应概率模型,旁路编码则以等概率方式进行,不更新概率状态 。
  • 概率更新:编码过程中,根据编码的符号更新概率模型。如果编码的Bin等于MPS,则增加概率索引值,表示MPS的概率增大;如果等于LPS,则减小概率索引值,表示LPS的概率增大 。

CABAC的优势在于其自适应性,能够根据视频内容的统计特性动态调整概率模型,从而提高编码效率。此外,CABAC还采用了多种二值化方案,以适应不同的编码场景。

此外,关于算术编码的原理可以参考:视频编码中算术编码原理详解。

CABAC 原理

  1. 原理框架图
    在这里插入图片描述
  2. 二值化
    • CABAC 中对不同的句法元素一共应用了四种二进制化方法:一元码二元化 U截断莱斯二元化TRK 阶指数哥伦布二元化EGK定长二元化FL
    • 针对不同的语法元素, 根据其不同的概率分布特性来选择不同的二元化方案。
  3. 上下文建模
    • cabac 将 slice 片作为整个 cabac 算法的生命周期;
    • 编码中,语法元素使用的上下文概率模型都被唯一的上下文索引号 r 标识,每一个 r 涉及两个概率模型变量: 最大概率符号MPS 和 概率状态索引;
    • 在CABAC中,根据先验知识为 LPS 的概率设定了64 个代表值。概率状态索引与 LPS 的概率值一一对应,LPS 概率自适应的更新就表现为概率状态索引的变化。
    • 概率状态更新:CABAC在编码每个二进制值后,会根据编码的符号更新概率模型,这是自适应过程的一部分。上下文模型存储与每位是1或0的概率有关的参数,并根据编码的符号进行更新。CABAC 在计算的复杂度和编码效率之间作了折中,建立了一个基于查表的概率模型,将从 0 到 0.5 范围内的概率量化为 64 个值,这些概率对应于 LPS(Least ProbabilitySymbol)字符,则 MPS(Most Probability Symbol)字符的概率为 1- Plps 。字符的概率估计值被限制在表内,概率的刷新也不是去计算 P(binval|z),而是按照某种法则在表中查找。
      在这里插入图片描述
    1. 二进制算术编码
      在这里插入图片描述
  4. 旁路编码
    • 旁路编码无需对概率进行自适应更新,而是采用 0 和 1 各占 1/2 概率进行编码;为了使区间划分操作更加简便,不采用直接对区间长度二等分的方法,而采用保存编码区间长度不变 , 使区间下限 L值加倍的方法来实现区间划分 ,效果是一样的。随后进行重归一化操作;
    • 一般在近似均匀分布的符号、特定的语法元素、特定编码模式等会采用旁路编码;
      在这里插入图片描述
  5. 输出码流
    • 应用 CABAC 编码相比于其他熵编码,如 CAVLC,可以节约码率 9%~14%。
      在这里插入图片描述

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

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

相关文章

630-基于PCIe的高速模拟AD采集卡

一、产品概述 基于PCIe的一款分布式高速数据采集系统,实现多路AD的数据采集,并通过PCIe传输到存储计算服务器,实现信号的分析、存储。 产品固化FPGA逻辑,适配2路1Gsps/2路2Gsps采集,实现PCIe的触发采集&#xf…

vue3前端开发-小兔鲜项目-使用逻辑函数拆分业务模块

vue3前端开发-小兔鲜项目-使用逻辑函数拆分业务模块!其实就是把一些单独的业务代码组成一个js文件。抽离出去后,方便后面的维护。 如图,在一级分类下面新建一个文件夹。composables里面新建2个js文件。 分别封装之前的分类,和ban…

[Spring] Spring日志

🌸个人主页:https://blog.csdn.net/2301_80050796?spm1000.2115.3001.5343 🏵️热门专栏: 🧊 Java基本语法(97平均质量分)https://blog.csdn.net/2301_80050796/category_12615970.html?spm1001.2014.3001.5482 🍕 Collection与…

AI在候选人评估中的作用:精准筛选与HR决策的助力

一、引言 随着科技的迅猛发展,人工智能(AI)技术已逐渐渗透到各个行业和领域,人力资源管理(HRM)亦不例外。在候选人评估的环节中,AI技术以其高效、精准的特性,正在逐步改变着传统的招…

深度学习 —— 个人学习笔记6(权重衰减)

声明 本文章为个人学习使用,版面观感若有不适请谅解,文中知识仅代表个人观点,若出现错误,欢迎各位批评指正。 十三、权重衰减 使用以下公式为例做演示: y 0.05 ∑ i 1 d 0.01 x i ε w h e r e ε ~ N…

从PyTorch官方的一篇教程说开去(4 - Q-table来源及解决问题实例)

偷个懒,代码来自比很久之前看的书,当时还在用gym,我做了微调以升级到gymnasium当前版本,确保可以正常演示。如果小伙伴或者原作者看到了麻烦提一下,我好备注一下出处。 您的进步和反馈是我最大的动力,小伙…

语音识别 语音识别项目相关笔记内容

语音识别 语音识别项目相关笔记内容 语音识别应用范畴语音识别框架语音基本操作使用scipy.io.wavfile读取wav音频文件获取采样率、长度、通道数使用numpy读取pcm格式音频文件读取wav音频文件,并绘制图像读取双声道的wav音频文件,分别绘制不同声道的波形图读取一个采样率为16k…

【Docker】Docker Desktop - WSL update failed

问题描述 Windows上安装完成docker desktop之后,第一次启动失败,提示:WSL update failed 解决方案 打开Windows PowerShell 手动执行: wsl --set-default-version 2 wsl --update

使用 vue-element-plus-admin 框架遇到的问题记录

项目打包遇到的问题: 打包语句:pnpm run build:pro 报错信息: Error: [vite]: Rollup failed to resolve import "E:/workplace_gitee/xxx/node_modules/.pnpm/element-plus2.5.5_vue3.4.15/node_modules/element-plus/es/components…

【精品资料】数据安全治理解决方案(27页PPT)

引言:数据安全治理解决方案是一个综合性的体系,旨在通过策略、技术、流程和人力的有机结合,全面提升组织的数据安全防护能力,保障数据资产的安全与合规。 方案介绍:数据安全治理解决方案是组织为确保其数据资产的安全性…

Spark内核的设计原理

导读: 本期是DataFun深入浅出Apache Spark第一期的分享,主讲老师耿嘉安开场介绍了自己的从业经历,当前就职的数新网络与Spark相关的两款产品赛博数智引擎CyberEngine和赛博数据智能平台CyberData。 本次分享题目为《Spark内核的设计原理》&…

智能化一体闸门:助力行业发展

随着科技的飞速发展,智能化技术已经渗透到各个行业和领域,其中水利行业也不例外。智能化一体闸门以其高效、智能、便捷的特点,正助力着行业发展。 一、智能化一体闸门的定义与特点 智能化一体闸门,是集成了先进传感技术、自动控制…

Transformer之Swin-Transformer结构解读

写在最前面之如何只用nn.Linear实现nn.Conv2d的功能 很多人说,Swin-Transformer就是另一种Convolution,但是解释得真就是一坨shit,这里我郑重解释一下,这是为什么? 首先,Convolution是什么? Co…

什么是离线语音识别芯片?与在线语音识别的区别

离线语音识别芯片是一种不需要联网和其他外部设备支持,‌上电即可使用的语音识别系统。‌它的应用场合相对单一,‌主要适用于智能家电、‌语音遥控器、‌智能玩具等,‌以及车载声控和一部分智能家居。‌离线语音识别芯片的特点包括小词汇量、…

Python文件写入读取,文件复制以及一维,二维,多维数据存储

基础解释 在 Python 中,文件操作的模式除了 w (只写)、 a (追加写)、 r (只读)外,还有以下几种常见模式:- r :可读可写。该文件必须已存在,写操…

分类损失函数 (一) torch.nn.CrossEntropyLoss()

1、交叉熵 是一种用于衡量两个概率分布之间的距离或相似性的度量方法。机器学习中,交叉熵常用于损失函数,用于评估模型的预测结果和实际标签的差异。公式: y:真是标签的概率分布,y:模型预测的概率分布 …

数据库中的内、外、左、右连接

常用的数据库连表形式: 内连接 :inner join 外连接 :outer join 左外连接 :left outer join 左连接 :left join 右外连接 right outer join 右连接: right join 全连接 full join 、union 一、内连接 内…

企业私有云的部署都有哪些方式?

如今常见的企业私有云的部署方式有自建私有云、托管私有云、虚拟私有云、混合云、容器化私有云、本地数据中心部署等。如今,企业私有云的部署呈多样化趋势,以用来满足各个企业的具体需求。以下是RAK部落小编为大家汇总的企业私有云常见的部署方式&#x…

LeetCode 58.最后一个单词的长度 C++

LeetCode 58.最后一个单词的长度 C 思路🤔: 先解决当最后字符为空格的情况,如果最后字符为空格下标就往后移动,直到不为空格才停止,然后用rfind查询空格找到的就是最后一个单词的起始位置,最后相减就是单词…

C++ 正则库与HTTP请求

正则表达式的概念和语法 用于描述和匹配字符串的工具,通过特定的语法规则,灵活的定义复杂字符串匹配条件 常用语法总结 基本字符匹配 a:匹配字符aabc:匹配字符串abc 元字符(特殊含义的字符) .:匹…