百度AI Paddle GAN七日打卡训练营笔记

normalize

跟paddlepaddle不同,pytorch的torchvision.transforms.toTensor已经将数据放缩到0,1之间
此时normalize设置0.5,0.5才能把数据变换到-1,1,若数据原本均值方差正好为0.5,变换后均值0方差1
normalize不会改变数据分布!,未必将数据变为正态分布

模式坍塌

表现为生成的图片单一,不具备多样性,原因在于仅拟合了部分真实数据分布
通过对判别器损失函数求导,得到判别器极值,反代回生成器损失函数中,此时生成器loss等价变换为最小化真实分布与生成分布之间的JS散度,即 \(2JS(P_r || P_g) - 2 \log 2\)。这部分跟"2022-6-27.md"中记录的基于生成对抗网络的手写汉字生成技术研究_吕圣贵这篇论文提及的判别器过于优秀影响生成器学习同理。
因此本质原因是损失函数的问题,优化JS散度能将生成分布拉向真实分布,最终以假乱真,前提是两个分布有所重叠。但是训练中数据分布和生成器分布不重叠,即使重叠,采样的样本也大概率不重合,此时真实分布与生成器分布的JS散度等于常数\(\log 2\),导致生成器loss梯度为0,无法优化

因此针对这个问题提出了Least Square GAN(LSGAN),用平方损失(MSE损失函数)代替二分类损失,其中参数abc若满足b-c=1,b-a=2则成为皮尔森卡方散度
虽然生成图片更加清晰且训练稳定,但LSGAN对离群点的过度惩罚,可能导致样本生成的“多样性”降低,生成样本很可能只是对真实样本的简单“模仿”和细微改动。

WGAN与推土机距离(Earth-Mover distance)

WGAN利用EM距离代替JS,KL散度来表示生成与真实分布的距离衡量,从而改进了原始GAN存在的两类问题。(Wasserstein距离 优越性在于: 即使两个分布没有任何重叠,也可以反应他们之间的距离。)
假设真实分布是\(P_r\)​,生成器分布是\(P_{\theta}\),两种分布就像两堆土,生成器土堆堆成真实分布土堆的方式有无数种,其中一种消耗最少的称为推土机距离EM。
其中判别器D要满足 \(D\in 1-lipschitz\) 限制,直观来说会让生成器的标签足够平滑,即输出的变化要小于输入的变化
输入x是不好限制的,那么可以限制参数w。在神经网络中的实现就是判别器参数截断,即\(w\in [c,\;-c]\),用clip即可实现

WGAN与原始GAN原始形式区别:

  • 判别器最后一层去掉sigmoid
  • 生成器和判别器的loss不取log
  • 每次更新判别器的参数之后把它们的值截断到不超过一个 固定常数c
  • 不要用基于动量的优化算法(包括momentum和 Adam),推荐RMSProp

但是,有时一味地通过裁剪weight参数的方式保证训练稳定性,可能导致生成低质量低清晰度的图片.

WGAN-GP

由于w即使很小,累积多层之后输出也可能很大,不能保证输入一定小于输出,提出了WGAN-GP。同时为了解决WGAN有时生成低质量图片的问题,WGAN-GP舍弃裁剪D网络weights参数的方式,而是采用裁剪D网络梯度的方式(依据输入数据裁剪)
损失函数中新增第三项 \(\left \|{\nabla}_x​D(x) \right \|\),使D的梯度小于1的约束,其中x为真实分布与生成分布之外的样本

人脸生成和PGGAN

DCGAN要生成高分辨率一点的图片,发现会生成的图片有很奇怪的地方,随着分辨率扩大,问题会越来越明显。
渐近式增长生成对抗网络PGGAN,核心思想是先训练低分辨率图像的生成,等待训练结束再加入更高分辨率的层一起训练。由于每次前面的层已经训练好,所以会集中训练后添加的层,所以训练难度不会提高。
而已经训练好的低分辨率层由于使用类似ResNet的跳跃连接因此不需要冻结参数,这即是平滑过渡技术(Smooth Fade in)。

StyleGAN

以往的模型控制所生成图像特定特征的能力非常有限,即容易发生特征纠缠,稍微调整输入就使得输出完全不同。
因此StyleGAN使用 Mapping network 对隐藏空间(latent space),即随机采用的噪声变量进行解耦,缓解特征纠缠
之后在 Synthesis network 将特征解缠后的中间向量 W 变换为样式控制向量,从而参与影响生成器的生成过程
同时提出了自适应实例归一化(AdaIN),这是实例归一化(Instance Norm)的变体,直接将目标风格图像的均值方差作为实例归一化的缩放因子和偏置得来
​特征图的均值和方差中带有图像的风格信息。所以在AdaIN中,特征图减去自己的均值除以方差,去掉自己的风格。再乘上新风格的方差加上均值,以实现转换的目的。StyleGAN的风格不是由图像的得到的,而是w生成的。

StyleGAN2

StyleGAN2的任务是image generation,给定特定长度的向量,生成该向量对应的图像
为了解决StyleGAN中AdaIN带来的水印问题,即生成的图片有水滴状伪影,StyleGAN2使用权重解调(Weight Demodulation)代替中AdaIN
权重解调就是对权重做归一化,这种方式与Instance Norm在数学上并非完全等价

此外StyleGAN2还有一些跟StyleGAN的不同之处:

  • 移除初期常数
  • normalization中不再需要mean,直接除以std
  • 将noise模块移出style box

此外StyleGAN2的作者还发现,StyleGAN中Progressive Generation导致生成高分辨率时,图片部分细节不随主体变化而变化,比如人脸转向不同方向时牙齿、眼珠始终保持正对镜头,没有随着头移动
因此作者根据MSG-GAN重新设计了两种网络结构

Pixel2Pixel

pix2pix是一个经典的图像翻译模型,使用成对数据进行训练。
模型使用的训练数据是真实人像以及画师画的对应人像卡通画(像素级对应,因此pixel2pixel?)。真人像要收集不同光照、姿态表情的图像,提高鲁棒性。真人像好收集,数据量较大,但卡通画收集成本很高。
生成器输入是真人照片,输出是卡通画,输入输出图片轮廓位置信息相同,采用的结构是U-Net,适合传递位置信息。
判别器输入类似Conditional GAN,是将真人照和卡通画在通道维度拼接,然后判断卡通画是真实的还是生成的,以及判断真人照和卡通画是否相符(成对)。
判别器采用Patch GAN,输出是一个单通道的特征图,而不是GAN中的一个判断真假的概率值。特征图中每个元素值表示卡通图每个小区域的逼真程度,Pacth就是块的意思。
损失函数采用L1 loss,用真实卡通画约束生成卡通画

CycleGAN

CycleGAN其实是由两个判别器(Dx和Dy)以及两个生成器(G和F)组成

  1. G将X域图像映射到Y域,如真人照映射到卡通画
  2. F将Y域图像映射到X域,如卡通画映射到真人照
  3. Dx和Dy分别判断两个域的图像的真假

将输入x转换过去又转换回来,生成新的图像。通过输入输出图像的loss(L1或L2都行)约束生成图像在结构上保持一致
为什么要连两个生成器和两个判别器呢?论文中说,是为了避免所有的X都被映射到同一个Y,比如所有男人的图像都映射到范冰冰的图像上,这显然不合理,所以为了避免这种情况,论文采用了两个生成器的方式,既能满足X->Y的映射,又能满足Y->X的映射,这一点其实就是变分自编码器VAE的思想,是为了适应不同输入图像产生不同输出图像

比如要学习真人照到卡通画的映射,输入X任取一张真人照,通过G生成对应的卡通画y,再使用F将y转换为对应的真人照X',通过cycle-consistency loss 约束X与X'在内容上一致,从而保证生成的y也与X有一致的内容(否则X'肯定也跟X不一致)。
而Dx则判断y是否属于卡通画的范畴,它对于真实的卡通画样本Y要尽量给高分,对于G生成的y尽量给低分,从而指导G生成具有卡通画风格的图片
另一个方面,对于 Y -> x -> Y' 也是一样的原理,使生成器F学习到如何将卡通画转换为对应内容的真人照

CycleGAN虽然可以使用非成对数据训练,但是两个域的目标要规定好,即每个域的图像要具有一定的规则,且风格越统一越好。比如X域图像都是油画,且都是梵高的油画。
CycleGAN缺陷:缺少有监督信息(pixel2pixel有成对数据,位置信息对应),所以需要的数据量会更多,收敛也更慢。

U-GAT-IT

U-GAT-IT用于人像与漫画图的转换,结构上继承了CycleGAN的设计,也有两个生成器和判别器,loss有四种:

  1. GAN loss:生成对抗损失,生成尽可能精美的漫画图来骗过判别器(让判别器分不清这个漫画图是不是生成的)
  2. Cycle loss:跟Cycle GAN一样,输入转为漫画图再转回来,用L1 loss约束转换前后的图像,使生成的图像结构不发生大的变化。
  3. Identity loss:将输入也设置为漫画图,输出自然还得是漫画图,约束输入输出颜色尽量相似
  4. CAM loss:本质是二分类loss,将编码器提取的特征图通过一个网络分支输入全连接层做一个分类任务(真人or动漫)。再将全连接层权重拿出乘到另一个编码特征图输出分支上,类似attention机制,将注意力放在需要重点关注的特征上。

U-GAT-IT论文一大贡献是AdaLIN,自适应实例归一化。输入是解码器各层特征,经过IN和LN之后使用可学习的ρ加权求和,然后使用CAM块(MLP)提取的统计特征γ和β来反归一化。作者发现IN更关注内容信息,LN更关注全局信息,ρ可以自适应地调整二者比重。

U-GAT-IT的缺点是转换为比较夸张的漫画之后,无法辨认出漫画的真实身份信息。要保留身份信息,实现写实风格的卡通画,有以下难点:

  • 使用传统图像处理技术生成的卡通图无法自适应地处理复杂的光照和纹理,效果较差;基于风格迁移的方法无法对细节进行准确地勾勒
  • 照片卡通化后容易丢失身份信息。基于非成对数据的图像翻译(Unpaired Image Translation)方法中的循环一致性损失(Cycle Loss)无法对输入输出的ID进行有效约束。(CycleGAN只能保证输入输出形状不发生明显变化,但是无法有效约束五官位置形状等)

Photo2Cartoon

Photo2Cartoon希望既可以生成精美的卡通画,又可以保留身份信息可以识别,所以做了三个设计:

  1. 在输入输出部分都加了两个Hourglass 模块,强化特征提取和重建,用于提取内容不变性的特征;
  2. Face ID Loss:约束卡通画的身份信息。使用预训练的人脸模型,提取输入输出的ID特征,并用余弦距离进行约束。实验中Face ID Loss可以明显提升五官相似性。
  3. Soft-AdaLIN:为了更好的利用不同尺度的编码特征,将不同尺度编码特征和高层CAM特征融合,再应用于解码特征中。底层特征中有丰富的纹理、色彩等信息,这样做可以更好的将照片信息迁移到卡通画上。

递进训练
由于人脸数据多种多样,如果这些数据混合训练,会导致最终输出风格不确定,而每个类别数量也不足以单独训练
因此先所有数据混合训练,得到基础模型
根据年龄将数据分为少年、青年、老年三个部分,基于基础模型分别训练三个模型
进一步考虑性别信息,基于之前的三个模型最终训练出六个模型。
模型推断时,先收集用户的年龄、性别属性,再使用对应的模型进行生成。

posted @ 2022-08-11 18:27  NoNoe  阅读(232)  评论(0编辑  收藏  举报