在小型图像数据集上训练 GAN

Ste*_*jic 5 machine-learning neural-network deep-learning

我创建了一个 DCGAN 并已经针对 CIFAR-10 数据集对其进行了训练。现在,我想针对自定义数据集对其进行训练。

我已经收集了大约 1200 张图像,实际上不可能收集更多。我应该怎么办?

小智 5

我们将在未来几周内发表一篇关于生成器随机反卷积的论文,这可以提高此类问题的稳定性和多样性。如果您有兴趣,我现在可以发送论文的当前版本。但总的来说,这个想法很简单:

  1. 构建经典的 GAN
  2. 对于生成器的深层(假设其中一半)使用随机反卷积(sdeconv)
  3. sdeconv 只是一个普通的反卷积层,但过滤器是从一组过滤器中随机选择的。例如,您的滤波器组形状可以是 (16, 128, 3, 3),其中 16 - 组数,128 - 每个滤波器组的数量,3x3 - 大小。您在每个训练步骤中选择的过滤器集是[随机统一0-16,:, :, :]。未选择的过滤器仍然未经训练。在张量流中,您希望批量为不同图像选择不同的过滤器集,并且 tf 保留训练变量,即使没有要求(我们认为这是一个错误,tf 对所有变量使用最后已知的梯度,即使它们不是)在当前动态子图中使用,因此您必须利用尽可能多的变量)。

就是这样。每个库有 3 个层,每个层有 16 组 sdeconv,实际上您将有 16x16x16 = 4096 个不同内部路由的组合来产生输出。它对小数据集有何帮助?- 通常小数据集具有相对较大的“主题”方差,但通常数据集具有一种性质(猫的照片:都是真实的照片,但猫的类型不同)。在这样的数据集中,GAN 很快就会崩溃,但是使用 sdeconv 时:

  1. 上法线反卷积层学习如何重建风格“逼真的照片”
  2. Lower sdevond 学习子分布:“黑猫”、“白猫”、“红猫”等。
  3. 模型可以被视为弱生成器的集合,每个子生成器都很弱并且可以崩溃,但会得到另一个暂时优于判别器的子生成器的“支持”。

MNIST 是此类数据集的一个很好的例子:“主题”方差较高,但数字风格相同。

GAN+权重norm+prelu(1000步后崩溃,2000年后死亡,只能描述一个“主题”):

GAN+权重范数+prelu+sdeconv,4388步(可以看到子主题的局部多样性退化,但全局没有崩溃,保留了全局视觉多样性):