转自:https://zhuanlan.zhihu.com/p/108792210

本文将分为四个部分对下一代视频编码标准Versatile Video Coding(VVC)的变化模块进行介绍。第一部分简单介绍一下视频编码的发展历程以及VVC的编码框架;第二部分重点介绍VVC变换相比于以往的视频编码标准(HEVC、AVC)所新增加的一些特性;第三部分介绍了国内外对VVC变换硬件设计的研究现状;第四部分总结了我们当前的研究思路。

  1. 背景介绍

图1. 视频编码标准发展历程

上图展示了视频编码国际标准的发展历程,我们可以看到目前主要以VVC、AV1和AVS3为主流发展趋势。人们对高分辨率视频(4K、8K)的需求越来越大,因此需要更加高效的视频压缩标准来提升压缩效率降低带宽压力。按照下图所示的压缩率提升规律,编码效率每提升50%以上就会成为新一代标准,如早前的H.261、HAV1等,其性能基本持平所以我们将其称为第一代。而像AVS和H.264等比前一代提升50%就可称其为第二代,至于AVS2、H.265等相对于第二代的提升达到50%我们就将其称为第三代。现在我们正在探索的AVS3/VVC/H.266则会成为最新一代的压缩标准。

图2. 各代视频编码标准的压缩性能提升

和之前的标准类似,VVC采用基于块结构的混合编码框架,融合了帧内和帧间预测、变化编码和熵编码等模块。如下图:

图3. 视频编码框架

那么VVC有什么特别之处呢?我将VVC所引入的新技术以及其带来的性能提升整理成下表,我们可以看到蓝色与红色高亮的技术所带来的性能提升非常显著,但毫无疑问,这也带来了巨大的计算复杂度,从编码时间的增加上就可以看出。

表1. VVC关键技术

2. VVC变换的新特性

这一节我们重点来介绍VVC变换所增加的新特性,其可以概括为三个方面:1)更灵活的变换尺寸;2)舍弃高频变换系数;3)多变换核选择(Multiple Transform Selection, MTS)。首先,我们先简单介绍一下变换原理。

对于2D变换,都可以拆分为行方向和列方向上的1D变换。所有变换类型的1D变换计算公式如下:

其中X是表示一帧图像的输入行向量(1×N),TN是N×N整数变换矩阵,Y是经过变换计算所获得的输出列向量(N×1)。那么我们可以知道变换的实质就是矩阵计算。

2.1 更灵活的变换尺寸

由于Multiple Type Tree(MTT)的引入,VVC支持四叉树+二叉树+三叉树划分(如图4),导致变换不仅支持正方形的尺寸(MxM)还支持长方形尺寸(MxN,M≠N)。除此之外,VVC还支持在行列方向上采用不同的变换类型。

图4. 灵活的块划分方式

2.2 舍弃高频变换系数

在VVC的官方测试软件VTM中,允许变换的最大尺寸为64x64。对于长或宽等于64的大尺寸变换块,直接舍弃高频变换系数,仅保留低频变换系数。例如,对于长x宽为MxN的块,若M等于64,则只保留左边的32列,若N等于64,则只保留上方的32行。如果当前为变换跳过模式,则保留所有变换系数。

2.3 多变换核选择(MTS)

除了HEVC中的DCT-II变换,VVC引进了两种新的变换方式DST-VII 和DCT-VIII,帧内帧间编码块从这三种变换方式中进行选择。下表为三种变换方式的基函数。

表2. 变换基函数

为了控制MTS的复杂度,分别在帧内和帧间的SPS level对是否使用MTS进行标记,若SPS level标记表示可以使用MTS,则每个CU也有一个Flag标记当前CU是否使用MTS。MTS在CU级别的flag只有在满足以下两种情况时才会存在:

1)长和宽都小于等于32; 2)CBF Flag等于1;

这里值得注意的是,MTS仅仅适用于亮度分量。具体可参考链接:https://blog.csdn.net/baidu_28446365/article/details/90174414

3. 国内外研究现状

每一代视频编码标准的出现,都会促进其软件加速和硬件优化方面的研究。在残差编码、率失真优化(RDO)过程中,变换都是高频使用、计算量大的一个模块。目前,国内外有很多学者针对变换操作,提出了一些area-efficient、low-power的硬件架构。在过去几年里,大量的工作都是围绕HEVC的DCT-II展开的,而这些工作的核心都离不开Chen等人所提出的矩阵分解算法,这是一种迭代的分解方式,就是将DCT-II变换矩阵分解成两部分(偶部分AN/2和奇部分RN/2),AN/2可以按照上述继续分解,如下式所示。通过这种方式可以有效地降低计算复杂度,化大为小。

由于VVC是一个正在发展、不断完善的新标准,目前针对VVC变换的相关研究很少。并且,由于变换尺寸和类型的差异,之前关于HEVC变换的相关工作无法直接应用于VVC变换。有少量研究是针对JEM(HEVC向VVC过渡的版本)做的,JEM变换包含五种可供选择的变换核,除VVC的三种外,增加了DCT-V和DST-I。

A. Kammoun等人【3】【4】面向五种变换核,使用无乘法器的多常量乘法(Multiplierless Multiple Constant Multiplication,MCM)为每一种变换核都设计了相应的1D 4-point和8-point计算单元,并且统计了所使用的加法器和移位操作数,发现硬件资源消耗有效降低。下图是他们给出的1D 8-point变换实现的整体框架。

图5. 1D 8-point AMT实现【4】

A. C. Mert等人【5】首次实现了5种变换核的2D变换,并且可以根据输入信号(TR_Type_Vertical、TR_Type_Horizontal)选择变换类型进而对相应数据通路进行重构。这种可重构的架构大大减少了area,是一种高性能架构,美中不足的是变换尺寸仅支持4×4和8×8。

图6. 2D可重构架构【5】

随后A. Kammoun等人【6】为五种变换核提出了一个统一的2D变换架构,可支持最大变换尺寸为32×32,采用折叠型框架并且设计了流水线,图8给出了4×4块变换的流水线处理时序图。该实现以大量的硬件资源消耗为代价来换取设计的统一完整性。

图7. 2D AMT实现【6】

图8. 4×4块流水线处理时序图【6】

4. 研究思路

在做变换模块的硬件设计时,如何减少硬件代价、降低能耗是研究的一个重点。我们的研究主要从以下几个方面开展:

1)降低计算单元的硬件复杂度。对于1D变换(实质就是矩阵乘法),我们需要设计核心计算单元(乘法块),而有效地减少计算单元的硬件资源消耗才能降低整个2D实现的area。我们发现MCM仅通过加法和移位操作就能完成乘法块的设计。而移位操作的硬件消耗很少,通过rewire就可以实现,那么如何减少加法器的数目就是研究之重。我们采用了RAG-n算法——一种有效减少加法器数目的算法来进行我们核心计算单元的设计。

2)支持长方形变换尺寸(M×N,M≠N)的中间数据存储。我们知道,2D变换过程可以分解为先行变换再列变换,那行变换得到的中间结果存至转置存储器,再由列变换读取数据进行计算最终完成2D变换。高效的数据存储模式可以大大提高计算效率,减少不必要的数据读取时间。我们针对了长方形变换块设计了对角线式的数据存储模式,使流水线设计成为可能。

3)支持混合块尺寸的流水线设计。我们知道变换块尺寸有大有小,形状各异,那么在混合的块尺寸输入下,如何使整个设计流水线化?我们通过下面这张图来说明。以(a)为例,当我们完成16×16块的行变换,并将数据存至转置存储器(Transpose Memory, TM)后,我们开始从TM中读数据并同时进行下一个块(32×32)的行变换,当我们完成了前一个块的列读取后,当前的32×32块并没有完成行变换,因此还不能读取列数据,需要等待(A timing gap)。而我们的设计以经过高频系数舍弃所支持的最大变换尺寸32×32为范围,进行流水化,当完成32×32块范围(可以由很多不同的子块组成)内的所有行变换再开启列变换,如(c)所示。

(a)Case 1: A timing gap.

(b)Case 2: A reading data collision.

(c)The timing chronogram of proposed pipelined architecture (different colors mean that these TUs belong to different 32×32 block ranges). 图9. 混合块尺寸的流水线化

4)寻找不同变换类型的共性。我们发现DST-VII和DCT-VIII之间有着非常奇妙的关系,与DST-VII变换矩阵(3)相比,DCT-VIII(4)的每一行都和它有着相同的系数,只是顺序相反,并且在第偶数行符号相反。这样的话,我们仅需反转输入顺序并分配合适的输出符号,便可以在不增加计算复杂度的基础上轻松在DST-VII架构中实现DCT-VIII变换。

如果想了解更多,欢迎阅读我们的论文:

浅谈VVC(H.266)的变换模块相关推荐

  1. VVC/H.266代码阅读(VTM8.0)(三. Slice到CTU的处理 )

    本文是本系列的第三篇博客,内容是分析从Slice到CTU的处理代码. 该系列相关博客为: VVC/H.266代码阅读(VTM8.0)(一. NALU提取) VVC/H.266代码阅读(VTM8.0)( ...

  2. 第一个将Palette Mode引入VVC(H.266),阿里云在JVET会议上引起关注

    从应用需求出发,帮助标准组织制定出更贴近云端业务需求的标准 视频压缩标准是一个重要且深具挑战的研究方向.从过去的存储到当前的网络带宽,视频标准每一代的更新进步对科技应用都有很大的影响.但同时随着几十年 ...

  3. VVC/H.266 项目文件的生成及有用网址

    H.266/VVC视频编码技术 小小柴的博客 VVCSoftware_VTM下载地址 生成项目文件 VVC与HEVC不同,从上述链接下载下来的参考软件并不包含build文件夹,需要使用cmake生成项 ...

  4. VVC/H.266参考软件VTM算法描述 [译](一. CTU划分部分)

    Algorithm description for Versatile Video Coding and Test Model 8 (VTM 8) [译自JVET-Q2002] 3.2 Partiti ...

  5. VVC学习之一:VVC/H.266的简介及VTM的使用方法

    前言 跟JVET以及VVC标准已经有一段时间了,准备写一些VVC的一些学习心得,主要也是锻炼一下自己,如果有理解不对的地方,希望各位大佬不吝赐教. VVC的发展历程 VVC是从HEVC发展而来,其目标 ...

  6. 【十五】 VVC/H.266 | 帧内帧间联合预测技术CIIP详解

    文章目录 一.基本原理 二.具体技术细节 一.基本原理 CIIP是帧内帧间联合技术,这属于Merge系列技术的一个分支.该技术需要计算当前预测块的帧内预测值,即用传统的帧内预测模式去预测当前块的像素值 ...

  7. VVC/H.266帧间模式(二):Merge mode with MVD (MMVD)

    一.MMVD综述 在VVC中引入了具有运动矢量差的合并模式(MMVD),merge模式的运动信息将会用于当前CU的预测样值得生成.在传送skip标志和merge标志位之后立刻传送MMVD标志来表明是否 ...

  8. VVC/H.266会议提案阅读(一)之JVET-A1001

    目录 JVET-A1001 变换编码 1.自适应多核变换(Adaptive multiple Core transform) 2.二次变换(Secondary transforms ) 3.信号相关变 ...

  9. 浅谈Python自带数据库SQLite3模块的使用(全面详细)

    目录 写在前面 一:使用数据库的宏观过程 二:数据库使用 1.导入数据库模块 2.打开数据库 2.1.在硬盘上建立数据库 2.2.在内存上建立数据库 3.创建游标 4.执行SQL语句 4.1.创建表 ...

最新文章

  1. OAuth2.0授权流程分析
  2. python画圆并填充图形颜色_如何使用python设计语言graphics绘制圆形图形
  3. NAC、NAP及TNC安全接入技术对比分析
  4. 【git系列】合并分支进master
  5. hive窗口函数最全总结
  6. java解析MT940报文,swift MT报文解析处理
  7. Steam Deck 游戏掌机可运行 Windows
  8. word2016画函数曲线图
  9. 手把手教学linux上扩容和缩减swap分区。
  10. 当Linux配置zh_CN.UTF-8 ,中文还是显示乱码解决办法
  11. 计算机开模拟器,低配电脑如何强制开50个安卓模拟器挂机
  12. 湖北一考生将高考数学题上传小猿搜题事件网络舆情综合编报
  13. 基于FFMPEG的封装格式转换器
  14. TextView描边、渐变、阴影效果
  15. echarts legend图例显示数值和百分比
  16. 便签提醒事项怎么设置闹钟
  17. asp微信登陆源码,实现asp网站授权微信登录(获取用户信息,微信名头像openid等)
  18. Focus和SetFocus、GetFocus、LoseFocus
  19. 金仓数据库KingbaseES数据库开发指南(4. 面向应用程序的PL/SQL开发)
  20. 计算机组成原理——存储地址与边界对齐

热门文章

  1. Android Q行为变更
  2. 大数据产业版图:东南沿海引领 独角兽扎堆北上深杭
  3. 【算法练习】80.字符串轮转——奇淫技巧
  4. 机器学习强基计划3-4:详解核方法——以核支持向量机KSVM为例
  5. Matplotlib绘制雷达图
  6. 从爆款IP到独家IP,汽车之家内容战略如何登高?
  7. 两点确定一条直线,已知四个点确定的两条直线,求这两条直线的交点
  8. 流水线生产,精益生产,TPS和TOC的缓冲管理
  9. win7系统ftp服务器共享文件夹权限,win7 ftp服务器 文件夹权限
  10. 无痕刷新token-无需提供刷新token接口方式