GAN入门

date
May 8, 2022
Last edited time
Sep 18, 2022 03:12 AM
status
Published
slug
GAN入门
tags
DL
GAN
summary
初学GAN做的笔记,还不完整。 2022.09.03@添加了Optimal Transportation Distance的链接
type
Post
Field
Plat
论文参考:
基础生成模型:
generative-models
wiseoddUpdated Sep 2, 2022

基础

基本概念

GAN(Generative Adversarial Networks)从其名字可以看出,是一种生成式的,对抗网络。再具体一点,就是通过对抗的方式,去学习数据分布的生成式模型。所谓的对抗,指的是生成网络和判别网络的互相对抗。生成网络尽可能生成逼真样本,判别网络则尽可能去判别该样本是真实样本,还是生成的假样本。示意图如下:
notion image

mode collapse(模式坍塌)

  • 定义:
    • 假设某个data distribution有两个模式,generator可能就学到一个mode,另一个mode则完全没学到。或者有一个mode,只能学到该mode的一部分!比如说data中的数据主要是室内和室外场景,但我们训练出的GAN可能只产生室内场景的图片。
  • 类内模式坍塌
    • 例如使用 ImageNet 训练好的 GAN 可以均匀生成 1000 类图像,但是在每一类中,只能产生一种图像,也就是生成的苹果图像永远长一个样子,但是 GAN 的生成质量和类别多样性是完全没有问题的。

AE

自编码器(autoencoder)内部有一个隐藏层 ,可以产生编码(code)表示输入。该网络可以看作由两部分组成:一个由函数 表示的编码器和一个生成重构的解码器
  • 欠完备自编码器
    • 从自编码器获得有用特征的一种方法是限制 的维度比 小,这种编码维度小于输入维度的自编码器称为欠完备(undercomplete)自编码器。学习欠完备的表示将强制自编码器捕捉训练数据中最显著的特征。
      学习过程可以简单地描述为最小化一个损失函数。
  • 稀疏自编码器
    • 稀疏自编码器简单地在训练时结合编码层的稀疏惩罚 和重构误差:
      稀疏惩罚完全不是一个正则项。这仅仅影响模型关于潜变量的分布。
  • 去噪自编码器
    • 去噪自编码器(denoising autoencoder, DAE)最小化 ,其中 是被噪声损坏的 副本,因此去噪自编码器必须撤消这些损坏,而不是简单地复制输入。
  • 收缩自编码器
    • 正则化自编码器的策略是使用一个类似稀疏自编码器中的惩罚项
      的形式不同:
      这迫使模型学习一个在 变化小时目标也没有太大变化的函数。因为这个惩罚只对训练数据适用,它迫使自编码器学习可以反映训练数据分布信息的特征。这样正则化的自编码器被称为收缩自编码器(contractive autoencoder, CAE)。

GAN 与 VAE

  • Auto Encoder
    • notion image
      训练使用 做为损失。 更像是一种非线性插值,输入训练集中的图片就会得到比较好的结果,如果我们输入随机编码,则得到的是一些过度的结果。即如果随机选取点的编码值是已有编码的中间值,就会生成一些不合理的结果。
  • Variation Auto Encoder
    • notion image
      真实的数据分布是大圆 ,我们的训练集是随机获取的真实数据一部分,因此只能反映真实分布中的侧面。因此用 时,如果我们输入一张真实的图片,并得到它的编码能得到很好的结果,因为产生的编码属于小圆。但我们在小圆外随机选取1点,得到的就是一下不存在的结果。这个问题会随着特征向量维度增加而变得更糟。
      的基本思想则是,我们假设是原始数据是一个很复杂的分布,我们高斯分布来逼近这个分布。这样一来,真实数据中的点就跟高斯分布上的点对应起来了!我们只需要利用现有的训练集去找出这个高斯分布的参数 ,从而获得接近高斯分布的编码数据
      与AE不同,VAE中编码器不再产生图片的编码,而是产生两个向量,一个表示均值 ,一个表示方差
      notion image
      利用图中公式,就可以计算出code 。整个网络的训练是要让生成器生成的分布与随机噪声分布(一般选标准高斯分布)接近, 同时保证输入的图片与输出的图片越接近越好。 因此训练网络时的loss为:
  • GAN
    • notion image
       
       
       
      AutoEncoder直接对真实图片和生成图片进行像素级别的监督,GAN通过学习一个判别器来让真实图片和生成图片的整体判断趋于一致。 正是由于度量方式的不同,导致AutoEncoder和GAN之间各有优缺点,AutoEncoder由于中间的latent code是由输入图片编码产生的,导致latent code编码和图片对应性更强,生成图像更加规则,又由于像素级别的监督,无法更好的关注全局信息,导致生成图片模糊;而GAN由于随机输入和图片对应性弱,导致生成图像容易跑偏,又由于判别器是对图像整体进行判断的,生成图片连续性更强,可以生成更加清晰的图片。因此,可以结合GAN和VAE的优点进一步产生更加规则清晰的图片(实际上后续很多生成模型的研究都是围绕这一点展开的)。

Latent Space

Latent Space 即原始数据的压缩表示。
notion image
  • 为何对原始表示进行压缩
    • 假设我们想训练一个模型来使用完全卷积神经网络 (FCN) 对图像进行分类。(即输出数字给定的数字图像)。当模型“学习”时,它只是简单地学习每一层的特征(边缘、角度等),并将特征组合归因于特定的输出。
      但是每次模型通过一个数据点进行学习时,图像的维数首先会降低,然后才会最终增加。(参见下面的编码器和瓶颈)。当降维时,我们认为这是一种有损压缩。
      因为模型需要随后重建压缩数据(参见解码器),所以它必须学会存储所有相关信息并忽略噪声。这就是压缩的价值——它可以让我们摆脱任何无关的信息,只关注最重要的特征。
      这种“压缩状态”是我们数据的潜在空间表示。

ALI

ALI 即 ADVERSARIALLY LEARNED INFERENCE,将GAN中鉴别器的输入从数据 扩增为数据 与潜码 的联合分布。
这样,可以把GAN损失修改为:
其中
也即为:
中的第一项优化 ,即优化 使判别器认为真样本为假。 中的第一项优化 ,即优化判别器 正确分类真假样本。这样引入了 之间的对抗,则让判别器在判别样本真假的时候不受提取的潜码(风格)的干扰,让判别器认识到样本真伪与其对应的风格无关,缓解样本数量不均衡的问题。
这样能够缓解样本不平衡带来的问题。比如样本中带胡子的很少,那么只输入照片的判别器可能直接将带胡子的判断为生成的假样本。而使用了 ALI 则让判别器学习到是否为真样本,与带不带胡子无关。

损失函数

JS 散度

  • 衡量两个分布 之间的距离,我们可以使用 散度。定义如下:

GAN中使用的Loss

  1. GAN 中的提出的 loss 为:
    1. loss 的前半部分对应正样本,后半部分对应生成的负样本。
      交叉熵loss 为
      对于判别器 ,需要最大化 ,最小化,则使 最大化。
      对于生成器 ,需要最大化 ,即最小化
  1. 最优判别器
    1. 当生成器 固定时,我们可以对 求导,求出最优判别器
      证明: 
      令:
      带入得:
      对于积分里的函数 达到最大值。 因此,最优判别器为:
  1. GAN的loss与JS散度的等价性
    1. 将最优判别器带入得:
      所以原始GAN的loss实际等价于JS散度。
  1. 纳什均衡
    1. 可以证明,当 二者的 capacity 足够时,模型会收敛,二者将达到纳什均衡。此时, ,判别器不论是对于 还是  中采样的样本,其预测概率均为  ,即生成样本与真实样本达到了难以区分的地步。这时,

其他距离度量方式

  1. 引出
    1. JS 散度存在一个严重的问题:两个分布没有重叠时,JS散度为零,而在训练初期,JS散度是有非常大的可能为零的。所以如果 被训练的过于强,loss会经常收敛到-2log2而没有梯度
  1. Wasserstein loss 推土机距离
      • 定义
        • 这个 loss 的直观含义是,将分布 移动到分布 所需要的距离,所以即使是两个分布没有重叠,这个loss也是有值的。下面两个式子是等价的。
          估算如下:
  1. Hinge loss
      • 定义
        • Hinge loss 是对地球移动距离的一种拓展。Hinge loss 最初是SVM中的概念,其基本思想是让正例和负例之间的距离尽量大,后来在Geometric GAN中,被迁移到GAN:
          对于来说,只有当 的正向样本,以及 的负样本才会对结果产生影响。也就是说,只有一些没有被合理区分的样本,才会对梯度产生影响。
          这种方法可以使训练更加稳定。
  1. LSGAN loss
      • f-divergence
        •   是两个分布,  与  是sample  的概率,则两个分布之间的相似性可以定义为:
          其中  满足  ,且  为凸函数。由定义可知,当  为两个相同的分布时,  ,使用凸函数的性质可以证明  ,这样一来,   ,可以衡量任意两个分布的不相似性。
      • LSGAN loss 定义
        • LSGAN loss 是 f-divergence 中的 的特殊情况。
          LSGAN使用最小二乘loss,不容易出现梯度饱和现象。并且,随时函数要求 不会过大,因此避免生成器生成一些极端样本。

Fenchel Conjugate(凸共轭)

常见GAN模型

CGAN

CGAN将随机噪声 和类别标签  作为生成器的输入,判别器则将生成的样本/真实样本与类别标签作为输入。以此学习标签和图片之间的关联性。
CGAN 其实是将 GAN 又拉回到监督学习领域,如下图所示,它在生成器部分添加了类别标签这个输入,通过这个改进,缓和了 GAN 的一大问题--训练不稳定的问题。
notion image
损失变成如下形式:

DCGAN

  • DCGAN
    • DCGAN即将generator和discriminator替换成了卷积网络。 第一次采用 CNN 结构实现 GAN 模型,它介绍如何使用卷积层,并给出一些额外的结构上的指导建议来实现。另外,它还讨论如何可视化 GAN 的特征、隐空间的插值、利用判别器特征训练分类器以及评估结果。
  • 结构
    • DCGAN的 的结构如下:
      notion image
 

Pix2Pix (Paired data)

  • 网络结构
    • notion image
      如上图所示,生成器 用到的是 Unet 结构,输入的轮廓图  编码再解码成生成图片 ,判别器 用到的是作者自己提出来的条件判别器 PatchGAN,判别器 的作用是在轮廓图  的条件下,对于生成的图片  判断为假,对于真实图片 判断为真。
  • PatchGAN
    • 由于用L1和L2 loss重建的图像很模糊,也就是说L1和L2并不能很好的恢复图像的高频部分(图像中的边缘等),但能较好地恢复图像的低频部分(图像中的色块)。为了能更好得对图像的局部做判断,作者提出patchGAN的结构,也就是说把图像等分成patch,分别判断每个Patch的真假,最后再取平均!作者最后说,文章提出的这个PatchGAN可以看成所以另一种形式的纹理损失或样式损失。
      notion image
  • 损失函数
    • 最终目标函数为:
  • 缺点
    • 使用这样的结构其实学到的是  到  之间的一对一映射! 也就说,pix2pix 就是对 ground truth 的重建:输入轮廓图→经过Unet编码解码成对应的向量→解码成真实图。这种一对一映射的应用范围十分有限,当我们输入的数据与训练集中的数据差距较大时,生成的结果很可能就没有意义,这就要求我们的数据集中要尽量涵盖各种类型。

StackGAN

StackGAN-Pytorch
hanzhanggitUpdated Aug 31, 2022
  • 目的
    • 现有的模型(如 Vanilla GAN)只是简单的添加 upsampling 层来生成高分辨率的图,这会导致训练不稳定,且生成无用的图片。
      notion image
      GAN生成高维图片的主要问题在于,自然图像分布与模型分布在高维空间上几乎不交叠。当要生成的图像分辨率增大时,该问题更加明显。
  • 解决方案
      1. 提出 StackGAN 分段式结构
        1. 本文提出了 Stacked Generative Adversarial Networks (StackGAN) 结构,用于根据文字描述,生成对应的 256 * 256 的真实图像(首次这么高的分辨率)。我们将该问题分解为可处理的子问题。
          首先是 Stage-I,根据给定的文字描述,勾勒初始的形状和色彩,生成低分辨率的图像。
          然后 Stage-II 根据 Stage-I 生成的低分辨率图像以及原始文字描述,生成具有更多细节的高分辨率图像。这个阶段可以重新捕获被 Stage-I 忽略的文字描述细节,修正 Stage-I 的的结果的缺陷,并添加改良的细节。
          从低分辨率图像生成的模型分布与自然图像分布相交叠的概率更好。这就是 Stage-II 能够生成高分辨率图像的根本原因。
      1. 提出 Conditioning Augmentation 技术
        1. 对于 text-to-image 生成任务,text-image 训练数据对(image + text)数量有限,这将导致文本条件多样性的稀疏性(sparsity in the text conditioning manifold ),而这种稀疏性使得 GAN 很难训练。
          描述文字首先被预训练好的编码器编码为词嵌入向量
          在前人的研究中,词嵌入向量被非线性的转换为生成条件隐含变量,并作为生成器的输入。然而,词嵌入的隐含空间维度维度一般很高(> 100)。当输入数据量很少的时候,通常会导致隐含变量分布空间不连续(大部分值为 0,太过稀疏),这对生成器的训练不利。
          因此,我们引入条件增强 (Conditioning Augmentation)来产生额外的条件变量 。我们不是选定固定的,而是从独立高斯分布 中随机采样。其中,均值 和对角方差矩阵
          是关于词嵌入向量 的函数(全连接层子网络)。
          上面一段话,换言之就是,将原始词向量分布映射到一个高斯分布中,均值和方差不变。
          给定较少的 text-image 对,通过该手段,也能够生成更多的训练样本,并且对于条件空间的微小扰动,其稳健型也更好。为了进一步增强条件分布的平滑性,以及避免过拟合(引入噪声相当于数据增强),我们使用 KL 散度对其正则化:
          上面的即标准高斯分布与条件高斯分布之间的 KL 散度。条件增强过程中引入的随机性有助于 text-image 转换,因为同样的文字描述可能对应着不同的目标姿势,外观等等,这种随机性有助于增加多样性。
  • 模型结构
    • notion image
      1. Stage-I  Stage-I 阶段主要用于生成粗略的形状和颜色等。先从  中随机采样出  ,并随机采样的高斯噪声 z,将它们进行 concatenate ,然后作为 Stage-I 的输入,来训练判别器  和   ,分别对应如下目标函数:
      1. Stage-II
        1. Stage-I 阶段生成的低分辨率图像通常缺乏鲜明的目标特征,并且可能包含一些变形。同时,文本描述中的部分信息可能也未体现出来。所以,通过 Stage-II 可以在 Stage-I 生成的低分辨率图像和文本描述的基础上,生成高分辨率图片,其修正了 Stage-I的缺陷,并完善了被忽略的文本信息细节。Stage-II以高斯隐含变量 以及 Stage-I 的生成器的输出 为输入,来训练生成器 和判别器 ,其目标函数分别为:

StyleGAN

stylegan
NVlabsUpdated Sep 3, 2022
  • Introduce
    • 在风格转移文献的启发下,我们重新设计了生成器的结构,以一种新的方式来控制图像合成过程。我们的生成器从一个学习的常数输入开始,在每个卷积层根据 Latent 调整图像的 "风格",因此直接控制不同尺度的图像特征的强度。结合直接注入网络的噪声,这种结构上的变化导致了在生成的图像中自动地、无监督地分离高级属性(如姿势、身份)和随机变化(如雀斑、头发),并实现了直观的特定尺度混合和插值操作
      我们的生成器将输入的 Latent 嵌入到 intermediate latent space 中,这对变异因素在网络中的表现方式有深刻的影响。输入的 Latent space 必须遵循训练数据的概率密度,这导致了某种程度的不可避免的纠缠。intermediate latent space不受这种限制,因此允许解缠。我们提出了两个新的自动计量方法--感知路径长度线性分离性--来量化生成器的这些方面。
      这篇文章主要研究的是生成器部分
  • Style-based generator
    • StyleGAN 的网络结构包含两个部分。
      1. Mapping network,即下图 (b)中的左部分,由隐藏变量 生成中间隐藏变量 的过程,这个 就是用来控制生成图像的 style,即风格。
      1. Synthesis network,它的作用是生成图像,创新之处在于给每一层子网络都喂了 是由 转换得到的仿射变换,用于控制生成图像的风格, 是转换后的随机噪声,用于丰富生成图像的细节,即每个卷积层都能根据输入的 来调整"style"
      notion image
  • Mapping network --- latent code
    • Mapping network 要做的事就是对隐藏空间(latent space)进行解耦。
      Mapping network由8个全连接层组成,通过一系列仿射变换,由 得到 ,将 转换成风格  。结合 AdaIN (adaptive instance normalization) 对每个卷积层的输出进行归一化,即使用样式 中相应的标量分量进行缩放和偏置(因此,y 的维度是该层上特征图数量的两倍)。AdaIN操作定义如下:
      其中 代表每一个特征图。
      最后,通过引入显式噪声输入为我们的生成器生成随机细节。 是由不相关的高斯噪声组成的单通道图像,我们将专用的噪声图像提供给合成网络的每一层。
  • Style Mixing
    • 下图中 第一行是 source B, 第一列是source A,source A 和 source B的每张图片由各自相应的latent code 生成,剩余的图片是对 source A 和 souce B 风格的组合。 Style mixing 的本意是去找到控制不同style的latent code的区域位置,具体做法是将两个不同的latent code  和  输入到 mappint network 中,分别得到  和  ,分别代表两种不同的 style,然后在 synthesis network 中随机选一个中间的交叉点,交叉点之前的部分使用  ,交叉点之后的部分使用  ,生成的图像应该同时具有 source A 和 source B 的特征,称为 style mixing。
      notion image
      对于latent code  而言,如果它在低分辨率的feature map被加入,那么它对应的高级语义特征(例如脸的方向、头发的整体风格等)能够最终呈现出来,如果在高分辨率的feature map加入,那么它的细节特征(头发颜色等)会最终表现出来。
  • Stochastic variation
    • 论文中的 Stochastic variation 是为了让生成的人脸的细节部分更随机、更自然,细节部分主要指头发丝、皱纹、皮肤毛孔、胡子茬等。
      notion image
       
  • Disentanglement studies
    • 上面提到intermediate latent space 可以解耦,这一部分解释如何进行解耦。
      由于 中每个因子组合的采样概率需要与训练数据中的概率密度相匹配。
      图6. 有两个变化因素(如男性和头发长度)的说明性例子。(a)一个训练集的例子,其中一些组合(如长发男性)是缺失的。(b) 这迫使从Z到图像特征的映射变得弯曲,这样被禁止的组合就会在Z中消失,以防止对无效的组合进行采样。(c) 从Z到W的学习映射能够 "撤消 "大部分的扭曲现象。
      图6. 有两个变化因素(如男性和头发长度)的说明性例子。(a)一个训练集的例子,其中一些组合(如长发男性)是缺失的。(b) 这迫使从Z到图像特征的映射变得弯曲,这样被禁止的组合就会在Z中消失,以防止对无效的组合进行采样。(c) 从Z到W的学习映射能够 "撤消 "大部分的扭曲现象。
      因此,为了量化解耦程度,我们设计了两种方法,它们都不需要编码器或已知的变化因素,因此对任何图像数据集和生成器都是可以计算的。
    • Perceptual path length
      • 图像生成其实是学习从一个分布到目标分布的迁移过程,如下图,已知input latent code 是 ,或者说白色的狗所表示的latent code是 ,目标图像是黑色的狗,黑狗图像的latent code 是 ,图中蓝色的虚线是 最快的路径,绿色的曲线是我们不希望的路径,在蓝色的路径中的中间图像应该是 的组合,假设这种组合是线性的(当特征充分解耦的时候),蓝色路径上生成的中间图像也是狗( 符合 latent-space interpolation),但是绿色的曲线由于偏离路径太多,生成的中间图像可能是其他的,比如图上的卧室,这是我们不希望的结果。
        notion image
        Perceptual path length 是一个指标,用于判断生成器是否选择了最近的路线(比如上图蓝色虚线),用训练过程中相邻时间节点上的两个生成图像的距离来表示,公式如下:
        其中 为生成器, 衡量两张生成图片的距离。Perceptual loss主要用于分析图像之间高级特征的相似度,简单而言就是将两张待分析的图像送进一个预训练的模型里,得到各自的高级特征,随后计算特征之间的损失。通常该模型使用VGG架构,故又称为VGG loss。和MSE/PSNR不同,VGG loss更关注高级特征,而不是某些像素的差别。
        而未映射到 之前的 的距离:
        这里 slerp 表示球面插值,而上面使用线性插值(lerp)。
        notion image
    • Linear separability

Image-to-Image translation

CycleGAN (Unpaired data)

  • 目的
    • pix2pix 要求的成对的图片输入并不是那么容易可以得到的,这对数据集有很高的要求。因此CycleGAN提出了一种无监督的学习方式,无需成对的图片输入。
  • 模型结构
    • 和 是两种不同类型的图像集,需要训练映射  使得  .
      notion image
      本文使用的网络结构非常容易理解,可以用下边的这幅图来描述。与Pix2pix类似,生成器用的是残差网络而判别器则是PatchGAN。简单描述一下:网络一共两个生成器 。两个判别器 , 判断 这个domian中的图像是真是假, 判断 这个domian中的图像是真是假。
       是一个domain(通常是真实图像),这个domain中的某个图像  经过生成器  后生成属于 domain的图像  ,接着用一个判别器  判断生成的属于 domain的图像 与真实的  domain的图像 谁真谁假,因为  属于 domain, 所以再用 还原回去得到图像  应该与  越接近越好;
      对应的,从 ,也是上述的流程。
      notion image
  • 目标函数
    • 对于映射 ,优化目标为
      对于映射 , 优化目标为
      此外,还需要使用 cycle consistency loss,来保证生成器 不会丢失原本输入图片的信息。
      如果用无监督学习,用网络学习到的网络会可能把相同的输入 映射成不同的输出 ,这就意味着,我们输入任意  并不能得到想要的输出  ,引入cycle consistence loss可以有效的减少不合理的映射。即生的图像再用逆映射生成回去应该与输入的图像尽可能接近(循环一致性约束),本文用L1 loss来描述这种接近程度:
      因此,总的目标函数为:
       
模型可以看作是训练两个“自动编码器”:我们学习一个自动编码器 和另一个 。然而,这些自动编码器每个都有特殊的内部结构:它们通过中间表示将图像映射到自身,中间表示是另一个域的图像。

Unit (Unpaired data)

notion image
按照作者的观点, 域的分布和 域的分布可以通过 VAE 共同编码到 域(latent code),然后又可以通过生成器将 域的分布信息分别转换成 域的分布信息。作者把 命名为潜在隐藏空间,其中 的分布满足有条件独立和单位方差的高斯分布。
b图,这里共享了 的后几层和 的前几层权重,目的就是提取到并保留两个分布域的高层信息,后面的 就是传统的GAN思想,需要提到的就是,在这个网络中,类似于 的同一域图片经过编码生成又映射到本域的情况,这里本身就对应着前面几篇文章的循环一致性的约束,所以作者在目标函数中提到了这一项。
notion image
  • 目标函数
    • notion image
    • VAE 部分
      • 本文提出共享两个编码器  最后一层的权值,共享两个生成器  第一层的权值。本文所使用的编码器为变分自编码器VAE,所以网络架构中重建  的过程  分别相当于两个VAE,训练VAE需要引入与高斯分布的KL divergence. 这就是说我们希望用编码器得到的编码latent code 是满足高斯分布的。因此两个VAE的损失函数为:
        第一项为kl divergence,因为本文用拉普拉斯分布构建的两个生成器,原来VAE中所使用的绝对距离可以替换成对数似然项。
    • GAN 部分,使用了GAN中的损失函数来衡量编码解码质量
      • 注意生成domain  的图像用的是domain  的编码  ,生成domain  的图像用的是domain  的编码 。所以,综合起来就是本文使用了两个VAE-GAN。
    • 循环一致损失
      • 这个思想来自CycleGAN,不过CycleGAN用的是 损失来衡量 与循环回来的图像  的一致性。不过,这里使用了 KL 散度。
    • 总体 Loss
  • 与CycleGAN
    • notion image

ByCycleGAN(Paired data + Multi-modality)

  • Multi-modality
    • Multi-modality 意味能够根据要求不同(给定新图片的模态),给出符合要求的生成数据。而非Multi-modality情况下,无法指定模态。即输入域 的图片,指定域 的风格 ,得到 ,而非多模态下只能得到
  • Multi-label
    • 包含多个类别的图片,如有图片在域 ,则需要有 的映射 以及逆映射

MUNIT(Unpaired data + Multi-modality)

MUNIT
NVlabsUpdated Sep 1, 2022
  • 背景
    • 大多数现有的无监督/非配对图像到图像转换算法都假设两个图像域之间的单峰映射函数。也就是说,对于域 中的给定输入图像,模型只能将其映射到域 中的一个对应图像。这是不希望的,因为在许多情况下,映射函数应该是多模态或多对多的。例如,对于输入的夏季图像,夏季到冬季的转换模型应该能够合成与输入夏季图像相对应的各种冬季图像。这些图像的积雪量可能不同,但它们都代表输入图像的有效翻译。在最理想的情况下,给定输入图像,图像转换模型应该能够将输入图像映射到输出图像的分布。这正是MUIT的目标。
      输入域A的图片,指定域的风格。
MUNIT实际上就是UNIT的扩展,这种扩展被称作是多模态数据之间的转换UNIT认为不同的数据集可以共享同一个隐空间,而MUNIT更进一步,他认为他们能够共享的这个空间叫做内容空间(content),而同时他们应该存在着一种彼此差异的空间,他将这个称作风格空间(style)。如下图所示:
notion image
 
内容代码编码了在转换过程中应该保留的信息,而风格代码代表了输入图像的变化。通过对不同的风格代码进行采样作为输入,结合二者进行重构,我们的模型能够产生多样化和多模式的输出。
  • 结构与loss
    • notion image
      左边是在同一个数据域当中的分解和重构。这里同样还是两个自编码器,但是不同以往的是,编码的过程中通过两部分网络映射到隐空间,因此隐空间中被分解为内容和风格两个部分的特征;因此,在解码的时候便是从这两个部分进行重构。样式增强循环一致性损失(重建约束)如下
      这里使用了样式增强循环一致性(弱化版的循环一致性)来约束自编码器,因为如果强制执行循环一致性,翻译模型将退化为确定性函数。直观地说,风格增强循环一致性意味着如果我们将图像翻译到目标域并使用原始风格将其翻译回来,我们应该获得原始图像。如果使用循环一致性来进行约束,那么损失应如下:
      再来看右边的部分,它表示的是在不同的数据域之间的变换。1数据域当中的数据 分解得到内容部分 ,并从先验分布 中随机抽取一个风格表示 ,二者结合重构出一个数据 ,那么应该满足的约束条件,也就是我们的损失函数是什么呢?主要应该有两点:
      1. 重构出来的数据 应该尽量的接近2数据域当中的分布,这里使用 GAN 的目标函数,即对抗损失
      1. 如果通过再对数据 进行编码,得到的内容 以及风格部分 应该尽量的接近输入,内容、风格重建损失如下:
      因此我们得到如下的损失函数,最大化函数来更新 网络参数,最小化函数来更新 网络。除了隐空间的分解之外,本质上和UNIT没太大区别 。
  • 自动编码器结构
    • notion image

DRIT(Unpaired data + Multi-modality)

notion image
这篇文章提出了一个分解表示的方法(disentangled representation)实现一对多的image translation,本文提出的方法也是不需要paired data的。文章提出的多样性的实现方法与MUNIT类似,一个与domain无关的content space(内容空间),一个与domain有关的attribute space (属性空间)。为了完成无监督训练,本文提出了一中cross-cycle consistency loss. 思路与MUNIT是类似的,如图:
  • 网络结构
    • notion image
      本文的目标的用GAN学两个domain 之间的映射关系。网络由两个内容编码器 两个属性编码器 , 两个生成器 以及两个判别器 组成。整个过程也是分within-domain的重建已经cross-domain的生成。cross-domain时,对于某个属于domain 的图像 , 输入到内容编码器和属性编码器中,生成对应的内容编码 和属性编码 ,属于domain 风格编码 与满足高斯分布的噪声结合,生成具有domain 风格的图像 ;within-domain时,使用生成器 ,利用 的内容编码 和属性编码 重建 ,生成重建图像 .
  • 损失函数
    • 内容对抗性损失
      • DRIT则采用的是UNIT的方式,共享两个编码器  最后一层和两个生成器  第一层的权值。通过权重共享,迫使内容表征被映射到同一空间。然而,共享相同的高层映射函数并不能保证相同的内容表征对两个领域编码相同的信息。因此,我们提出了一个内容判别器 ,旨在区分编码的内容特征 的领域成员。另一方面,内容编码器学习产生编码的内容表征,其领域成员不能被内容判别器 所区分。
    • 循环一致损失
    • GAN 损失
      • 我们施加对抗性损失 ,其中 试图在每个域中区分真实图像和生成的图像,而 试图生成真实的图像
    • 其他损失
      • notion image
      总体损失如下:
       

BigGAN

StarGAN(Unpaired data + Multi-label)

stargan
yunjeyUpdated Sep 3, 2022
  • 背景
    • 当有很多领域要转换了,对于每一个领域转换,都需要重新训练一个模型去解决,即现有的GAN模型为了实现在 个不同的风格域上进行迁移,需要构建 个生成器,并且还不能跨数据集训练(标注不能复用)。StarGAN正是为了解决跨多个域、多个数据集的训练而提出的。在StarGAN中,并不使用传统的fixed translation,而是将域信息和图片一起输入进行训练,并在域标签中加入mask vector,便于不同的训练集进行联合训练
      notion image
  • 网络结构
    • notion image
  • 的输入中添加目标领域信息 ,即把图片翻译到哪个领域这个信息告诉生成模型。
  • 除了具有判断图片是否真实的功能 外,还要有判断图片属于哪个类别 的能力。这样可以保证 中同样的输入图像,随着目标领域的不同生成不同的效果。
  • 除了上述两样以外,还需要保证图像翻译过程中图像内容要保存,只改变领域差异的那部分。图像重建可以完整这一部分,图像重建即将图像翻译从领域A翻译到领域B,再翻译回来,不会发生变化。(循环一致性)
 
  • 损失配置
    • GAN损失
    • 为了稳定训练过程并生成更高质量的图像,这里的GAN损失也替换成了使用带有梯度惩罚的 Wasserstein GAN形式。(其实大部分模型都这么换了)
      其中 是沿一对真实图像和生成图像之间的直线均匀采样得到的。
    • 分类损失
      • 这里分类损失包括真实图像与生成图像的损失。对于给定的输入图像 和目标域标签 ,我们的目标是将 转换为输出图像 ,将其正确分类到目标域 。为了达到这个条件,我们在 之上添加了一个辅助分类器,并在优化 时施加域分类损失。这里使用交叉熵。
        指的是
    • 重建损失
      总体损失为:

StarGAN v2 (+ Multi-modality)

stargan-v2
clovaaiUpdated Sep 3, 2022
基于StarGAN,使用所提出的domain-specific style code替换域标签,前者可表示特定领域的各种风格样式。为此,引入两个模块,一个映射网络mapping network和一个样式编码器stye encoder。
  • 模型结构
    • notion image
    • 生成器
      • 我们的生成器 将输入图像 转换为反映域特定样式代码 的输出图像 ,该样式代码 由映射网络 或样式编码器 提供。我们使用自适应实例归一化( AdaIN) 将 注入 。我们观察到 旨在表示特定域 的样式,这消除了向 提供 的必要性,并允许 合成所有域的图像。
    • 映射网络
      • 给定一个潜码 和一个域 ,映射网络 生成一个样式代码 ,其中 表示 对应于域 的输出。 由具有多个输出分支的 MLP 组成,为所有可用域提供样式代码。 为输入的高斯噪声,映射网络学习将随机高斯噪声转换为样式码
    • 编码器
      • 给定一个图像 和域 ,编码器 提取 的风格代码 表示 对应于领域 的输出。 可以使用不同的参考图像产生不同的风格代码。这使得 能够合成一个反映参考图像 的风格的输出图像。
         
    • 判别器
      • 一个多任务鉴别器,由多个输出分支组成。每个分支 学习二元分类,确定图像 是域 的真实图像还是 生成的伪图像。
  • loss配置
    • GAN损失
      • GAN损失没有变化,将图像分类变为风格输入
    • 风格重建损失
    • 目标样式多样性损失
      • 为了进一步使生成器 产生不同的图像,我们使用多样性敏感损失明确地对 进行正则化。
    • 源特性保留约束(循环一致损失)
      其中
      总体损失为
 

Reference

GAN的损失函数
理解生成对抗网络的关键在于理解GAN的损失函数 GAN实际是通过对先验分布施加一个运算G, 来拟合一个新的分布 如果从传统的判别式网络的思路出发,只要选定合适的loss,就可以使生成分布和真实分布之间的距离尽可能逼近 KL散度经常用来衡量分布之间距离 但KL散度是不对称的。不对称意味着,对于同一个距离,观察方式不同,获取的loss也不同,那么整体loss下降的方向就会趋向于某个特定方向。这在GAN中非常容易造成模式崩塌,即生成数据的多样性不足 JS散度在KL散度的基础上进行了修正,保证了距离的对称性: 实际上,无论KL散度还是JS散度,在直接用作loss时,都是难以训练的:由于分布只能通过取样计算,这个loss在每次迭代时都几乎为零 GAN的训练方法,能够巧妙的解决这个问题: 先训练D,再训练G,二者相互对抗,直到收敛 在原始的GAN中,提出的loss是: 当G固定且运算可逆时(实际上这一点一般不成立,但不影响了解GAN的思想): 代入loss公式,进而有: 对于积分区间内的每一个x,设被积函数为f 为: 注意这里x是固定的,变量是D。对f求导,得到当 时,f存在最大值。 由于被积函数的最大值对于任意x都成立,所以当 时, V(D, G)有最大值 代入loss公式,有: 所以原始GAN的loss实际等价于JS散度 JS散度存在一个严重的问题:两个分布没有重叠时,JS散度为零,而在训练初期,JS散度是有非常大的可能为零的。所以如果D被训练的过于强,loss会经常收敛到-2log2而没有梯度 对于这个问题,WGAN提出了一个新的loss,Wasserstein loss, 也称作地球移动距离: 这个距离的直观含义是,将分布r移动到分布g所需要的距离,所以即使是两个分布没有重叠,这个loss也是有值的 可以证明,该距离可以转化为如下形式: 其中f必须满足1-Lipschitz连续,即: 可以看到,符合1-Lipschitz连续的函数的梯度是受限的,可以有效的防止梯度的爆炸,使训练更加稳定 对于GAN来说,f其实就是指的D或G,也就是神经网络。对于神经网络来说,一般是由一系列矩阵乘法复合而成的。可以证明,如果矩阵乘法这个运算满足1-Lipschitz连续,那么其复合运算也会满足1-Lipschitz连续,神经网络也就满足1-Lipschitz连续 对于矩阵变换A来说,它满足K-Lipschitz连续的充要条件是: $$ ||Ax|| \leq K||x|| $$ 对其等价变换有: 假设 的特征向量构成的基底为 对应的特征值为 ,则x可由特征向量表示: 那么有: 只有当i 不等于j时,式子不为零, 且 所以有: 矩阵 是半正定矩阵,所有特征值都为非负,所以只要矩阵除以它最大的奇异值的开方,就可以满足1-Lipschitz连续。power iteration 是求奇异值的一种简便算法, 称这种除以最大奇异值的操作为spectral norm Hinge loss 是对地球移动距离的一种拓展 Hinge loss 最初是SVM中的概念,其基本思想是让正例和负例之间的距离尽量大,后来在Geometric GAN中,被迁移到GAN: 对于D来说,只有当D(x) -1的负样本才会对结果产生影响 也就是说,只有一些没有被合理区分的样本,才会对梯度产生影响 这种方法可以使训练更加稳定
GAN的损失函数
生成对抗网络系列(2)--GAN提高
上一篇文章中详细介绍了GAN的来龙去脉,分析了GAN的主要贡献之一在于discriminator其实是一个J-S divergence,可以用来判断生成分布 与真实分布 。上节最后提到了原生GAN有G弱D强、mode collapse的问题。这一节主要介绍,后来的研究如何解决这两个问题,以及介绍一些有趣的GAN的变种,如f-GAN, WGAN, cycleGAN...同样的这篇笔记主要整理自Prof. 李宏毅的 Improved Generative Adversarial Network. 由于GAN还在不断完善当中,这篇笔记也会不定期更新,随时分享自己的阅读心得。 f-GAN[1]是f-divergence的缩写。上一篇Blog中提到,原生GAN的discriminator为J-S divergence. 我们知道 ,如果 与 是完全不同的两个分布,则 如下所示: 分布 其实是在接近 ,但J-S divergence是却一直等于 ,这就说明,原生GAN使用的discriminator是不合理的,我们很自然的一种想法就是:J-S divergence其实是一个特例,能不能找其他的divergence代替?找出更general的 divergence. 这就是f-GAN的主要思想,找到的通用divergence称为f-divergence。 这里先给出它的定义: 是两个分布, 与 是sample 的概率,则: 其中 满足 ,且 为凸函数。由定义可知,当 为两个相同的分布时, ,使用凸函数的性质可以证明 ,这样一来, ,因此可以衡量任意两个分布的不相似性。根据 的性质,我们就可以构建这种各样的divergence,如: , 也就是我们熟悉的KL divergence , 也就是KL reverse divergence .
生成对抗网络系列(2)--GAN提高
GAN系列--Disentangle思想UNIT,MUNIT,DRIT,CDD,CDGAN
之前有一篇文章详细介绍了用无监督网络做unsupervised image to image translation的三篇开创性的工作:CycleGAN, DiscoGAN以及DualGAN. 从最开始的有监督的image translation 到之后的无监督的image to image translation再到后来的Multi-modal unsupervised image to image translation. 这个问题的研究逐渐深入,这篇文章主要介绍3篇Multi-modal unsupervised image to image translation: MUNIT, Disentangled Representations, CD-GAN 以及一篇与之相关的工作UNIT. 2.MUNIT 3. Disentangled Representations 4. CD-GAN 本文是NVIDIA Lab的工作,以共享latent space为假设,并在Coupled GAN的基础上提出Unsupervised image-to-image translation的新的framework. 源代码在: 跟MUNIT是一套系统,在调用的时候把方法名换成UNIT即可。 1.1 UNIT的主要思路 本文构建概率模型来描述unsupervised image to image translation问题,认为两个domain间的转化其实是两个domain的联合分布 ,我们需要用已知的domain 的边缘分布 来推导出这个联合分布,由于两个domain 间有无数个联合分布,因此从边缘分布推导联合分布其实是个病态的过程,解决这问题需要增加更多的假设,本文就假设输入到生成器的latent code是共享的,如下图所示: 什么意思呢?我们知道,GAN的生成器的输入为一个已知分布 的latent code .
GAN系列--Disentangle思想UNIT,MUNIT,DRIT,CDD,CDGAN

© Lazurite 2021 - 2024