H.266/VVC技术学习:帧内预测之MIP技术

Matrix Weighted Intra Prediction(MIP)技术,即矩阵加权帧内预测技术,是VVC中新增加的一种帧内预测技术。其最初的思想来源于基于神经网络的帧内预测技术(JVET-J0037),即利用多层神经网络基于相邻已重建像素预测当前pu像素值。但是这种预测方式复杂度太高,经过权衡,发展出最后采纳的基于线性仿射变换的帧内预测技术。

Tracking route: N0217 -> M0043 -> L0199 -> K0196 -> J0037

MIP技术相关代码:https://blog.csdn.net/BigDream123/article/details/107015803

其主要流程如下图:

H.266/VVC技术学习:帧内预测之MIP技术_第1张图片

 

对于预测一个宽度为W和高度为H的矩形块PU,矩阵加权帧内预测(MIP)以块左侧的的H重建像素和块上方的W个重建像素作为输入(重建像素的获取和传统帧内预测相同),然后通过平均、矩阵向量乘法和线性插值获得最终预测像素。无论最大变换大小是多少,MIP最多支持64x64。

1.平均

此步骤主要目的是对参考像素进行归一化,即根据块大小和形状,通过平均来获得4个或8个像素,具体为对于4x4的PU归一化为4个像素,对于其余形状的PU归一化为8个像素。(MIP模式中参考像素的获取和传统帧内预测模式相同)

具体来说,首先对输入的长参考边界像素bdry^{top}bdry^{left}通过计算邻域平均的方法化为短参考边界像素bdry^{top}_{red}bdry^{left}_{red}以减少预测过程中的计算量和模型参数存储空间。当W=H=4时,左边取2个上边取2个,共4个。其他情况下左边取4个,上边取4个,共8个。计算邻域平均是个下采样过程,如下:

H.266/VVC技术学习:帧内预测之MIP技术_第2张图片

然后将转换后的这两个短参考边界bdry^{top}_{red}bdry^{left}_{red}连接成最终的长度为4或者8的向量bdry_{red},连接的方式如下:

H.266/VVC技术学习:帧内预测之MIP技术_第3张图片

其中,mode指的是MIP-mode。

2.矩阵向量相乘

通过对平均后获得的向量bdry_{red}进行矩阵向量乘法,然后加上偏移量, 获得预测值pred_{red},其尺寸为W_{red} X H_{red},其中W_{red}H_{red}定义如下:

H.266/VVC技术学习:帧内预测之MIP技术_第4张图片

预测值pred_{red}的生成过程如下:

其中A是一个W_{red}\cdot H_{red}行 (W==4&H==4?4:8)列的矩阵,b为尺寸为W_{red}\cdot H_{red}的向量。实际应用中,A和b都已经预先训练好,存储在集合S_{0},S_{1},S_{2}中,集合的索引与尺寸有关:

H.266/VVC技术学习:帧内预测之MIP技术_第5张图片

S0中包含mipMatrix4x4和mipBias4x4,S1中包含mipMatrix8x8和mipBias8x8,S2中包含mipMatrix16x16和mipBias16x16。

mipMatrix4x4里含16个16x4的矩阵,mipBias4x4里含16个16维的向量,用于4x4的块。

mipMatrix8x8里含8个16x8的矩阵,mipBias8x8里含8个16维的向量,用于4x8,8x4,8x8块。

mipMatrix16x16里含6个64x8的矩阵,mipBias16x16里含6个64维的向量,用于其他块。

3.插值

插值是一个上采样过程。通过上一步矩阵向量相乘获得一个向量pred_{red},长度为W_{red}\cdot H_{red},它可以转换为一个W_{red} x H_{red}的矩阵,该矩阵一般小于W x H,因此需要在水平方向或者垂直方向或者水平垂直两个方向上进行插值;如果需要对水平垂直两个方向插值,则插值顺序固定,即先水平后垂直

以WxH块的垂直插值为例,其中max(W,H)≧8且W≧H。定义垂直上采样因子并写入

首先,将待插值的矩阵扩展到上面一行,如图1右半部分所示。上边一行按下式得到。

然后,对空余位置利用相邻值按下式进行插值。

从上面公式可以看出,当上采样2倍时即U_ver=2或U_hor=2,进行插值计算时不需要乘法运算。在其他情况下每次插值计算会进行不多于2次乘法运算。

插值改进- 只用移位操作 :

对于垂直方向的线性插值,首先对上下预测值进行加权,计算方式如下:

H.266/VVC技术学习:帧内预测之MIP技术_第6张图片

 使用相邻的加权参考,于是垂直上采样可以写成以下形式:

 水平方向插值可用相同的方式得出。

4.MIP模式的编码

对于帧内模式下的每个编码单元(CU),会发送是否将MIP模式应用于相应的预测单元(PU)的标志。 如果要应用MIP模式,则会发出MIP模式(preModeIntra)的信号。对于MIP模式,如下得出一个转置标志(isTransposed),该标志确定该模式是否被转置,MIP模式 Id(modeId)确定用于使用哪种MIP矩阵。

                                                                  isTransposed = preModeIntra & 1

                                                                    modeId = preModeIntra >> 1

VTM中根据CU尺寸,最多支持32中MIP预测模式。具体来说,对于max(W,H)<=8&W*H<32尺寸的CU支持32种MIP预测模式,max(W,H)=8和max(W,H)>8分别有16和12种预测模式,并且允许对所有的预测模式进行转置操作。

为了减少不同模式存储时的内存占用,两种模式可能会共用Matrix和offset,具体共用模式情况如下:

H.266/VVC技术学习:帧内预测之MIP技术_第7张图片

5.示例

1).对于4x4的块,从左边和上边参考行各取两个值组成一个4维的向量。将该向量进行矩阵向量相乘运算,矩阵取自于S0。完成矩阵向量相乘和偏移值相加后得到一个16维的向量。这个16维向量形成一个4x4的矩阵不用进行插值直接作为预测矩阵。预测矩阵的每个值需要进行(4x16)/(4x4)=4次乘法运算。

H.266/VVC技术学习:帧内预测之MIP技术_第8张图片

2).对于8x8的块,从左边和上边参考行各取4个值组成一个8维的向量。将该向量进行矩阵向量相乘运算,矩阵取自于S1。完成矩阵向量相乘和偏移值相加后得到一个16维的向量。这个16维向量形成预测矩阵的奇数位置值。然后在垂直和水平方向进行插值,由于这个插值过程不需要进行乘法运算,所以预测矩阵的每个值需要进行(8x16)/(8x8)=2次乘法运算。
H.266/VVC技术学习:帧内预测之MIP技术_第9张图片

3.对于8x4的块,从左边和上边参考行各取4个值组成一个8维的向量。将该向量进行矩阵向量相乘运算,矩阵取自于S1。完成矩阵向量相乘和偏移值相加后得到一个16维的向量。这个16维向量形成预测矩阵的奇数行值和所有的列值。然后在水平方向进行插值,由于这个插值过程不需要进行乘法运算,所以预测矩阵的每个值需要进行(8x16)/(8x4)=4次乘法运算。4x8块处理过程类似。 

H.266/VVC技术学习:帧内预测之MIP技术_第10张图片

 4.对于16x16的块,从左边和上边参考行各取4个值组成一个8维的向量。将该向量进行矩阵向量相乘运算,矩阵取自于S2。完成矩阵向量相乘和偏移值相加后得到一个64维的向量。这个64维向量形成预测矩阵的奇数行值和奇数列值。然后在垂直和水平方向进行插值,由于插值过程不需要进行乘法运算,所以预测矩阵的每个值需要进行(8x64)/(16x16)=2次乘法运算。

H.266/VVC技术学习:帧内预测之MIP技术_第11张图片

对于更大尺寸的块处理过程类似,很容易计算出每个样点乘法运算次数小于4。

对于Wx8,W>8的块,生成的8x8预测矩阵包含所有行和奇数列,所以只需要在水平方向进行插值。预测矩阵的每个值需要进行(8x64)/(Wx8)=64/W次乘法运算。当W=16时,它的线性插值过程不需要乘法运算。当W>16时,每个像素插值过程需要的乘法运算少于2次。所以每个像素总的乘法运算小于等于4次。8xW类似。

对于Wx4的块,矩阵相乘时要去掉矩阵的奇数行,最终只需要在水平方向进行插值。预测矩阵的每个值需要进行(8x32)/(Wx4)=64/W次乘法运算。当W=16时,它的线性插值过程不需要乘法运算。当W>16时,每个像素插值过程需要的乘法运算少于2次。所以每个像素总的乘法运算小于等于4次。4xW类似。

你可能感兴趣的:(H.266/VVC)