CABAC 学习(4)概率更新模型分析
来源:互联网 发布:mac 修改u盘图标 编辑:程序博客网 时间:2024/06/08 17:20
不知道很多人是不是和我一样有疑惑,那个probability estimation 是干什么用的?
就是在CABAC 的第三步, 算术编码完一个bin, 都要update context model.
在TEncBinCoderCABAC.cpp中的 encodeBin()函数中调用:
rcCtxModel.updateLPS();
<pre name="code" class="cpp"> rcCtxModel.updateMPS();
这个函数来update context ,其实就是更新概率模型。
算术编码克服了哈夫曼只能为整数的缺点,根据概率更新来更准确估计信源信号出现概率,概率估计越精确,编码效果越好。
这里的概率更新模型是单参数指数平滑法模型, 并以CABAC 定义的64个转换状态为index。这只是概率与index的函数的趋势关系, 参考H.264/AVC中那个经典的概率模型图。
但是在CABAC中, 概率更新FSM却是根据当前状态的概率来计算出新的概率。
每个概率在CABAC中其实是隐含着对应的状态的,比如如果得出概率0.04, 那么对应该的pStateIdx 就是48. 这与当前是LPS 还是MPS无关,就是一个概率对应一个确定的pstaeIdx.
只不过,标准中简化了对概率这种FP类型的数据的应用,直接实施为状态转移FSM,如果编码完一个bin之后, 当前的state是知道的,根据当前的stateIdx, 以及现在编码的binValue 是否等于对应context中的valMPS 的值(这个是会一直保持不变,除非stateIdx = 0, 只是后要变换为反码,0变1 , 1变0.), 即确定是LPS还是MPS的过程,确定了这个,在知道了现在的state,然后参考状态转移FSM表,就可以确定新的state,也就是新的概率模型,也就是新的context 模型,存储到context中的,下次再调用这个context 模型的时候,就会引用的是新的概率模型,也就是stateIdx 已经变成了新的。
这个过程的实现思想,就是信息论里的数据压缩的一个重要思想,体现adaptive的一个地方,使得编码更准确
然后应用到概率的range division, 也是用了一个4×64的array Table 9-40(最终标准书里)来实现, 避免了理论上的乘法,也就是有人说的免乘法原则。简化复杂度,表格中的数值也都是训练得到的结果。
- CABAC 学习(4)概率更新模型分析
- CABAC 学习(1)二值化(Binarization)过程分析
- 概率图模型学习(一):概率图矩阵分解
- 深度学习--概率图模型(一)
- 概率图模型系列(更新至2017.11.15)
- H264学习笔记(4):CABAC基于上下文的自适应二进制熵编码
- 下决心概率图模型学习
- 概率图模型的学习
- 机器学习模型 概率图模型
- 李宏毅机器学习课程4~~~分类:概率生成模型
- 【机器学习】主题模型(一):条件概率、矩阵分解
- 概率图模型(PGM)学习资料汇总
- PGM(概率图模型)学习之MRF
- 概率图模型学习(1)——基础
- 机器学习(周志华)_第十四章 概率图模型
- 周志华《Machine Learning》学习笔记(16)--概率图模型
- 周志华《Machine Learning》学习笔记(16)--概率图模型
- CABAC
- 【实用随记】失焦和双击
- Hp-ux下网络IP配置
- 废暮握匚九蓝肆疾文卮把币逃凑墙
- LeetCode 23. Swap Nodes in Pairs
- 【android】null pointer exception
- CABAC 学习(4)概率更新模型分析
- 微铺子点单系统,微信订餐平台领导者。微信点餐,微铺子
- javascript去除空格
- Uva 1471 Defense Lines(线段树)
- Impala与Hive的比较
- vs2010下使用nmake编译库的注意事项
- Android自定义进度条
- Android RIL 调试分析全记录
- html三种提示框