zoukankan      html  css  js  c++  java
  • 【论文阅读笔记】《StarGAN》

    论文:《StarGAN: Unified Generative Adversarial Networks for Multi-Domain Image-to-Image Translation》

    发表时间:CVPR 2018

    解决问题:多领域的图像转换问题

    背景

    Pix2Pix与CycleGAN分别解决了两个领域之间基于匹配数据和非匹配数据的转换。但是在实际的应用中我们会发现需要大量的多领域转换,例如图1所示,这可能是一个智能修图的场景,用户输入一张人物照片,他希望能够通过选项来调节照片中人物的外貌,比如图中例子的发色、性别、年龄、肤色等。又比如图2,对于同一个人物照片我们希望能够将他转换成各种不一样的表情,从普通的表情转换为愤怒、喜悦和恐惧等。

    图1 头像照片的多种外貌转换 图2 头像照片的多种表情转换

    之前的Pix2Pix和CycleGAN可以非常好地解决领域间转换问题,它们同样可以应用于多领域的转换,但是存在的问题是必须在每两个领域之间进行单独的训练。我们假设场景为图8-3的表情转换,一共有四个领域,分别为中性、生气、喜悦与恐惧,我们将它们从1到4标号。如果使用CycleGAN的话我们可以看到图3,在每两个领域都需要训练两个生成器,比如领域1和领域3之间,就需要有生成器G31与生成器G13,分别作为从3到1和从1到3的生成。

    图3 使用CycleGAN实现多领域转换的情况

    我们会发现,在四个领域的情况下已经需要12个不同的生成器了,随着领域数量的增加,该数量会越来越大,如果领域的数量为n的话,排列组合的数量为(C_n ^ 2)。在领域很多的情况下,要训练这么多生成模型是非常消耗资源的。
    此外,除了在训练过程中的资源消耗以外,StarGAN的研究者还发现如果仅使用CycleGAN的方法在每两个领域之间进行生成器的训练,那么各自的训练过程都是独立的,这导致比如像图2中虽然每个领域是不一样的表情,但是人脸的结构是基本一致的,独立的训练会浪费大量可以辅助优化生成器的数据,这显然也是不合理的。针对这两个问题,研究者们希望能够为这样的多领域转换找到一个更加合适的解决方案。

    StarGAN的论文在2017年年底发布在了arxiv上,并随后发表在了计算机视觉领域会议CVPR2018。StarGAN提供了一种针对多领域的解决方案,在多领域转换的情况下仅需训练一个通用的生成器即可。图4是StarGAN的结构示意图,对于五个领域的情况仅需中间的一个生成器G即可,整个网络形成一个星形的拓扑结构,这也是StarGAN的命名由来。

    图4 使用StarGAN实现多领域转换的情况

    网络架构

    StarGAN的网络设计借鉴了很多经典的思想,其中最重要的正是Cycle-GAN和cGAN。首先我们看一下StarGAN的网络结构,其判别器如图8-5所示,输入为任意分类的真伪图片,输出部分需要将所有数据都进行真伪判断,对真数据还需要进行所属领域的分类,这一判别器非常类似前面介绍的ACGAN。

    图5 StarGAN判别器结构图

    图6展示了StarGAN比较完整的流程,对于生成器的输入不仅需要原始图片,同时还需要像cGAN一样设定一个目标领域。由生成器产生的图像会进入上面所说的判别器中进行判定,目标是让判别器将其判定为真实图像且属于目标领域。与此同时该生成图像还需要再次输入本身的生成器中,且将输入条件设置为源领域,用于重建原始图像,确保重建的图像能够与原始图像越接近越好。

    图6 StarGAN完整结构图

    目标函数

    根据上述网络架构,我们来看一下StarGAN的目标函数。

    首先是常规的GAN对抗损失函数,也就是生成器能否让判别器认为该生成图像为真实图像,其中c为条件参数,表示目标类型。

    其次是分类损失,同样也要同时对生成器和判别器进行优化,这里可以写成两种分类损失:第一种是对于真数据的分类损失(L_{cls}^r),第二种是假数据的分类损失(L_{cls}^f)对应下面两个公式。

    其中(D_{cls}(c′|x))代表判别器将真实输入x归为原始分类c′的判别概率分布,(x,c′)是真实训练数据中的分类匹配数据,判别器D的目标是最小化这个损失函数。另一方面,对于生成器来说希望基于x的生成数据能够被判别器判断为目标分类c,需要G能够最小化损失函数。

    再清楚一点说,就是当给定一个输入图像x属于c'领域,将它投入判别器,判别器的目标就是尽可能分辨出x时属于c'类的,因此(logD_{cls}(c'|x))就要尽可能得大。另外,当将目标领域和输入图像都投入生成器后的结果作为新的输入,被判别器判断为是c的可能性应该尽可能得大,所以(logD_{cls}(c|G(x, c)))要尽可能大。

    最终我们还需构建重建损失,确保生成的数据能够很好地还原到本来的领域分类中。这里使用原始数据和经过两次生成(先转换到分类c,再转换为源分类c′)的图像L1损失作为重建损失(CycleGAN),公式如下所示。

    最终的目标函数如下,分为判别器与生成器。其中(λ_{cls})(λ_{rec})为超参数,用来控制分类损失、重建损失相对于对抗损失的重要性,在StarGAN原文的实验中取(λ_{cls}=1)(λ_{rec})=10。

    StarGAN的另外一个创新点在于能够同时协调多个包含不同领域的数据集,比如图1的外貌数据集和图2的表情数据集。但这里存在的问题是两个数据集之间是不知道对方的分类标签是什么的,比如外貌数据集只知道自己包含发色、肤色等,却不知道表情数据集包含了喜悦、愤怒等。

    在StarGAN中,研究者们加入了一个Mask向量m的概念,用来忽略那些未知的分类,仅关注于自身了解的分类。最终的分类标签向量如下所示,其中(c_i)用来表示第i个数据库的分类信息。

    在训练过程中,会将上式中的直接输入生成器作为条件信息,由于Mask向量的存在,那些无关的分类标签向量会变成零向量,生成器会自动忽略。另一方面在多任务的训练中,判别器也仅会对自己了解的分类进行判别。图7是使用两个多分类数据库同时训练的框架图,使用的就是外貌数据集和表情数据集,可以看到Mask向量分别在两种数据库的情况下对应为[1, 0]和[0, 1],会将不属于该数据库的分类标签向量置为全零。在这样的多数据库训练过程后,判别器会具备各个数据库的分类判别能力,而生成器也可以同时针对多个数据库的信息进行图像生成。

    图7 StarGAN同时训练两个多分类数据库的框架示意图

    结果

    图8和图9是官方给出的最终生成效果图,分别对应上文提到的外貌数据库与表情数据库,读者可以自己按照上述步骤尝试使用一下多分类的转换。

    图8 StarGAN的多种外貌生成效果图 图8-9 StarGAN的多种表情生成效果图
  • 相关阅读:
    Split Temporary Variable
    Introduce Explaining Variable
    Replace Temp with Query
    Extract Method
    自测代码的价值
    代码的坏味道
    Divergent Change & Shotgun Surgery
    Large Class
    Long Method
    Duplicated Code
  • 原文地址:https://www.cnblogs.com/recoverableTi/p/13529322.html
Copyright © 2011-2022 走看看