GAN家族简记

GAN家族简记

  • 这个github里面有很多GAN代码,简单易懂https://github.com/wiseodd/generative-models
  • 这个网站详细介绍了GAN的历程:http://www.openpcba.com/web/contents/get?id=3541&tid=15
  • GAN :D衡量的是G(z)和x之间的JS散度
  • improved GAN(mini-batch GAN): 提出了Minibatch discrimination(MD)
  • WGAN :用的是推土机距离,为了满足一阶李普希兹条件,对梯度进行剪切
  • improved WGAN(WGAN-GP) :将WGAN的梯度剪切方法改为对梯度进行惩罚
  • DCGAN :用卷积和反卷积代替全连接层,并且没有pooling层,而用整数步长的卷积和分数步长的卷积实现上采样和下采样;同时发现了随机向量z的某些意义,但是是不可控的,而且不具有必然性
  • energy based GAN(EBGAN) :将D设计为一个AutoEncoder,希望G 的输出经过压缩后能恢复如初
  • info GAN :G的输入为z和c的concatenate,增加一个与D共享部分权重的Q,Q的输入为G的输出,Q的输出为对c的估计,也就是希望G把c的信息编码到图片中,由Q来解码,那么这个信息可能被编码为图片的某些语义信息,也可能没有,c还是随机生成的,所以真实图片并没有对应的c,也就不能训练Q。注意和cGAN区分。
  • conditional gan : G的输入为z和c的concatenate,D的输入为G的输出和c的concatenate,这个c不再是随便给的,而是人为给的具有意义的label,也就是说即使是真实图片也有对应的c
  • couple GAN : 两个G两个D,两个G共享前几层,两个D共享后几层,给两个D的真实图片来自两个不同的数据集,cGAN能同时生成两张相关的图片,比如一个人戴眼镜和不带眼睛的两张照片,或者笑和不笑,金色头发和黑色头发,躺着的9和立着的9之类的,重点是,能够一次生成同一个人的两张图片,嗯仅此而已,不要与风格迁移混在一起。
  • image to image translation :是cGAN的具体应用,但是D不再需要条件输入,而把这种相似性约束用L1Loss来完成。需要成对的图片作为数据集,G的输入是风格1的图片,G的loss是G的输出通过D得到的loss加上与该输入对应的风格2的图片同G的输出的L1差;G采用U-net结构;D只对采样的patch进行判别 ,认为D来判别纹理等局部高频信息而L1loss来判别低频主要信息。由于cGAN的随机向量z输入在此处总是被忽略,所以不用z而对G的中间进行drop out达到了微弱的增加随机性的效果
  • text to image Synthesis :也是cGAN的具体应用,这里的c是text经过embedding后的向量输入。
    • 对于G来说,一开始就把c和随机向量z concatenate作为输入,对于D来说则是先把G的输出或真实图片先经过几层downsample到44大小,再把c复制到44的大小,在depth的方向上concatenate这两者,然后继续feedforward。
    • 与普通GAN不同的是,D的输入不再是只有生成样本(带随机标签)和真实样本(带真实标签),同时还有真实样本(带不匹配标签),增加的这第三种样本同样应该被判为fake。
    • GAN-INT的思想,就是G和D的c输入不一定是一段有意义的text经过embedding后得到的c,也可能是两段text embedding后得到的向量插值得到的c,这样能够增加c的多样性,学得渐变的c,但是注意这个造出来的c并没有任何对应的真实图片,也不一定代表一个写得出来的句子,所以只能是用来作为G生成的图片的c来作为D的输入,论文提到插值的 z + β t 1 + ( 1 − β ) t 2 z + \beta t_1 + (1-\beta)t_2 z+βt1+(1β)t2 β = 0.5 \beta = 0.5 β=0.5 works well
    • 还有一个有趣的东西,就是当你这个GAN训练好之后,你可以再训练一个regressor,来将G的输出回归到G的输入向量z上面去,这个z代表的是图片的style,当这个regressor训练完毕,你可以将一张图片的style编码成为z,然后加上一段t,再输入到G,就可以完成风格迁移,当然这里的 style也可能是背景之类的信息,这个是不可控的
  • face aging
    • 与image to image translation GAN有所不同的是,网络的输入不是原始图片,而是原始图片经过Encoder的编码
    • 先预训练好一个cGAN(输入为随机向量z和年龄向量y),然后用G 的z输入和输出来训练Encoder,作者认为,Image to image translation GAN所采用的L1loss并不能很好的衡量主要语义信息(需要的是人的个性化特征,但是pixel wise的loss并不能衡量这个信息),并且会产生模糊,所以希望通过E来将图片编码为语义信息
    • 然后,用E得到的z经过G重建后的图片和原始图片不太像,所以又用一个Identity Preserving Optimizor来进一步完善这个vector
    • 衡量z的完善效果的工作有人做过,是通过将z重建得到的图片(用一个G)和真实图片求欧氏距离,反向传播来优化z的优化器。但是作者认为欧氏距离不能很好地度量语义信息,所以再加上了个face recognition网络,类似perception loss,可以将图片编码为语义FR(x),然后通过衡量FR(x)和FR(x*)的L2Loss,经过FR->G->IP来训练IP,这个face recognition是Face Net中截取出来的一段网络(果然和perception loss一样)
    • 所以呢,前面这个latent vector approximate最终是得到一个完善的编码器,也就是下图中左边那个框的上面两个网络,能够把图片的个性化人脸特征提取出来,从而作为face aging 的输入,而这时的face aging就是一个普通的conditional GAN了,也不普通其实,没有随机向量输入,全部输入都是确定的,由初始图片得到向量z,然后和年龄c concatenate,输入到一个cGAN,就可以生成一个老了的人脸
    • GAN家族简记_第1张图片
  • cycleGAN :image to image translation的升级。不需要成对的图片,只需要两个数据集,就能学得风格迁移;两个G和两个D,G1以数据集1为输入,生成的图片和数据集2混合给D2进行辨别,G2以数据集2作为输入,生成的图片和数据集1给D1进行辨别;同时要求G1生成的图片作为G2的输入能产生和G1的输入一样的图片,G2同理
  • PG-GAN
    • 网络在训练过程中不断加层不断提高分辨率,提高分辨率的时候采取平滑的方法,慢慢改变 α \alpha α,同时使用许多训练的trick使得最终生成十分清晰逼真的图片;GAN家族简记_第2张图片GAN家族简记_第3张图片
    • 移除了deconv 网络,改用了conv + upsample(邻域插值之类的方法),原因是deconv层会产生checkboard(棋盘效应),简单来说就是stride和size设置不当时导致有些地方产生重叠而有些地方没有重叠,就会产生棋盘效果的纹理,具体见这篇网站:https://distill.pub/2016/deconv-checkerboard/
    • 提出了minibatch standard deviation(MSD);
    • 使用WGAN-GP,但是n=1,为了使G和D能力平衡,尽量使不同scale的G和D的参数数量都相同
    • 移除了各种BN层,而该用pixelNorm
    • 移除tanh
  • SAGAN
  • styleGAN :
    • 提出了一个新的模型:
    • GAN家族简记_第4张图片
    • 原来的latent code依赖于原本数据集的分布,所以不可避免地有特征纠缠,新的模型避免了这个问题,有更高的线性可分性
    • AdaIN:在这里插入图片描述
    • 由于AdaIN中Normalize的存在,每个AdaIN只影响下一个conv层,主要是对特征的重要性进行重新分布
    • 用z1 z2产生w1 w2,在G网络的前端使用w1,后面部分使用w2,将从w1改成w2的地方往前移或者往后移,并参考纯用w1和w2的的图片输出,可以发现w对网络前端的影响和对网络后端的影响是不同的,w在前端主要决定更加全局化的东西比如姿势、脸型、发型等,网络后端决定肤色、发色、背景等特征,这个trick不只是为了可视化探究,也在训练中使用,作为一种正则化的改善,是为了防止网络认为不同层输入的w是同一个而对后面的w进行忽略
      noise 也有类似的效果在前后端影响网络不同层次的特征,但是noise只是修改一些小的细节,如发丝的微小变化、背景的小变化、肤色的微小变化等,也就是说不同noise产生的图看起来还是同一个人
    • 由于不同特征的产生是在不同的scale,所以可以认为特征向量w对网络的不同特征的影响是独立开来的而避免了特征纠缠,而noise是pixel wise的,如果模型试图通过noise来产生全局特征信息,会导致语义不连续性,会被D判别出来,所以模型会用w来推断语义信息
    • 关于z怎么产生的暂时没看懂,z的线性可分之类的也没看懂
  • esrgan

你可能感兴趣的:(论文阅读笔记,GAN,Deeplearning)