APP下载

基于熵编码器的存储优化和二值化器改进

2021-07-09许诗卉

现代计算机 2021年14期
关键词:存储空间残差编码器

许诗卉

(上海交通大学电子信息与电气工程学院,上海 200240)

0 引言

H.266/VVC 作为目前最新的视频编码标准,比上一代H.265/HEVC 提高50%的压缩率[1]。在VVC 中,视频联合视频专家组(JVET,Joint Video Experts Team)依然选用CABAC(Context-Based Adaptive Binary Arith⁃metic Coding)作为熵编码的唯一算法。

CABAC 编码器一般选用DSP(Digital Signal Pro⁃cessing)、FPGA(Field Programmable Gate Array)和ASIC(Application-Specific Integrated Circuits)等技术实现。其中DSP 的性能存在争议[21],根据文献[21-22]ASIC 的处理速度平均比FPGA 快3-5 倍,因此专用的ASIC 设计已经成为视频编码器实现的主要解决方案。

近年来,有很多改进方案通过提高并行度[5,8,11,13]来提高熵编码的吞吐率,例如Z.Liu[12]采用2 bin 并行的重归一化操作,Wei Fei[5]将四个BAE(算术编码引擎,Binary Arithmetic Encoding)单元级联从而实现4bins/cycle 的吞吐率。但是这种结构会使关键路径长度增加2-4 倍。另外一些学者试图从面积或功耗的角度降低成本[6,9],例如A.L.d.M.Martins 等人[9]将一元码和FL(定长编码,Fixed Length)编码引擎级联实现EGk(K 阶指数哥伦布编码,Kth Exp-Golomb)二值化编码,平均可以节省50%的硬件资源,但是也需要牺牲一半的频率。目前还没有关于针对系统级的存储优化和架构优化层面提高吞吐量方面的研究。

本文提出基于块合并的数据重排技术,通过对待编码语法元素的排布方式进行优化合并,可以节省69%的存储空间。此外还提出基于语法元素分组的二值化选择管理技术,通过调整二值化架构把编码时钟的占比率提高了20.13%。该方案在TSMC 28nm 工艺下综合得到的最高频率是480MHz,可以处理1.47bins/cycle。

1 CABAC编码器的硬件架构

如图1 所示,视频编码架构包括帧内预测、帧间预测、变换/量化、环路滤波、熵编码等模块。作为视频编码的最后环节,熵编码根据随机过程的统计信息进行预测编码,是一种无损压缩算法。经过熵编码处理待编码语法元素(SE),但可能会消耗整个处理时间的24%以上[2]。

图1 视频编码架构

熵编码过程包括3 个主要步骤:①二值化(BZR,Binarization);②上下文建模与更新(Context Modeling and Updating);③二进制算术编码(BAE,)Binary Arith⁃metic Encoding。图2 是我们的熵编码器架构。在这种结构中EC_CTRL 主要负责编码控制,CABAC_BZR 负责对语法元素进行二值化;CTX_INIT、CTA_MAG 共同完成上下文初始化与更新工作,上下文数据存储在CTX_RAM 里;BAE 模块将bin 字符串编码成bit 流后通过SP(Stream Packer)打包输出。中间插入buffer 平衡BZR 和BAE 的速度。

上述架构中EC_CTRL 需要和CABAC_BZR 进行交互握手,得到响应信号后再向下编码下一个语法元素,交互信号需要额外2 个cycle 来实现,会增加硬件电路中的气泡。与此同时,由于传统设计中基于块划分的存储结构,存储待编码语法元素的RAM 空间利用率比较低,一个字长(64bit)的最低利用率仅有6.25%,也存在优化空间。

2 基于块合并的高效存储方式

在ASIC 设计里普遍采用基于块划分的存储方式,根据CU(Coding Unit)、PU(Prediction Unit)、TU(Trans⁃form Unit)等的划分情况,把单个Unit 内的语法元素进行合并(即单个字内存储的语法元素不能跨越CUPUTU 的划分边界)。这样:在Intra 模式下,1 个CTU 最多需要存储的非残差语法元素的个数为:1CTU+2SAO+64×(1CU+1TT+6RC)=515(x64bit);在In⁃ter 模式下,对于单向预测的PB 块最小尺寸为4×8 和8×4,对于双向预测的PB 块,最小尺寸为8×8,为此最多需要存储的非残差语法元素的个数为:1CTU+2SAO+64×(2PU+1TT+6RC)=579(x64bit)。无论在Intra 还是Inter 模式下,最多需要存储的残差语法元素的个数为:64×64×16×1.5/256=384。为此,硬件实现时需要两块RAM,一块大小为579×64 Bit 用来存放一个CTU 的非残差语法元素,一块大小为384×256 Bit 用来存放一个CTU 的残差语法元素。

在对多个视频测试序列中的语法元素进行统计分析后,与TU 相关的语法元素(存放在TT(Transform Tree)和RC(Residual Coding)中)占总数据量的72.97%~83.12%,他们的存储效率与块尺寸有极大的相关性,具体数值如表1 和表2 所示。理想情况下TT 和RC对存储空间的平均利用率为10.49%。综上所述,本文决定对TT 和RC 两个部分进行存储优化。

表1 TT 部分存储空间利用率

表2 RC 部分存储空间利用率

分析表1 和表2 中的数据可得小于16x16 的块存储空间利用率不足25%,小于8×8 的块存储利用率刚好是6.25%。HEVC 中编码块基于四叉树进行划分,因此当合并块的个数是4 的倍数或者是16 的倍数时更有利于硬件结构的实现。基于上述特性,本文选择16×16 尺寸作为分界点,对于大于等于16×16 的CU 块和TU 块依然基于块划分存储语法元素,对于小于16×16的块把它们的信息一律合并到一个字长里(64bit),为了寻址方便,在单个字长内采用等分的方式,即有效信息中间会存在若干bit 的保留位。

经过优化后的存储器非残差语法元素采用64bit位宽的RAM:在Intra 模式下,最多需要1CTU+2SAO+64CU+16TT+7RC+16×1.5RC=114(个字);在Inter 模式下,对于单向预测的PB 块最小尺寸为4×8 和8×4,对于双向预测的PB 块,最小尺寸为8×8,为此最多需要1CTU+2SAO+64×2PU+16TT+7RC+16×1.5RC=178(个字)。存储残差语法元素的空间不变。综上所述,优化后的设计在硬件实现时需要两块RAM,一块大小为178×64 Bit 用来存放一个CTU 的非残差语法元素,一块大小为384×256 Bit 用来存放一个CTU 的残差语法元素。和优化前的相比,存储非残差语法元素的RAM 比原来节省69%的存储空间。

3 基于语法元素分组的二值化选择管理技术

H.265 里一共用到5 种二值化方式:一元码(Unary)、截断一元码(TU,Truncated Unary)、截断莱斯码(TR,Truncated Rice Binarization)、定长编码(FL,Fixed Length)、K 阶指数哥伦布编码(EGk,Kth Exp-Golomb)。H.266 除了上述几种二值化方式外新增截断二元码(TB,Truncated Binary)。其中FL、TR、EGK 等模块可以被多个语法元素共用,其他用特殊方式进行二值化的语法元素,比如H.265 里的part_mode(PM)等需要单独模块来处理。二值化模块的结构如图3 所示。

图3 二值化模块

如图3 所示,在基于语法元素分组的设计结构中所有语法元素的二值化都在CABAC_BZR 模块进行,A.B.Hmida[7]和N.Neji 等人[15]的设计也也基于该结构。如图2 中所示,控制模块和二值化模块之间通过二相握手协议进行交互,控制模块向CABAC_BZR 块发送编码请求信号cabac_req,待编码完成后CA⁃BAC_BZR 模块将二值化后的数据发送到Buffer 进行缓存,并且向CTRL 模块返回响应信号cabac_ack,CTRL 模块接到cabac_ack 信号后可以进入下一个状态,即每次二值化最少需要2 个cycle 完成。FL 二值化只需要根据各个语法元素的cMax 值对数据做拼接操作,交互信号使每个bin 都有至少1 个cycle 气泡。经统计,H.265 里一共有56 种语法元素,其中用FL 方式二值化的有39 种,即69.64%的语法元素都需要消耗额外1 个cycle 来进行二值化;H.266 里一共有111种语法元素,其中用FL 二值化的有76 个即68.46%的语法元素都需要消耗额外1 个cycle 执行二值化编码,气泡总数相当可观。

本课题通过对二值化架构进行微调整,把FL 编码提到语法元素的预处理模块(如图4 所示),这样用FL方式编码的语法元素可以经过选择器筛选后直接送入Buffer 中等待后续模块的处理,有效减少了上述由握手信号带来的额外时钟消耗,使编码时钟占比率提高了20.13%。

图4 改进后的熵编码器结构

4 实验结果

本文用Verilog 语言实现了如图3 中所述的编码器架构,用Cadence NCsim 工具进行电路仿真和功能验证,并通过的Cadence Genus 工具进行逻辑综合,综合过程基于TSMC 28nm 的工艺库。表3 中列出了本文实验结果以及和之前工作的比较。

表3 与其他论文的结果对比

仿真过程的输入激励由官方测试模型HM16.20 获得,用Perl 语言编码的脚本对得到的测试激励进行处理,调整成第2 小节中我们需要的顺序。

如表3 所示,所提出的架构平均每个周期编码1.47 个bin,最高工作频率为480MHz,编码器的吞吐量可以达到706Mbits/s,远远大于2560×1600@60fps 的视频序列实时编码时所需要的423.44Mbits/s[8]时的吞吐率。如图5 所示为归一化后的面积效率对比,可以看到本文设计的面积效率是文献[8]中设计的1.73 倍。

图5 面积效率对比

5 结语

本文提出了基于HEVC 视频编码标准的CABAC编码器的硬件设计,并且提出了非残差语法元素的存储优化方案,使该RAM 可以节省掉69%的硬件资源。同时优化后的架构可以将编码时钟占比率提高20.13%,跟以往设计相比可以实现1.73 倍的面积效率。

猜你喜欢

存储空间残差编码器
基于ResNet18特征编码器的水稻病虫害图像描述生成
多级计分测验中基于残差统计量的被试拟合研究*
用于处理不努力作答的标准化残差系列方法和混合多层模型法的比较*
苹果订阅捆绑服务Apple One正式上线
用好Windows 10保留的存储空间
基于TMS320F28335的绝对式光电编码器驱动设计
连续型过程的二元残差T2控制图
具备DV解码功能的DVD编码器——数字视频刻录应用的理想选择