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

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

MIP技术相关代码:H.266/VVC代码学习:MIP技术相关代码_BigDream123的博客-CSDN博客

其主要流程如下图:

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

1.平均

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

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

然后将转换后的这两个短参考边界连接成最终的长度为4或者8的向量,连接的方式如下:

其中,mode指的是MIP-mode。

2.矩阵向量相乘

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

预测值的生成过程如下:

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

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

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

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

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

3.插值

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

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

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

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

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

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

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

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

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

4.MIP模式的编码

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

                                                                  isTransposed = preModeIntra & 1

                                                                    modeId = preModeIntra >> 1

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

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

5.示例

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

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

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

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

对于更大尺寸的块处理过程类似,很容易计算出每个样点乘法运算次数小于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技术学习:帧内预测之MIP技术相关推荐

  1. H.266/VVC-VTM代码学习-帧内预测05-Angular模式下计算预测像素值xPredIntraAng

    H.266/VVC专栏传送 上一篇:H.266/VVC-VTM代码学习-帧内预测04-Planar模式下计算预测像素值xPredIntraPlanar 下一篇:H.266/VVC-VTM代码学习-帧内 ...

  2. H.266/VVC:色度帧内预测模式之CCLM技术

    一.色度模式编码 1.色度预测模式候选列表 VVC中色度分量的预测过程和亮度分量预测过程不同,其首先是构建色度预测模式候选列表如下表,有8种模式,由4种和亮度模式相同的模式.3种CCLM模式和1种DM ...

  3. H.266 VVC 帧内预测中MIP技术更新

    P次会议采纳的MIP技术: (1)P0199, P0289, P0303(解决方案一样,待看) (2)P0803中 固定上采样顺序,先水平,后垂直 不受最大变换尺寸大小(3232/6464)限制,使M ...

  4. H.266/VVC代码学习21:帧内角度预测的实现 / 近对角模式的PDPC(xPredIntraAng)

    xPredIntraAng函数的作用是对任意大小的块和任意模式,如何将参考像素的值根据其模式的角度填充进每一个像素. 下图是basketball drill的一个16*16的块,其预测模式为10(偏斜 ...

  5. H.266/VVC代码学习17:帧内亮度预测的编解码(intra_luma_pred_modes)

    引--亮度预测:H.266/VVC代码学习5:VTM4.0帧内亮度预测代码(estIntraPredLumaQT) 一.结论: 亮度编解码根据MPM列表的值分为两个阶段: 1 亮度模式在MPM列表中: ...

  6. H.266/VVC代码学习20:角度预测入口 / 特殊模式的PDPC技术(predIntraAng)

    1.predIntraAng函数 predIntraAng是帧内0~66这67种预测的入口.其中可细分为: 模式0:PLANAR模式 模式1:DC模式 模式2~66:角度模式 此函数在亮度预测和色度预 ...

  7. H.264 入门篇 - 05 (帧内预测)

    目录 0.前言 1.帧内预测类型 2.亮度 Intra_4x4 预测 2.1.当前块 Intra4x4PredMode 的推导过程 2.1.1.预测模式获取情况 2.2.获取预测数据 2.3.Intr ...

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

    1.PDPC介绍 为了补偿以上较简单帧内预测模式在利用空间冗余度方面的不足,VVC 中引入了一种根据当前样本的位置及帧内预测模式的角度自适应选取反方向角度上的参考样本信息作为新的一个相对互补性的帧内预 ...

  9. H.266/VVC代码学习:帧内预测之角度预测函数(predIntraAng、xPredIntraAng)

    predIntraAng函数 VTM中,帧内预测的角度预测的入口函数为predIntraAng函数,该函数主要是用于进行传统的帧内预测(Planar.DC.角度预测),然后对Planar和DC模式使用 ...

  10. H.266/VVC代码学习:xCompressCU函数

    xCompressCU函数是用来进行CU划分(递归调用自身)以及模式选择. 首先调用m_modeCtrl->initCULevel函数初始化模式选择列表,由堆栈控制,将当前CU可以划分的模式(四 ...

最新文章

  1. FPGA锁存器、触发器、寄存器和缓冲器的区别
  2. 计算价格, java中浮点数精度丢失的解决方案
  3. vs opencv4 imread读不到图片问题的解决方法
  4. CListCTrl控件排序(一)
  5. oracle 修改索引的名称,Oracle中查询索引名称,批量修改索引名称语句
  6. [GAE教程]初识 Google App Engine
  7. 你没有权限在此位置中保持文件 java_Java路径问题解决方案收集
  8. 2007年度工作总结
  9. Linux系统下Nginx支持ipv6
  10. atitit.词法分析原理 词法分析器 (Lexer)
  11. Gantt - attachEvent事件监听 - 多个参数事件(大于两个)
  12. excel 通用进销存(由excel+VBA+MSSQL制作)
  13. 官方代码 Deeplab v3+ resnet101 做backbone
  14. JVM上篇学习3--内存与垃圾回收
  15. 回炉重造--数据库操作速成记
  16. Java代码实现点赞功能
  17. 【dva】dva使用与实现(七)
  18. 敏捷教练-如何打造优秀的敏捷团队
  19. 安装包制作工具 SetupFactory API清单
  20. .Net6 or .Net Core界面程序依赖注入实现Caliburn.Micro

热门文章

  1. 常用标点符号中英文对照表
  2. Win xp IIS无法启动解决办法收集
  3. 模糊图片怎么变清晰?好用的方法教程来了
  4. python 典型相关分析_Canonical Correlation Analysis 典型相关分析
  5. ios13 微信提示音插件_教大家苹果ios13系统怎么改微信提示音的方法
  6. 好看的皮囊 · 也是大自然的杰作 · 全球高质量 · 美图 · 集中营 · 美女 · 2017-08-20期...
  7. php调用和风天气api,推荐一个免费7天天气预报API服务:和风天气
  8. 直播评论可以用html,网页制作HTML5实现直播间评论滚动效果的代码
  9. svchost.exe网速占用解决办法
  10. 大学生面试20个经典问题及回答思路