生成对抗网络
2019-12-30 09:46:08 0 举报
AI智能生成
生成对抗网络的技术整理
作者其他创作
大纲/内容
框架
生成器 G
负责生成样本
输入为D(z)或者是原始样本
判别器 D
负责判断生成器生成的样本是否为真
输入为随机噪声z
最终结果
二者互相博弈,随着时间的进行,都会越来越强。最终生成器生成的图像使得判别器完全无法判别真假。
目标函数
生成器的目标是更多的迷惑D,所以他希望D(G(z))越大越好,即损失函数越小越好
判别器的目标是准确的区分原数据和生成器的数据,希望D(G(z))越小越好,即损失函数越大越好
评判收敛
作为一个训练良好的GAN,其Loss就是降不下去的。衡量GAN是否训练好了,只能由人肉眼去看生成的图片质量是否好。
如何理解随机噪声z ?
将 G 的输入信号 z 看作生成图像的一种表示 。
z之间可以做算数运算,类似于word2vec
为什么容易训练崩溃 ?
训练过程中,生成器和判别器存在一方压倒另一方的情况
难以判断收敛,需要实验关注生成的图片质量
WGAN提出新的loss设计方式
需要平衡两者,若其中一方很好,那另一方就不存在意义,所以要训练的不好也不坏才行
改进1
没有一个很好的评价是否收敛的指标
WGAN
提出了一种新的loss设计方式
Inception Score
Mode Score
Kernel MMD (Maximum Mean Discrepancy)
Wasserstein distance
Fréchet Inception Distance (FID)
1-Nearest Neighbor classifier
改进2
避免GAN的训练崩溃问题
- 归一化图像输入到(-1,1)之间;Generator最后一层使用tanh激活函数
- 生成器的Loss采用:min (log 1-D)。因为原始的生成器Loss存在梯度消失问题;训练生成器的时候,考虑反转标签,real=fake, fake=real
- 不要在均匀分布上采样,应该在高斯分布上采样
- 一个Mini-batch里面必须只有正样本,或者负样本。不要混在一起;如果用不了Batch Norm,可以用Instance Norm
- 避免稀疏梯度,即少用ReLU,MaxPool。可以用LeakyReLU替代ReLU,下采样可以用Average Pooling或者Convolution + stride替代。上采样可以用PixelShuffle, ConvTranspose2d + stride
- 平滑标签或者给标签加噪声;平滑标签,即对于正样本,可以使用0.7-1.2的随机数替代;对于负样本,可以使用0-0.3的随机数替代。 给标签加噪声:即训练判别器的时候,随机翻转部分样本的标签。
- 如果可以,请用DCGAN或者混合模型:KL+GAN,VAE+GAN。
- 使用LSGAN,WGAN-GP
- Generator使用Adam,Discriminator使用SGD
- 尽快发现错误;比如:判别器Loss为0,说明训练失败了;如果生成器Loss稳步下降,说明判别器没发挥作用
- 如果有标签,请尽量利用标签信息来训练
- 给判别器的输入加一些噪声,给G的每一层加一些人工噪声。
- 多训练判别器,尤其是加了噪声的时候
- 对于生成器,在训练,测试的时候使用Dropout
改进3
mode collapsing
某个模式出现大量重复样本
生成样本缺乏多样性,可能围绕一个真实样本生成多个重复样本
解决方法
针对目标函数的改进
UnrolledGAN
在更新生成器时更新k次生成器,参考的Loss是判别器后面k次迭代的loss。注意,判别器后面k次迭代不更新自己的参数,只计算loss用于更新生成器。
DRAGAN
引入博弈论中的无后悔算法,改造其loss
EBGAN
加入VAE的重构误差
针对网络结构的改进
Multi agent diverse GAN(MAD-GAN)
采用多个生成器
loss中加入一个正则项,正则项使用余弦距离惩罚三个生成器生成样本的一致性
MRGAN
添加了一个判别器来惩罚生成样本的mode collapse问题
Mini-batch Discrimination
在判别器的中间层建立一个mini-batch layer用于计算基于L1距离的样本统计量
改进4
随机噪声z转成图像大小,参数巨大
DCGAN
CNN 结合 GAN
D的网络结构
不使用池化,用带有步长的卷积替代Strided convolutions
使用 Batch Normalization 帮助模型收敛
所有层上使用LeakyReLU激活函数
G的网络结构
不使用池化,用fractional-strided convolutions替代
使用 Batch Normalization 帮助模型收敛
除了输出层外的所有层使用ReLU,输出层采用tanh
如何生成指定类型的图像
CGAN(Conditional)
以MNIST为例
G 输入一个噪声 z ,一个数字标签 y(y 的取值范围是 0~9),输出和数字标签相符合的图像G(z|y)
D 输入一个图像 x,一个数字标签y ,输出图像和数字符合的概率 D(x|y)
应用
图像翻译
任务
图像去噪
图像超分辨
pix2pixHD提出了一种多尺度的生成器以及判别器等方式从而生成高分辨率图像。
Vid2Vid则在pix2pixHD的基础上利用光流,时序约束生成了高分辨率视频。
图像补全
将建筑标注图像转换为照片
将卫星图像转换为地图
将白天的图片转换为夜晚的图片
将边缘轮廓线转段为真实物体
将街景的标注图像变为真实照片
风格迁移
有监督 VS无监督
是否存在原始和目标一一对应的数据
pix2pix VS CycleGAN
pix2pix
一种特殊的 CGAN ,可以较好解决一类“图像翻译”问题
任务:将 Y 类型的图像转换为 X类型的图像
框架
G:输入为Y类图像y,输出为生成图像G(y)
D:输入为一个X类图像x,一个Y类图像y。D需要判断 x 图像是否是真正的 y 对应的图像,并输出一个概率
G 缺少一个躁声 z 的输入
加入 x 与 G(y) 之间的L1正则项
提出PatchGAN用于加快判别器计算收敛
CycleGAN
不必使用成对样本也可以进行“图像翻译”
生成器采用U-Net,判别器采用LS-GAN
两个域的数据,记为A,B,假设是普通的马和斑马;
定义两个生成器G_A,G_B;分别表示BtoA,AtoB;
定义两个对应的判别器D_A,D_B
定义两个生成器G_A,G_B;分别表示BtoA,AtoB;
定义两个对应的判别器D_A,D_B
引入 循环一致性损失( cycle consistency loss ):生成图片与原图之间的均方误差
缺点
要针对每一个域训练一个模型,效率太低。任务是将橘子转换为红苹果和青苹果。需要针对红苹果,青苹果分别训练一个模型。
每一个域都需要搜集大量数据,太麻烦。不管是红苹果还是青苹果,都是苹果。两个任务信息可以共享,没必要训练两个模型。
改进:单一域的图像转换 如何支持 多领域的
StarGAN
不同域的数据可以混合在一起训练,提高了数据利用率
文本生成
GAN为什么不适合文本任务?
文本数据较为离散
seqGAN用于文本生成
GAN + 强化学习
- 生成器不取argmax。
- 每生成一个单词,则根据当前的词语序列进行蒙特卡洛采样生成完成的句子。然后将句子送入判别器计算reward。
- 根据得到的reward进行策略梯度下降优化模型。
数据增广
行人重识别问题一个难点在于不同摄像头下拍摄的人物环境,角度差别非常大,导致存在较大的Domain gap。
对于每一对摄像头都训练一个cycleGAN,这样就可以实现将一个摄像头下的数据转换成另一个摄像头下的数据,但是内容(人物)保持不变。
语音
音频去噪的SEGAN,缓解了传统方法支持噪声种类稀少,泛化能力不强的问题。
语音增强,提升了ASR系统的识别率。
0 条评论
下一页
为你推荐
查看更多