刘华超,张俊然,刘云飞
四川大学 电气工程学院,成都610065
生成对抗网络(Generative Adversarial Network,GAN)[1]是Goodfellow 等人在2014 年提出的一种网络,目前已经成为深度学习领域最为重要的研究方向之一。该技术主要应用于图像超分辨[2]、风格迁移[3]、图像分割[4]、文本到图像的生成、自然语言生成[5]等领域。GAN 基于博弈论中的二人零和博弈思想,其中博弈的双方是GAN中的生成器和判别器。生成器的作用是根据输入的随机噪声生成一个类似真实训练数据的样本。判别器的目的是区分真实数据和生成数据。因此为了在博弈中胜出,生成器和判别器均需提高自己的生成和判别能力,最终目的是寻找生成器和判别器之间的纳什均衡[6]。基于此原理,生成对抗网络能够使生成图像接近真实图像。
最近几年,众多学者根据不同的应用场景提出了多种GAN 的改进算法。Mirza 等人在生成器和判别器中加入额外信息作为条件变量指导生成过程的条件生成对抗网络[7],从而可以根据输入条件的不同生成相应类型的图片。Radford 等人将CNN(Convolutional Neural Network)与GAN融合提出了深度卷积生成对抗网络[8],使得模型训练更加稳定,生成图像更加多样化。Arjovsky等人使用Wassertein 距离衡量生成数据分布和真实数据分布之间的距离,从而提出了Wassertein 生成对抗网络[9],提高了训练过程的稳定性。Zhu 等人使用双向GAN 提出了循环一致生成对抗网络(CycleGAN)[10],从而可以控制模型的学习。
CycleGAN 相较于传统的生成对抗网络,主要有两点改进:(1)传统生成对抗网络的输入为随机噪声,因此只能随机生成图片,从而无法控制生成图像的质量。CycleGAN 将输入改为给定的图片数据,从而控制图像生成。(2)过去图像和图像之间的转换,如灰度图到彩色图、图像到语义标签、白天图像到夜晚图像等都需要成对的训练数据,然而在现实生活中,成对数据的获取是困难且昂贵的。而CycleGAN可以实现在输入图像到目标图像之间的转换且不需要成对的训练数据。CycleGAN的主要原理是,在GAN 的对抗损失基础上引入循环一致损失函数[11]。其中对抗损失控制生成图像接近目标图像,循环一致损失用于保留输入图像的内容结构和目标图像的特征。在生成图像时,通过训练寻找多个特征域的潜在联系,从而根据输入图像转换相关域。然而在转换程度未被约束情况下,CycleGAN 的生成结果会存在明显的无关域特征任意变化的缺点。
文献[12]在无监督图像跨域转换时,其混合损失函数中包含了转换自身的正则化项,使得生成图像既能够很好地保存自身信息,又可以达到不错的效果。采用该思想,本文基于CycleGAN 的原损失函数,增加了特征损失。该损失能够约束生成图像的转换,更好地保留无关域的特征和转换相关域,而且图像的质量评估测试结果显示生成图像的质量提升明显。同时为了进一步研究特征损失带来的影响,本文通过调整特征损失的比例超参数,分析了各部分损失函数的变化和对生成图像质量的影响,并给出了特征损失的比例超参数选取策略。
CycleGAN 模型的目的是实现域X 和域Y 之间的相互转换。如图1(a)所示,CycleGAN包含两个映射函数G:X →Y 和F:Y →X ,以及两个对应的对抗判别器DY和DX。DY激励G 将X 向目标域Y 转换。同样,DX激励F 将Y 向X 域转换。为了规范化映射,引入了两个循环一致损失,即图像x 和y 从源域转换到目标域后,同样也可以从目标域返回到源域。图1(b)是前向循环一致损失:x →G(x)→F(G(x))≈x。图1(c)是反向循环一致损失:y →F(y)→G(F(y))≈y。
因此,CycleGAN 主要包括对抗损失和循环一致损失两部分。其中对抗损失用以匹配生成图像和目标域图像的数据分布,循环一致损失用以预防学习映射G和F 的彼此冲突。
CycleGAN 采用对抗损失[1]作为映射函数。其中生成器G:X →Y 和它的判别器DY可以表示如下:
其中,Pdata(x)表示图像域X 的样本分布,Pdata(y)则表示图像域Y 的分布。生成器G 试图让产生的图像G(x)与Y 域图像尽可能相似。而判别器DY则最大可能区分生成图像G(x) 和真实图像y 。因此可以表示为minGmaxD(Y)LGAN(G,DY,X,Y)。
同时另一个相同的生成器F:Y →X 和它的判别器DX,同样需要minFmaxD(X)LGAN(F,DX,Y,X)。
由于单独使用对抗损失函数无法保证将单个输入域X 映射到目标域Y ,为了在指定图像域转换的同时保留图像的内容和结构等信息,CycleGAN 引入了循环一致损失函数来约束图像转换时保留自身固有特征。如图1(b)所示,对于每一个X 域的图像x,图像的循环转换能够将x 还原,即x →G(x)→F(G(x))≈x,这叫作前向循环一致。同样对Y 域的每一个图像y,G 和F也要满足反向循环一致:y →F(y)→G(F(y))≈y 。以上两部分构成了循环一致损失:
图1 CycleGAN结构示意图
在CycleGAN 中的生成器G 和F 不能明确区分图像的多种图像域信息,因此,图像在完成特定域转换的同时,也会导致无关域的随机变化,从而使得生成图像容易失真。为了解决该问题,使生成器能够区分转换域和无关域,在保证转换域的特征转换的同时,尽可能保留无关域的特征。有必要通过引入其他的损失函数来约束和引导图像的生成过程。采用文献[11]的思想,在生成器中添加一个恒等映射,即通过引入特征损失,在原生成器G:X →Y 、F:Y →X 和循环一致损失的基础上,激励G:Y →Y 和F:X →X 。然后利用L1损失保证转换后的图像与原图像的像素级别对应。
如图2 所示,在传统的CycleGAN 中,生成器G 的输入包括图像x、x^ ,输出为y^ 。生成器F 的输入包括y、y^ ,输出为x^ 。而添加特征损失后,生成器G 的输入增加图像y,生成器F 的输入增加图像x。因此三输入共同引导图像的生成。生成器在原有基础上将转换目标的原图像输入,利用L1 损失求取生成图像与原图像的相似性的差异,并不断优化。这个过程有助于生成器在生成图像时,尽可能地获取目标图像的特征,约束输入图像的特征任意变换,从而提高生成图像的质量。
图2 生成器的输入输出图
其公式如下:
因此CycleGAN的整体损失函数可以表示为:
其中,λ 和μ 分别决定循环一致损失和特征损失与对抗损失的权重比例超参数。为了评估特征损失的影响,根据μ 值的变化,本文做了进一步探讨。
本文为了测试改进后的CycleGAN 在不同数据集中的效果,采用了CycleGAN 中使用的monet2photo、horse2zebra、summer2winter 数据集。同时将facades 数据集作为多种算法对比的统一数据集。
monet2photo:monet 风格的艺术图片从Wikiart 上下载,真实照片从Flickr 上下载。训练集包括700 张monet风格的绘画和700张真实照片,测试集由120张绘画和120张真实照片组成。
horse2zebra:马和斑马数据集,使用关键字在Image和ImageNet上下载。训练集由1 067张斑马图片和1 067张马的图片组成,测试集由120 张马的图片和120 张斑马图片组成。
summer2winter:夏天和冬天风景数据集,在Flickr上下载。训练集包括684 张夏季图片和684 张冬季图片,测试集由200张夏季和200张冬季图片组成。
facades:建筑物的正面照片与机器感知的建筑物外观图片。训练集包括400 张世界各地不同的建筑物和400张对应的机器感知图片,测试集分别有100张图片。
分类准确率是广泛应用于无监督生成图像的质量评估指标。本文采用Inception-Resnet-V2[13]作为分类模型,将原数据集的训练集作为分类模型的训练集进行训练,将测试集的分类准确率作为基准值。然后将μ 值不同的6 组生成图像送入分类模型进行分类。将得到的各自的分类准确率与基准值进行对比,准确率越高,则证明生成图像的质量越好。
常见无参考图像清晰度测量方法包括熵函数[14]、梯度函数、方差函数等方法。本文选取Laplacian 梯度函数方法作为生成图像的清晰度评估指标,计算不同μ 值下生成图像的清晰度平均值,数值越高则说明生成图像越清晰。
本文在多种算法的生成图像质量对比中选择结果相似性(SSIM)和余弦相似度(Cosin)作为评价指标。其中SSIM从亮度、对比度和结构三方面对比两幅图片,从而得到客观的评价指标。而余弦相似度则将图片表示为一个向量,计算两幅图片的相似度。两种算法的结果数值越大则说明两幅图片越相似。
为了分析未添加特征损失(μ=0)以及添加特征损失后,CycleGAN 的各部分损失伴随μ 值的变化趋势,本文选取μ 值不同的6组实验结果,将训练过程中各部分损失取平均值,分别发现生成器损失、判别器损失、循环一致损失变化趋势,如图3和图4所示。
图3 特征损失变化趋势图
根据图4(a)生成器损失趋势图可知,无特征损失时(μ=0),生成器损失大于μ=1 时的情况,然后随着μ 的增大,生成器损失也会增大。
判别器作用为判别G(x)与y,F(y)与x 之间的相似程度。在添加特征损失之后,通过调整μ 的值,可以发现判别器损失在添加特征损失后,当μ 值较小时,判别器损失大于无特征损失时的情况,然后伴随μ 值的增大而减小,其整体趋势与生成器损失的变化相反。这也说明添加特征损失,会使得生成图像与目标图像更相似。
循环一致损失包括x →G(x)→F(G(x))≈x 和y →F(y)→G(F(y))≈y,即计算F(G(x)) 与x,G(F(y)) 与y的差异程度。由图4(c)可以发现,加入特征损失后,循环一致损失一开始呈快速减小趋势,在μ 值较大后,其变化趋势变慢,即由源域向目标域转换的图像再次转换到源域的效果随μ 值的增大而变好。图像实际生成结果如图5 所示,可以清晰地发现加入特征损失后,其生成图像还原回去的色彩和特征变化较小。
同时,根据图3 的结果也可以发现,调整特征损失的比例超参数μ,也会使得特征损失本身逐渐减小,这有助于生成图像学习到更多的转换目标域的特征。
由表1 的实验结果可知,增加特征损失,通过将特征损失调整到合适的比例超参数,可以提高生成图像的真实性。但是,实验结果同样显示,由于特征损失可以约束生成器的特征识别,保证无关域不被转换的同时,也会约束特定转换域的转换程度。如果μ 选取不合适,会造成一些图片转换程度不高,图像分类准确率也会下降。因此,应根据数据集和实际应用需求选择合适的特征损失比例超参数。
表1 Inception-Resnet-V2图像分类准确率
由图像生成效果图可知,当μ=0 时,即没有特征损失时图6中瀑布的颜色变为黄色,天空的色彩也存在失真,同时树的颜色也变成了蓝色。而当μ 不为0 时,上述问题得到了一定的改善。通过调整μ 的大小,也可以发现图像从夏季到冬季的转换程度略有不同。第一、二行中,μ=10 时,树木和雪地转换程度较高。同时,下文的图像清晰度测量也显示该数据集在μ 的取值空间为[10,20]之间效果更好。
图4 各部分损失变化趋势图
图5 生成图像还原结果
在冬季转换到夏季的图片中,无特征损失时,图7中蓝天变成灰色,箱子和木柱变蓝,湖水和草地均发生色彩的任意变换,从而使得图像失真。而添加特征损失后可以改善该问题。
在斑马转换到马的生成图像中,有无特征损失给人带来的视觉影响较小,但图8中图像清晰度测量结果显示,添加特征损失后,生成图像更加清晰。无特征损失时,从图8中仍发现,μ=0 一列,从上到下,第一幅图片背景更模糊,第二幅图片在尾部仍存在转换不完全现象。而当添加特征损失后,随着μ 值变化,第一行图片的背景色彩越来越清晰,第二行图片尾部的转换也得到了解决。
图6 夏季转换到冬季效果图
图7 冬季转换到夏季效果图
图8 斑马转换到马效果图
图9 monet风格绘画转换到真实图片效果图
在图9 的monet 风格绘画转化为照片的图像结果中,无特征损失时,生成的图像更模糊,而且纹理的复杂度较差,不能够真实还原绘画当中的细节。而添加特征损失后,从左到右,随着μ 值的变化,生成图像的纹理还原度越来越高,图像的清晰度也有明显的提升。同时结合图像分类准确率的结果,也可以发现,当μ 值较大时,虽然能够还原绘画的更多纹理信息,但也会降低图片分类的准确率,即转换为真实图片的效果变差。因此,该数据集的实验结果表明μ 值的选取不宜过大。
由图10 图像清晰度测量的结果可以看出,除了在summer2winter 数据集中,当μ 值取1 和5 时,图像清晰度会有所下降之外,其他生成图像的清晰度均高于未添加特征损失(μ=0)的CycleGAN 的生成结果。实验结果表明,特征损失的引入有助于改善生成图像的清晰度。另外,结合图像分类准确率的结果和生成图像效果图可以发现,特征损失的比例超参数μ 不宜选取太小和过大。
图10 生成图像清晰度折线图
在不同算法的对比实验中,本文选取facades 数据集作为统一数据集。因为该数据集由配对图像构成,所以用于配对图像的算法表现良好。由于CycleGAN 的特点是可以作用于非配对图像,因此Pix2pix 算法的生成质量明显优于传统CycleGAN。但是由表2 可知,添加特征损失后,其生成图像的质量具有明显的提升。SSIM和Cosin的测试结果均高于Pix2pix。
表2 不同算法生成图像质量评估
特征损失的比例超参数μ 决定着特征损失在总体损失函数中所占比例,μ 值的变化影响着图像的生成结果。实验表明,μ 值在[0,10]之间时,图像的清晰度和分类的结果是逐渐提高的。而持续调大μ 值时,图像的清晰度变化较小。同时,观察生成图像可以发现,在调大μ 值时,能够使得生成图像保留更多的纹理信息。然而当μ 值过高时,图像的分类结果却会下降,这表明图像的真实性会受到影响。因此μ 值的选取不应过高。如果该算法作用于纹理复杂性较高的数据集,应适当调大μ 值,从而保留更多的图像特征。此时建议μ 值选取区间为[10,30]。而在普通数据集中,综合上述实验结果,建议μ 值初始选取区间为[1,10]。
本文为了解决传统CycleGAN 的生成图像存在特征随意变换问题,在原模型的损失函数外引入特征损失,利用循环一致损失和特征损失共同建立图像域之间的映射关系。并且特征损失可以保证图像域之间的像素级别的对应,能够更好地保存输入图像的背景色彩和无关特征。同时实验进一步引入特征损失的比例超参数μ,并分析了CycleGAN的各部分损失随μ 值变化的趋势,以及特征损失的系数选择对各部分损失的影响。另外,传统CycleGAN 在转换图像后,总会使得生成图像的清晰度降低,而特征损失的引入约束了原图像的转换程度,有助于改善生成图像的清晰度。因此基于本文的策略,在利用CycleGAN 进行图像生成时,根据输入数据和目标图像的不同,可以通过选取合适的特征损失来提高生成图像的准确性、多样性和清晰度。当然,引入特征损失也会带来一些缺点,例如会造成部分图像转换程度较低,从而使得图像生成效果较差。因此,未来将对特征损失做进一步研究和改进。