生成器是根据一个随机数据来生成图片的。每次产生的随机的z,某种意义上是一个只有我们的G才懂的特殊编码,它决定了结果要如何表示。
那么,如果需要做图片风格转换,再用随机数做编码源是不是太不负责任了?生成结果会与原图毫无关联。
怎么办呢?也简单,让G不再从随机源生成图片,而是从我们给定的图片数据读入这个特殊编码。当然,为了把图片变成编码再生成图片,我们需要把单纯从随机数产生图片的生成器变为能够从现实数据提取特征编码的编码器,图片特征转换用的特征转换器,以及从特征编码恢复图片的解码器。
之前学习CNN的时候有了解到,卷积层(Convolution Layer)能够从原本图片里不断分离高阶特征,转置卷积层(Transpose Convolution Layer)能够反过来根据特征合成图片。
简单的想法就是,利用若干个卷积层构建编码器,若干个转置卷积层构建解码器,然后两者之间用一个能够产生变化的深度网络来担当特征转换器。(事实上DiscoGAN、CycleGAN、DualGAN三者的最大区别之一便在这里,DiscoGAN使用最简单直白的CNN编码器和解码器,使用全连接网络当转换器;CycleGAN则使用了ResNet充当转换器;DualGAN则是使用类似WGAN的形式来表示。)
图中的G、F可以看成上述条件GAN情形下的u-net结构(为了方便采用这种结构,具体结构以原文为准),从一种画风迁移到另一种画风的生成变换。然后在D利用对于生成后的图片特征与真实的图片特征进行打分,并得到loss,基本结构可参见DCGAN中D的结构,其中的细节是PatchGAN,其结构特征与要进行区分这一目的是统一的,区分“画风“——”纹理“而非边界,所以PatchGAN可以看成将图片”剪成“若干个小碎片,用同一部分权重区分对应小碎片间的画风区别做平均——CNN共用权重的思想。
正是由于PatchGAN进行的是纹理上的判别,故要求要在模型结构上对于“边界“做”正则“,以保证迁移过程两端在边界上的一致性。(对应的部分在”使用图片描述方式解决翻译问题“中就是文本特征对于图片特征的均方一致收敛,保证特征转化的一致性,可以实现,agant的特征回传)
由于画风迁移是一种特征,就可以直接把随机变量的一致性对应到可逆性(l1下)。((b)(c)两图)(在实现上要注意,可逆性的正则如果太强可能导致画风不变,所以可能涉及随着训练的进行在loss层面适当减小影响的调节,在下面的实现中提到了这个问题)--------------------- 作者:斯温jack 来源:CSDN 原文:https://blog.csdn.net/sinat_30665603/article/details/80843461