调整目录层次,删除多余内容

This commit is contained in:
scutan90 2019-04-07 21:47:22 +08:00
parent 67d09b71fa
commit ebdfc35985
1 changed files with 54 additions and 74 deletions

View File

@ -1,34 +1,15 @@
[TOC]
# Author
@中科院-郭晓锋
# TODO
- [x] 加入整章的框架图
- [x] 加入GAN在语音文字当中的应用文本到图像的翻译文本生成SeqGAN
- [x] GAN为什么在文本语音处理任务上效果不佳
- [x] 整理继勇给的github上面的资料
- [x] 补充GAN在语音领域数据增广超分辨与图像复原当中的应用
- [x] 生成模型的评价标准
- [x] 补充GAN评价指标对比以及评价指标本身的优缺点。
- [x] 多读GAN的综述提升Insight
- [ ] 合理组织语言,保证逻辑严谨,思路清晰
# 7 生成对抗网络
# 第七章 生成对抗网络
## 7.1 GAN基本概念
### 7.1.1 什么是生成对抗网络?
#### 如何通俗理解GAN
### 7.1.1 如何通俗理解GAN
生成对抗网络(GAN, Generative adversarial network)自从2014年被Ian Goodfellow提出以来掀起来了一股研究热潮。GAN由生成器和判别器组成生成器负责生成样本判别器负责判断生成器生成的样本是否为真。生成器要尽可能迷惑判别器而判别器要尽可能区分生成器生成的样本和真实样本。
生成对抗网络(GAN, Generative adversarial network)自从2014年被Ian Goodfellow提出以来掀起来了一股研究热潮。GAN由生成器和判别器组成生成器负责生成样本判别器负责判断生成器生成的样本是否为真。生成器要尽可能迷惑判别器而判别器要尽可能区分生成器生成的样本和真实样本。
在GAN的原作[1]中,作者将生成器比喻为印假钞票的犯罪分子,判别器则类比为警察。犯罪分子努力让钞票看起来逼真,警察则不断提升对于假钞的辨识能力。二者互相博弈,随着时间的进行,都会越来越强。那么类比于图像生成任务,生成器不断生成尽可能逼真的假图像。判别器则判断图像是否是真实的图像,还是生成的图像,二者不断博弈优化。最终生成器生成的图像使得判别器完全无法判别真假。
在GAN的原作[1]中,作者将生成器比喻为印假钞票的犯罪分子,判别器则类比为警察。犯罪分子努力让钞票看起来逼真,警察则不断提升对于假钞的辨识能力。二者互相博弈,随着时间的进行,都会越来越强。那么类比于图像生成任务,生成器不断生成尽可能逼真的假图像。判别器则判断图像是否是真实的图像,还是生成的图像,二者不断博弈优化。最终生成器生成的图像使得判别器完全无法判别真假。
#### GAN的形式化表达
### 7.1.2 GAN的形式化表达
上述例子只是简要介绍了一下GAN的思想下面对于GAN做一个形式化的更加具体的定义。通常情况下无论是生成器还是判别器我们都可以用神经网络来实现。那么我们可以把通俗化的定义用下面这个模型来表示
![GAN网络结构](./img/ch7/7.1-gan_structure.png)
@ -36,7 +17,7 @@
生成的假样本与真实样本放到一起被随机抽取送入到判别器D由判别器去区分输入的样本是生成的假样本还是真实的样本。整个过程简单明了生成对抗网络中的“生成对抗”主要体现在生成器和判别器之间的对抗。
#### GAN的目标函数是什么
### 7.1.3 GAN的目标函数是什么
对于上述神经网络模型如果想要学习其参数首先需要一个目标函数。GAN的目标函数定义如下
$$
@ -48,8 +29,8 @@ $$
生成器的优化通过$\mathop {\min }\limits_G({\mathop {\max }\limits_D V(D,G)})$实现。注意,生成器的目标不是$\mathop {\min }\limits_GV(D,G)$,即生成器**不是最小化判别器的目标函数**,生成器最小化的是**判别器目标函数的最大值**判别器目标函数的最大值代表的是真实数据分布与生成数据分布的JS散度(详情可以参阅附录的推导)JS散度可以度量分布的相似性两个分布越接近JS散度越小。
7.1.4 GAN的目标函数和交叉熵有什么区别
#### GAN的目标函数和交叉熵有什么区别
判别器目标函数写成离散形式即为:
$$
V(D,G)=-\frac{1}{m}\sum_{i=1}^{i=m}logD(x^i)-\frac{1}{m}\sum_{i=1}^{i=m}log(1-D(\tilde{x}^i))
@ -60,7 +41,7 @@ $$
-------------------
[1]: Goodfellow, Ian, et al. "Generative adversarial nets." Advances in neural information processing systems. 2014.
### 7.1.2 GAN的Loss为什么降不下去
### 7.1.5 GAN的Loss为什么降不下去
对于很多GAN的初学者在实践过程中可能会纳闷为什么GAN的Loss一直降不下去。GAN到底什么时候才算收敛其实作为一个训练良好的GAN其Loss就是降不下去的。衡量GAN是否训练好了只能由人肉眼去看生成的图片质量是否好。不过对于没有一个很好的评价是否收敛指标的问也有许多学者做了一些研究后文提及的WGAN就提出了一种新的Loss设计方式较好的解决了难以判断收敛性的问题。下面我们分析一下GAN的Loss为什么降不下去
对于判别器而言GAN的Loss如下
@ -73,7 +54,7 @@ $$\mathop {\min }\limits_G \mathop {\max }\limits_D V(D,G) = {\rm E}_{x\sim{p_{d
也就是说无论是判别器还是生成器。loss的高低不能代表生成器的好坏。一个好的GAN网络其GAN Loss往往是不断波动的。
看到这里可能有点让人绝望似乎判断模型是否收敛就只能看生成的图像质量了。实际上后文探讨的WGAN提出了一种新的loss度量方式让我们可以通过一定的手段来判断模型是否收敛
### 7.1.3 生成式模型、判别式模型的区别?
### 7.1.6 生成式模型、判别式模型的区别?
对于机器学习模型,我们可以根据模型对数据的建模方式将模型分为两大类,生成式模型和判别式模型。如果我们要训练一个关于猫狗分类的模型,对于判别式模型,只需要学习二者差异即可。比如说猫的体型会比狗小一点。而生成式模型则不一样,需要学习猫张什么样,狗张什么样。有了二者的长相以后,再根据长相去区分。具体而言:
@ -99,15 +80,13 @@ X | 0 1/4 3/4
显然从上面的分析可以看出。判别式模型似乎要方便很多因为生成式模型要学习一个XY的联合分布往往需要很多数据而判别式模型需要的数据则相对少因为判别式模型更关注输入特征的差异性。不过生成式既然使用了更多数据来生成联合分布自然也能够提供更多的信息现在有一个样本X,Y,其联合概率PX,Y经过计算特别小那么可以认为这个样本是异常样本。这种模型可以用来做outlier detection。
### 7.1.4 什么是mode collapsing?
#### 什么是mode collapsing
### 7.1.7 什么是mode collapsing?
某个模式(mode)出现大量重复样本,例如:
![model collapsing](./img/ch7/model_collpsing.png)
上图左侧的蓝色五角星表示真实样本空间,黄色的是生成的。生成样本缺乏多样性,存在大量重复。比如上图右侧中,红框里面人物反复出现。
#### 如何解决mode collapsing
### 7.1.8 如何解决mode collapsing
**针对目标函数的改进方法**
@ -131,7 +110,9 @@ MRGAN则添加了一个判别器来惩罚生成样本的mode collapse问题。
Mini-batch discrimination在判别器的中间层建立一个mini-batch layer用于计算基于L1距离的样本统计量通过建立该统计量实现了一个batch内某个样本与其他样本有多接近。这个信息可以被判别器利用到从而甄别出哪些缺乏多样性的样本。对生成器而言则要试图生成具有多样性的样本。
### 7.1.5 如何客观评价GAN的生成能力
## 7.2 GAN的生成能力评价
### 7.2.1 如何客观评价GAN的生成能力
最常见评价GAN的方法就是主观评价。主观评价需要花费大量人力物力且存在以下问题
@ -141,7 +122,7 @@ Mini-batch discrimination在判别器的中间层建立一个mini-batch layer用
因此就有许多学者提出了GAN的客观评价方法。
#### Inception Score
### 7.2.2 Inception Score
对于一个在ImageNet训练良好的GAN其生成的样本丢给Inception网络进行测试的时候得到的判别概率应该具有如下特性
- 对于同一个类别的图片,其输出的概率分布应该趋向于一个脉冲分布。可以保证生成样本的准确性。
@ -153,12 +134,12 @@ $$IS(P_g)=e^{E_{x\sim P_g}[KL(p_M(y|x)\Vert{p_M(y)})]}$$
**特点可以一定程度上衡量生成样本的多样性和准确性但是无法检测过拟合。Mode Score也是如此。不推荐在和ImageNet数据集差别比较大的数据上使用。**
#### Mode Score
### 7.2.3 Mode Score
Mode Score作为Inception Score的改进版本添加了关于生成样本和真实样本预测的概率分布相似性度量一项。具体公式如下
$$MS(P_g)=e^{E_{x\sim P_g}[KL(p_M(y|x)\Vert{p_M(y)})-KL(p_M(y)\Vert p_M(y^*))]}$$
#### Kernel MMD (Maximum Mean Discrepancy)
### 7.2.4 Kernel MMD (Maximum Mean Discrepancy)
计算公式如下:
$$MMD^2(P_r,P_g)=E_{x_r\sim{P_r},x_g\sim{P_g}}[\lVert\Sigma_{i=1}^{n1}k(x_r)-\Sigma_{i=1}^{n2}k(x_g)\rVert]$$
@ -168,7 +149,7 @@ MMD值越小两个分布越接近。
**特点:可以一定程度上衡量模型生成图像的优劣性,计算代价小。推荐使用。**
#### Wasserstein distance
### 7.2.5 Wasserstein distance
Wasserstein distance在最优传输问题中通常也叫做推土机距离。这个距离的介绍在WGAN中有详细讨论。公式如下
$$WD(P_r,P_g)=min_{\omega\in\mathbb{R}^{m\times n}}\Sigma_{i=1}^n\Sigma_{i=1}^m\omega_{ij}d(x_i^r,x_j^g)$$
@ -177,7 +158,7 @@ Wasserstein distance可以衡量两个分布之间的相似性。距离越小
**特点:如果特征空间选择合适,会有一定的效果。但是计算复杂度为$O(n^3)$太高**
#### Fréchet Inception Distance (FID)
### 7.2.6 Fréchet Inception Distance (FID)
FID距离计算真实样本生成样本在特征空间之间的距离。首先利用Inception网络来提取特征然后使用高斯模型对特征空间进行建模。根据高斯模型的均值和协方差来进行距离计算。具体公式如下
$$FID(\mathbb P_r,\mathbb P_g)=\lVert\mu_r-\mu_g\rVert+Tr(C_r+C_g-2(C_rC_g)^{1/2})$$
@ -185,7 +166,7 @@ $\mu,C$分别代表协方差和均值。
**特点:尽管只计算了特征空间的前两阶矩,但是鲁棒,且计算高效。**
#### 1-Nearest Neighbor classifier
### 7.2.7 1-Nearest Neighbor classifier
使用留一法结合1-NN分类器别的也行计算真实图片生成图像的精度。如果二者接近则精度接近50%否则接近0%。对于GAN的评价问题作者分别用正样本的分类精度生成样本的分类精度去衡量生成样本的真实性多样性。
- 对于真实样本$x_r$进行1-NN分类的时候如果生成的样本越真实。则真实样本空间$\mathbb R$将被生成的样本$x_g$包围。那么$x_r$的精度会很低。
@ -193,13 +174,13 @@ $\mu,C$分别代表协方差和均值。
**特点:理想的度量指标,且可以检测过拟合。**
#### 其他评价方法
### 7.2.8 其他评价方法
AISKDE方法也可以用于评价GAN但这些方法不是model agnostic metrics。也就是说这些评价指标的计算无法只利用生成的样本真实样本来计算。
### 7.1.6 其他常见的生成式模型有哪些?
## 7.3 其他常见的生成式模型有哪些?
#### 什么是自回归模型pixelRNN与pixelCNN
### 7.3.1 什么是自回归模型pixelRNN与pixelCNN
自回归模型通过对图像数据的概率分布$p_{data}(x)$进行显式建模,并利用极大似然估计优化模型。具体如下:
$$
@ -213,7 +194,7 @@ $$
显然不论是对于pixelCNN还是pixelRNN由于其像素值是一个个生成的速度会很慢。语音领域大火的WaveNet就是一个典型的自回归模型。
#### 什么是VAE
### 7.3.2 什么是VAE
PixelCNN/RNN定义了一个易于处理的密度函数我们可以直接优化训练数据的似然对于变分自编码器我们将定义一个不易处理的密度函数通过附加的隐变量$z$对密度函数进行建模。 VAE原理图如下[6]
@ -230,19 +211,17 @@ PixelCNN/RNN定义了一个易于处理的密度函数我们可以直接优
- VAE和GAN均是假设隐变量$z$服从某种分布,并学习一个映射$X=G(z)$,实现隐变量分布$z$与真实数据分布$p_{data}(x)$的转换。
- GAN使用判别器去度量映射$X=G(z)$的优劣而VAE通过隐变量$z$与标准正太分布的KL散度和重构误差去度量。
## 7.2 GAN的改进
## 7.4 GAN的改进与优化
### 7.2.1 如何生成指定类型的图像——条件GAN
### 7.4.1 如何生成指定类型的图像——条件GAN
条件生成对抗网络CGAN, Conditional Generative Adversarial Networks作为一个GAN的改进其一定程度上解决了GAN生成结果的不确定性。如果在Mnist数据集上训练原始GANGAN生成的图像是完全不确定的具体生成的是数字1还是2还是几根本不可控。为了让生成的数字可控我们可以把数据集做一个切分把数字0~9的数据集分别拆分开训练9个模型不过这样太麻烦了也不现实。因为数据集拆分不仅仅是分类麻烦更主要在于每一个类别的样本少拿去训练GAN很有可能导致欠拟合。因此CGAN就应运而生了。我们先看一下CGAN的网络结构
![CGAN网络结构](./img/ch7/CGAN网络结构.png)
从网络结构图可以看到对于生成器Generator其输入不仅仅是随机噪声的采样z还有欲生成图像的标签信息。比如对于mnist数据生成就是一个one-hot向量某一维度为1则表示生成某个数字的图片。同样地判别器的输入也包括样本的标签。这样就使得判别器和生成器可以学习到样本和标签之间的联系。Loss如下
$$\mathop {\min }\limits_G \mathop {\max }\limits_D V(D,G) = {\rm E}_{x\sim{p_{data}(x)}}[\log D(x|y)] + {\rm E}_{z\sim{p_z}(z)}[\log (1 - D(G(z|y)))]$$
$$\mathop {\min }\limits_G \mathop {\max }\limits_D V(D,G) = {\rm E}_{x\sim{p_{data}(x)}}[\log D(x|y)] + {\rm E}_{z\sim{p_z}(z)}[\log (1 - D(G(z|y)))]$$
Loss设计和原始GAN基本一致只不过生成器判别器的输入数据是一个条件分布。在具体编程实现时只需要对随机噪声采样z和输入条件y做一个级联即可。
### 7.2.3 CNN与GAN——DCGAN
### 7.4.2 CNN与GAN——DCGAN
前面我们聊的GAN都是基于简单的神经网络构建的。可是对于视觉问题如果使用原始的基于DNN的GAN则会出现许多问题。如果输入GAN的随机噪声为100维的随机噪声输出图像为256x256大小。也就是说要将100维的信息映射为65536维。如果单纯用DNN来实现那么整个模型参数会非常巨大而且学习难度很大低维度映射到高维度需要添加许多信息。因此DCGAN就出现了。具体而言DCGAN将传统GAN的生成器判别器均采用GAN实现且使用了一下tricks
@ -255,21 +234,19 @@ Loss设计和原始GAN基本一致只不过生成器判别器的输入数
网络结构图如下:
![CGAN网络结构图](./img/ch7/DCGAN%E7%BB%93%E6%9E%84%E5%9B%BE.png)
#### 如何理解GAN中的输入随机噪声
### 7.4.3 如何理解GAN中的输入随机噪声
为了了解输入随机噪声每一个维度代表的含义作者做了一个非常有趣的工作。即在隐空间上假设知道哪几个变量控制着某个物体那么僵这几个变量挡住是不是就可以将生成图片中的某个物体消失论文中的实验是这样的首先生成150张图片包括有窗户的和没有窗户的然后使用一个逻辑斯底回归函数来进行分类对于权重不为0的特征认为它和窗户有关。将其挡住得到新的生成图片结果如下
![DCGAN输入噪声理解](./img/ch7/DCGAN%E8%BE%93%E5%85%A5%E5%99%AA%E5%A3%B0%E7%90%86%E8%A7%A3.png)
此外,将几个输入噪声进行算数运算,可以得到语义上进行算数运算的非常有趣的结果。类似于word2vec。
![DCGAN输入噪声算术运算](./img/ch7/DCGAN%E8%BE%93%E5%85%A5%E5%99%AA%E5%A3%B0%E7%AE%97%E6%9C%AF%E8%BF%90%E7%AE%97.png)
### 7.2.4 如何度量GAN的收敛程度——WGAN/WGAN-GP
#### GAN为什么容易训练崩溃
### 7.4.4 GAN为什么容易训练崩溃
所谓GAN的训练崩溃指的是训练过程中生成器和判别器存在一方压倒另一方的情况。
GAN原始判别器的Loss在判别器达到最优的时候等价于最小化生成分布与真实分布之间的JS散度由于随机生成分布很难与真实分布有不可忽略的重叠以及JS散度的突变特性使得生成器面临梯度消失的问题可是如果不把判别器训练到最优,那么生成器优化的目标就失去了意义。因此需要我们小心的平衡二者,要把判别器训练的不好也不坏才行。否则就会出现训练崩溃,得不到想要的结果
#### WGAN如何解决训练崩溃问题
### 7.4.5 WGAN如何解决训练崩溃问题
WGAN作者提出了使用Wasserstein距离以解决GAN网络训练过程难以判断收敛性的问题。Wasserstein距离定义如下:
$$L={\rm E}_{x\sim{p_{data}}(x)}[f_w(x)] - {\rm E}_{x\sim{p_g}(x)}[f_w(x)]$$
@ -284,7 +261,7 @@ $$L={\rm E}_{x\sim{p_{data}}(x)}[f_w(x)] - {\rm E}_{x\sim{p_g}(x)}[f_w(x)]$$
- 生成器和判别器的loss不取log
- 每次更新判别器的参数之后把它们的绝对值截断到不超过一个固定常数c
#### WGAN-GP带有梯度正则的WGAN
### 7.4.6 WGAN-GP带有梯度正则的WGAN
实际实验过程发现WGAN没有那么好用主要原因在于WAGN进行梯度截断。梯度截断将导致判别网络趋向于一个二值网络造成模型容量的下降。
于是作者提出使用梯度惩罚来替代梯度裁剪。公式如下:
@ -293,7 +270,7 @@ $$L=-{\rm E}_{x\sim{p_{data}}(x)}[f_w(x)] + {\rm E}_{x\sim{p_g}(x)}[f_w(x)]+\lam
![Wass距离随迭代次数变化](./img/ch7/Wass%E8%B7%9D%E7%A6%BB%E9%9A%8F%E8%BF%AD%E4%BB%A3%E6%AC%A1%E6%95%B0%E5%8F%98%E5%8C%96.png)
上图纵坐标是Wasserstein距离横坐标是迭代次数。可以看出随着迭代的进行Wasserstein距离趋于收敛生成图像也趋于稳定。
### 7.2.5 LSGAN
### 7.4.7 LSGAN
LSGANLeast Squares GAN这篇文章主要针对标准GAN的稳定性和图片生成质量不高做了一个改进。作者将原始GAN的交叉熵损失采用最小二乘损失替代。LSGAN的Loss
$$\mathop{\min }\limits_DJ(D)=\mathop{\min}\limits_D[{\frac{1}{2}}{\rm E}_{x\sim{p_{data}}(x)}[D(x)-a]^2 + {\frac{1}{2}}{\rm E}_{z\sim{p_z}(z)}[D(G(z))-b]^2]$$
@ -302,7 +279,7 @@ $$\mathop{\min }\limits_GJ(G)=\mathop{\min}\limits_G{\frac{1}{2}}{\rm E}_{z\sim{
![LSGAN交叉熵与最小二乘损失对比图](./img/ch7/LSGAN%E4%BA%A4%E5%8F%89%E7%86%B5%E4%B8%8E%E6%9C%80%E5%B0%8F%E4%BA%8C%E4%B9%98%E6%8D%9F%E5%A4%B1%E5%AF%B9%E6%AF%94%E5%9B%BE.png)
上面是作者给出的基于交叉熵损失以及最小二乘损失的Loss函数。横坐标代表Loss函数的输入纵坐标代表输出的Loss值。可以看出随着输入的增大sigmoid交叉熵损失很快趋于0容易导致梯度饱和问题。如果使用右边的Loss设计则只在x=0点处饱和。因此使用LSGAN可以很好的解决交叉熵损失的问题。
### 7.2.6 如何尽量避免GAN的训练崩溃问题
### 7.4.8 如何尽量避免GAN的训练崩溃问题
- 归一化图像输入到(-11之间Generator最后一层使用tanh激活函数
- 生成器的Loss采用min (log 1-D)。因为原始的生成器Loss存在梯度消失问题训练生成器的时候考虑反转标签real=fake, fake=real
@ -324,7 +301,7 @@ $$\mathop{\min }\limits_GJ(G)=\mathop{\min}\limits_G{\frac{1}{2}}{\rm E}_{z\sim{
- 多训练判别器,尤其是加了噪声的时候
- 对于生成器在训练测试的时候使用Dropout
## 7.3 GAN的应用
## 7.3 GAN的应用(图像翻译)
### 7.3.1 什么是图像翻译?
GAN作为一种强有力的生成模型其应用十分广泛。最为常见的应用就是图像翻译。所谓图像翻译指从一副图像到另一副图像的转换。可以类比机器翻译一种语言转换为另一种语言。常见的图像翻译任务有
@ -343,20 +320,21 @@ GAN作为一种强有力的生成模型其应用十分广泛。最为常见
上面展示了许多有趣的结果,比如分割图$\longrightarrow$街景图,边缘图$\longrightarrow$真实图。对于第一次看到的时候还是很惊艳的,那么这个是怎么做到的呢?我们可以设想一下,如果是我们,我们自己会如何设计这个网络?
#### 直观的想法?
**直观的想法**
最直接的想法就是设计一个CNN网络直接建立输入-输出的映射,就像图像去噪问题一样。可是对于上面的问题,这样做会带来一个问题。**生成图像质量不清晰。**
拿左上角的分割图$\longrightarrow$街景图为例,语义分割图的每个标签比如“汽车”可能对应不同样式,颜色的汽车。那么模型学习到的会是所有不同汽车的评均,这样会造成模糊。![pix2pix语义地图L1loss结果](./img/ch7/pix2pix语义地图L1loss结果.png)
**如何解决生成图像的模糊问题**
#### 如何解决生成图像的模糊问题?
这里作者想了一个办法即加入GAN的Loss去惩罚模型。GAN相比于传统生成式模型可以较好的生成高分辨率图片。思路也很简单在上述直观想法的基础上加入一个判别器判断输入图片是否是真实样本。模型示意图如下
![pix2pix模型示意图](./img/ch7/pix2pix模型示意图.png)
上图模型和CGAN有所不同但它是一个CGAN只不过输入只有一个这个输入就是条件信息。原始的CGAN需要输入随机噪声以及条件。这里之所有没有输入噪声信息是因为在实际实验中如果输入噪声和条件噪声往往被淹没在条件C当中所以这里直接省去了。
#### 其他图像翻译的tricks
### 7.3.3 其他图像翻译的tricks
从上面两点可以得到最终的Loss由两部分构成
- 输出和标签信息的L1 Loss。
- GAN Loss
@ -367,17 +345,18 @@ GAN作为一种强有力的生成模型其应用十分广泛。最为常见
GAN Loss为LSGAN的最小二乘Loss并使用PatchGAN(进一步保证生成图像的清晰度)。PatchGAN将图像换分成很多个Patch并对每一个Patch使用判别器进行判别实际代码实现有更取巧的办法将所有Patch的Loss求平均作为最终的Loss。
#### 如何生成高分辨率图像和高分辨率视频?
### 7.3.4 如何生成高分辨率图像和高分辨率视频?
pix2pix提出了一个通用的图像翻译框架。对于高分辨率的图像生成以及高分辨率的视频生成则需要利用更好的网络结构以及更多的先验只是。pix2pixHD提出了一种多尺度的生成器以及判别器等方式从而生成高分辨率图像。Vid2Vid则在pix2pixHD的基础上利用光流时序约束生成了高分辨率视频。
### 7.3.3 有监督的图像翻译的缺点?
### 7.3.5 有监督的图像翻译的缺点?
许多图像翻译算法如前面提及的pix2pix系列需要一一对应的图像。可是在许多应用场景下往往没有这种一一对应的强监督信息。比如说以下一些应用场景
![CycleGAN结果例子](./img/ch7/CycleGAN结果例子.png)
以第一排第一幅图为例,要找到这种一一配对的数据是不现实的。因此,无监督图像翻译算法就被引入了。
### 7.3.4 无监督图像翻译CycleGAN
#### 模型结构
### 7.3.6 无监督图像翻译CycleGAN
**模型结构**
总体思路如下假设有两个域的数据记为AB。对于上图第一排第一幅图A域就是普通的马B域就是斑马。由于A->B的转换缺乏监督信息于是作者提出采用如下方法进行转换
>a. A->fake_B->rec_A
b. B->fake_A->rec_B
@ -388,12 +367,13 @@ b. B->fake_A->rec_B
![CycleGAN模型示意图](./img/ch7/CycleGAN模型示意图.png)
cycleGAN的生成器采用U-Net判别器采用LS-GAN。
#### Loss设计
**Loss设计**
总的Loss就是X域和Y域的GAN Loss以及Cycle consistency loss
$$L(G,F,D_X,D_Y)=L_{GAN}(G,D_Y,X,Y)+L_{GAN}(F,D_X,Y,X)+\lambda L_{cycle}(G,F)$$
整个过程End to end训练效果非常惊艳利用这一框架可以完成非常多有趣的任务
#### 多领域的无监督图像翻译StarGAN
### 7.3.7 多领域的无监督图像翻译StarGAN
cycleGAN模型较好的解决了无监督图像转换问题可是这种单一域的图像转换还存在一些问题
@ -402,9 +382,9 @@ cycleGAN模型较好的解决了无监督图像转换问题可是这种单一
starGAN则提出了一个多领域的无监督图像翻译框架实现了多个领域的图像转换且对于不同领域的数据可以混合在一起训练提高了数据利用率
### 7.3.5 GAN在文本生成领域中的应用SeqGAN
## 7.4 GAN的应用文本生成
#### GAN为什么不适合文本任务
### 7.4.1 GAN为什么不适合文本任务
GAN在2014年被提出之后在图像生成领域取得了广泛的研究应用。然后在文本领域却一直没有很惊艳的效果。主要在于文本数据是离散数据而GAN在应用于离散数据时存在以下几个问题
@ -412,7 +392,7 @@ GAN在2014年被提出之后在图像生成领域取得了广泛的研究应
- GAN只能评估整个序列的loss但是无法评估半句话或者是当前生成单词对后续结果好坏的影响。
- 如果不加argmax那么由于生成器生成的都是浮点数值而ground truth都是one-hot encoding那么判别器只要判别生成的结果是不是0/1序列组成的就可以了。这容易导致训练崩溃。
#### seqGAN用于文本生成
### 7.4.2 seqGAN用于文本生成
seqGAN在GAN的框架下结合强化学习来做文本生成。 模型示意图如下:
@ -423,9 +403,9 @@ seqGAN在GAN的框架下结合强化学习来做文本生成。 模型示意
- 每生成一个单词则根据当前的词语序列进行蒙特卡洛采样生成完成的句子。然后将句子送入判别器计算reward。
- 根据得到的reward进行策略梯度下降优化模型。
### 7.3.6 GAN在其他领域的应用
## 7.5 GAN在其他领域的应用
#### 数据增广
### 7.5.1 数据增广
GAN的良好生成特性近年来也开始被用于数据增广。以行人重识别为例有许多GAN用于数据增广[^ 1][^2][^ 3][^ 4]的工作。行人重识别问题一个难点在于不同摄像头下拍摄的人物环境角度差别非常大导致存在较大的Domain gap。因此可以考虑使用GAN来产生不同摄像头下的数据进行数据增广。以论文[^ 1]为例本篇paper提出了一个cycleGAN用于数据增广的方法。具体模型结构如下
@ -433,11 +413,11 @@ GAN的良好生成特性近年来也开始被用于数据增广。以行人重
对于每一对摄像头都训练一个cycleGAN这样就可以实现将一个摄像头下的数据转换成另一个摄像头下的数据但是内容人物保持不变。
#### 图像超分辨与图像补全
### 7.5.2 图像超分辨与图像补全
图像超分辨与补全均可以作为图像翻译问题该类问题的处理办法也大都是训练一个端到端的网络输入是原始图片输出是超分辨率后的图片或者是补全后的图片。SRGAN[^ 5]利用GAN作为判别器使得超分辨率模型输出的图片更加清晰更符合人眼主管感受。日本早稻田大学研究人员[^ 6]提出一种全局+局部一致性的GAN实现图像补全使得修复后的图像不仅细节清晰且具有整体一致性。
#### 语音领域
### 7.5.3 语音领域
相比于图像领域遍地开花GAN在语音领域则应用相对少了很多。这里零碎的找一些GAN在语音领域进行应用的例子作为介绍。Pascual[^ 7]提出了一种音频去噪的SEGAN缓解了传统方法支持噪声种类稀少泛化能力不强的问题。Donahue利用GAN进行语音增强提升了ASR系统的识别率。