Auxiliary Classifier GAN (CGAN) 分类加生成 - 生成模型 GAN 网络 | 莫烦Python

Auxiliary Classifier GAN (CGAN) 分类加生成

作者: 莫烦 编辑: 莫烦 2021-04-01

学习资料:

怎么了

上文我们介绍过 CGAN 可以让我们按照自己的意愿生成对应类别的图片。 这个想法非常的棒。为了更有效率的做到这件事情,ACGAN 你就可以考虑一下。一句话来介绍 ACGAN: 一种按条件生成图片的GAN,并且你还可以拿着预训练CNN模型来加速它的训练过程。

同样是按条件生成,它又和 CGAN 有什么不同呢?理解这点,我们就得对比下 CGAN 和 ACGAN 训练模式的不同之处。

cgan

acgan

上面第一张是 CGAN 的训练模式,第二张是 ACGAN 的模式,他们的不同点具体体现在 Discriminator 上,

  • CGAN 的 Discriminator 需要同时接收标签和图片信息,输出是否真实的结论
  • ACGAN 的 Discriminator 只需要接收图片的输入,这点和经典GAN一样,但是需要输出图片的类别和是否真实两个任务

为什么这样做呢?因为作者纯粹是为了达成偷懒的目的,这样做可以加速训练。你问我是这能加速哪?这可就 tricky 了, 如果你让 Discriminator 输出标签,那这不就是一个正常 CNN 该做的事吗?这岂不是可以直接拿一个正常 CNN 来做这件事?而且既然拿来了, 我们是不是可以拿一个已经训练好的 CNN,有判别能力的 CNN?当然可以,这么做能大大减轻我们训练的难度,因为 Discriminator 能有更有能力告诉 Generator 你这个类型生成得对不对了。 当然,Discriminator 的本质工作 - 判断是否真实,也是还要继续做的。

下面这张动图的效果,我并没有用一个预训练CNN当做Discriminator,我是直接从头开始训练的,但是效果也不差。

results

怎么训练

CGAN 比起来,变化并不是太多。同样都是在生成器那边多给它一个标签输入, 但在判别器那边,我们就只给一个图片输入,标签就不给它了。反而,我们想让判别器去预测这个图片的标签。所以判别器有两个任务:

  1. 分类 - 是否是真实图片
  2. 分类 - 这张图属于哪一个类别

这样做的好处,除了可以用预训练模型,还有一点。是给判别器更多的标签数据,让判别器可以做更好的监督学习。在单独看类别信息的话, 实际上这种类别信息会先被生成器给压缩一遍,然后再被判别器解压出来,一来一回, 就像是一个 AutoEncoder 的非监督学习。我们对比一下 AutoEncoder。

对于类别数据 ACGAN AutoEncoder
压缩 Generator Encoder
解压 Discriminator Decoder

autoencoder

上图是我在AutoEncoder教学中的原图。 有了这样的对比,我们就清楚了 ACGAN 的套路了。ACGAN 通过类似于 AutoEncoder 的非监督模式,将标签信息融入到了 压缩 - 解压 的过程, 让模型学习到标签类别的内在含义。

秀代码

如果想直接看全部代码, 请点击这里去往我的github.

代码上,和经典GAN有些像,也更像CGAN的代码架构。 下面我只说说和 CGAN 的代码不同之处,如果你还不了解 CGAN,我强烈建议你快速过一遍这个CGAN。 相比 CGAN,ACGAN 只需要修改 Discriminator 相关的代码就好。

看到这里,我假设你已经有CGAN的基础了,所以其它的训练步骤我就省略了,不过你可以在 我的Github看到所有代码。 训练结果也是非常出色的,比较好的按照我规定的右下角标签生成了所有数字。

res

问题

如果训练的类别变多,比如100个分类,或者上千分类,种类多了以后训练效果并不好。 不管是 ACGAN 有这个问题,CGAN也有。可能是生成器的能力并不行,而且也比较难提升对于太多类别的区分。 这个我在自己的一些试验中也体验过,目前我还找不到比较好的解决方案,这是一个值得探索的方向。

我还做了另一个相对难一点的实验,用ACGAN+gp 做的 cifar 数据做的彩色图片(32*32)生成。 从上到下是10种不同的类别图像,有飞机,鹿,猫等。具体项目请见我的 Github

experiment

总结

和 CGAN 一样,ACGAN 为我们提供了另外一种基于类别生成的技术,但是 ACGAN 更加 make sense 一点,因为我们可以类比到 AutoEncoder 的信息压缩解压的学习过程, 而且这种学习过程的好处也是被更早的研究论证过的。


降低知识传递的门槛

莫烦很常从互联网上学习知识,开源分享的人是我学习的榜样。 他们的行为也改变了我对教育的态度: 降低知识传递的门槛免费 奉献我的所学正是受这种态度的影响。 通过 【赞助莫烦】 能让我感到认同,我也更有理由坚持下去。