基于学习的编码(一):使用CNN进行环路滤波
本文介绍一种在VVC环路滤波中使用CNN的技术,该算法来自于JVET-O0056
CNNLF
该卷积网络模型称为CNNLF,用于VVC的环路滤波的ALF阶段之后,如下图所示。
CNNLF的输入是ALF的输出,我们称之为重建像素。CNNLF的输出我们称之为修复像素。
为了减少传输CNN参数的压力和降低CNNLF解码时间,CNNLF网络只包括三层,亮度分量和色度分量使用同一个网络。如下图所示。
每层网络的参数MxNxPxQ的含义如下:
-
M:该通道滤波器的水平宽度
-
N:该通道滤波器的垂直高度
-
P:输入的通道数
-
Q:该层网络的滤波器数
每层的操作包括卷积、Batch Normalization、添加偏置和ReLU。其中最后一层例外,它不含ReLU。
CNNLF操作
每个CTU独立进行CNNLF操作。在Packing阶段产生CNN的输入,它的6个通道由4个重建亮度块和2个重建色度块生成。4个亮度块是通过对CTB的亮度分量进行4次2x2的下采样生成,得到4个1/4尺寸的子块,每个子块和色度块尺寸相同。这4个亮度子块和2个色度块构成了一个6通道的CNN输入,如下图所示。
经过三层CNN之后,数据尺寸仍为64x64x6。在Unpacking阶段,前4个通道组成亮度CTB,后两个通道分别形成两个色度CTB。最终CNNLF的输出为Unpacking的输出加上ALF的输出得到。
CNN参数传输
CNN的参数在每个RAS(大约1秒)的I帧内传输。如下图所示。
CNN的参数仅使用RAS内时域第0层和第1层的图像训练。为了提高效率,当编码器决定不对I帧使用CNNLF时,则不需要传输CNN参数,RAS内剩余的图像设置为CNNLF-off。
对于每个颜色分量,可以在图像级、CTB级和32x32块级决定是否使用CNNLF。对于一幅图像,每个颜色通道可以传输一个语法元素{PictureAllOff, PictureAllOn, CTBOnOff}表示是否开启CNNLF。PictureAllOff表示对当前图像的当前通道不使用CNNLF。PictureAllOn表示对当前图像的当前通道的所有像素都使用CNNLF。CTBOnOff表示是否使用CNNLF由CTB自己的语法元素决定。在CTB级也有三个语法元素{CTBAllOff, CTBAllOn, BlockOnOff},CTBAllOff表示对当前CTB的当前通道不使用CNNLF。CTBAllOn表示对当前CTB的当前通道的所有像素都使用CNNLF。BlockOnOff表示是否使用CNNLF由每个32x32块自己的语法元素决定。为了减少解码时间,在图像级如果对亮度分量使用PictureAllOff则Cr和Cb都使用PictureAllOff。在CTB级,如果对亮度CTB使用CTBAllOff,则Cr和Cb都使用CTBAllOff。
训练阶段
为了减少复杂度,仅使用时域第0层和第1层的图像训练CNN参数。也就意味着,只有这些图像需要编码两次。第一次编码用于生产CNN的训练数据,第二次编码生成最终码流。训练信息如下表:
推理阶段
编码器和解码器不需要依赖其他框架,下图是推理阶段的信息。
实验结果
下图是在VTM5.0在使用CNNLF的实验结果。
在VTM5.0的RA配置下1.20% (Y), -14.17% (Cb)和14.11% (Cr) BD-rates, 117% 解码时间增加 。
感兴趣的请关注微信公众号Video Coding