在小数据集上训练 DCGAN 的提示和技巧

数据挖掘 深度学习 卷积 美国有线电视新闻网
2022-03-01 15:28:08

我制作了一个 DCGAN,我试图在只有 1200 张图像的自定义数据集上进行训练。我试图收集更多,但即使收集这 1200 个也已经够难了。如果您想知道我使用 Google Chrome 扩展程序“Fakun Batch Download Image”来收集我的数据集。

训练细节: 在训练过程中,我同时更新生成器和鉴别器网络的参数。我读过它的效果要好得多,然后只训练一名玩家(鉴别器)进行 K 步,然后训练其他人(生成器)进行 K 步。

问题:我是否应该对所有这些图像执行某种转换,然后将转换后的图像与初始图像合并,或者类似的东西?

1个回答

扩展由图像组成的小型数据集

深度学习算法将学习从输入空间到输出的映射函数。输入图像的变化将在此函数中学习。因此,您在扩充数据集时需要考虑这一事实。输入特征的分布应该简明扼要地反映您计划建模的内容。

因此,您在添加数据和向输入空间添加可变性之间保持平衡。例如,在尝试生成龙珠角色时旋转 180 度可能不值得。他们的头不应该在他们的脚所在的地方。您希望您的网络了解图像的底部应该包含一些奇怪的太空靴,以及顶部的异国情调的发型或光头。

增强图像

以下是一些有用的转换,可用于获取更多数据

  • 应用变换(旋转、平移)
  • 镜像图像
  • 添加扭曲
  • 更改缩放系数
  • 因此添加模糊以更好地概括输入数据
  • 反转颜色(倾斜、增加亮度等)

在喀拉斯

在 Keras 中,您可以使用这些ImageDataGenerator功能。

import numpy as np
from keras.datasets import mnist
from keras.preprocessing.image import ImageDataGenerator
import matplotlib.pyplot as plt
%matplotlib inline

# load data
(X_train, y_train), (X_test, y_test) = mnist.load_data()
X_train = X_train.astype('float32')

# set up your data generator
datagen = ImageDataGenerator(
   featurewise_center=True,
   featurewise_std_normalization=True,
   rotation_range=60,
   width_shift_range=0.2,
   height_shift_range=0.2,
   shear_range=0.2,
   zoom_range=0.2,
   horizontal_flip=True,
   vertical_flip = True)

# Fit the generator using your data
datagen.fit(X_train.reshape((len(X_train), 28, 28, 1)))

# let's look at some generated images
image = X_train[5]

plt.figure(figsize=(12,12))
plt.subplot(4, 4, 1)
plt.imshow(image.reshape((28,28)),  cmap='gray')
for j in range(15):
   augmented = datagen.random_transform(image.reshape((28,28,1)))
    plt.subplot(4, 4, j+2)
    plt.imshow(augmented.reshape((28,28)),  cmap='gray')
plt.tight_layout()
plt.show()