VVC帧内预测补充:矩阵加权帧内预测(Matrix Weighted Intra Prediction, MIP)


本博客追踪VTM-5.0中对帧内预测的改进。在VTM-5.0中,主要变化是增加了MIP预测技术;同时对帧内各种预测工具统一了MPM列表。

1.矩阵加权帧内预测(MIP)

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

VTM 5.0版本更新的帧内预测技术MIP,其最初的思想来源于基于神经网络的帧内预测技术(JVET-J0037),即利用多层神经网络基于相邻已重建像素预测当前pu像素值。但是这种预测方式复杂度太高,经过权衡,发展出最后采纳的基于线性仿射变换的帧内预测技术。其主要流程如下
帧内预测角度
首先,要预测一个尺寸为WxH的PU,其预测参考为上方W个、左侧H个已重建像素,重建像素的获取和传统帧内预测相同。然后利用这(W+H)个像素,经过平均、仿射变换和上采样三个步骤得到最终预测值。

1.1 参考像素预处理:平均

此步骤的主要目的是对参考像素尺寸进行归一化,对于 4 × 4 4\times4 4×4的PU归一化为4个像素,其他情况归一化为8个像素,即对输入的长参考边界像素 b d r y t o p bdry^{top} bdrytop b d r y l e f t bdry^{left} bdryleft依据编码单元尺寸转化为短边界参考像素 b d r y r e d t o p bdry_{red}^{top} bdryredtop b d r y r e d l e f t bdry_{red}^{left} bdryredleft,以减少预测过程中的计算量和模型参数存储空间。然后将平均转化后的左、上短参考concat成一个向量 b d r y r e d bdry_{red} bdryred,连接的方式如下:
f ( n ) = { [ b d r y r e d t o p , b d r y r e d l e f t ] , if  W = H = 4  &amp;  m o d e &lt; 18 [ b d r y r e d l e f t , b d r y r e d t o p ] , if  W = H = 4  &amp;  m o d e ≥ 18 [ b d r y r e d t o p , b d r y r e d l e f t ] , if  m a x ⁡ ( W , H ) = 8  &amp;  m o d e &lt; 10 [ b d r y r e d l e f t , b d r y r e d t o p ] , if  m a x ⁡ ( W , H ) = 8  &amp;  m o d e ≥ 10 [ b d r y r e d t o p , b d r y r e d l e f t ] , if  m a x ⁡ ( W , H ) &gt; 8  &amp;  m o d e &lt; 6 [ b d r y r e d l e f t , b d r y r e d t o p ] , if  m a x ⁡ ( W , H ) &gt; 8  &amp;  m o d e ≥ 6 f(n) = \begin{cases} [bdry_{red}^{top}, bdry_{red}^{left}], &amp; \text{if $W=H=4$ \&amp; $mode&lt;18$} \\ [bdry_{red}^{left} , bdry_{red}^{top}], &amp; \text{if $W=H=4$ \&amp; $mode \geq 18$} \\ [bdry_{red}^{top}, bdry_{red}^{left}], &amp; \text{if $max⁡(W,H)=8$ \&amp; $mode&lt;10$} \\ [bdry_{red}^{left} , bdry_{red}^{top}], &amp; \text{if $max⁡(W,H)=8$ \&amp; $mode \geq 10$} \\ [bdry_{red}^{top}, bdry_{red}^{left}], &amp; \text{if $max⁡(W,H)&gt;8$ \&amp; $mode&lt;6$} \\ [bdry_{red}^{left} , bdry_{red}^{top}], &amp; \text{if $max⁡(W,H)&gt;8$ \&amp; $mode \geq 6$} \end{cases} f(n)=[bdryredtop,bdryredleft],[bdryredleft,bdryredtop],[bdryredtop,bdryredleft],[bdryredleft,bdryredtop],[bdryredtop,bdryredleft],[bdryredleft,bdryredtop],if W=H=4 & mode<18if W=H=4 & mode18if max(W,H)=8 & mode<10if max(W,H)=8 & mode10if max(W,H)>8 & mode<6if max(W,H)>8 & mode6

1.2 矩阵加权预测:仿射变换

仿射变换即对信号进行一个线性变换接上一个平移。

MIP预测像素的生成是对平均后的参考像素进行矩阵加权,然后加上偏移,即线性仿射变换。预测值为目标预测值的下采样信号 p r e d r e d pred_{red} predred,其尺寸为 W r e d × H r e d W_{red}\times H_{red} Wred×Hred,其中 W r e d W_{red} Wred H r e d H_{red} Hred定义如下

W r e d = { 4 , if  m a x ( W , H ) ≤ 8   m i n ( W , 8 ) , if  m a x ( W , H ) &gt; 8   W_{red}= \begin{cases} 4, &amp; \text {if $max(W,H)≤8$ } \\ min(W,8), &amp; \text{if $max(W,H)&gt;8$ } \end{cases} Wred={4,min(W,8),if max(W,H)if max(W,H)>
H r e d = { 4 , if  m a x ( W , H ) ≤ 8   m i n ( H , 8 ) , if  m a x ( W , H ) &gt; 8   H_{red}= \begin{cases} 4, &amp; \text {if $max(W,H)≤8$ } \\ min(H,8), &amp; \text{if $max(W,H)&gt;8$ } \end{cases} Hred={4,min(H,8),if max(W,H)if max(W,H)>
仿射变换生成预测信号的过程可以表示为
p r e d r e d = A ⋅ b d r y r e d + b pred_{red} = A \cdot bdry_{red}+b predred=Abdryred+b
其中 A A A是一个 ( W r e d ⋅ H r e d ) × ( W = = 4 &amp; H = = 4 ? 4 : 8 ) (W_{red}\cdot H_{red})\times (W==4\&amp;H==4 ? 4 : 8) (WredHred)×(W==4&H==4?4:8)的矩阵, b b b为尺寸为 ( W r e d ⋅ H r e d ) (W_{red}\cdot H_{red}) (WredHred)的向量。实际应用时, A A A b b b已依据单元尺寸预先设定好,存储在三个参数集中 S 0 , S 1 , S 2 S_0, S_1, S_2 S0,S1,S2,索引与PU尺寸相关,如下

i d x ( W , H ) = { 0 , if  W = H = 4   1 , if  m a x ⁡ ( W , H ) = 8   2 , if  m a x ⁡ ( W , H ) &gt; 8 idx(W,H) = \begin{cases} 0, &amp; \text{if $W=H=4$ } \\ 1, &amp; \text{if $max⁡(W,H)=8$ } \\ 2, &amp; \text{if $max⁡(W,H)&gt;8$} \\ \end{cases} idx(W,H)=0,1,2,if W=H=if max(W,H)=if max(W,H)>8
S 0 , S 1 , S 2 S_0, S_1, S_2 S0,S1,S2分别有18、10和6组参数。

1.3 上采样

1.2中产生的是目标预测信号的下采样信号,目标预测信号的剩余值,通过简单的单步线性插值得到。根据PU单元尺寸,可能需要进行水平差值、垂直插值或者两个方向都需要插值,如果两个方向都需要插值,对于W<H的块首先进行水平差值,否则首先进行垂直插值。
以垂直插值为例,首先定义上采样因子 U v e r = H / H r e d U_{ver} = H/H_{red} Uver=H/Hred,其中 U v e r = 2 u v e r &gt; 1 U_{ver} = 2^{u_{ver}}&gt;1 Uver=2uver>1。然后对参考信号进行扩展,向上扩展一行,扩展参考像素取值如下
p r e d r e d [ x ] [ − 1 ] = { b d r y r e d t o p [ x ] , if  W = 8   b d r y r e d I I t o p [ x ] , if  W &gt; 8   pred_{red}[x][-1]= \begin{cases} bdry_{red}^{top}[x], &amp; \text{if $W=8$ } \\ bdry_{redII}^{top}[x], &amp; \text{if $W&gt;8$ } \end{cases} predred[x][1]={bdryredtop[x],bdryredIItop[x],if W=if W>
这里$ bdry_{redII}^{top}[x]$是因为大尺寸单元需要进行两次下采样,两次下采样之后的信号。最终插值信号通过下式计算
P r e d r e d u p s , v e r [ x ] [ U v e r ⋅ y + k ] = ( ( U v e r − k − 1 ) ⋅ p r e d r e d [ x ] [ y − 1 ] + ( k + 1 ) ⋅ p r e d r e d [ x ] [ y ] + U v e r 2 ) &gt; &gt; u v e r Pred_{red}^{ups,ver}[x][U_{ver} \cdot y + k] = ((U_{ver} - k - 1) \cdot pred_{red}[x][y-1] + (k+1)\cdot pred_{red}[x][y] + \frac {U_{ver}}{2}) &gt;&gt; u_{ver} Predredups,ver[x][Uvery+k]=((Uverk1)predred[x][y1]+(k+1)predred[x][y]+2Uver)>>uver
其中 0 ≤ x &lt; W r e d 0≤x&lt;W_{red} 0x<Wred 0 ≤ y &lt; H r e d 0≤y&lt;H_{red} 0y<Hred 0 ≤ k &lt; U v e r 0≤k&lt;U_{ver} 0k<Uver

插值改进- 只用移位操作
对于垂直方向的线性插值,首先对上下预测值进行加权,计算方式如下
p r e d r e d a b o v e [ x ] [ y ] [ k ] = { p r e d r e d [ x ] [ y − 1 ] &lt; &lt; u v e r − p r e d r e d [ x ] [ y − 1 ] , if  k = 0   p r e d r e d t o p [ x ] [ y ] [ k − 1 ] − p r e d r e d [ x ] [ y − 1 ] , if  k &gt; 0   pred_{red}^{above}[x][y][k] = \begin{cases} pred_{red}[x][y-1]&lt;&lt;u_{ver} - pred_{red}[x][y-1], &amp; \text{if $k=0$ } \\ pred_{red}^{top}[x][y][k-1] - pred_{red}[x][y-1], &amp; \text{if $k&gt;0$ } \end{cases} predredabove[x][y][k]={predred[x][y1]<<uverpredred[x][y1],predredtop[x][y][k1]predred[x][y1],if k=if k>

p r e d r e d b e l o w [ x ] [ y ] [ k ] = { p r e d r e d [ x ] [ y ] , if  k = 0   p r e d r e d b e l o w [ x ] [ y ] [ k − 1 ] − p r e d r e d [ x ] [ y ] , if  k &gt; 0   pred_{red}^{below}[x][y][k] = \begin{cases} pred_{red}[x][y], &amp; \text{if $k=0$ } \\ pred_{red}^{below}[x][y][k-1] - pred_{red}[x][y], &amp; \text{if $k&gt;0$ } \end{cases} predredbelow[x][y][k]={predred[x][y],predredbelow[x][y][k1]predred[x][y],if k=if k>
使用相邻的加权参考,于是垂直上采样可以写成以下形式:
P r e d r e d u p s , v e r [ x ] [ y &lt; &lt; U v e r + k ] = ( p r e d r e d a b o v e [ x ] [ y ] [ k ] + p r e d r e d b e l o w [ x ] [ y ] [ k ] + ( 1 &lt; &lt; ( u v e r − 1 ) ) ) &gt; &gt; 2 Pred_{red}^{ups,ver}[x][y&lt;&lt;U_{ver} + k] = ( pred_{red}^{above}[x][y][k] + pred_{red}^{below}[x][y][k] + (1 &lt;&lt; (u_{ver} - 1))) &gt;&gt; 2 Predredups,ver[x][y<<Uver+k]=(predredabove[x][y][k]+predredbelow[x][y][k]+(1<<(uver1)))>>2
水平方向插值可用相同的方式得出。

1.4 MIP模式和预测模式传输

VTM中根据CU尺寸,最多支持35中MIP预测模式。具体来说,对于 m a x ( W , H ) &lt; = 8 &amp; W ∗ H &lt; 32 max(W,H)&lt;=8 \&amp; W*H &lt; 32 max(W,H)<=8&WH<32尺寸的CU支持35种预测模式, m a x ( W , H ) = 8 max(W,H)=8 max(W,H)=8 m a x ( W , H ) &gt; 8 max(W,H)&gt;8 max(W,H)>8分别有19和11种预测模式。为了减少不同模式存储时的内存占用,两种模式可能会共用Metrix和offset,具体共用模式情况如下
m = { m o d e , if  W = H = 4  &amp;  m o d e &lt; 18 m o d e − 17 , if  W = H = 4  &amp;  m o d e ≥ 18 m o d e , if  m a x ⁡ ( W , H ) = 8  &amp;  m o d e &lt; 10 m o d e − 9 , if  m a x ⁡ ( W , H ) = 8  &amp;  m o d e ≥ 10 m o d e , if  m a x ⁡ ( W , H ) &gt; 8  &amp;  m o d e &lt; 6 m o d e − 5 , if  m a x ⁡ ( W , H ) &gt; 8  &amp;  m o d e ≥ 6 m = \begin{cases} mode, &amp; \text{if $W=H=4$ \&amp; $mode&lt;18$} \\ mode-17 , &amp; \text{if $W=H=4$ \&amp; $mode \geq 18$} \\ mode, &amp; \text{if $max⁡(W,H)=8$ \&amp; $mode&lt;10$} \\ mode-9 , &amp; \text{if $max⁡(W,H)=8$ \&amp; $mode \geq 10$} \\ mode, &amp; \text{if $max⁡(W,H)&gt;8$ \&amp; $mode&lt;6$} \\ mode-5, &amp; \text{if $max⁡(W,H)&gt;8$ \&amp; $mode \geq 6$} \end{cases} m=mode,mode17,mode,mode9,mode,mode5,if W=H=4 & mode<18if W=H=4 & mode18if max(W,H)=8 & mode<10if max(W,H)=8 & mode10if max(W,H)>8 & mode<6if max(W,H)>8 & mode6
不同模式的模型参数即存储在上文 S 0 , S 1 , S 2 S_0, S_1, S_2 S0,S1,S2中,参数集由尺寸决定,m由码流中标识。最终实际使用模型参数为 A = A i d x m A=A_{idx}^m A=Aidxm b = b i d x m b=b_{idx}^m b=bidxm

为降低模式传输消耗带宽资源,具体模式编码策略如下:
对于帧内编码CU,首先需要1bit标志位表明是否采用MIP模式,如果采用,额外1bit标识模式是否在MPM中,MIP支持3个MPM模式。MPM模式采用上下文截断二进制编码,非MPM模式采用定长编码。MPM的生成和传统帧内保持一致,MIP模式的获取通过预定义的映射表由传统帧内模式映射得出,如下。

[ p r e d m o d e ] A n g u l a r = m a p _ a l w i p _ t o _ a n g u l a r i d x [ p r e d m o d e A n g u l a r ] [predmode]_{Angular}= map\_alwip\_to\_angular_{idx}[predmode_{Angular}] [predmode]Angular=map_alwip_to_angularidx[predmodeAngular]

[ p r e d m o d e ] A n g u l a r = m a p _ a l w i p _ t o _ a n g u l a r i d x [ p r e d m o d e A n g u l a r ] [predmode]_{Angular}= map\_alwip\_to\_angular_{idx}[predmode_{Angular}] [predmode]Angular=map_alwip_to_angularidx[predmodeAngular]

const uint8_t g_mapMipToAngular65[3][MAX_NUM_MIP_MODE] =
{
  {  0, 18, 18,  0, 18,  0, 12,  0, 18,  2, 18, 12, 18, 18,  1, 18, 18,  0,  0, 50,  0, 50,  0, 56,  0, 50, 66, 50, 56, 50, 50,  1, 50, 50, 50 },
  {  0,  1,  0,  1,  0, 22, 18, 18,  1,  0,  1,  0,  1,  0, 44,  0, 50,  1,  0 },
  {  1,  1,  1,  1, 18,  0,  1,  0,  1, 50,  0 },
};
const uint8_t g_mapAngular33ToMip[3][35] =
{
  { 17, 17, 17,  9,  9,  9,  9, 17, 17, 17, 17, 17, 17, 17,  5,  5,  5,  5, 34, 22, 22, 22, 22, 34, 34, 34, 34, 34, 34, 34, 26, 26, 26, 26, 26 },
  {  0,  0, 10, 10, 10, 10, 10,  4,  6,  7,  7,  7,  5,  5,  0,  0,  3,  3, 12, 12, 12, 12, 14, 14, 14, 16, 16, 16, 15, 13,  1,  1,  1,  1,  1 },
  {  5,  1,  3,  3,  3,  3,  0,  0,  0,  4,  4,  4,  5,  1,  1,  1,  1,  1,  6,  6,  6,  6,  6, 10, 10,  9,  9,  9,  9,  9,  8,  8,  8,  8,  8 },
};

2. 预测过程示例

帧内预测角度 帧内预测角度 帧内预测角度 帧内预测角度
  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值