【人脸属性迁移】StarGAN v2: Diverse Image Synthesis for Multiple Domains
StarGAN v2
文献全称:StarGAN v2: Diverse Image Synthesis for Multiple Domains
文献出处:[J]. arXiv: Computer Vision and Pattern Recognition, 2019
数据集:CelebA-HQ、AFHQ
评价标准:FID、LPIPS、AMT User Study
论文贡献(亮点)
跳出了starGAN使用域标签向量的思维惯性,为每个域生成多个style code,通过AdaIN完成迁移,同时保证生成的多样性。
介绍了自己搜集的数据集,动物脸部数据集(AFHQ)
实验效果图
(1)Latent -guided synthesis
(2)Reference-guided synthesis
模型框架图
概念解释
在文献的介绍中,作者做出了有别于StarGAN的概念解释,对域(domain)和风格(style)冠以比较广泛的定义。
域:一个图像集合,其中的图片可以被分类为同一种具有视觉区分度的类型。
风格:每个图像具有的独特外观。
举例来说,可以设置性别(男和女)作为两个域,而其中的风格则可以涵盖很多内容,比如妆容、胡子、发型等,可以说风格是单个图像内全局的效果,而不是单一的某个pattern。这里的定义与StarGAN和AttGAN的概念定义有所不同,比如发型、胡须等属性被归为style的范畴中了。
主要思想
在以前的方法中,传递迁移的条件信息是通过将属性向量输入到网络中来实现的,而本文介绍的方法没有采用这种方式,而是结合AdaIN来实现迁移的,即在feature map层面上将源图的数据分布匹配到style的分布上。
网络结构分为四个模块:生成器、多任务映射网络、多任务风格编码器和多任务判别器。
每个域的style code可由映射网络或风格编码器生成,两者的输出端都是多分支,每个分支的输出表示当前域的style code,而两者的区别为:
映射网络:对随机高斯噪声进行编码,域y的style code可简单表示为s=Fy(z). {\bf s}=F_y({\bf z}).s=F
y
(z).
风格编码器:对参考图片进行编码,域y的style code可简单表示为s=Ey(x) {\bf s}=E_y({\bf x})s=E
y
(x)
生成器
生成器部分有两个信息源:提供内容信息的源图片和来自某个域的style code。编码器部分提取源图片的深度特征,解码器部分负责将这些深度特征匹配到style code的数据分布上,也可以说是一种融合。
多任务判别器
这里的判别器设计考虑到了信息源的问题,在之前的方法中,例如StarGAN,只有一个判别器,训练判别器的数据源来自整个训练集,而不是某一个特定的域,而生成器收到的反馈信号都是来自判别器,这样就相当于胡子眉毛一把抓。
而多任务判别器的输出端是多分支的,每一个分支的输出表示当前样本是否属于当前这个域,这样就做到了术业有专攻,每个题型都做好专项训练。
(前段时间发现了这个问题,大概是这个问题很早就暴露出来了,现在已经被别人做出来了,多任务判别器不是这篇提出来的,这篇的判别器结构是从别人那里借鉴过来的。后续我会把这个点整理一下更新出来。)
损失函数
1.对抗目标
Ladv=Ex,y[logDy(x)]+Ex,y˜,z[log(1−Dy˜(G(x,s˜)))] L_{adv}={\Bbb E}_{{\bf x},y}[logD_y({\bf x})]+{\Bbb E}_{{\bf x},{\tilde y},{\bf z}}[log(1-D_{\tilde y}(G({\bf x},{\bf \tilde s})))]
Ladv=Ex,y[logDy(x)]+Ex,y~,z[log(1−Dy~(G(x,s~)))](1)
其中y yy表示源图x \bf xx的原始域,y˜ \tilde y
y~ 表示目标域。这个损失函数可以体现出对每个域分支训练的细节,源图用以训练域y yy的判别器分支,生成图G(x,s˜) G({\bf x},{\bf \tilde s})G(x, s~ )用以训练域y˜ \tilde y y~
的判别器分支。
2.风格重构
Lsty=Ex,y˜,z[∣∣s˜−Ey˜(G(x,s˜))∣∣1] L_{sty}={\Bbb E}_{{\bf x},{\tilde y},{\bf z}}[||{\bf \tilde s}-E_{\tilde y}(G({\bf x},{\bf \tilde s}))||_{_1}]
Lsty=Ex,y~,z[∣∣s~−Ey~(G(x,s~))∣∣1]
为了使得生成器在生成图像时利用到style code,这里设置使生成图像的风格编码与输入风格保持一致的目标。
3.风格多样性
Lds=Ex,y˜,z1,z2[∣∣G(x,s˜1)−G(x,s˜2)∣∣1] L_{ds}={\Bbb E}_{{\bf x},{\tilde y},{\bf z_{_1}},{\bf z_{_2}}}[||G({\bf x},{\bf \tilde s_{_1}})-G({\bf x},{\bf \tilde s_{_2}})||_{_1}]
其中s˜i=Fy˜(zi) {\bf \tilde s_{_i}}=F_{\tilde y}({\bf z_{_i}})
),z∈{1,2} {\bf z}\in\{1,2\}z∈{1,2}.这个训练目标是最大化两个风格生成图像的距离,这样做是为了激励生成器去探索更多的多样性。
4.保留源图特性
Lcyc=Ex,y,y˜,z[∣∣x−G(G(x,s˜),sˆ)∣∣1] L_{cyc}={\Bbb E}_{{\bf x},y,{\tilde y},{\bf z}}[||{\bf x}-G(G({\bf x},{\bf \tilde s}),{\bf \hat s})||_{_1}]
表示源图经过风格编码器所得。这个损失函数相当于循环重构。
总损失函数
LD=−Ladv L_D=-L_{adv}
LF,G,E=Ladv+λstyLsty−λdsLds+λcycLcyc L_{F,G,E}=L_{adv}+\lambda_{sty}L_{sty}-\lambda_{ds}L_{ds}+\lambda_{cyc}L_{cyc}
考虑到风格多样性的损失函数没有最优点,所以λds \lambda_{ds}λ
ds
在训练过程中线性缩减到0.
实现细节
网络结构细节
(1)生成器结构
(2)样式编码器/判别器
其中N NN表示实验涉及N个域,D DD表示输出结果的维度,ch chch表示通道数的因子:
判别器:D=1 D=1D=1(Real/Fake),ch=32 ch=32ch=32
样式编码器:D=64 D=64D=64,ch=16 ch=16ch=16
数据集使用情况
作者实验中将CelebA-HQ简单地分成了“男”和“女”两个域,据我分析,这样做的动机可能是因为这两个域的样本数据量较为均衡,当然也可能涉及风格涵盖的内容较多且模糊的原因。
对于作者自己搜集的AFHQ数据集,总共分为3个域:猫、狗和野生动物,每个域各5000张图片,体现每个域内多样性的是动物的品种,在每个域中有8种以上的品种。而作者采用这个数据集,也可能是考虑到常用的数据集样本分布不均衡的情况。
未完待续
由于源码暂时未提供,多域判别器的训练策略目前不得而知。
参考文献
Choi Y, Uh Y, Yoo J, et al. StarGAN v2: Diverse Image Synthesis for Multiple Domains[J]. arXiv: Computer Vision and Pattern Recognition, 2019
Choi Y, Choi M, Kim M, et al. StarGAN: Unified Generative Adversarial Networks for Multi-domain Image-to-Image Translation[C]. computer vision and pattern recognition, 2018: 8789-8797.