基于生成对抗网络的视频超分辨率研究与实现毕业论文
2021-11-06 23:13:53
摘 要
目前针对图像的超分辨率重构大致有三种方式,分别是基于插值的,基于重建的,基于学习的。由于前两种传统算法已经达到了一个性能瓶颈,基于学习的算法成为了目前最受欢迎的超分辨率重构算法。在所有机器学习算法里面,生成对抗网络(GAN)是最有趣的一种算法,它通过两个网络不断地博弈来优化两个网络自身,就像两个下棋的人不停的对弈,最开始棋艺很差,几乎是胡乱下。随着盘数的变化,两人在对弈的过程中不断地弥补自己的不足,每一盘棋都会使得两人棋艺进步,在经过很长一段时间之后,两人的棋艺都能得到很大的提升。在本文中,生成网络负责对图像进行超分辨率重构,判别网络负责衡量生成网络的重构效果。本文使用tensorflow构建GAN网络模型,进而实现单张图片的超分辨率重构以及视频的超分辨率重构。
关键字:超分辨率;卷积神经网络;生成对抗网络;计算机视觉
Abstract
At present, there are roughly three methods for super-resolution reconstruction of images, which are interpolation-based, reconstruction-based, and learning-based. Since the first two traditional algorithms have reached a performance bottleneck, the learning-based algorithm has become the most popular super-resolution reconstruction algorithm. Among all machine learning algorithms, generating an adversarial network (GAN) is the most interesting algorithm. It continuously optimizes the two networks through the two networks, just like the two players who play chess constantly. Chess skills were very poor at first, almost indiscriminately. As the number of games changes, the two players make up for their shortcomings during the game. Each game will make the two players improve their skills. After a long period of time, the two players' skills will be greatly improved. In this paper, the generation network is responsible for super-resolution reconstruction of the image, and the discrimination network is responsible for measuring the reconstruction effect of the generation network. In this paper, tensorflow is used to build the GAN network model, and then the super-resolution reconstruction of a single picture and the super-resolution reconstruction of video are realized.
Key words:SRGAN;CNN;GAN; CV
目 录
1 引言 1
1.1 研究意义 1
1.2 研究背景与现状 1
2 基于GAN的超分辨率重构算法 3
2.1 算法整体结构 3
2.2 生成网络 3
2.3 判别网络 7
2.4 损失函数 8
2.5 训练过程 9
2.6 模型使用 10
3 超分辨率算法具体实现 12
3.1 样本获取 12
3.2 环境搭建 12
3.3 模型的构造与训练 13
3.4 视频的超分辨率实现 16
3.5 效果展示 17
4 总结与展望 19
引言
研究意义
分辨率是评估视频图像中蕴含细节丰富程度的重要参数,它包括时间分辨率、空间分辨率以及色阶分辨率等,它能够体现成像系统所能反映物体细节信息的能力。在日常生活中,我们往往希望得到的是包含更大的像素密度、具有更丰富的纹理细节的高分辨率视频。但是由于设备或历史的原因,我们得到的视频的分辨率大概率都达不到我们的要求,视频图像的超分辨率成为了人们的迫切需求。
超分辨率技术不仅能应用于我们的日常生活,它在多个领域都有着广泛的应用范围和研究意义,比如:图样压缩领域,医学成像领域,遥感成像领域,公共安防领域,视频感知领域。
研究背景与现状
随着上个世纪60年代Harris[1]和Goodman[2]提出超分辨率的概念,越来越多的人投入到该技术的研究,并相继提出了各种超分辨率复原的方法。
目前实现超分辨率的技术可以分为三类,分别是基于插值的,基于多帧重建的,基于学习的。
插值是图像超分辨率常规的方法,基于插值的算法又分为三种:最近邻插值法、双线性插值法,双三次插值法。最近邻插值算法不需要计算,直接将距离待求像素最近的像素灰度值赋给待求像素即可,这种做法是最快的,但是很容易出现锯齿,且放大倍数很有限。双线性插值算法将图像的的像素值当成了关于像素坐标的二元函数,待求像素由与其相邻的四个点分别通过两个维度上的线性插值的叠加来表示。双三次插值[3]相较于前面更加复杂,它综合考虑了待求像素点周围16个点的像素值,需要进行3次线性插值,运算量也相较前者更大。总的来说,基于插值的算法依赖于一个插值函数来计算未知点的像素值,它假设图像上的像素值的变化是连续平滑的,但实际上这种假设不完全成立,这往往会导致超分辨率之后的图像还是比较模糊。
在20世纪80年代Tsai和Huang[4]首次提出了基于多帧低分辨率图像重建出高分辨率图像的方法,算法首先是将高分辨率图像进行模糊化和下采样生成低分辨率图像的过程进行建模,计算出生成的低分辨率图像与实际的低分辨率图像的差值,将该差值反投影,进而得到优化的高分辨率图像。这种方法在放大倍数比较大的情况下不能很好的恢复图像的高频信息。钟山等人[5]针对这一问题使用了MAP算法克服了放大倍数的局限性
基于学习的算法是通过大量的样本集训练,找到LR(低分辨率)图像和HR(高分辨率)图像之间的映射关系,得到一个训练好的模型。利用这个模型可以实现任意图像的超分辨率重构,重构效果取决于训练的样本集大小以及训练的时间。近年来,随着硬件的升级换代,计算的速度得到显著的提升,使得这类需要大量数据运算的算法得出的结果越来越理想。在基于学习的算法中,GAN是目前最受欢迎的一种算法,它通过两个网络之间的博弈来优化自身,在结构上和效果上都优于其它的学习算法。
目前国内外的研究也主要侧重于基于学习的算法[6][7][8][9][10][11],都是针对单张图像的超分辨率重构,在视频方向的研究也有一部分[12][13][14][15]。基本上都是利用了卷积神经网络实现的。
本文使用了Tensorflow框架搭建GAN网络,首先实现单张图片的超分辨率重构,并训练出一个针对单帧图像超分辨率的模型,并且在单帧图像拥有了良好的超分辨率重构效果的基础上,重用该模型,进一步实现了视频的超分辨率重构。
基于GAN的超分辨率重构算法
算法整体结构
为了实现视频的超分辨率,首先需要训练出一个针对单帧图像的超分辨率模型,然后增加一个帧维度,最后再实现视频的超分辨率,所以首先需要构建一个关于单帧图像超分辨率的GAN网络。
传统的GAN原理比较简单,结构由两个网络组成,分别是生成网络(Generative)和判别网络(Discriminate)。G网络负责生成类似真实样本的数据,其目的是最终生成一个以假乱真的结果。D网络负责判断输入数据的来源,其目的是区分输入是来自于真实的样本还是来自于G网络的输出。初始时,G网络的“伪造”能力和D网络的鉴别能力都比较弱,我们可以通过交替迭代训练来优化两个网络的参数,进而提升两个网络的能力。具体如下:
- 首先优化D网络。初始时,G网络的输出可以直接打上“假”标签,然后把所有真实样本到打上“真”标签,一起送入D网络进行训练,此时D网络就可以用一个简单的二分类器实现。训练一段时间后,D网络的鉴别能力应该会有提升,至少不会比之前差。
- 之后优化G网络。将G网络的输出直接送入D网络进行鉴别,将D网络判定结果为假的概率计入损失函数,通过优化器来优化G网络的参数,进而提升G网络的“伪造”能力。
- 反复交替迭代上述过程。
通过上述训练之后,两个网络在博弈的过程中都有了性能的提升。根据实际情况,我们可以单独拿出一个网络,满足实际需求。比如,本文超分辨率重构,就只需要拿出训练好的G网络根据一张低分辨率图像来生成一张以假乱真的高分辨率图像。
在这里,G网络负责根据LR(低分辨率)图像生成一张SR(超分辨率)图像,D网络负责判断输入的图像是SR图像还是HR(高分辨率)图像,另外为了更好的训练G网络,引入了一个以及训练好了的VGG网络进行图像特征提取,VGG网络可以分别提取G网络生成的SR图像和样本集中HR图像的特征,之后可以对两者特征进行比对并将差值计入损失函数。训练好G网络模型之后,对于单张图片的超分辨率重构就可以直接将其送入G网络,这样就可以生成原图对应的超分辨率图了。对于视频的超分辨率重构,可以构造一个视频帧生成器,提取视频的每一帧,逐一送入G网络,经过处理后得到视频的每一帧超分辨率结果,之后将所有帧整合,并整入音频流,得到最终的超分辨率视频。
生成网络
对于生成网络,这里将其定为在能够根据低分辨率视频的某一帧,生成对应该帧的超分辨率帧,是最终视频超分辨率需要使用的重用模型,需要在训练中不断增强该网络的性能,使得该网络在应对单帧图像的超分辨率重构场景能产生一个出色的结果,最终将其移植到视频超分辨率场景下。
从封装的角度下,将生成网络当作一个整体,我们预期是给生成网络喂一个LR图像数组,最后生成网络会输出我们想要的SR图像数组。了解生成网络对外的输入输出接口后,下面具体的叙述生成网络的原理。
图 2.1 图像示例图
对于视频的单帧图像而言,在计算机里通常表示成一个三维数组(宽,高,通道数),比如一张普通的(500×400)png图片,放入计算机中的数组形状为(500,400,3),其中3代表RGB三个通道,现需要将其分辨率提升至(2000,1600,3),如果使用普通的神经网络,如下图2.1,中间隐藏层神经元个数至少为2000×1600×3,参数量更是达到了500×400×3×2000×1600×3 2000×1600×3这样的天文数字,不仅是训练难度增加了,甚至由于参数过多,模型几乎会过拟合,即对与训练集拟合程度高,测试集几乎不拟合。这往往是忽略样本的像素空间结构特点而直接暴力训练的结果,因此,这里采用卷积神经网络(CNN)来对图像进行特征提取。CNN很好的利用了图像数据的空间结构,大大的减少了模型的参数量和训练时间,对网络的实际效果也有极大的提升。具体的生成网络结构[16]如下图2.2:
图2.2 生成网络结构图
在图2.2中包含有很多种Layer,不同的Layer对网络有不同的影响,具体分为以下几种:
- Conv层
该层可以用于提取输入信息的特征图。注意,在结构图中每个卷积层上面都有一个说明字符串,例如k3n64s1,其中k3代表有卷积核的形状为3×3,n64代表输出的特征图为64个,s1代表卷积核扫描的步长为(1,1),对于输入到该层的每一个特征图的卷积如图2.3:
图2.3 卷积示意图
按顺序得到输入像素特征图的一小块区域(形状与对应卷积核大小相同),如上图中的蓝色区域,然后和卷积核(红色区域)对应位置相乘,最后结果相加,即得到卷积后的一个像素值,在这里由于strides为(1,1),上图的蓝色正方形横向平移和正向平移跨度均为1。全部计算之后,会得到一个3×2的特征图(VALID填充模式),此时为了保证卷积后的特征图大小不变,通常会在原图上加“一圈0”(SAME填充模式)。
实际上输入至该层的特征图往往不止一张,例如,对于大小为500×400的png图片来说,对应的形状为(500,400,3),那么作为第一的Conv层的输入,它的特征图就是3(代表RGB特征)。此时,为了得到拥有64张特征图的输出,卷积核的个数则为3×64=192个,即每3个卷积核一组,对输入的三个特征图做卷积,将其结果相加得到输出的一张特征图,而一共有64组卷积核,那么最终会有64张卷积出来的特征图作为输出。图像经过卷积处理后,某些像素点会变亮或暗,这样的话图像的某些特征会变得明显,这也是卷积提取特征的本质,不同的卷积核会显现图像的不同特征,这里的卷积核具体参数是根据训练得到的,不用提前指定。
- BN层
BN层主要做的是一个批量范化,BN层处理即将到激活层的数据,在经过之前Layer处理后的像素矩阵,均值方差会改变,后期进行梯度下降优化时,可能会发生梯度过小或者梯度爆炸,梯度过小训练得就比较慢,梯度爆炸,损失函数发散,所以这里对输入数据做一个范化处理,该层会习得两个参数(γ和β),对输入数据得均值和方差做一个调整,具体运算如下: