HEVC率失真优化量化硬件实现策略

HEVC率失真优化量化硬件实现

    1.基于硬件实现的率失真优化量化

码率控制是实现量化控制的一个重要模块,它确定一个模块的量化步长,在特定编码失真约束下控制编码输出码率。确定量化参数后,就考虑如何量化。通过HDQ给出量化结果,然后考虑系数间的数据依赖,同时考虑编码码率消耗和编码失真,实现系数级精细量化,从而实现SDQ算法的率失真优化。
对于SDQ 的网格搜索,这里采用维特比算法。它主要包含三个功能单元:分支度量单元(BMU),加-比-选单元(ACS),幸存路径存储器单元(SMU)。BMU计算不同HDQ候选值情况下,所有可能分支的率失真编码代价。ACS计算各个路径度量,即全路径的编码代价累计和,然后通过比较将最小度量路径保留下来。SMU管理幸存路径相关数据。BMU和SMU单元中仅包含前向计算,不存在系数间的数据依赖和等待;而ACS单元是一个递归结构,它的计算依赖于临近阶的结果。这种数据依赖是实现硬件设计的主要障碍:
(1)在SDQ 全网格搜索中,遍历所有候选路径检查所有候选量化值,需消耗大量计算量,造成巨大吞吐压力;
(2)CABAC固有的数据依赖和高度串行数据处理过程使得编码码率计算非常困难;
(3)CABAC上下文选择和更新带来严重的数据依赖。这些依赖不利于硬件并行处理和流水线处理。
为解决数据依赖和吞吐效率的问题,应该从块内系数(阶)个数M和每个阶需检查的候选量化值个数N考虑。减少N和M,可有效加快ACS处理和去除系数间的串行依赖,提高系统吞吐性能。RDOQ作为简化的SDQ,它通过搜索局部路径代替完整网格,且每个系数仅检查三个可能候选量化结果U,U-1,0。
2.相比于全网格搜索,Nmax=3仅产生非常小的RD性能损失,所以可以假设网格搜索允许的最大阶数,即最大非零系数个数Nmax=3。
(1)计算所有系数HDQ量化值Ui,估计失真ΔD(Ui),统计所有非零系数的个数nz_last,标记非零系数索引i和扫描位置j。
(2)如果nz_last<=Nmax,则不进行预选,直接进入第5步对所有非零系数进行网格搜索。
(3)对非零系数顺序扫描,i从nz_last到1降序排列,依次估计非零系数发生变化时对应的率失真代价变化ΔJ(Ui),若需要,通过查表计算相应的码率,估计ΔR(Ui)。
(4)扫描非零系数,根据ΔJ(Ui,Ui-1),thunchange和thchange做出预判。用S(Ui)=0或1来表示当前非零系数预判为“不安全”或“安全”;用C(Ui)=0或1来表示当前非零系数HDQ结果Ui是否改变为Ui-1。统计“不安全”系数的个数Nunsafe(i),后面仅对“不安全”系数进行搜索。
若Nunsafe(i)>=Nmax,跳过下面判断,让所有非零系数的S(Ui)=0,即都设为不安全。
(5)根据S(Ui)和C(Ui)建立动态网格(根据“不安全”非零系数HDQ输出幅度和“安全”系数组合来描述动态网格结构),并进行动态网格维特比搜索。通过对非零系数进行网格搜索,检查这些系数的量化幅度,通过判断ΔJ(Ui)是否大于0决定是否需要将U改为U-1或0。若大于0,则U应改为U-1或0。
注:1.(1)~(4)映射为一个硬件流水线级,即预判阶段。预判只针对HDQ结果Ui不大于2的非零系数,大于2 和等于0的系数不参与预判。
2.阈值thunchange和thchange由正确和错误判决的概率确定。例如这里可设为2.5%。当错误判断概率较小情况下,通过(i,Qp)不同组合获得thunchange和thchange 。对于块内扫描靠前的系数,th=k*Qp+b,不同i时具有不同的斜率K和截距b;对于靠后的系数,取固定阈值。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值