Annual: 2019

PR053 »
基于深度学习的视频编码环路滤波模型设计
📁Machine Learning
👤卫坤 王
 (福州大学)
📅Nov 02, 2019
Regional Final



👀 2473   💬 1

PR053 » 基于深度学习的视频编码环路滤波模型设计

Description

本设计基于深度学习实现一个新的环路滤波模型,用以取代和优化视频编码标准H.265中环路滤波部分的去方块滤波,然后将网络模型在OpenVINO Starter Kit平台上做进一步优化,以提高环路滤波的速度,节省滤波时间,降低视频编码的延迟;同时改善滤波后视频的主客观质量,提升编码性能。以Tensorflow作为深度学习网络架构,便于用OpenVINO Starter Kit平台将其转化为IR模型。模型方面,基于卷积神经网络(CNN)进行网络结构的设计,在卷积层中插入步幅卷积与反卷积,从而卷积模板可以按一定的步长从图像中提取图像块进行线性映射与重构。网络可分为两个阶段,第一阶段是基于步幅卷积与反卷积的测量与重构过程,中间可插入1x1的卷积层来加深映射的深度,而第二阶段是基于常规卷积的邻域滤波过程。训练方面,基于全变分模型对特定回归问题的概率模型进行建模,设计训练算法。全变分(Total-Variation, TV)模型是一个依靠梯度下降流对图像进行平滑的各向异性的模型,希望在图像内部尽可能对图像进行平滑,而在图像边缘尽可能不去平滑。本方案并非想要直接去解全变分问题,而是基于TV模型对网络权重的一个先验分布做出假设,以推导出相应的损失函数。

Demo Video

  • URL: https://v.youku.com/v_show/id_XNDM4NzY5ODkyNA==.html?spm=a2h3j.8428770.3416059.1

  • Project Proposal

    1. High-level Project Description

    项目介绍

    1、设计背景

           信息化的时代背景下,信息的传递显得尤为重要,作为视觉信息传递的载体,图像和视频以其直观的表现形式,可靠的信息数据,巨大的信息量,完整的信息描述己成为当今时代不可或缺的信息传递手段。原始视频中存在巨大的冗余量,包括空间冗余和时间冗余,海量数据的存储及传输技术是信息时代面临的一个重大问题。在进行视频传输的过程中,低数据量,低失真是我们所追求的目标,我们希望可以充分利用信息数据自身的相关性来消除数据的时间和空间冗余以减小视频数据量,同时还要尽量保证视频质量。

           有损压缩是视频传输和存储中广泛应用的一项重要技术。然而,这种压缩不可避免地会导致视频质量的下降,在压缩视频中引入了失真效应,如方块效应、振铃效应、模糊等。编码失真除了会降低视觉体验外,还会进一步降低视频编码过程中帧内/帧间预测的准确性,对压缩效率产生负面影响。在目前最先进的视频编码标准H.265/HEVC中,环路滤波是减少这些编码失真的关键技术。去方块滤波是H.265/HEVC环路滤波技术中的其中之一,可以消除视频编码过程中由于变换量化和预测技术所导致的重构图像中编码块的不连续(即方块效应),降低重构图像以及后续编码图像的失真,而事实上,H.265中的去方块滤波器的消除失真能力非常有限,且复杂度较高,实现困难。

    2、设计目标

            近年来,人们提出了几种基于CNN的环路滤波算法来改进HEVC传统滤波方法,然而,一些缺陷仍然限制了它们进一步提高编码效率的能力,具体的说,像预测残差和编码单元边界这样与编码失真非常相关的东西通常被忽略,此外,这些方法中采用的损失函数通常没有很好地被正则化。针对这些不足,我们计划从两个方面对去方块滤波技术进行优化:

    1)提出一种基于卷积神经网络(CNN)的环路滤波技术,巧妙地考虑了预测残差对滤波的帮助,预测残差的压缩实际上是编码噪声的直接来源。然后,将基于块的测量重构过程和基于邻域的滤波过程统一到一个端到端的全卷积结构中,捕捉压缩噪声和像素与编码块边界相关位置之间的相关性。最后,在网络训练中,采用全变分模型,通过MAP(最大后验)估计得到损失函数,使训练的正则化效果更好。

    (2)利用Intel的openvino starter kit工具对训练好的网络进行优化,并部署到不同的硬件平台上,如CPU,FPGA,VPU等,提升编码效率和压缩图像的主观视觉质量,同时提升网络模型的推理速度。

     

    2. Block Diagram

    设计框图

           H.265/HEVC视频编码框架如图1所示,我们所设计的网络模型即是要取代图1中红色方框标记的部分,事实上,我们的网络嵌入到了去方块滤波模块的位置,却不单单是只有去方块滤波的功能,我们的网络还可以减少其他的失真效应比如振铃效应,模糊失真等,可以显著提高重构图像的质量。作品设计原理框图如图2所示,可以将整个设计流程分为两大部分,首先基于Tensorflow框架搭建网络模型实现环路滤波功能,其次是利用OpenVINO Starter Kit深度学习部署工具对网络进行优化并将网络模型部署到FPGA、CPU、VPU等设备上去。

    1 H.265/HEVC视频编码框架

    图2 设计原理框图

    3. Intel FPGA Virtues in Your Project

    项目特性

     1、高性能

           视频编码框架中的去方块滤波可以有效地消除重构图像中的方块效应,然而其滤波性能有限,而且复杂度较高。我们利用深度学习方法代替去方块滤波并利用OpenVINO模型优化器对其进行优化,获得了非常好的滤波效果,相较于HM视频编码软件,滤波性能有了较大的提升,大大降低滤波后图像的失真,显著提高了编码后视频的质量,BD-rate显著下降,此外,相较于直接用Tensorflow框架直接进行推断,使用OpenVINO工具大幅度提升了网络模型的推理速度。     

     2、灵活性

           一般在用深度学习方法对HEVC算法进行改进时,在python平台上实现了预期功能以后,还要将网络模型复现在C++平台上,以便于将网络嵌入编码器进行实际验证,这个过程非常麻烦。而利用OpenVINO工具可以用较固定的编程步骤将训练得到的网络模型嵌入HM软件,如果有了新的改进,只需要改变IR模型,即便是以后又提出了其他模块的改进算法,也可以共用一个应用程序,只需更换IR模型并修改程序输入输出数据处理部分代码即可,大大简化了深度学习算法的验证,这将会是一个很有前景的设计方案。       

    3、易部署

           直接在FPGA平台上实现神经网络的功能非常复杂,利用Intel的OpenVINO Starter Kit深度学习部署工具可以轻松地将方案中的神经网络部署到FPGA设备上去,不需要编写复杂的verilog代码去实现网络的底层模型。另外,利用此工具包轻易地将网络部署到其他硬件设备中去,例如:CPU、GPU、VPU等,轻松实现神经网络跨硬件设备运行。        

    4. Design Introduction

    网络结构及原理

           我们提出了一种基于CNN的图像级环路滤波器来代替去块滤波器,我们的贡献如下。首先,将预测图像与未滤波的图像作为输入一起输入到网络中,这样网络就可以很容易地学会从它们的差异中提取特征,即,解码后的预测残差,由其变换和量化压缩而成,这实际上是编码噪声的直接来源。其次,将基于块的测量重构过程和基于邻域的滤波过程统一到一个端到端体系结构中,以捕捉压缩噪声与像素位置与编码块边界的相关性。最后,采用全变分模型,推导出基于MAP(最大后验)估计的网络训练损失函数,以获得更好的正则化效果。

    1、 卷积的测量与重构

       为了更好地描述网络结构,我们将首先解释如何使用步幅卷积和反卷积来实现一个基于块的测量和重构过程。这部分的基本思想,是用卷积模板从低质量的输入图像中提取小块,映射到高维测量向量作为特征图,这一过程被称为测量,然后将这些测量向量映射为高质量的重构图像。具体来说,步幅卷积可以在一定的步长下从输入图像中提取小块。其中,垂直步长为S,水平步长为T,核大小为K×L且无填充的2输入通道卷积层可以表示为:

    其中,(u,v)为空间坐标,yj(u,v)表示第j个通道的输出,xj(u,v)表示第i个通道的输入,wjiklxi 表示连接它们的K×L卷积核。令:

    则(1)变为:

    其中,wjiklxlki(u,v)表示从输入点开始的I×K×L图像块。对任意一个u,v,我们可以看到(3)表示一个测量(即,线性映射)过程,其中,yj(u,v)表示图像块xlki(u×S,v×T)的测量向量,卷积核张量wjijk作为测量矩阵。对于每个步骤,滤波器模板从输入图像中提取一个图像块并计算其线性映射,然后得到该图像块的测量向量。同样,反卷积等价于一个重构过程,可以写成:

    其中,~xlki(u×S,v×T)表示测yj(u,v)的一个重构图像块,~wjlki表示反卷积核张量。注意到重构后的图像是重构后的图像块的叠加,因为每个图像块都与其相邻图像块重叠。

            如图3所示,HEVC中亮度编码块的最小尺寸为8x8像素,因此我们采用了基于8x8块的测量方法。即,垂直和水平步幅都设置为8。为了使一个块与另一个块更好地协调,我们将每个块扩展到一个10x10图像块,因此内核大小固定为10x10,每个图像块与相邻的图像块重叠2个像素行/列。

    图3 提取图像块的说明

    (黑色:8x8采样网格。灰色:扩展图像边框。彩色:相邻的10x10图像块)

    2、网络结构

          该网络由两个主要阶段组成,第一个阶段是卷积形式的测量和重构过程,第二个阶段是基于CNN的后处理滤波器,如图4所示。首先,我们将未过滤的图像连接到预测的图像,并将其输入到第一阶段,然后将第一阶段的输出添加到未滤波的图像中,并将和输入到第二阶段。在这里,利用残差学习技巧加快网络训练。将未滤波重构图像和预测图像同时输入模型,使网络能够很容易地学习从它们的差异(即解码后的预测残差)中提取特征,它的压缩实际上是编码噪声直接产生的地方。另一方面,我们没有将解码后的预测残差作为输入直接输入到网络中,这是因为如果我们这样做,输入数据将很难归一化,因为两个输入通道的均值和方差差异很明显。

    图4 网络结构(其中表示通道连接,表示按元素添加)

           第一阶段实现了基于块的卷积形式的测量和重构过程,其网络结构由4个卷积层组成,如图5所示。第一层是使用(1)-(3)中描述的跨步卷积的测量层,该测量层卷积步长为8,可以从输入图像中提取2x10x10个图像块,并将其映射为128维测量向量。如图3所示,使用镜像填充来扩展输入图像的边界,使得每个图像块都能以图像中8x8样本网格的交点为中心,这也是块伪影最常发生的地方。第二层和第三层都是卷积核大小为1的卷积,可以把128维的测量向量映射为64维的测量向量。事实上,这两层对于每个测量向量都扮演着全连接层的角色,因为来自不同通道的同位神经元是完全连接的,而来自两个不同图像块的任意两个测量值之间没有连接。利用这两层卷积核为1的卷积层来增加测量的深度,可以更好地表示待重构的被测量图像块。第四层是反卷积,如(4)所述,根据测量值重构图像块,即将64维的测量向量转化为单通道的重构图像。通过该方案,网络可以根据每个像素相对于8x8块边界的相对位置对其进行不同的处理,更适合基于块的视频编码体系结构。

    图5 网络结构的第一阶段

          第二阶段的网络结构为基于邻域的滤波过程,如图6所示。它由规则的卷积层组成。为了避免梯度在训练过程中消失,我们使用了残差学习技术,在层与层之间增加了若干个skip connections(即:跳过连接)。

    图6  网络结构的第二阶段

           在此体系结构中,我们统一基于块测量重构过程和基于邻域的滤波过程到一个全卷积架构,在主流的深度学习框架下,实现起来更容易、更优雅,因为它可以作为一个用于训练和测试的图级端到端模型:y=f(x;θ),其中x表示网络输入,θ表示网络参数,y表示网络输出,f表示从输入到输出的端到端映射。此外,使用这种架构,网络可以学习让一个图像块在处理重叠像素时与其相邻的图像块协同工作,这样就不太可能像其他纯基于块的方案那样产生新的块效应。

    3、基于全变差模型的MAP估计

          在全变差(TV)模型中,由失真图像x对原始图像y的最优估计是使式(5)中函数E(y,x)最小化:

    其中|y|表示y的空间梯度大小。E(y,x)的第一项表示y的TV范数,第二项是噪声预测的方差约束。如果我们限制y为y=f(x;θ),式(6)变为:

    这里不是直接解θ*,我们的目的是根据(7)做出一个假设θ的先验分布:

    其中α是一个指示分布强度的超参数,Z(x)是配分函数,相对于θ是常数。(8)的含义非常直观 —— E的值越小,θ的概率越高,因此可以通过最大化θ的概率来最小化E的值。此外,由于函数E本身是非负的,外层的负指数函数可以保证分布为非负的,其积分是收敛的。注意到该分布在目标图像t之前,但在输入图像x之后。另一方面,目标图像t的似然函数为:

    其中,β是超参数,表示方差的倒数。根据贝叶斯理论,θ的后验为:

    给定N图像数据集D={(x1,t1),⋯,(xN,tN)},θ的后验变为:

    我们将(12)的负对数作为损失函数并将(5)中的λ0设置为0,然后可以将损失函数整理为:

    其中λ是由λ=α/β 给出的正则化参数。

           我们将(5)中的λ0设置为0的原因是,在全变分模型中,使用项||y-x||2来使输出图像保持接近输入图像,但是在我们的方法中,我们可以在损失函数中使用似然项||y-t||2来学习一个模型,该模型可以最小化输出图像和目标图像之间的平方和误差,因为我们的训练过程是有监督的。

            提出的损失函数可以避免过拟合,同时又能更好地保持性能,因为它是由一个更符合图像本质的概率模型推导出来的。

    5. Function Description

    作品展示

    1、作品功能展示 

          在这一部分我们将会展示我们的成果以及我们作品的滤波效果。根据视频编码参数QP值(QP值越大,视频压缩程度越大)的不同,我们分别训练了当QP=23、28、33、38、40时的5个不同的Tensorflow网络模型,并利用模型优化器将每个模型转化成FP16和FP32两种精度的IR模型,共得到10个IR模型,然后开发C++应用程序读取IR模型对输入图像进行滤波处理,为了体现网络的功能性和实用性,我们将开发的程序模块嵌入视频编码软件HM16.7的相应位置以取代去方块滤波,使得我们开发的作品能够真正用于视频编码。我们还开发了一个UI界面来对编码器和OpenVINO工具的参数进行设置,使得操作更加清晰与简便。为了便于观察滤波效果,我们还增加了一些其他功能,图7中所示的UI界面中的sampling按键可以对当前编码帧进行抽样并展示图像编码前后的效果,play video按键可以播放编码后的yuv视频序列,并将每一帧图像的码率和Psnr值显示在图像左上角。

    图7 作品展示

           编码结束以后会生成二进制码流文件,数据量已经得到了压缩,可以用于通讯传输。图8所示为编码器输出目录,其中str.bin即为编码压缩后输出的二进制码流文件,终端中显示的是以十六进制方式显示的码流。

    图8 输出目录及输出视频码流

    2、滤波效果

        为了可以更直观地展示出我们作品的滤波效果,我们将编码参数QP设为40,这样由于压缩程度较大,视频的失真会更大一些,得到的滤波效果图如图9,图10,图11所示。其中图11为将摄像头获取的视频序列转化为视频编码所需要的yuv格式后进行编码,再抽样得到的滤波效果。

    图9 滤波效果1

    图10 滤波效果2

    图11 滤波效果3

           播放视频的效果如图12所示,视频窗口左上角显示的是每一帧图像的码率和Psnr。

    图12 播放视频

    6. Performance Parameters

    作品性能

           作品完成后,我们对作品的性能进行了评估。实验方法为,分别在编码器的去方块滤波处理利用传统去方块方法和利用OpenVINO工具两种情况下,对foreman、akiyon-cif和BlowingBubbles三个视频序列进行编码,编码帧数为50帧,编码QP值分别设为为23、28、33、38四个值,实验结果如表1所示。其中Bit_rate代表编码后的码率(越小压缩程度越高),Y-PSNR代表编码后图像的亮度信噪比(越大图像质量越高),BDBR代表亮度信噪比相等条件下比特率的减少值,BDSNR代表比特率相等条件下亮度信噪比的提升,黄色代表HM参考软件本身的性能参数,绿色代表性能提升,红色代表性能下降。可以看出,利用OpenVINO工具可以显著提升视频编码的滤波性能。

    表1 比赛作品性能测试结果

         对表1中数据进行分析,得到图13所示的统计图,其中横轴为Bit_rate,纵轴为Y-PSNR,Anchor为HM软件的性能,Proposed为OpenVINO的性能,4组QP值的性能点的连线越靠近左上方表示利用此种方法滤波性能更胜一筹,从图12中可以清晰地看出,三个测试序列均是在利用OpenVINO工具进行处理时性能更佳。另外,相较于直接用Tensorflow框架进行推断,利用OpenVINO工具可以显著提升网络模型的推理速度。

    图13 比赛作品性能测试结果分析

     

    7. Design Architecture

    设计框架

           整个作品的设计框架如图14所示。

    图14 整体设计框架



    1 Comments

    Zhou Wenyan
    请补全设计
    🕒 Jun 27, 2019 11:22 AM

    Please login to post a comment.