论文: StarGAN: Unified Generative Adversarial Networks for Multi-Domain Image-to-Image Translation
论文原始Pytorch版代码: link
Tensorflow版代码: link
最近很多研究在图像翻译方面取得了巨大成功,然而现有的模型都是针对两个一对一领域的图像转换。它们在多领域转换需要多次重新对两两领域构建训练网络,缺少可扩展性和鲁棒性。为了解决这样的问题,提出星形StarGAN,做到只用单一网络就实现多领域的图像翻译。StarGAN允许同时对具有不同域的多个数据集在一个网络上训练。对比现存的模型,StarGAN展现了高质量和灵活性。
属于图像翻译(image-to-image translation)应用
在StarGAN上同时训练CelebA和RaFD,第1列和第6列是输入,注意7,8,9是使用RaFD的标签来合成CelebA图像。如上图,左边展现了输入图像转换成金发、性转、变老、白皮肤的结果;右边展现了输入图像转换成生气、高兴、害怕的结果。
Arrtibute属性(图像的意义特征):发色、性别、年龄
Attribute value属性值(属性的特定值):黑色/金色/棕色、男性/女性
Domain域(相同的属性值):男性、女性
CelebA数据集有40个标签,如发色、性别、年龄等。
RaFD数据集有8个标签,如开心、生气、悲伤等。
1.k个域进行图像翻译时,一对一的转换需要构建k*(k-1)个网络;StarGAN只需要一个网络。
2.一对一的转换无法充分利用k个域的所有图片,只能针对两个域的图片进行学习,这可能会对生成的图像质量有影响。
3.一对一的转换无法对不同数据集的域进行训练,因为数据集都是部分标记的。
1.单个网络
生成器G接受图像和域信息作为输入。其中,使用二进制或一位有效编码(one-hot vector)的标签来代表域信息。
训练时,我们随机地生成目标域标签并训练模型能够将输入图像转换成具有目标域特征的图像。
2.跨数据集的多域训练
通过在域标签里增加掩码向量来支持不同数据集的域之间的联合训练。忽略未知标签并专注于特定的标签。如官方图的右边,使用RaFD的标签来合成CelebA的图像。
1.使用一个生成器G和一个鉴别器D实现多域转换。
2.使用添加了掩码向量mask vector的域标签方法能实现跨数据集的多域训练。
3.在面部迁移方面的定性和定量结果显示StarGAN模型优于其他模型。
//
//
//
对D训练
(a)D对真假图片进行判别,真图片判真,假图片判假,真图片被分类到相应域
对G训练
(b)真图片+目标标签c进入G生成假图片
(c)假图片+原始标签c又进入G生成重构图片
(d)D对假图片进行判别,判假图片为真
生成器G在随机目标域标签c的控制下将输入图像下转化为输出图像y,G(x, c) → y。
随机产生的c让G灵活地对输入图像进行转换。
辅助分类器允许鉴别器D控制多个域,即在源和域标签上鉴别器D都产生概率分布,D : x → {Dsrc(x), Dcls(x)}。
生成器G以输入图像x和目标域标签c为条件生成图像G(x, c),而鉴别器D尝试区分真实图像x和伪造图像y。
Dsrc(x)为D在给到D的源概率分布。
生成器G尝试最小化此目标,而鉴别器D尝试最大化它。
目标是令输出图像y符合目标域标签c的分类。
为了达到这个条件,我们在鉴别器D上添加了一个辅助分类器并通过优化D和G的损失来加强域分类。
即域分类损失分为两部分:
用于优化D的针对真实图像的域分类损失
Dcls(c’|x)为通过D计算的在域标签概率分布。
通过最小化这个目标,D学习将真实图像x分类为对应的原始领域c’。
我们假设输入图像和标签对(x,c’)是由训练数据给出。
用于优化G的针对伪造图像的域分类损失
G尝试最小化此目标以生成可归类为目标域c的图像。
通过最小化上面的对抗损失和分类损失并不能保证仅更改输入图像中与域相关的部分而保留输入图像的内容。
为了解决这个问题,我们在生成器引入一个周期一致性损失
其中G接受伪造图像G(x,c)和原始域标签c’作为输入,尝试重建原始图像x。
我们采用L1规范作为重建损失。
注意我们将两次使用生成器G,第一次是首先将原始图像转换为目标域中的图像,第二次是从翻译后的图像中重建原始图像。
将目标函数写为优化D和G的形式
与对抗性损失相比,需要参数 λcls and λrec分别控制域分类损失和重建损失的相对比例。
在所有实验中,我们使用λcls= 1和λrec= 0。
对数据集可能出现的问题是数据集仅了解部分标签信息。如CelebA有发色和性别之类的标签信息,但没有RaFD的表情标签信息,反之亦然。
为了解决此问题,我们引入了一个掩码向量 m,该向量允许StarGAN忽略未指定的标签,并专注于特定数据集提供的明确已知的标签。
在StarGAN中,我们使用n维一位向量表示 m,其中n是数据集的数量。
我们将标签的统一版本定义为矢量
ci表示第i个数据集的标签。
已知的ci标签可用于二进制属性或分类属性。
剩下的n-1个未知标签,赋值0。
在我们的实验中,我们利用CelebA和RaFD数据集,其中n为2。
使用上述的c作为生成器的输入,G将会忽略未知的标签专注于给定的标签。
G除了c的大小不同,其余均与单个数据集训练时相同。
扩展了鉴别器D辅助分类器在所有数据集标签的生成概率分布,鉴别器D仅尝试最小化与已知标签的分类错误。例如,当训练CelebA中的图像时,鉴别器D仅最小化与CelebA属性标签相关的分类错误,而不管与RaFD相关的表情属性。
通过在CelebA和RaFD之间进行交替,鉴别器将学习两个数据集的所有区分特征,而生成器将学习控制这两个数据集中的所有标签。
将原始的GAN替换成有梯度惩罚的Wasserstein GAN,其对抗损失为
其中xˆ是沿一对真实图像和生成图像之间的直线均匀采样的。
对于所有实验,我们均使用λgp= 10。
沿袭自CycleGAN,StarGAN的生成器网络由两个卷积层组成,其步长为2,用于下采样;六个残差块;两个转置卷积层,步长为2,用于上采样。
我们对生成器使用实例规范化,但对鉴别器不使用规范化。
我们将PatchGAN用于区分网络,该网络对本地图像补丁是真实的还是伪造的进行了分类。
//DIAT
//CycleGAN
//IcGAN
//
Radboud人脸数据库(RaFD)[13]包含从67位参与者那里收集的4,824张图像。
每个参与者在三个不同的注视方向上做出八个表情,这些表情是从三个不同的角度捕获的。
我们将图像裁剪为人脸居中的256×256,然后将其调整为128×128。
所有模型均使用Adam进行训练,其中β1= 0.5和β2= 0.999。
对于数据增强,我们以0.5的概率水平翻转图像。
在五次鉴别器更新之后,我们执行了一次生成器更新。
所有实验的批大小均设置为16。
当在CelebA中训练时,前10代的学习率为0.0001,它会在之后的10代线性衰减至0。而在RaFD中,为了弥补数据缺失,我们将前100代的学习率设为0.0001,并让其在后100代中线性衰减至0。
整个训练在一个NVIDIA Tesla M40 GPU上进行,耗时约一天。
//
为了比较StarGAN模型和基准模型,我们将输入域固定为“中性”表情,目标域在其余七个表情中。
StarGAN清楚地生成了最自然的表情,同时适当地保持了输入的个人身份和面部特征。 虽然DIAT和CycleGAN主要保留输入的身份,但它们的许多结果显示为模糊的,不能保持输入中所见的清晰度。 IcGAN甚至无法通过生成男性图像来保留图像中的个人身份。
我们认为,StarGAN在图像质量上的优势是由于其来自多任务学习设置的隐式数据增强效果。
RaFD图像包含相对较小的样本大小,例如每个域500张图像。在两个域上进行训练时,DIAT和CycleGAN一次只能使用1,000张训练图像,而StarGAN可以在所有可用域中总共使用4,000张图像进行训练。
这使得StarGAN可以保持生成的输出的质量和清晰度。
为了进行定量评估,我们计算了合成图像上面部表情的分类误差。
我们使用ResNet-18架构在RaFD数据集上训练了一个面部表情分类器(用于训练和测试集的分割率为90%/ 10%),结果达到了近99.55%的精确度。
然后,我们使用相同的训练集训练了每个图像翻译模型,并在相同的,看不见的测试集上执行了图像翻译。
最后,我们使用上述分类器对这些翻译图像的表达进行分类。
从表中可以看出,我们的模型实现了最低的分类误差,这表明我们的模型在所有比较的方法中产生了最真实的面部表情。
我们模型的另一个重要优点是,根据所需参数的数量具有可扩展。
表的最后一列显示,StarGAN学习所有翻译所需的参数数量比DIAT小7倍,比CycleGAN小14倍。
这是因为StarGAN仅需要一个生成器和鉴别器对,而不管域的数量如何,而对于跨域模型(如CycleGAN),则应该为每个源-目标域对训练一个完全不同的模型。
//
1.一个生成器和一个鉴别器实现多域转换(可扩展性)
2.图像质量更高(多任务的泛化能力)
3.掩码向量实现跨数据集的多域控制
参考:
https://blog.csdn.net/weixin_42445501/article/details/82748225
https://blog.csdn.net/jialibang/article/details/81303847