浅谈VVC(H.266)的变换模块

2023-11-11

转自: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变换。

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

浅谈VVC(H.266)的变换模块 的相关文章

  • HashMap的扩容机制

    目录 一 HashMap的底层 二 HashMap的扩容机制原理 1 JDK1 7版本扩容 2 JDK1 8版本扩容 三 HashMap底层JDK1 7到JDK1 8的变化 一 HashMap的底层 底层 采用数组 链表 JDK1 7 采用
  • slam十四讲 _直接法

    视觉里程计 直接法是视觉里程计另一主要分支 它与特征点法有很大不同 虽然它还没有成为现 在 VO 中的主流 但经过近几年的发展 直接法在一定程度上已经能和特征点法平分秋色 特征点法的缺点 关键点的提取与描述子的计算非常耗时 使用特征点时 忽

随机推荐

  • 有序统计恒虚警检测(OS-CFAR)算法的MATLAB代码

    有序统计恒虚警检测 OS CFAR 算法的MATLAB代码 有序统计恒虚警检测 Ordered Statistic Constant False Alarm Rate OS CFAR 是一种常用的雷达信号处理算法 用于检测雷达回波中的目标信
  • TencentOS-tiny 任务间通信(八)- 消息队列

    一 任务间通信 消息队列 概述 消息队列提供了任务间传递指针数据的机制 所谓的 消息 就是指针 消息本身如何解析使用 由传递消息的两个任务自行规定 消息队列不对消息本身做任何规定和限制 消息队列仅承担指针数据的传递义务 API讲解 编程实例
  • uniapp截取数组中的前几项

  • Netty Client 重连实现

    当我们用Netty实现一个TCP client时 我们当然希望当连接断掉的时候Netty能够自动重连 Netty Client有两种情况下需要重连 Netty Client启动的时候需要重连 在程序运行中连接断掉需要重连 对于第一种情况 N
  • 浏览器事件循环机制与Vue nextTick的实现

    浏览器事件循环机制 先上一段简单的代码 console log aa setTimeout gt console log bb 0 Promise resolve then gt console log cc 复制代码 执行结果总是如下 a
  • mariadb实现服务器的数据分库-主从同步

    mariadb实现服务器的数据主从同步1 主从同步配置原理2 使用mariadb实现主从同步 mariadb实现服务器的数据分库 主从同步 1 主从同步配置原理 mariadb主从复制中 第一步 master记录二进制日志 在每个事务更新数
  • C语言之基本算法15—前三位和后三位都是完全平方数的六位完全平方数

    题目 一个六位数是完全平方数 前三位和后三位都是完全平方数 求该三平方数 include
  • 基于机器学习的情绪识别算法matlab仿真,对比SVM,LDA以及决策树

    目录 1 算法理论概述 2 部分核心程序 3 算法运行软件版本 4 算法运行效果图预览 5 算法完整程序工程 1 算法理论概述 情绪识别是一种重要的情感分析任务 旨在从文本 语音或图像等数据中识别出人的情绪状态 如高兴 悲伤 愤怒等 本文介
  • web服务器的简单运用,搭建一个满足些许功能的网站

    实验 搭建一个名为openlab的web网站 网站需求 1 基于域名 www openlab com 可以访问网站内容为 welcom to openlab 2 给该公司创建三个子界面分别显示学生信息 教学资料和缴费网站 基于www ope
  • 数据流式传输_在Android上使用rxjava从家庭影院设备流式传输数据

    数据流式传输 介绍 Introduction In my initial blog post around building an Android companion app for my NAD home cinema receiver
  • LLVM教程(二)-- LLVM的安装

    1 下载CMake版本 https cmake org download 下载的CMake版本必须大于 Version 3 4 3 注如果系统中已经有CMake了通过 cmake version 查看一下版本号 大于就不用下载了 lt 1
  • Windows10 安装 Texlive2019 和 Texstudio

    文章目录 texlive2019的下载与安装 1 下载 2 安装 texstudio的安装及简单设置 1 设置中文界面 2 添加行号 3 设置编译器与编码 4 第一个简单程序 小白人生第一次认识 Latex 一晚上加一上午安装配置成功 参考
  • 【Java设计模式】这么详细,你还不懂建造者模式嘛!

    我是清风 每天学习一点点 快乐成长多一点 这些都是我的日常笔记以及总结 目录 建造者 建造者模式和工厂模式区别 业务场景 UML类图 源码解析 StringBuilder 源码分析 SringBuffer 开源框架 spring中BeanD
  • ZeroTierr的moon云服务器搭建和使用

    搭建moon 本质上是在云服务器上建立一个moon服务器 也加入zerotier的Network ID 服务器记录请求路径来做类似于DNS的解析 让设备之间p2p直连 问题是ZeroTier One本身的服务器都在国外访问速度很慢 可以通过
  • 【AI实战】BERT 文本分类模型自动化部署之 dockerfile

    AI实战 BERT 文本分类模型自动化部署之 dockerfile BERT BERT 文本分类模型 基于中文预训练bert的文本分类模型 针对多分类模型的loss函数 样本不均衡时 多标签分类时 dockerfile 编写 dockerf
  • 淘宝logo设计遇到的坑

    看了抖音上一些大神设计的logo 被惊艳到了 新开了一个公众号 所以也想设计一个有创意的logo 想到就去做 开始吧 我就忘记了 付款前 应该先搜一下TB logo设计的坑 先说我的教训吧 教训 终于明白 这些店是怎么赚钱的了 只要你付款了
  • 切换摄像头操作(前置、后置)

    一 默认进入页面后直接加载并调用摄像头 调用摄像头的方法 function takePhoto if navigator mediaDevices getUserMedia navigator getUserMedia navigator
  • [转]unity作品打包

    unity作品打包 每当项目完成后最重要的就是项目打包 首先打包之前要看项目内部是否有错误 以保证项目的正确 1 在unity上部找到File 文件 选项卡 并点击进入 2 点击Flie选项卡中的Build Settings选项 3 完成上
  • 为什么文学也可以解决许多问题

    文学是一种艺术形式 通过语言和叙事手法创造出各种文学作品 如小说 诗歌 戏剧等 它具有独特的力量和功能 能够解决许多问题的原因如下 情感共鸣与同理心 文学作品可以引起人们的情感共鸣和同理心 通过创造生动的角色 复杂的情节和丰富的描绘 文学作
  • 浅谈VVC(H.266)的变换模块

    转自 https zhuanlan zhihu com p 108792210 本文将分为四个部分对下一代视频编码标准Versatile Video Coding VVC 的变化模块进行介绍 第一部分简单介绍一下视频编码的发展历程以及VVC