StackGAN [article](链接:https://arxiv.org/abs/1612.03242)[code](https://github.com/hanzhanggit/StackGAN):这篇文章与前一篇相似。在这种情况下,他们专注于通过同时使用 2 个 GAN 来提高图像的质量:Stage-I 和 Stage-II。Stage-I 用于获取包含图像「一般」构想的低分辨率图像。Stage II 采用更多的细节和更高的分辨率来优化 Stage-I 的图像。据我所知,这篇在生成高质量图像里是最好的模型之一。请自己看:
你也许想要使用条件性 GAN,如果: 你有一个已标记的训练集,并希望提高生成图像的质量。 你想要明确控制图像的某些方面(例如,我想在这一特定位置生成这一尺寸的红鸟)。 InfoGANs TL; DR:能够以无监督的方式在噪声向量 Z 的一部分中编码有意义的图像特征的 GAN。例如,对一个数字的旋转进行编码。 [文章](https://arxiv.org/abs/1606.03657) 你有没有想过输入噪声 Z 在一个 GAN 中编码的信息是什么?它通常以非常「嘈杂」的方式编码图像不同类型的特征。例如,你可以选择 Z 向量的一个位置,并将其值从 -1 和 1 插值。这是你会在一个通过 MNIST 数字数据集训练的模型上看到的: 对 Z 插值。左上图像的 Z 位置设置为 -1。然后,它被内插到 1(右下图像)。 在上图中,生成的图像看上去像是数字 4 慢慢变换成「Y」(最可能的是 4 和 9 之间的混合)。所以,这就是我所指的通过嘈杂的方式编码这个信息:Z 的单一位置是图像多个特征的参数。在这种情况下,这个位置改变了数字本身(某种程度上从 4 到 9)和样式(从粗体到斜体)。然后,你无法定义 Z 的该位置的任何确切含义。 如果我们可以有一些 Z 的位置来表示唯一和受限的信息会怎么样呢,就像 cGAN 中的条件信息 Y 一样?例如,如果第一个位置是一个 0 到 9 之间的值,它来控制数字的数量,而第二个位置控制其旋转,这会怎样呢?这正是作者在文章中提出的。有意思的部分是,与 cGAN 不同,他们以无监督的方式实现了这一点,无需标签信息。 将 Z 矢量分成两部分——C 和 Z——是他们成功的原因: C 对数据分布的语义特征进行编码。 Z 编码该分布的所有非结构噪声。 他们如何强制 C 对这些特征进行编码?他们改变了损失函数以防止 GAN 简单地忽略 C。因此,他们采用一个信息理论的规则,直播,来确保 C 与生成器分配之间的高互信息。换句话说,如果 C 改变,生成的图像也需要改变。结果,你无法明确控制哪种类型的信息会被编码进 C,但 C 的每个位置都具有唯一的含义。看一些视觉示例:
C 的第一个位置编码数字类别,而第二个位置编码旋转。 但是,不使用标签信息需要付出代价。这里的限制是这些编码仅适用于相当简单的数据集,例如 MNIST 数字。此外,你仍然需要「手工制作」C 的每个位置。例如在文章中,他们需要指定 C 的第一个位置是 0 到 9 之间的整数,因此它适用于数据集的 10 个数字类别。所以,你可能会认为这不是 100% 无监督,因为你可能需要向模型提供一些小细节。 你也许想要使用 infoGAN,如果: 你的数据集不是很复杂。 你想训练 cGAN,但你没有标签信息。 你希望看到数据集的主要的有意义的图像特征是什么,并且可以控制它们。 Wasserstein GAN TL; DR:改变损失函数以包含 Wasserstein 距离。结果,WassGAN 具有与图像质量相关的损失函数。此外,训练稳定性也提高了,而且不依赖于架构。 [文章](https://arxiv.org/abs/1701.07875) GAN 一直在收敛性方面存在问题,结果是,你不知道何时停止训练。换句话说,损失函数与图像质量不相关。这是一个头痛的大问题,因为: 你需要不断查看样本,以了解你的模型是否在正确训练。 你不知道何时应该停止训练(没有收敛)。 你没有一个量化数值告诉你调整参数的效果如何。 例如,看这两个能够完美生成 MNIST 样本的 DCGAN 的毫无信息量的损失函数图:
仅通过看这个图你知道什么时候停止训练吗?我也不行。 (责任编辑:本港台直播) |