网站首页 公文大全 个人文档 实用范文 讲话致辞 实用工具 心得体会 哲学范文 总结范文 范文大全 报告 合同 文书 信函 实用
  • 读书心得体会
  • 培训心得体会
  • 军训心得体会
  • 教师心得体会
  • 工作心得体会
  • 学习心得体会
  • 百花范文网 > 心得体会 > 读书心得体会 > 基于生成对抗神经网络的图像风格快速迁移:基于对抗神经网络的图像修复

    基于生成对抗神经网络的图像风格快速迁移:基于对抗神经网络的图像修复

    时间:2021-08-17 06:04:41来源:百花范文网本文已影响

    基于生成对抗神经网络的图像风格快速迁移 Fast Image Style Transfer Based on Generative Adversarial Networks 摘要 现今,无论是科研还是娱乐,人们对于图片和视频的处理需求越来越大,所以需要更多的处理图片和视频的应用,比如图像风格迁移。对于图像风格迁移这个领域,人类很难快速学习到某种图片风格,而且利用人力在专门软件上处理图片是很耗时间的,所以人们需要可以自动化的快速的迁移方法。

    本文主要是实现了一个可以对图像风格进行快速风格迁移的应用。针对传统图像迁移方法迁移速度慢,复用性弱的缺点,这里使用了一种更新型的神经网络方法——循环一致性生成对抗网络(Cycle-Consistent Generative Adversarial Networks, CycleGAN)。编写代码实现了CycleGAN中的鉴别器和生成器之后,通过神经网络的迭代训练,可以训练出用来进行图像风格迁移的生成器。利用这项技术,本文训练出了7个风格迁移生成器,分别有:梵高,莫奈,塞尚,浮世绘,齐白石,唐寅,山水画。除了实现照片风格迁移,本文还实现了两个相似物体之间的风格互换。一共3种:马与斑马互转,夏季与冬季互转,苹果与橘子互转。

    关键词:
    图像风格迁移;
    快速迁移;
    CycleGAN;
    生成对抗网络;
    鉴别器;
    生成器 Abstract Nowadays, whether it is for scientific research or entertainment, people have an increasing demand for image and video processing, so more and more applications of image and video processing are needed, such as image style transfer. In the field of image style transfer, it is difficult for human beings to learn a certain image style quickly, and it takes time to process images on specialized software with human beings, so people need a fast method of migration that can be automated. This paper mainly realizes an application of fast style migration of image style. Image migration method for traditional migration speed slow, problem of weak reusability here USES a new type of neural network method more consistency - loop generated against network (Cycle - Consistent Generative Adversarial Networks, CycleGAN). After coding the discriminator and generator in CycleGAN, the generator for image style transfer can be trained through the iterative training of neural network. Using this technique, this paper has trained seven style transfer generators, namely: van gogh, monet, Cezanne, ukiyo-e, qi baishi, tang Yin, landscape painting. In addition to the transfer of photo styles, this paper also realizes the style exchange between two similar objects. There are three kinds: the horse turns with the zebra, the summer turns with the winter, the apple turns with the orange. Key words: Image style transfer; Rapid migration; CycleGAN; Generating antagonistic network; Discriminator; The generator 目录 第一章 绪论 1 1.1 研究背景 1 1.2 国内外研究与现状 3 1.3 本文的主要内容 4 第二章 研究方法与原理介绍 5 2.1 生成对抗网络(GAN) 5 2.1.1生成器模型(Generator Model) 5 2.1.2鉴别器模型(Discriminator Model) 6 2.1.3生成对抗网络结构 7 2.1.4 GAN的原理及Loss 8 2.2 GAN的应用 9 2.3 循环一致性生成对抗网络(CycleGAN) 10 2.4 CycleGAN的应用 13 第三章 研究过程 14 3.1 CycleGAN的实现 14 3.1.1 实现CycleGAN的鉴别器模型 14 3.1.2 实现CycleGAN的生成器模型 15 3.1.3 实现CycleGAN复合模型 17 3.2 训练流程算法 18 3.3 实验条件 19 3.4 实验过程 20 第四章 实验结果讨论分析 24 4.1 风格图片效果分析 24 4.2 模型损失分析 26 4.3 和其他风格迁移方法的比较 28 第五章 总结与展望 31 5.1 工作总结 31 5.2 后续工作展望 31 参考文献 33 附录 34 致谢 40 第一章 绪论 1.1 研究背景 想象一下,如果19世纪的荷兰画家梵高来到校园,画下一幅画。那么,在他的脑海中或者在他的绘画风格下,校园的风景会呈现怎样的效果?当然,梵高可不会复活,我们也没有那么强的想象力。所以这就衍生出一项应用——图像风格迁移。

    图像风格迁移(Style Transfer)。顾名思义,就是把一种图片风格转换成另一种图片风格。图片风格如图1-1,每一张图都是不同的艺术风格。要让计算机理解风格是什么都很困难,更不用说把一个图像的风格变成另一种风格。

    图1-1 3种不同的图片风格 想让计算机理解图片风格是什么,科学家做了很多努力。在2000年及之前的时间,那时候还没有图像迁移,只有图片纹理的研究。在2000-2015年之间,图像纹理都是手动建模的,比如《A Parametric Texture Model Based on Joint Statistics of Complex Wavelet Coefficients》[1],其中用到的最重要的一个思想是:纹理可以用图像局部特征的统计模型来描述。有了这个思想之后,通过用复杂的数学公式和模型,科学家可以整理和生成了一些纹理了,但是手动建模很耗费时间。

    纹理生成无论最后生成的纹理怎么样,好不好看,都是纹理生成。而本文的图像风格迁移,在当时,都没有被准确的划分出这个领域,名称都没有。当时的风格迁移研究中,每个风格的算法互相之间没有很多共同点,是各自独立的。例如油画风格的迁移,用了七个不同的步骤去抽取和迁移油画的特征。另一个例子是头像风格迁移,用了三个步骤将一个头像风格样式迁移到另一个样式上。这十个步骤都是各自发展,没有共同点。

    风格迁移得以发展的背后还有游戏的功劳。游戏机从刚发明之初就离不开显卡。显卡最重要的功能就是处理和显示图像。随着玩家对游戏场景的追求,游戏人员希望把游戏做的越来越真实绚丽,这极大的推动了过去20年显卡的研究和发展。这时有人发现,图像计算和神经网络有相似的地方。它们都需要对大量的数据进行单一重复的计算,所以就同样可以利用显卡来加速。于是乎,被研究人员抛弃了十几年的神经网络由于算力的爆炸式增长而重新焕发出了活力,深度学习开始崛起。这时候就开始有人用神经网络的方法去做风格迁移,该领域从此快速发展。可以总结出,如果没有游戏的发展就没有神经网络的崛起,也就没有风格迁移的成熟。

    第一个基于神经网络的图像风格迁移算法由Gatys等人在两篇论文中提出:《Texture Synthesis Using Convolutional Neural Networks》[2]和《A Neural Algorithm of Artistic Style》[3],第一次提出基于深度CNN(卷积神经网络)的图像风格迁移,如图1-2所示。

    图1-2 Gatys方法的图像迁移效果,小图是风格类型 基于深度CNN的神经网络方法相比于传统的非参方法(通过采样图像的像素纹理),会有更好的效果。特征提取不再只是提取一些底层特征,反而能够提取全局的特征。不过Gatys这种方法是直接拿待迁移图片和风格图片进行训练生成。每生成一张风格图片就要训练一次,非常消耗时间。而且还不能对训练参数进行复用,生成下一张就得重新训练参数。

    后来出现了许多比Gatys方法更好的,基于深度学习的图像迁移算法:有固定风格任意内容的快速风格迁移《Perceptual Losses for Real-Time Style Transfer and Super-Resolution》[6],还有任意风格任意内容的快速风格迁移《Meta Networks for Neural Style Transfer》[7]。也有人开始用GAN(生成对抗网络)来生成风格图片,比如有pix2pix和CycleGAN两种方法, CycleGAN就是本文所要使用的方法。

    1.2 国内外研究与现状 风格迁移之前只是研究图片纹理生成,都在2000年及其之前。是用的一些统计模型和复杂的数学公式来描述和生成图像局部纹理特征。在这之后的时间,图像迁移都是基于神经网络来实现的。比如在2015年,由Gatys等人发表的《A Neural Algorithm of Artistic Style》[3],第一次提出基于深度CNN(卷积神经网络)的图像风格迁移。通过神经网络的反向传播算法和梯度下降算法,不断的迭代更新,调整参数,减少损失,最终逼近一个最好的结果。但是Gatys这种方法每生成一张图片就要训练一次,效率很低,模型还不能复用。所以,很多研究人员就开始另辟蹊径,寻找快速的方法。

    比如在2016年由Justin Johnson, Alexandre Alahi, Li Fei-Fei发表的论文《Perceptual Losses for Real-Time Style Transfer and Super-Resolution》[6]。该篇论文解决了前面Gatys方法风格迁移久的问题。李飞飞的方法不像gatys那样直接拿图片和风格图片一起训练,而是先训练了一个前向生成网络模型,等模型训练完成后,可以重复利用,可以用于生成风格图片。这个网络与之前的Gatys的方法相比巧妙很多,是把生成图片从训练中分开了,生成模型可以被复用,训练参数不再是没用的。两种方法的生成效果差不多,但是速度上李飞飞的却比Gatys的提升了数百倍,达到3个数量级,毕竟不再是生成一张就得训练一次。

    2018 cvpr的一篇论文,由Falong Shen等人发表的《Meta Networks for Neural Style Transfer》[7],使用meta转换网络实现多风格转换。该方法解决了以前的网络只能转换某一种风格的缺点。这里的meta网络可以对不同的风格训练出不同的参数。

    近些年,JunYan Zhu等加州大学伯克利分校的研究员提出了一种图像风格转换的技术CycleGAN,取得了很不错的效果,并迅速引起许多关注。CycleGAN是基于GAN的一项技术,利用训练好的生成器,可以把两个风格域的图像相互转换为另一个域。这项技术被研究员应用到了很多领域,可以做图像风格转换,物体转换等等。

    风格迁移的现代史,基本上是由深度学习来书写。最开始的Gatys的方法不会优化网络参数,只会优化生成图,没有复用性,每生成一张就得重新训练一次。后面的Johnson则解决了这个问题,加入了一个转换网络,转换网络训练好了之后,就可以利用这个网络来转换图片,一并解决了复用性和耗时的问题,训练效果也差不多。Falong Shen的多风格转换也差不多,只不过可以有更多选择。这些方法缺点也是有的,生成的风格图片越来越像目标风格图,反而缺失了原有图像的很多细节,越来越不像原图。基于这一问题,利用UC berkeley AI研究所发明的CycleGAN可以解决。利用循环一致性损失来控制生成图和原图的区别,以至于结果在像风格图的同时还不会过度扭曲。还有,CycleGAN是基于两个域的非成对风格图片来训练,优点是收集图片方便,只需要两个域的数量不定的图片集即可,而且风格迁移不再是只学习一张图,而是学习整个域的所有图片,生成的图片像风格域的平均风格。

    1.3 本文的主要内容 正如上两节所写,以往的风格迁移算法也许可以胜任图像风格快速迁移这项任务,但是会出现原图扭曲,内容细节丢失的问题。结果看起来也许还不错,但是和原图已经相差甚远了。所以为了解决这些问题,本文选择了更好的方法--CycleGAN进行风格迁移。

    本文1-3章先是介绍以及实现了CycleGAN,然后训练模型。第4章利用训练好的生成器生成风格图片,分析其结果(包括生成图片效果和losses情况),并用该结果与以往方法进行对比总结。第五章是工作总结。

    第二章 研究方法与原理介绍 2.1 生成对抗网络(GAN) 研究CycleGAN先要理解它的基本结构GAN,因为CycleGAN是GAN的一种拓展。

    生成对抗网络(Generative Adversarial Networks, 简称GANs)是利用卷积神经网络等深度学习方法进行生成性建模的一种方法。生成式建模是机器学习中的一项无监督学习任务,它涉及到自动发现和学习输入数据中的规则或模式,从而使得该模型可以用于生成一些和原始数据集相似的新样例。

    生成对抗网络是一种很巧妙的训练生成模型的方法,它将问题构建为一个包含两个子模型的监督学习问题。两个子模型分别为:生成器模型,鉴别器模型。生成器生成假实例,鉴别器鉴别生成器生成的实例,作分类任务分出真假。每一次迭代,两个子模型都会不断优化自己的能力。生成器不断的生成以假乱真的实例以欺骗鉴别器,而鉴别器也不断的从真实实例中跟生成器生成的假实例做对比,提高自己的鉴别能力。两个模型的训练相当于在一场零和博弈,直到达到纳什均衡,这时候鉴别器只能鉴别出假实例的一半,这也意味着生成器正在生成可以以假乱真的例子。

    2.1.1生成器模型(Generator Model) 生成器模型接受一个固定长度的随机向量作为一个输入,然后输出一个域的实例,比如一张图片。这个向量通常从高斯分布(经常被用于生成噪声源,随机数种子)中作为抽取。简而言之呢,这个向量就是一个随机数数组,没有任何意义,不是一个图像,也不是任何东西,除非由生成器模型提供意义,比如条件生成对抗网络(cGAN)。通过训练完以后,这个高维随机向量的点被关联到目标生成域的某些点,形成了一个数据分布的压缩表示,称为潜在空间,由潜在变量组成。训练结束后,生成器模型可以保存下来,被用于生成目标实例。生成器模型结构如图2-1。

    图2-1 生成器结构 2.1.2鉴别器模型(Discriminator Model) 鉴别器模型其实就是通常的深度学习分类模型。鉴别器从目标域中接受例子作为输入(比如真实例子或者生成器生成的例子),然后做分类任务,预测结果是一个二元标签,真(真实例子)或假(生成的例子)。

    鉴别器模型的结构如下图2-2 图2-2 鉴别器结构 在训练过程中,由于我们只对生成器感兴趣,鉴别器模型最后就被丢弃了。鉴别器通常是另外独自训练,但是训练生成器的时候还需要重新利用回鉴别器,和生成器配合组成复合模型。

    2.1.3生成对抗网络结构 生成式建模是一个非监督学习的任务,前面已经谈到了,然而这里的生成对抗网络的巧妙之处在于,生成式建模变成了一个监督学习的任务,两个子模型一起训练。生成器生成一些和目标数据相似的伪数据,然后提供给鉴别器去做分类任务。

    鉴别器在每一轮的迭代中提高自己的鉴别真伪例子能力,更重要的是,生成器可以通过鉴别器辅助提高自己的造伪能力。换各说法就是,生成器看生成的例子是否有欺骗到鉴别器,不断提高自己的欺骗性。

    打个比喻:生成器就像伪币制造者,不断的制造假币;
    鉴别器就像警察,不断的找出假币,抓住伪币制造者。双方为了赢得这场博弈,伪币制造者得学会如果造出以假乱真的假币,而警察就要不断的提高自己假币鉴定能力。

    这样的话,两个子模型之间存在一个博弈的关系。它们在博弈论的意义上看是对立的,在玩一场零和游戏。零和意味着当鉴别器成功识别出真实样本和虚假样本时,它会得到奖励,模型参数不用调整;
    而生成器会遭到惩罚,更新大量的模型参数。另一方面,鉴别器不能成功识别就会被惩罚,更新大量参数,而生成器会得到奖励,不用更新参数。

    在某个极限下,生成器可以生成完美的目标域的假样本,鉴别器不能区别出生成样本是真还是假(假样本的识别率为50%)。这就正好是一个最理想的情况了,这种情况在博弈论中叫纳什均衡,不过得到可以使用的生成器不一定非要到达那个极限。可以在训练途中输出过程情况,看生成的效果来判断何时停止。生成对抗网络的架构如下图2-3。

    图2-3 GAN结构 2.1.4 GAN的原理及Loss 我们先假设一个分布P_data(x)为真实图片集。其中的x可以理解成一个向量,是真实图片集中的一张图片,设P_data是这类向量集合的分布。我们需要生成一些也在P_data(x)中的分布的图片,如果直接就在这分布,是还不能够的。

    设一个分布P_G(x;θ)为现有生成器生成的分布,θ是这个分布的参数,可以控制这个分布。我们想要计算一个似然P_G(xi;θ),xi是取自真实分布中{x1,x2,…xm},所以在生成模型中的似然L就是 (1) 让生成器最大概率的生成一些真实图像就相当于最大化这个似然L,是一个最大似然值估计的问题,所以我们需要找到一个θ来最大化这个似然。

    要找一个合理的θ,我们可以把P_G(x;θ)当作一个神经网络。随机取一个向量z,让它通过G(z)=x生成器,就可以生成图片x。我们现在要取一组样例z,因为这组z是符合某个分布的,那么通过G(z)就可以生成一个分布P_G。之后再把这个分布与真实分布P_data进行比较就可以更新θ了。

    有了非线性激活函数的神经网络,就可以拟合任意函数,分布也是一样的。所以,为了学习到一个很复杂的分布,我们可以用高斯分布取样去训练一个神经网络。

    GAN的贡献在于,它提供了一个方法可以找到更接近的分布,如下面的公式:
    (2) 这个公式的G,D分别表示生成器和鉴别器。D(x)表示的是一个概率,区间在0到1,表示是真实分布的概率,显然,越接近1就表示越真实,越接近0就表示越假。等式右边的第一个式子的意思是对真实图片的概率,第二个式子是对生成图片的反概率。鉴别器的任务就是让这个值V(G,D)尽可能的大,意义是对真实图片的判断尽可能接近1,对生成图片的判断尽可能接近0。生成器则相反,让这个值尽可能的小,意思就是让鉴别器犯错,对真实图片的判断远离1,对生成图片的判断远离0。所以生成器和鉴别器是在进行一场互相拉扯的最大最小值的博弈游戏,最大最小值公式如下:
    (3) 用该公式作为神经网络的loss,最终会训练出θ参数比较好的生成器。

    2.2 GAN的应用 在计算机视觉领域中,使用深度学习方法的一个最主要的优势就是在一项叫数据增广的技术上。数据增广使得模型表现得更加的好,包括提高了模型轻巧度和提供了正则化影响。生成器通过生成新的,人工合成的,但是及其相似的样本给模型训练。对于图像数据来说,这些技术是原始的,涉及到训练数据集中现有图像的裁剪,翻转,缩放和其他简单转换。成功的生成式建模为数据扩充提供了一种可选的、可能更具体于领域的方法。事实上,数据增广是生成式建模的简化版本,尽管很少这样描述。

    在复杂的领域或数据量有限的领域,生成式建模为建模提供了更多的训练。

    GANs已经在诸如深度强化学习等领域的用例中取得了很大的成功。GANs的有趣、重要和需求进一步研究的原因有很多。Ian Goodfellow在他的2016年会议主题和相关技术报告NIPS 2016 Tutorial: Generative Adversarial Networks[8]中概述了其中的一些。在这些原因中,他强调了GANs成功地建模高维数据、处理缺失数据的能力,以及GANs提供多模态输出或多个貌似合理的答案的能力。GANs最引人注目的应用可能是针对需要生成新示例的任务的条件GANs。

    这里,Goodfellow列举了三个主要的例子。图像分辨率增强:生成高清图片。创造生成艺术:创造新的艺术图片,素描,画作等等。图像翻译:图像域与域之间的转换。比如夏天与冬天的转换,白天与黑夜的转换等等。

    GANs被广泛研究、开发和使用的最引人注目的原因可能是它们的成功。GANs能够生成如此逼真的照片,以至于人们无法分辨出它们是真实生活中不存在的物体、场景和人物。对于他们的能力和成功来说,“大吃一惊”还不是一个充分的形容词。

    如图2-4,生成人脸越来越逼真清晰。

    图2-4 不同时期GAN生成人脸的效果 2.3 循环一致性生成对抗网络(CycleGAN) CycleGAN是GAN的一种拓展。通常GAN模型只包含两个模型:生成模型,判别模型,但是CycleGAN涉及到4个模型:两个生成器,两个判别器。CycleGAN主要用于图像到图像的翻译,有另一种GAN方法叫Pix2Pix的也可以用作图像翻译,但是要利用成对数据进行训练。而这些成对数据一般来说很难去准备,甚至是不可能的。然而CycleGAN这项技术可以使用非成对的数据集训练,准备数据比较简单,只需要准备两个域数量不等的数据就可以了。

    为了解决以前方法的图像扭曲和细节缺失的问题,CycleGAN引入了一个叫“循环一致性(cycle consistency)”的新概念,意思是类型a的一张图片经过生成器G(AtoB)生成另一种类型b,这张b再通过生成器G(BtoA)转换回类型a,看看是否和原来的相似。通过控制这个过程的损失,就可以解决细节丢失问题。生成的图片既要和另一种类型相似,又不会完全变成另一张图片,保留了原有的特征。

    a变b再变回a,顾名思义为一条“循环”。为了训练一个生成器往往需要另一个生成器的帮助,所以两个生成器就得一起训练。最后的训练就包含了两条循环,四个模型。

    CycleGAN的架构显然很复杂,因为它涉及到4个模型。模型除了正常的判别损失之外,还加上了循环一致性损失。建立CycleGAN大体上和传统GAN一样,也是生成器和鉴别器的组合,只是实现循环一致性损失有点复杂。

    循环一致性网络结构可以很好用以下的图解释。如图2-5和图2-6。

    图2-5 一个单向的CycleGAN(正向)。从域a到域b。

    图2-6 一个单向的CycleGAN(反向)。从域b到域a。

    其中每个方向的循环一致性损失如下:
    l 正向循环一致性损失(Forword Cycle Consisitency Loss):
    - 域a的数据A通过G(AtoB),产生^B - ^B通过G(BtoA),产生^A - 比较A和^A 同理反向:
    l 反向循环一致性损失(Backword Cycle Consisitency Loss):
    - 域b的数据B通过G(BtoA),产生^A - ^A通过G(AtoB),产生^B - 比较B和^B 理解了单向循环那么整体的CycleGAN就好理解了。如下图出自《Unpaired Image-to-Image Translation using Cycle-Consistent Adversarial Networks》[9]。

    图2-7 CycleGAN模型 (a)里面包含了两个映射函数(生成器)G:XàY和F:YàX,以及鉴别器DX和DY,为了更好的规范映射,就引入了两个循环一致性损失。就是如果我们从一个域转换到另一个域,再转回来,这个结果应该和原来相差无几。如(b)的正向循环一致性损失:xàG(x)àF(G(x))≈x和(c)的逆向循环一致性损失yàF(y)àG(F(y))≈y。

    其中 XàY的判别器损失公式为:
    (4) 同理,YàX的判别器损失为:
    (5) 两个生成器的循环一致性损失加起来为:
    (6) 最终网络的损失为:
    (7) 2.4 CycleGAN的应用 CycleGAN可以做出很多令人眼前一亮的应用,只要是有两个域的数据集,这个网络就可以训练出来两个域相互转换的生成器。以下介绍几个大方向的应用。

    第一个是风格迁移,也是本文的任务。风格迁移是指从一个领域学习艺术风格(通常是绘画),并将其艺术风格应用到另一领域(比如照片)。比如说可以把照片转换为莫奈,梵高,塞尚,浮世绘等风格。

    第二个是对象转换。对象转换是指把一个类(如斑马)转换成另一个类(斑马)。有很多具体场景,比如苹果转橘子,猫转狗,人类性别变换,换脸等等。这种变形是讲得通的,因为以上的例子,两个类除了颜色和一些细节外,大小和结构都很相似。

    第三个是季节变换。季节变换理论上也可以归类为风格迁移吧,主要是将一个季节(如夏季)拍摄的照片变换成另一个季节(如冬季)。也可以理解为一个季节拍摄的照片的风格迁移成另一个季节的风格。

    第四个是从绘画中生成照片。顾名思义,就是把一副绘画变成一张真实感的照片,其实就是风格迁移的逆过程。在CycleGAN的风格迁移训练中,同时也进行了这项绘画转实景的工作。

    第五个是图像增强。图像增强指用某种方式改善原有的图片,比如可以提高照片的景深,或者提高图像的分辨率。

    第三章 研究过程 研究学习了CycleGAN的结构和原理之后,现在就要着手实现。3.1节分三小节分别来实现鉴别器,生成器和复合模型。3.2节定义实现了CycleGAN的训练流程算法。3.3节介绍了实验的条件,包括编程语言,深度学习框架,还有训练的机器配置等等。3.4节开始实验。

    3.1 CycleGAN的实现 3.1.1 实现CycleGAN的鉴别器模型 一般的鉴别器模型接收图片然后只输出一个true或者false,对一些要求高分辨率高细节保留的图像领域中并不适用。为了解决这个问题,这里的鉴别器采用PatchGAN来实现,与一般的鉴别器不同的是,PatchGAN输出的是一个N*N的矩阵。这个矩阵中的每一个输出元素,比如a(i,j),是true或false。这个a(i,j)实际上对应着原图中的一个比较大的感受域,换句话说就是一个元素对应着一个n*n尺寸的patch,所以这种结构就被称作PatchGAN。说到底PatchGAN也就是一个卷积网络,只不过输出是一个矩阵。

    这里的鉴别器我们使用70*70尺寸的PatchGAN,意味着对原图分隔成了很多70*70像素大小的小图片,然后再训练,所以对细节有更好的提取能力。这里的70是已经被前人探索出来比较好的感受域大小,原图70*70大小的感受域对应着输出的一个元素。模型的结构采用Conv2D层,InstanceNorm层,LeakyReLU层 组成各个层,用4*4的卷积核(filters)和2*2的跨度(stride)。在风格迁移中一般使用InstanceNorm作归一化,使用这种归一化不仅可以加速模型收敛,并且还可以保持每个图像实例之间的独立。LeakyReLU是激活函数ReLU的变体,效果更好。而且,相比于sigmoid和tanh,LeakyReLU在使用梯度下降算法时,收敛速度更快。

    结构细节在该论文附录中有记录《Unpaired Image-to-Image Translation using Cycle-Consistent Adversarial Networks》[9]。按照论文,鉴别器的结构为:C64-C128-C256-C512,这几层卷积隐藏层对原有图像进行特征提取,减小尺寸,每层之间用LeakyReLU激活函数激活。PatchGAN之后还有一层stride为1*1的卷积层C512和最后一层stride为1*1,通道数为1的线性激活输出层。

    图3-1 鉴别器网络结构 3.1.2 实现CycleGAN的生成器模型 CycleGAN的生成器网络很深,因为是要更好的处理高分辨率图片。更深的网络能够更好的提取图片特征。但是随着网络深度增加,会出现网络退化的问题(degradation),性能会越来越差。于是这里的网络添加了残差网络residual network(ResNet)来解决网络退化的问题。残差网络通过建立残差连接使得优化更容易。如下图。图右侧的曲箭头链接就是残差连接,一个残差连接中的几层网络组合为一个残差块。

    图3-2 残差块与残差链接 根据论文附录《Unpaired Image-to-Image Translation using Cycle-Consistent Adversarial Networks》[9]中的配置。生成器的结构由3个部分组成:卷积提取特征部分,残差网络部分,反卷积生成图片部分。

    卷积提取特征部分有3层:c7s1-64层,卷积核大小为7*7,stride为1*1,通道数为64的卷积层;
    d128层,卷积核为3*3,stride为2*2,通道数为128的卷积层;
    d256层,卷积核为3*3,stride为2*2,通道数为256的卷积层。

    残差网络由残差块组成,模型中一共用了9个残差块,每个残差块有2层,2层都是3*3大小的卷积核,1*1的stride,256的通道数。

    反卷积部分有3层:u128层,卷积核大小为3*3,stride为2*2,通道数为128的反卷积层;
    u64,卷积核大小为3*3,stride为2*2,通道数为64的反卷积层, 该层已经把特征放大到256*256大小;
    c7s1-3,卷积核大小为7*7,stride为1*1,通道数为3的卷积层,该层再卷积一遍把通道数变为3。

    综上,生成器模型网络结构为:c7s1-64,d128,d256,r256*9,u128,u64,c7s1-3。如下图。

    图3-2 生成器网络结构 3.1.3 实现CycleGAN复合模型 实现CycelGAN的复合模型是该工作的难点,因为要涉及到多个模型。在实现了生成器模型之后还不能被训练更新权值,需要鉴别器的配合才能更新,这也是一般的GAN的生成器的做法。但是这里CycleGAN有点复杂,更新一个生成器的权值不仅仅要和鉴别器配合,还需要和另一个生成器配合。所以一共是三个模型组合成一个复合模型(两个生成器,一个鉴别器)。

    复合模型一共涉及4个损失:对抗损失(Adversarial loss), 同一性损失(Identity loss),前向循环损失( Forward cycle loss),反向循环损失( Backward cycle loss)。

    对抗损失和一般的生成对抗模型一样,用来判断图片是否转换为目标域风格。损失通常用L2损失或者用均方差(mse)。

    同一性损失,通过把目标风格域的图片送到生成器,看是否有变化,是否还是同原来的图片相差无几,变化越小越好,这个损失是保证生成器尽量不改变形状,只改变特征。

    前向和反向损失,在第二章的图2-5和图2-6描绘的很形象,源图像通过生成器后的生成图像,再通过另一个生成器,生成回原来域的风格图片,判断最后的图片是否和原来域的风格一样。后面三个损失都是用的平均绝对误差(mae)。

    复合模型的结构很复杂,作图出来非常大,所以下面用文字加箭头代替结构图,分别讲述复合模型每个损失的结构。

    其中:G-AtoB(A域生成B域)表示生成器A2B;G-BtoA(B域生成A域)表示生成器B2A;DA,DB分别表示鉴别器A,B。DomainA,B分别表示A,B域。

    G-AtoB的复合模型:
    Adversarial loss: Domain A à G-AtoB à Domain B à DB à [real/fake] Identity loss: Domain B à G-AtoB à Domain B Forward Cycle loss: Domain A à G-AtoB à Domain B à G-BtoA à Domain A Backward Cycle loss: Domain B à G-BtoA à Domain A à G-AtoB à Domain B G-BtoA的复合模型:
    Adversarial loss: Domain B à G-BtoA à Domain A à DA à [real/fake] Identity loss: Domain A à G-BtoA à Domain A Forward Cycle loss: Domain B à G-BtoA à Domain A à G-AtoB à Domain B Backward Cycle loss: Domain A à G-AtoB à Domain B à G-BtoA à Domain A 3.2 训练流程算法 用于训练的CycleGAN各个部分模型都已实现,接下来要利用上面实现好的模型,设计实现一个训练流程算法,更新各个模型的权值。

    首先,训练模型需要数据,一方面是真实图片集的数据,一方面是生成器生成的数据。所以这里定义了两个函数:generate_real_samples(),从真实图片集中提取图片;
    generate_fake_samples()利用生成器生成的风格图片。

    接着,要定义单次迭代的训练逻辑。这里设计成先训练正向循环,再训练后向循环,也就是先训练生成器-A2B和鉴别器-B,后训练生成器-B2A和鉴别器-A。利用train_on_batch()函数可以实现单次迭代的训练。一次迭代模型训练顺序如下:
    1. 训练更新 生成器-A2B 2. 训练更新 鉴别器-B 3. 训练更新 生成器-B2A 4. 训练更新 鉴别器-A 最后,我们还需要确定迭代总次数n_steps。n_stept由几个值推算出来的:训练轮数n_epochs,单次训练批大小n_batch,每轮训练的批数bat_per_epo。一轮训练指的是训练集被全部训练一次。bat_per_epo也指的是一轮训练下来的总迭代次数,为: 训练集大小 / 单次训练批大小。所以总的迭代次数由单轮的迭代数乘以轮数,n_stept = bar_per_epo * n_epoch。训练同时还打印每次迭代的loss,以及每隔1轮生成保存一张图片以作后面分析,还有每隔5轮就保存一遍模型。

    Cyclegan训练算法伪代码如下:
    算法1:CycleGAN训练流程算法 输入:鉴别器模型A,鉴别器模型B,生成器模型A2B,生成器模型B2A,复合模型A2B,复合模型B2A,AB域的数据集 输出:无 for 总迭代次数n_stept do 从真实数据集中产生训练数据批generate_real_samples() 利用数据批通过生成器生成伪数据(生成图片)generate_fake_samples() 训练更新复合模型A2B权值train_on_batch() 训练更新鉴别器模型B权值train_on_batch() 训练更新复合模型B2A权值train_on_batch() 训练更新鉴别器模型A权值train_on_batch() 输出每个模型的loss if 迭代次数为1轮的次数 then 生成图片并保存 end if if迭代次数为5轮的次数 then 保存模型 end if end for 3.3 实验条件 开发代码的条件并不算高,一般的笔记本就能胜任。以上模型和训练流程均由python语言编写,代码编辑器用了pycharm和jupyter notebook。网络模型利用python的tensorflow和keras框架进行搭建。

    训练条件是实验的难点。训练深度学习模型,往往需要很高的运算资源,和很长的训练时间。运算资源指的是高性能的GPU资源,和大内存的电脑,没有这些资源,完成这个实验几乎是不可能的,可能要训练几个月才结束。为了尽可能快的完成这个实验,寻寻觅觅了很多方法。权衡经济和效率,最后选择了在淘宝上租用卖家的深度学习主机,远程操控。虽然价格还是很昂贵,但是对比租用阿里云,淘宝的还是便宜太多,只需50元一天。而且卖家的主机已经配置好了环境,就算中途出现什么配置的小问题,可以和卖家技术员讨论解决。

    以下是主机的配置:
    系统:Ubuntu 16.04 CPU:Intel E5-2689@2.60GHz八核 内存:32G 存储空间:2T GPU:Nvidia RTX2080Ti 11G显存 为了能再更快的完成任务,我租用了两台同样配置的主机,前后用时8天训练完几个任务的所有模型。

    3.4 实验过程 进行风格迁移实验前,首先要准备数据集。基于CycleGAN的风格迁移需要非成对的两个数据域,所以需要准备一份风格图片数据集和一份自然景观图片数据集。通过网络上的开源图片集,收集到了几种风格图片:梵高,莫奈,塞尚,浮世绘。如下图。

    图3-3 4种绘画风格 这里作为拓展创新,又收集整理了3种中国风:齐白石,唐寅,山水画。如下图。

    图3-4 3种中国风绘画风格 自然风景图片如下。

    图3-5 自然景观图片集例子 整理好图片之后,就可以开始训练了。通过ssh远程连接控制linux主机,利用主机上已经配置好的jupyter notebook进行实验。该软件可以很方便的在浏览器上开发代码和运行代码,还可以上传下载文件,如下图3-6。把代码复制到浏览器中,接着就进行模型的训练了。

    图3-6 jupyter notebook页面 在jupyter的代码编辑界面编辑好图片的地区路径之后,就可以开始运行代码了,训练轮数为100epoch。为了能实时了解训练情况,每一轮训练完,输出生成图片,展示训练过程效果。每一次迭代都输出每个模型的loss,实时监视模型情况(如图3-7),如果出现模型坍塌可以及时发现及时重开。每5轮保存一遍生成器模型,供以后挑选出好的生成器。

    图3-7 训练过程的loss情况 待训练结束后,可以从生成的过程图片中评选出最好的生成器,使用该生成器可以生成风格图片。如下图,这是使用梵高风格生成器生成的风格图片。更多风格图片请见附录。

    图3-8 梵高风格迁移效果图 运用同样的模型配置,我也做了3个图像翻译的任务以作拓展创新:夏天变冬天,马变斑马,橘子变苹果。效果如下图,更多转换效果见附录。

    图3-9 相似物体的风格互换 第四章 实验结果讨论分析 4.1 风格图片效果分析 实验结果是生成图片,要对结果进行分析,最简单的就是直接肉眼看,看结果是否达到要求,是否有比较好的转换效果。

    风格图片的效果是否好,用人的肉眼来判断很主观,但通过肉眼看,还是可以基于几个方面对生成图像进行了评分。这里定义了一个5分制:0-1分:图像模糊且损坏;
    2分:图像完整,但是风格无明显转换;
    3分:图像完整,风格有较明显转换;
    4分:图像完整,风格转换明显;
    5分:图像完整,风格转换明显且美观。不同分数对应的效果如下。(给出每种分数对应图片,以作参考) 图4-1 打分示例图 因为训练时每5轮epoch就保存一次模型,又用该生成器生成过程图片以供评估。所以最后每个任务有20个生成器。(7个风格迁移任务,总共140个模型)。每个任务的所有模型打分情况如下表。

    表4-1 7个绘画风格迁移模型评分表 模型编号 梵高 莫奈 塞尚 浮世绘 齐白石 唐寅 山水画 1 3.5 3.5 3.5 4 3.5 2 3 2 3.5 2 3.5 4.5 3.5 2 0 3 3 4.5 3 3 4 4 3.5 4 4 4 3 0 3 4 2.5 5 2 3.5 4 4.5 2 4 3.5 6 3 4 2.5 4.5 0 2 4 7 3 3.5 3 4.5 2 4 3.5 8 3 4.5 4 5 0 4 3 9 4 4 3.5 5 0 4.5 2 10 4 4 4 5 1 4.5 2 11 4 3 4 4 0 4.5 2 12 3.5 3 5 4 0 3 2 13 3 3 5 4.5 0 5.5 2 14 3.5 4 2 5 0 5 2 15 4 3.7 3 5 0 3 2 16 4.5 3.5 3 4.5 0 4.5 2 17 4 3 4 4.5 0 4.5 2 18 3 3.5 4 4 0 4.5 2 19 4.5 3 3.8 4 0 4 2 20 4.5 3.5 4.8 3 0 4.5 2 表中加粗分值是选出来的比较不错的模型,可用于生成风格图片。

    可以看出,分数并不是很有规律,而且并不是越训练到后面,肉眼效果就越好。不过就这样的训练已经可以训练出足够多个效果不错的生成器了。另外,齐白石和山水画的效果都不是很好,可能是由于图片数据缺乏导致的。这两个风格在网络上的画作资源不是很足,齐白石只收集了27张,山水画只收集了31张。

    利用同样的训练和评分方法,我对拓展的3个对象转换任务的生成器也进行了打分。这里的模型是双向的,所以一共是6个模型,3个AtoB,3个BtoA。打分情况如下表。

    表4-2 3个相似物体风格互换模型评分表 夏转冬 马斑马 苹果橘子 模型编号 A2B B2A A2B B2A A2B B2A 1 2 2 0 0 3 2 2 3 4 0 0 3 1 3 3 2 2 2 2 0 4 3.7 2 2 1 2 0 5 3.7 3 0 2.5 1 2 6 3.7 2 2 3 1 2.5 7 3.7 4 3 3.5 2 2 8 3 4 3 2 2 3 9 2 3.5 4 2 3 2.5 10 2 3.7 4 1 3 3 11 3.7 3 3.5 1 1 2 12 3 3 2.5 1 1 3 13 3.5 2 2 2 2 3 14 3.5 4 2 3.5 2 3.5 15 2 3.5 4 3 2 0 16 2 3 3.5 3.5 3 1 17 2 3.7 3.5 2.5 2.5 2 18 3 3.7 2 2 3 2.5 19 4 4 0 0 2.5 2.5 20 4 3 0 2 2.8 3.5 4.2 模型损失分析 分析实验结果还有另一个比较客观的方法,观察模型训练过程的损失变化。训练途中,每个模型的训练损失都已被记录下来,并作成了折线图,如下图4-(2,3,4,5,6)所示,分别为所有任务的losses折线图(一共10个任务,包括风格迁移和对象)。

    其中,g_loss1表示生成器G-AtoB的损失,g_loss2表示生成器G-BtoA的损失,这两个都是属于复合生成器模型的损失。复合模型的损失如3.1.3节中所述,由4个损失组成:对抗损失,同一性损失,前向和反向损失。损失越小,生成器模型越好,表明生成图片越像风格图片,而且还保留原有图片的细节越好。

    dA_loss1和dA_loss2表示鉴别器A分别对真实图片A和生成图片A的损失;
    同理,dB_loss1和dB_loss2表示鉴别器B分别对真实图片B和生成图片B的损失。损失越小,鉴别器越好,表明越能更好的区分出真实图片和生成图片。

    图4-2 梵高和莫奈风格任务的losses 图4-3 塞尚和浮世绘风格任务的losses 图4-4 齐白石和唐寅风格任务的losses 图4-5 山水风格,苹果橘子互换任务的losses 图4-6斑马马互换,夏与冬互换任务的losses 从这些losses图中可以看出在100轮epoch训练之后,每个任务的各个鉴别器loss都非常快的下降到很低,最后基本在0-0.5之间摇摆。看得出鉴别器的效果很容易被训练好。

    各个任务的生成器loss大约都在40轮epoch之后下降到比较低,40-100轮epoch的loss都在2-4之间摇摆,并且还有下降的趋势。看得出来,训练100轮也可以训练出不错的生成器了,但是loss还能下降,说明实验还有改进空间,可以增多训练轮数。除了单纯的增加训练次数,还可以对训练参数进行修改,如下。

    “…We train our networks from scratch, with a learning rate of 0:0002. In practice, we divide the objective by 2 while optimizing D, which slows down the rate at which D learns, relative to the rate of G. We keep the same learning rate for the first 100 epochs and linearly decay the rate to zero over the next 100 epochs. Weights are initialized from a Gaussian distribution N (0; 0:02).” Unpaired Image-to-Image Translation using Cycle-Consistent Adversarial Networks, 2017 根据这篇论文的做法:一共训练200轮,在前100轮epoch中保持不变的学习率(正如我现在所作),然后在后面100轮epoch中把学习率逐渐衰减到0。这种做法也会把各个模型的loss降到更低。

    但是由于实验资源有限(时间和金钱),很难做到200轮的训练。不过在前100轮的训练中,已经能训练出用于风格迁移的比较好的生成器了。

    4.3 和其他风格迁移方法的比较 在第一章中已经介绍了风格迁移的历史以及基于神经网络的风格迁移方法。对非神经网络的方法来说没有可比性,这里只对神经网络的方法进行比较,每个方法都是对256*256图像进行风格迁移。这里调查3个维度用于评估每个方法:生成速度,美观度,图片数对迁移风格数(一对一,一对多,多对一还是多对多)。经查阅对应方法的文献,下面整理出了每个方法的情况。

    表4-3 本文方法与以往方法的比较 生成一张图片的平均时间 待处理图片--生成风格数 Gatys的方法 9.52s 一对一 李飞飞的方法 0.015s 多对一 Falong Shen的方法 0.015s 多对多 本文的CycleGAN 0.015s 多对一 由于gatys的方法每生成一个图片就要训练一次,导致不能快速生成图片。而后3个方法都是利用训练好的生成器来生成所以速度都很快,生成一张图片都少于0.5s,还可以同时生成多张风格图。

    前三种方法理论上风格效果看上去差不多,而且看起来还挺奇幻且好看,但是已经和缺失了原图像的很多细节,图像已经扭曲了。而本文的方法能够在保持原图细节的同时,还能很接近风格图,如下图4-7。

    图4-7 梵高风格下不同方法的风格迁移效果 可以看出本文的方法更多的保留了原图的细节,但是也很像梵高的油画风格。

    本文的方法不像其它3种方法那样只用一张风格图片训练,而是利用该风格的一个图片集的所有图片。所以生成的图片不会只像某一张图,而是像该风格图片集的平均外貌和共有的风格。比如上图的前3个方法的迁移效果就只像梵高的《星月夜》,这样只能称为图像变换不能叫风格迁移了。真正的风格迁移应该像本文的方法,学习数据集的所有图片,得到一个平均的共同的风格然后迁移。

    最后总结一下本文方法用作风格迁移的优缺点,优点:速度快;
    可以生成多张风格图片;
    生成图片保留原有细节;
    生成图片外貌不会单一化,而是像风格的平均外貌。缺点:模型大,训练时间长,不能同时生成多个风格。

    第五章 总结与展望 5.1 工作总结 本次毕设的工作是利用CycleGAN这种生成对抗网络来做图像风格快速迁移。选择这项技术之前,查阅了很多做风格迁移的技术,在这个领域中各个方法都各有利弊。选择这项技术是因为它对比以往方法有很多好处,解决了很多问题,一方面生成风格图片快,另一方面就是它迁移后的图像不会缺失原有的细节。

    通过不断的查阅学习CycleGAN相关的文献和书籍后,在第一章中交代了风格迁移的历史背景以及研究的主要内容;
    第二章中讲述了GAN和CycleGAN的原理以及应用;
    在第三章中讲述了如何实现CycleGAN和模型的训练算法;
    在第四章中,对结果进行了分析并与以往方法进行了对比。

    在本次工作中,还遇到了许多困难。做深度学习的很多资料文献和书籍都比较少,而且一般都是全英的。最后是靠着平时英语基础和翻译软件慢慢搞懂这项工作的原理的。编写代码也挺复杂,需要掌握一些深度学习的框架,最后也是一点点学会,编写好代码了。到了运行代码,训练模型阶段的时候,更是愈发艰难。CycleGAN的模型很大,要训练4个子模型。一开始利用学校和同学的高配置电脑运行,以为应该够用,没想到训练也是龟速进行。最后寻寻觅觅找到淘宝卖家的远程主机,租了两台深度学习主机,GPU是Nvidia RTX2080Ti。最后停停走走训练了8天终于跑完所有程序。

    5.2 后续工作展望 CycleGAN本身就有许多不足组要改进,有很多文献也提供了很多改进的思路,模型最终效果也比原结构的效果有提升,后续可以学习这些方法来优化。这里用100轮epoch也达到了很好的效果,如果按照CycleGAN原文献的做法,用学习率衰减的另外多出的100轮epoch训练,效果可能还更好,不过这就需要大量运算资源和时间去实现了。原文献训练模型时,投喂图片操作是随机选择图片的。这里也采用了同样的方法,但是这样不能保证所有图片都被训练到。如果写个图片生成器把所有图片都迭代一遍,每张图片都被训练到,效果可能也会不错。

    除了改进原有工作,后续还有很多有用且好玩的图片翻译应用可以用CycleGAN来实现。比如换脸,黑白图转彩色图,卫星遥感图转地图风格,去除图片的某个物品,往图片中添加某个物品,修复相片,图片增强等等等等。这些都是属于图片到图片翻译的工作,可以用CycleGAN(需要非成对数据)来实现,也可以用Pix2Pix(需要成对数据,难以获取,但是效果更好)来实现。还有,既然可以翻译图片,那翻译视频也行,的确现在有很多对视频风格进行转换的工作了,还有对视频中的人物进行换脸,黑白影片转彩色等等。如果迁移效果够迅速,还可以做成视频的实时风格转换。完成这些新颖的应用,就不是单纯使用CycleGAN了,还需要另外很多的技术了。

    参考文献 [1]Javier Portilla, Eero P. Simoncelli. A Parametric Texture Model Based on Joint Statistics of Complex Wavelet Coefficients[J]. International Journal of Computer Vision, 2000, Vol.40 (1) : 49-70. [2]L. A. Gatys, A. S. Ecker, M. Bethge. Texture synthesis using convolutional neural networks[J]. International Conference on Neural Information Processing Systems. MIT Press, 2015 : 262-270. [3]L. A. Gatys, A. S. Ecker, and M. Bethge. A Neural Algorithm of Artistic Style[J]. Computer Science, 2015. [4]L. A. Gatys, A. S. Ecker, and M. Bethge. Image style transfer using convolutional neural networks[J]. CVPR, 2016. [5]L. A. Gatys, M. Bethge, A. Hertzmann, and E. Shecht-man. Preserving color in neural artistic style transfer[Z]. arXiv preprint arXiv:1606.05897, 2016. [6]Justin Johnson, Alexandre Alahi, Li Fei-Fei. Perceptual Losses for Real-Time Style Transfer and Super-Resolution[Z]. arXiv preprint arXiv:1603.08155v1, 2016. [7]Falong Shen, Shuicheng Yan, Gang Zeng. Meta Networks for Neural Style Transfer[Z]. arXiv preprint arXiv:1709.04111v1, 2017. [8]I. Goodfellow, J. Pouget-Abadie, M. Mirza, B. Xu, D. WardeFarley, S. Ozair, A. Courville, and Y. Ben-gio. Generative adversarial networks[J]. In NIPS, 2016. [9]J. Zhu, T. Park, P. Isola, A. A. Efros. Unpaired Image-to-Image Translation using Cycle-Consistent Adversarial Networks[Z]. arXiv:1703.10593v4 : 2-3,18. [10]冼宇乔, 谢瑞麟. 基于CycleGAN的艺术风格迁移[Z]. 中山大学,2018. [11]彭鹏. 基于CycleGAN的图像风格转换[D]. 电子科技大学,2019. 附录 更多风格迁移效果如下:
    梵高,莫奈,塞尚,浮世绘风格 中国风:齐白石,唐寅,山水水墨画 更多图像翻译应用(对象转换)效果如下:
    夏天与冬天互换 马与斑马互换 苹果与橘子互换

    相关热词搜索:神经网络 迁移 对抗 基于生成对抗神经网络的图像风格快速迁移 基于对抗神经网络的图像修复 智能控制第四版刘金琨

    • 范文大全
    • 说说大全
    • 学习资料
    • 语录
    • 生肖
    • 解梦
    • 十二星座