在H.266/VVC发布后,基于传统编码框架提升压缩率越来越难,随着深度学习的发展,研究人员开始尝试将神经网络引入编码器。为此,JVET工作组在2020年成立AHG11小组来专门进行基于神经网络的视频编码的研究。
为了方便研究,工作组基于VTM-11.0开发了参考软件NNVC,包含了编码器、解码器、训练、推理等相关代码。目前NNVC中集成了的神经网络相关的模块主要是loop filter、帧内预测、超分辨率等。目前NNVC已经发展到4.0版本,相比于VTM-11.0在RA、low-delay和all-intra配置下{Y,Cb,Cr}的BD-rate分别达到{-11.94%,-21.86%,-22.59%},{-9.18%,-19.76%,-20.92%}和{-10.63%,-21.56%,-23.02%}。本文主要介绍其中的NN-Based Intra Prediction模块。
Framework
NN-Based Intra Prediction共包含7个模型,分别用于不同尺寸的块{4x4,4x8,4x16,4x32,8x8,8x16,16x16}。
对于wxh的块Y使用NN-Based Intra Prediction模型预测的过程如Fig.1。首先获取Y的上下文X,X通过前处理过程得到,然后作为NN模型的输入,模型输出,经过后处理得到wxh的预测块。其中Y的参考像素X由Y的上方和左侧的重建像素构成。NN模型的输出还包括grpIdx1、grpIdx2和repIdx,其中grpIdx和LFNST的参数选择有关。repIdx对应传统的67个帧内预测模式和MPM构建相关。
NN-Based Intra Prediction中的模型都是全连接神经网络,不包含卷积层。
If min(h,w)≤8 && hw<256:n_a=n_l=min(h,w)
otherwise:if h>8:n_a=h⁄2otherwise:n_a=hif w>8:n_l=w⁄2otherwise:n_l=wIf h≤8, e_h=4. Otherwise, e_h=0.
If w≤8, e_w=4. Otherwise, e_w=0.
前处理和后处理
在上面的流程中,上下文X经过前处理后再输入NN模型,前处理过程可分为4步:
-
当前块Y的上下文X可分为2个部分,可参考部分和不可参考部分,如Fig.2,可参考部分减去其对应的均值u。
-
上下文X内的像素乘以,b是bitdepth,在VVC中是10。
-
所有不可参考像素置零。
-
上面得到的结果展平为一维向量,长度为
对于NN模型的输出的后处理过程和前处理过程相反,将一维向量reshape为wxh尺寸,像素除以p,可参考部分像素加上均值u,然后clip到正常像素范围,整个过程可以描述如下:
注意上述前处理和后处理过程是浮点精度。对于signed-integers的NN模型,,对于int16,Qin=7,对于int32,Qin=23。
MPM列表构建
使用MPM对intra模式进行预测可以减少编码intra模式的码率,在VVC中MPM列表包含6个候选项,来自当前块上方和左侧intra块的模式。在开启NN-Based Intra Prediction后,若当前块采用传统intra模式,而其相邻块采用NN-based模式,那如何构建当前块的MPM列表?这里就需要Fig.1中NN模型的输出repIdx,若相邻块采用NN-based模式则将其输出的repIdx加入当前块的MPM列表。
上下文变换
前面提到NN-Based Intra Prediction共包含7个模型,分别用于不同尺寸的块{4x4,4x8,4x16,4x32,8x8,8x16,16x16}。但是有的编码块可能不属于这7个尺寸,为了解决整个问题可以对其上下文X进行变换,变换后满足这7个尺寸,可以在垂直方向下采样δ和/或在水平方向下采样γ,还可以进行转置,NN模型处理完后对后处理的结果再进行上采样和转置得到最终预测结果。表1中是各个尺寸块进行变换的具体参数,例如对于32x8的块在垂直方向进行2倍下采样然后转置得到8x16的块,使用8x16的模型对它处理。对于不在表1中的尺寸的块(h,w)不允许使用NN模式。
NN-Based Intra Prediction模式的传输
亮度:对于不在表1中的尺寸不允许使用NN模式,对于表1中的尺寸的块设置标志位nnFlagY,nnFlagY=1表示使用NN模式,nnFlagY=0表示使用传统的intra模式。如Fig.3所示。
色度:在VVC中色度intra模式编码中,若色度模式和亮度模式相同则采用DM模式否则需要编码色度模式。如果色度对应的亮度块使用NN模式且色度块满足表1的尺寸则DM模式表示NN模式否则DM模式表示PLANAR模式。如果亮度块不是NN模式且色度块满足表1尺寸,则需要编码标志位nnFlagC,nnFlagC=1表示使用NN模式,nnFlagC=0表示不使用NN模式。
注意如果使用NN模式但是当前块的上下文超出图像边界,如,则当前块使用PLANAR模式。
训练
模型的训练需要进行4轮迭代训练:
-
cycle0,使用VTM-11.0作为anchor生成训练需要的块Y和对应的上下文X组成数据对(Y,X)。将7个模型参数随机初始化然后在这些数据上训练。
-
cycle1,VTM-11.0_nnvc使用cycle0的参数再次生成训练数据,7个模式使用cycle0的结果初始化参数然后再训练。
-
cycle2,VTM-11.0_nnvc使用cycle1的参数再次生成训练数据,7个模式使用cycle1的结果初始化参数然后再训练。然后使用相同的训练数据,恢复这7个神经网络的训练,这一次对它们的权重引入了稀疏性约束
-
cycle3,VTM-11.0_nnvc使用cycle2的参数再次生成训练数据,7个模式使用cycle2的结果初始化参数,然后在这7个神经网络中分别对计算grpIdx1和grpIdx2的部分进行训练
NNVC的代码中包含了这些训练代码。
推理
推理采用SADL框架,SADL是工作组开发的框架用c++写成,它没有额外的依赖,可以直接集成进VTM中调用模型进行推理。
SADL既可以进行浮点推理也可以进行定点推理,下面是NNVC中的训练好的模型,可以看到每个尺寸既有float版本也有int16版本。