1. Cycle GAN与图像风格转换
WGAN后,GAN生成图像不稳定的问题已基本解决,剩余的缺点以难以盖过它的优点。在这种情况下,Jun-Yan Zhu等人将GAN的应用推广到图像风格转换领域,并基于此给出了许多有趣的应用。图像风格转换一般需要一对图像作为训练样本,但是成对的训练样本在现实生活中往往是难以得到的,鉴于此,作者在Cycle GAN中取消了成对样本的限制,直接使用具有不同风格的样本对进行训练,完成图像风格转换,这使得训练模型的前期准备工作变得轻松许多。本文首先介绍图像风格转换所遇到的问题及Cycle GAN,在此基础上介绍Cycle GAN中存在的计算代价高等问题,最后介绍一种能够弥补该缺点的方法:Star GAN
1.1 一致稳定损失(Cycle Consistent Loss)
图像风格转换在是指将一幅图像转换成具有另一种风格的图像,如灰度转彩色,涂鸦画转化为梵高风格的图像等。经过图像处理、信号处理界多年的研究,提出过一种有监督学习方法,该方法需要成对图像作为训练数据,如下图左所示。但是工程实践中,由于各种各样的原因,很难得到成对的训练数据,现有的数据集规模十分小,并且数量不多,这启发作者寻找一种无需成对图像做训练的算法。
作者认为,对要进行图像风格转换的两个域之间存在某种隐式关系,去除成对图像作为输入后,虽然难以通过有监督学习获得两张图像之间风格的映射函数,但是可以通过两种不同风格的一系列图像获得两种风格之间的映射关系。基于此,训练样本的收集可以不限定在同一物品的图像,而将其扩大到具有不同风格的图像,如下图所示。设来自两个不同域(风格) X X 和 Y Y 的图像数据集 x x 和 y y ,可以通过训练一个映射 使得 ,同时保证 y y 与 y^ y ^ 仅有很小的差距。
使用上图右这样的数据集进行训练会存在一个问题,即 X X 转换为 Y Y 风格后往往变得“面目全非”。究其原因,训练期间的图相对虽仅仅来自两种不同风格,但其图像描绘的内容却千差万别。为了能够消除图像内容的影响,作者引入一致稳定损失。即 X X 转变为 Y Y 风格后,在转变回来时仍然能够以较高精度复原原图像,即:
F(G(X))≈X,G(F(Y))≈Y(1) (1) F ( G ( X ) ) ≈ X , G ( F ( Y ) ) ≈ Y
上式中,
F F 和
G G 分别是 和 的映射。Cycle GAN同时训练这两个映射,并保证使用这两个映射复原图像时能够较好地复原原图像。一致稳定损失较好地解决了风格转换时解空间太大导致转换的图像面目全非的现象。
1.2 Cycle GAN
在加入一致稳定损失后,作者提出一种基于GAN的图像风格转换模型,即Cycle GAN。该模型接受一对风格不同且画面描述内容也不同的图像,同时初始化两个判别器 D1 D 1 (判断是否为 X X 风格图像)、 D2 D 2 (判断是否为Y风格图像)和两个生成器 F F 、 G G ,并按生成器-判别器的顺序依次循环训练这四个网络。Cycle GAN总共有3个损失函数,它们分别是:
- 对抗损失
该损失函数与一般GAN的损失函数相同,判别器尽力区分真假图片而生成器尽力迷惑之。下式给出了训练 G G 和 D1 D 1 的损失函数。
LGAN(G,D1)=Ey∼Pdata(y)[logD1(y)]+Ex∼Pdata(x)[log(1−D1(G(x)))](2) (2) L G A N ( G , D 1 ) = E y ∼ P d a t a ( y ) [ log D 1 ( y ) ] + E x ∼ P d a t a ( x ) [ log ( 1 − D 1 ( G ( x ) ) ) ]
- 一致稳定损失
该损失保证了生成图像的稳定性,仅与生成器有关。其计算式如下
Lcyc(G,F)=Ey∼Pdata(y)[||G(F(y))−y||1]+Ex∼Pdata(x)[||F(G(x))−x||1](3) (3) L c y c ( G , F ) = E y ∼ P d a t a ( y ) [ | | G ( F ( y ) ) − y | | 1 ] + E x ∼ P d a t a ( x ) [ | | F ( G ( x ) ) − x | | 1 ]
- Identity Mapping Loss[1]
该损失衡量风格转变后两张图像的差异。由于训练图像可能描绘了不同的内容,所以仅有前两个损失还不足以完善Cycle GAN体系,还需要限制模型对原图的改动尽可能小。一个关于 G G 的Identity Mapping Loss为:
Lidx(G)=Ey∼Pdata(y)[||G(x)−y||1](4) (4) L i d x ( G ) = E y ∼ P d a t a ( y ) [ | | G ( x ) − y | | 1 ]
综上所述,模型最终的损失函数为:
L(D1,D2,F,G)=LGAN(G,D1)+LGAN(F,D2)+λcycLcyc(G,F)+λidx[Lidx(F)+Lidx(G)](5) (5) L ( D 1 , D 2 , F , G ) = L G A N ( G , D 1 ) + L G A N ( F , D 2 ) + λ c y c L c y c ( G , F ) + λ i d x [ L i d x ( F ) + L i d x ( G ) ]
至此,训练Cycle GAN的主要流程如下:
Step1:输入一对来自不同风格的图像 X X 和 Y Y 并生成两个判别器和两个生成器。
Step2:首先训练两个判别器。将真实图像和经过风格转换的图像送入两个判别器中,借助对抗损失优化判别器权重。
Step3:根据对抗损失、一致稳定损失和Identity Mapping Loss优化生成器权重。
Step4:重复步骤2~3直到达到最大迭代次数。
结果如下图所示,Cycle GAN能够成功的转变图像风格,并且加入Identity Mapping Loss后,得到的图像显得更加稳定,不会出现整个图像色调都改变的情况。
除数据收集方式和训练算法不同外,Cycle GAN中的生成器与普通的GAN也有一些不同。普通GAN模型以一个随机噪声作为输入,但Cycle GAN是以要转换的图像作为输入,这种情况下网络结构会发生一定变化,原始接受随机噪声作为输入的层被改为一系列卷积层进行降采样,当图像大小降到一定程度后,就加入类似残差神经网络的网络块,这些网络块不降低输入数据的尺寸,仅仅是一些卷积和残差合并操作,最后加入升采样的转置卷积层将图像恢复到输入图像大小。如此改动后的网络结构就可以替换原始生成器的网络结构用于图像风格转换了。
2. 多属性转换—Star GAN
Cycle GAN仅仅是对图像进行风格一对一的转换,当想要一对多地转换图像风格时,往往面临巨大的时间花费。Star GAN很好地解决了这个问题,其基本思想来自cGAN,将特定的风格标签作为额外的信息一起传入网络,并与图像特征进行融合,最终取得了很好的效果。
2.1 Star GAN
如果我们有四种风格的图像,希望借助Cycle GAN能将一种图像转换成另一种图像,那么完成此任务需要训练4*(4-1)=12个模型。四种风格之间两两组成一个风格转换对,形成有向完全图。可见,随着要转换风格数目的增多,使用Cycle GAN将被要训练的模型数目这只拦路虎挡下。
另一方面,Cycle GAN处理多风格图像转换任务时,由只能每两种风格之间训练两个模型,所以与这两种风格无关的数据对模型训练并没有做出贡献,大量的数据被浪费而得不到充分利用。
为了减少模型的数目,一种比较自然的想法是把Cycle GAN转换成一对多的模型,即训练一次就能将一种风格的图片随意转换成其他风格。基于此,Yunjey Choi等人[2]从cGAN中得到启发,提出Star GAN。该模型由判别器和生成器共同组成,判别器用于区分输入图片的真假,同时,还要判断图像所属的风格类别;生成器接收要转换风格的图像和希望转换的属性。将它们经过特征映射和融合后,传入深层卷积网络中进行训练,生成假图像。这种模型就如下图右方显示的那样,一个生成器可以生成多种模型,大大降低了模型训练的数目。
Star GAN总共包含三个损失:
1. 对抗损失
与传统GAN模型没有区别,这里不再赘述。
2. 域分类损失
对于给定图像 x x 和目标风格标签 c c ,判别器希望将图像风格转换为带 c c 风格的图像 y y ,为了达到这个目的,作者在判别器中加入了额外的判别器用于判断输入图像的风格类别,同时,对于生成器 G G 来说,作者也加入这样一个分类器,在生成图片的同时,判断生成图片的风格标签是否与目标风格标签 c c 相符。鉴于此,域分类损失其实是两个损失,分属于判别器与生成器。
Lrcls=Ex,c′[−logDcls(c′|x)](6) (6) L c l s r = E x , c ′ [ − log D c l s ( c ′ | x ) ]
对于给定的训练数据
(x,c,c′) ( x , c , c ′ ) ,
x x 是输入图像,
c c 是要转换的风格标签,
c′ c ′ 是图像所属的风格标签,式(6)是作用于真实图像的损失函数,可用来更新判别器使之能判断输入图像的类别。(7)则是假图像的损失函数,用于同时更新判别器和生成器,衡量生成器生成风格
c c 的图像是否足够逼真,能否被分类器分类为
c c 。
Lfcls=Ex,c[−logDcls(c|G(x,c))](7) (7) L c l s f = E x , c [ − log D c l s ( c | G ( x , c ) ) ]
值得一提的是,Star GAN中,生成器的输入除了图像,还有标识图像类别的标签。为了能将标签拓展成与图像相同大小好带入神经网络中进行前向传播,作者类比cGAN的处理方法,首先将标签信息进行One-hot编码,并复制延拓成与图像大小相同的张量,然后与图像在channel维度上进行拼接,一起输入网络中。
3. 复原损失
该损失与Cycle GAN的一致稳定损失相似,主要看图像在经过转去转来两次操作后是否能够还原到原来的图像。定义如下:
Lrec=Ex,c,c′[||x−G(G(x,c),c′)||1](8) (8) L r e c = E x , c , c ′ [ | | x − G ( G ( x , c ) , c ′ ) | | 1 ]
综上,可写出总的损失函数,对于分类器,其损失函数为:
LD=−Ladv+λclsLrcls(9) (9) L D = − L a d v + λ c l s L c l s r
即分类器想要最大化对抗损失并最小化分类损失。生成器损失函数如下:
LG=Ladv+λclsLfcls+λrecLrec(10) (10) L G = L a d v + λ c l s L c l s f + λ r e c L r e c
即生成器要最小化对抗损失和分类损失,同时保证生成的图像能够被再次复原到原始输入。上面两个损失函数中出现了超参数
λcls λ c l s 和
λrec λ r e c 可用于控制各个项之间的重要程度。根据实验经验,常取
λcls=1 λ c l s = 1 ,
λrec=10 λ r e c = 10 。
整个网络的训练过程如下图所示:
Step1:根据输入的真实图像训练判别器,用于判断输入图片真假并给出图片类别,更新判别器权重。
Step2:根据目标风格标签和输入图像,生成假图像,并用假图像重新复原原始风格图像,计算复原损失。
Step3:用假图像迷惑判别器,获得对抗损失与对应的分类损失,更新生成器和分类器权重(注意 对两个模型均有影响)。
Step4:重复步骤2~3直到达到最大迭代次数。
作者在CelebA数据集上,与当前较为流行的几种GAN模型实现效果进行了对比,结果如下:
Star GAN无论是在生成图像的色彩方面,还是效果方面,都较前几种模型有优势。除了能够实现一转多,Star GAN还能借助Mask Vector实现将不同数据集的不同风格进行转换。
2.2 Mask Vector与跨数据集属性转换
实现跨数据集风格转换主要问题在于不同数据集有不同的标签,这些标签可能根本没有关系。
作者拿CelebA数据集与RaFD举例,CelebA主要标注了人的外貌、五官方面的特征,而RaFD主要标注了人的表情。二者没有关系,很难对图像标签进行One-hot编码,生成图像和求解复原损失也就无从谈起。
为了解决这个问题,作者提出了一种Mask Vector,该向量基本形式如下:
c~=[c1,...cn,m](11) (11) c ~ = [ c 1 , . . . c n , m ]
其中
ci c i 代表图像在第i组数据集的属性经过One-hot编码后得到的结果,
n n 为数据集数目,文章中仅涉及两个数据集,
n=2 n = 2 。
m m 为该图像所属数据集的编号经过One-hot编码后得到的结果。对于属于第
i i 组数据集的图像来说,除
ci c i 以外,其余特征均取0。
在有Mask Vector帮助后,Star GAN就可以实现跨数据集图像属性转换了。在实际实现过程中,作者除使用Star GAN基本的三个损失以外,还加入了梯度惩罚项如下:
Lgp=Ex[||∇D(x)||2−1]2(12) (12) L g p = E x [ | | ∇ D ( x ) | | 2 − 1 ] 2
该惩罚项相当于一个约束,防止模型过拟合,提升模型性能,实验中取其权重
λgp=10 λ g p = 10 。
下图展示了跨数据集训练的Start GAN-JNT(Joint)模型效果。Mask Vector在其中起到了举足轻重的作用。第一行将Mask Vector的
m m 设置为正确的[0,1]即RaFD数据集,此时模型仍能够正确转换图像的表情。但当
m m 设置为不正确的[1,0],即标注为CelebA数据集时,模型就专注于转换输入图像的年龄特征而非表情特征。
总的来说,Star GAN通过加入One-hot条件特征和Mask Vector以较低的训练代价实现了跨数据集的图像风格转换,是图像风格转换中较为成功的案例之一。
如果各位在阅读过程中对文章排版和公式显示效果不满意,我这里上传了一份综合前4篇博文的PDF可供下载,收8个资源分。^-^
http://download.csdn.net/download/opensuse1995/10236456
参考文献:
[1] Jun-Yan Z., Park T., Isola P., et.al. Unpaired Image-to-Image Translation using Cycle-Consistent Adversarial Networks[J]. arXiv preprint arXiv:1703.10593, 2017.
[2] Choi Y., Choi M., Kim M., et.al. StarGAN_Unified Generative Adversarial Networks for Multi-Domain Image-to-Image Translation[J]. arXiv: 1711.09020, 2017.