github:https://github.com/clovaai/stargan-v2
Paper: https://arxiv.org/abs/1912.01865
复现营课程链接:https://aistudio.baidu.com/aistudio/education/group/info/1340
1.cgan(Conditional Generative Adversarial Nets)
2.cyclegan(Unpaired Image-to-Image Translation using Cycle-Consistent Adversarial Networks)
3.stargan(Unified generative adversarial networks for multidomain image-to-image translation)
文章提出了StarGanv2,一个单一的框架,它可以同时满足两个需求:
1.生成图像的多样性
2.多种domain的可伸缩性。(domain:域,一个图像集合,其中的图片可以被分类为同一种具有视觉区分度的类型)
同时,文章认为,domain中的图像图像可以归类为一个视觉上独特的类别,每个图像都有一个独特的外观,在文中称为style(风格)。
style和domain不知道中文怎么翻译,就直接说风格和域了
(a) 生成器将输入图像转换为反映特定于域(domain)的style code的输出图像。
(b) 映射网络将一个潜在的代码转换成多个域(domain)的style code,在训练过程中随机选择其中一个域(domain)。
(c) 样式编码器提取图像的style code,允许生成器执行参考引导的图像合成。
(d) 鉴别器从多个域(domain)区分真假图像。
(a)生成器G(Style)将输入图像x转换为domain-specific style code(反映特定于域的样式代码)s的输出图像G(x,s),该代码由映射网络F或样式编码器E提供。文章使用AdaIN(Adaptive Instance Normalization)将s输入G中。
(b)给定一个潜在代码z(latent code)和一个域y(domain),映射网络F生成一个样式代码s=Fy(z),其中Fy(·)表示对应于域y的F的输出。F由一个MLP组成,具有多个输出分支,为所有可用域提供style code。F可以通过对潜在向量z和域y随机抽样产生不同的style code。多任务体系结构允许F高效有效地学习所有领域的style表示。
(c)给定一个图像x和它对应的域y,编码器E提取x的风格代码(style code)s=Ey(x) 。这里,Ey(·)表示E对应于域y的输出。与F类似,样式编码器E受益于多任务学习设置。E可以使用不同的参考图像生成不同风格代码(style code)。这允许G合成反映参考图像x的风格(style)s的输出图像。
(d)鉴别器D是一个多任务鉴别器,它由多个输出分支组成。每个分支二元学习一个二元分类,确定图像x是其域y的真实图像还是由G生成的伪图像G(x,s)。
第一行和第一列图像是真实图像,而其余图像由模型StarGanv2生成的图像。模型参考图像中提取高级语义,如发型、妆容、胡须和年龄,同时保留参考图像的姿势和特点。下图反应了StarGanV2可以合成反映不同参考样式的图像,包括发型、妆容和胡须,而不会损害源特性。
文章中也分别对CelebA HQ和AFHQ数据集进行比较。文章中使用随机抽样的latent code将参考图像(最左边的列)转换为目标图像。(a) 前三行将男性转化为女性的结果,反之亦然。(b)顶部每两行按以下顺序显示合成图像:猫到狗,狗到野生动物,野生动物到猫。
对抗性目标
其中,Dy(·)表示与域y相对应的D的输出,x为输入图片,s是style code
风格重构
这是为了让生成器G在生成图片G(x,s)的时候使用style code
风格多样化
s1和s2由两个随机的潜在编码(latent codes)z1和z2产生。最大化两个风格生成图像的差距,这种方式可以让生成器探索意义的风格特征以生成不同的图像。
保留源图特性
生成器G使用源图经过风格编码器(style encoder)所得进行重建,让G保留源图特征,有些像cyclegan。
生成器由四个下采样块、四个中间块和四个上采样块组成,每一个层都有ResBlk。
IN(instance normalization)和AdaIN(adaptive instance normalization)分别用于下采样块和上采样块。
映射网络(mapping network)由一个具有K个输出分支的MLP组成,其中K表示域的数目。所有域之间共享四个全连接层,每个域中也有四个特定全连接层。我们将潜在代码(latent code)、隐藏层和风格代码(style code)的维度分别设置为16、512和64。
潜在代码(latent code)服从标准高斯分布。
风格编码器(style encoder)由一个CNN和K个输出分支组成,其中K是域的数目。六个ResBlk在所有域之间共享,然后每个域有一个特定的全连接层。
鉴别器是一个多任务鉴别器,它包含多个线性输出分支。鉴别器包含6个leakyRelu的ResBlk。文中使用K个全连接层对每个域进行真/假分类,其中K表示域的数量。没有使用归一化层是因为无法改善质量了。
https://blog.csdn.net/WhaleAndAnt/article/details/105093047
https://blog.csdn.net/qq_26020233/article/details/106001703