2020年7月,联合视频专家工作组JVET 第19次会议胜利闭幕,宣告新一代视频编码标准多功能视频编码(H266/VVC)的正式诞生。这距离上一代视频编码标准 高性能视频编码H265/HEVC的问世刚刚过去七年。近年来随着短视频,在线会议等移动视频应用的爆发式普及,全球的视频信息需求快速增长,业界普遍感受到的宽带与存储的家u大压力,极度渴望高性能的视频压缩算法,仍然无法满足业界日益高涨的需求。这种情况,国际标准化组织ITU-T Video Coding experts Group 在2015年联合成立了JVET,提出了全面超越HEVC的战略目标。经过近3年的技术积累与酝量,VVC标准的制定工作与2018年4月正式启动。JVET的专家们终于在第19次会议上完成了VVC的标注制定。经过权威评测,编码同质量的视频节目,使用VVC相比使用HEVC能节省大约一半的带宽。
VVC使用了大量的新技术,多叉树块划分技术,历史运动适量预测技术,亮度色度线性模型预测技术等。重点介绍VVC中的仿射运动模型技术。标准的文档,参考代码等均为公开资料。
在视频编码的早期研究当中,人们已经发现平动运动模型并不能有效表示转动,缩放等复杂运动。仿射运动模型能够较好的描述这些复杂运动。整体仿射变换,局部仿射变换等方法,试图在视频编码过程中引入仿射运动模型以提高帧间预测的编码效率。尽管学术界对视频编码中仿射运动模型的研究,在很长一段时间内仿射运动模型没能走进视频编码标准。相关方法始终写在纸面上而不能刻入芯片中。意识仿射运动模型的相关算法复杂度都极高,无论在编码端还是解码端。超出了同时代实际产品负担的处理能力。二是相关的研究较为学术化,其设计并没有考虑到算法如何完美的嵌入到现代视频编码标准框架中。现代视频编码标准的整体设计大部分都是基于块划分的混合视频编码框架。如果仿射运动模型无法顺畅的融入这一框架中,也难以被标准采纳。
幸运的是在HEVC诞生之后,一系列源于中国学者的创造性研究逐渐破解了上述两大难题,为仿射运动模型走进工业化标准铺平了道路。首先打破僵局的是Huang等人,首次提出使用3组角点运动矢量来表示一组6参数的仿射参数并作为merge模式的特别候选的方法。这种方法创造性的利用混合编码框架中存储的运动矢量来表示仿射模型,打开了仿射模型融入混合视频编码框架的大门。li等人进一步发展了的方法。将模型参数由6个简化为4个。更重要的是,将1的方法从merge模式推广到了普通Inter模式。为了简化编码器,引入了基于剃度方法的快速运动估计方法以估计仿射模型。为了简化解码器,将仿射运动模型的运动补偿精度由像素级放大到4x4子块级。标志着仿射运动模型基本完全克服了上述两大障碍,距离标准化只有一步之遥。进一步改进了提高放射运动模型的编码效率,提出了4个参数/6参数仿射模型自适应切换,角点运动矢量再预测等方法。VVC最终采纳了经过改进的仿射运动模型。经过近四十年的漫长发展,视频编码中的仿射运动模型技术终于修成正果。
从仿射变换到仿射运动补偿
为了更好的理解仿射运动模型技术,仿射变换是几何学中的一种常见可逆变换。定义为如果一个可逆变换前后的共线点组仍为共线点组,该变换为仿射变换,从定义可以看出,仿射变换可以保持点的共线性。几何上可以证明,不共线的点经过仿射变换后仍不共线,平行线经过仿射变换仍为平行线。仿射变换的公式表达为。
x' = ax + cy + e
y' = bx + dy + f
(x,y)和(x',y')分别代表变换前后的点坐标。
公式这种形式的仿射变换称为6参数仿射变换,是仿射变换的一般形式。可以表出平移,镜像,旋转,缩放,错切五类变换以及他们的组合。
在公式上做限制我们得到
x' = ax + cy + e
y' = bx + dy + f
公式这种形式的仿射变换称为4参数仿射变换,是仿射变换的特殊形式。表出平移、旋转、缩放三类变换以及它们的组合。4参数仿射变换的表达能力不及6参数仿射变换。在一般地自然视频信号中,平移,旋转,缩放三类运动特征较为常见,镜像与错切较为少见。4参数仿射变换用于视频编码领域也有其参数较少的优势。这两类仿射变换都可能用到。
当仿射变换用于食品编码时,即应用所谓的仿射运动模型时,我们实际上指的是当前待编码的像素点坐标(x,y)与运动补偿中的参考像素点的坐标(x',y')存在仿射变换关系,针对公式与公式,我们那可以很容易得到
mv^k(x,y) = x' - x = (a-1)x + cy +e = a'x + cy + e
mv^v(x,y) = y'-y=bx+(d-1)y+f=bx+d'y+f
其中mv(x,y) = (mv^(x,y), mv^v(x,y)^t) 代表像素点坐标(x,y)的运动矢量,由于参数可以任意给定,在后文中我们统一用a,d表示a',d'而不会引起误会。
在VVC中,对每个编码块我们可以使用一套或者两套仿射模型,在实际中,我们并不会保存或者传输参数a~f,采用所谓角点运动矢量导出的办法,间接保存或者传递这些参数。4参数仿射模型可以用左上角的角点运动矢量mv0与右上角的角点运动矢量mv1来表示,6参数仿射模型可以用mv0,mv1 再加左下角的角点运动矢量mv2来表示,经过简单公式推导,我们可以得到。
针对4参数模型
mv^k(x,y)=a(x-x0) - b(y-y0) + mv0^k
mv^v=b(x-x0)+a(y-y0)+mv0^v
针对6参数模型
mv^k(x,y)=a(x-x0)+c(y-y0)+mv0^h
mv^v(x,y)=b(x-x0)+d(y-y0)+mv0^v
我们假设左上角,右上角和左下角三个角点的坐标分别为(x0,y0),(x0+W,y0)和(x0 + W, Y0+H)。
理论上只要给定了一个编码块两个或三个角点运动矢量信息,我们可以根据上述4参数模型或6参数模型计算出块内任意位置的运动矢量。但是在VVC的实现中,为了节省计算量,我们只针对每个4x4子块的中心点计算一次运动矢量,整个4x4子块中的所有像素共享这一运动矢量,统一完成运动补偿,如图-2所示,这是一种对仿射模型的近似操作,对编码效率造成了一定的损失。考虑到运算复杂度和硬件带宽等因素,近似是必要的。
|
mv0 |
mv1 | ||
|
mv2 |
图-2基于4x4子块的运动补偿
VVC中的仿射编码模式
运动矢量在VVC仿射运动补偿算法汇总起到了核心作用。根据角点运动矢量的来源,VVC的仿射编码模式分为两大类,第一类是仿射Inter模式,第二类是仿射Merge模式。
采用仿射Inter模式时,与普通Inter模式类似,运动矢量差值要经过编码传输。不同的是,普通Inter模式下,每一个预测方向,只需要传输一个运动矢量,而仿射Inter模式下,需要传输两个4参数仿射模型或者三个6参数仿射模型 运动矢量来表示来给你个或三个角点运动矢量(称为角点运动矢量)。编码器可以根据性能优劣选择采用4参数仿射模型或者6参数仿射模型,之后传输一个标志位来通知解码器选择的结果。解码器根据此标志解码两个或者三个角点运动矢量。采用仿射Inter模式时,VVC支持三种运动矢量的精度,即(1/16,1/4,1)像素精度,编码器将选定的运动矢量的精度信息发送给解码器。
与普通Inter模式类似,仿射Inter模式下将会产生两组预测角点运动矢量候选。预测角点运动矢量的产生方式主要有两种,继承方式与构造方式。继承方式利用周边相邻的采用仿射模式编码块来推导产生当前编码块的角点运动矢量的预测值。回到公式5 和6,我们可以看到,实际上公式中并不限制(x,y)的范围,这个目标点既可以在块内。
也可以在块外,吧公式5或6套用到A0所在编码块时,如果吧目标点坐标置为当前块的左上角,我们就可以得到当前编码块左上角的角点运动矢量预测值。类似的也可以得到其他两个角点的角点运动矢量预测值。继承方式得到的角点运动矢量预测准确度较高,在可能的情况下会被优先采用。构造方式不需要周边相邻编码块采用仿射模式,而是直接用角点相邻的4x4子块所保存的运动矢量来预测角点运动矢量。{MVa,MVb,MVc}将被用来产生左上角的预测角点运动矢量,将被用来产生右上角的预测角点运动矢量,而MVf,MVg将被用来产生左下角的预测角点运动矢量。继承方式与构造方式产生的预测角点运动候选不足两个,VVC还会利用普通Inter模式的预测运动矢量填充各个预测角点运动矢量,补足预测角点运动矢量的候选,注意的是,VVC中要求产生的预测角点运动矢量与目标角点运动矢量指向相同的参考帧。
编码角点运动矢量了。左上角的角点运动矢量与普通运动矢量类似,只需要编码其与左上角的预测角点运动矢量的差值MVD即可,对于其他两个角点,VVC中引入了角点运动矢量再预测技术,两个角点的MVD需要用左上角角点的MVD再预测一次,用公式表示,在编码端,
mvd0 = mv0 - mvp0;
mvd1 = mv1-mvp1
mvd2=mv2-mvp2
角点运动矢量再预测技术可以提高角点运动矢量的编码效率,通常我们认为仿射运动可以分解为平移运动和非平移运动,在VVC的仿射模型中,左上角的角点运动矢量mv0代表了平移运动,而mv1-mv0与mv2-mv0代表了非平移运动。分别独立预测平移运动与非平移运动,就会得到mvd0=mv0-mvp0
而mvd1=mv1-mv0-(mvp1-mvp0),
mvd2=mv2-mv0-(mvp2-mvp0) 我们就可以得到公式。
图-5 角点运动矢量再预测
仿射Merge模式在VVC中是作为一种子块merge模式出现的。VVC中的子块merge模式一共有两大类,一类是子块时域运动矢量预测模式,另一类即仿射merge模式。VVC中的子块merge模式的候选队列第一位为子块时域运动矢量预测模式候选,余下的都是仿射Merge模式候选。VVC中可以支持多打5个仿射Merge模式候选,与仿射方式两类。与仿射Inter模式不同的是,仿射Merg模式不需要再发送参考帧信息MVD。参考帧信息与运动矢量直接来源于Merge模式候选,采用继承方式与构造方式得到的预测角点运动矢量将直接用作仿射Merge模式候选的角点运动矢量。另外,仿射Merge模式下的构造方式要更为灵活一些,除了左上,右上,左下三个角点的相邻4x4子块所保存的运动矢可以用来估算角点运动矢量之外,右下角的时域预测运动矢量也可以用来预测右下角的角点运动矢量,经过简单的换算,右下角的角点运动矢量可以用来推算左上,右上或者左下的角点运动矢量。
仿射运动模型的进一步简化
相对于传统的仿射运动模式编码方式已经有了很大的简化,对于实际应用特别是硬件实现而言,仍然显得复杂,针对这一问题,VVC中对仿射运动模型的运动补偿方式做了进一步简化。
1 针对色域格式4:2:0的情况,色度块的子块划分采取4x4子块而非2x2子块的方式,即一个色度块的子块对应四个亮度子块。色度块的子块运动矢量由其对应的左上与右下亮度块子块运动矢量平均得到,这样可以尽可能减少色度块运动补偿占用的带宽。
2 VVC对普通Inter块的运动补偿采用8抽头亚像素插值滤波器,而对仿射模式的编码块的运动补偿采用6抽头亚像素插值滤波器。因为普通Inter块不会出现4x4块的双向预测模式,而仿射模式的编码块会出现4x4块的双向预测模式,就平均计算量而言,块尺寸越小,运算量越大。采用6抽头亚像素插值滤波器可以尽量减少仿射模式的编码块中亚像素插值的加法和乘法次数。
3 在硬件实现中,运动补偿的块尺寸越小,平均意义上带宽需求就越高。为了减少4x4子块运动补偿带来的高额带宽需求,VVC采纳了边界框方案,如图-6所示,仿射模式下当前块内部4个成田字形的4x4子块,所对应的参考像素点必须落在同一个边界框内。这个边界框所需要的参考像素仅仅比一个8x8块做运动补偿所需要的参考像素点稍多。这样一来,4个成田字形的4x4子块的运动补偿的参考像素点可以一次取出,所需的带宽仅仅对一个8x8块运动补偿所需要的带宽稍多,不满足上述条件,则当前块退回到普通Inter模式,不做仿射运动补偿操作。
仿射运动模型在VVC中的性能
JVET组织在文献JVET-S0013中对各个编码工具的编码效率做了官方评测,实验平台为VTM-9,测试环境为JVET的官方给出了通用测试环境,包括随机访问RA测试。与低延迟B帧LDB测试。测试方法为关闭测试的工具,考察VTM编码器的性能损失,性能损失越大则表明工具的性能越强。表1给出了各个测试序列类别以及总的平均结果。从实验结果可以看出,仿射运动模型在VVC中平均可以提供超过3%的编码性能增益,对编码器的时间复杂影响在20~30%之间,对解码器的时间复杂度影响在3-8%左右,对比JVET-S0013中所列举的其他编码工具,仿射运动模型可以说是VVC中除了灵活块划分结构之外最强有力的编码工具之一。
表2还列出了各个序列的单独测试结果。可以看出,仿射运动模型编码工具的性能对序列的内容很强的依赖性。对于富含非平移运动序列,如Cactus,Catrobot,BQSquare, 仿射运动模型编码工具可以极大的提高编码效率,最好情况下可以超过10%~15%.
1283

被折叠的 条评论
为什么被折叠?



