扩展由图像组成的小型数据集
深度学习算法将学习从输入空间到输出的映射函数。输入图像的变化将在此函数中学习。因此,您在扩充数据集时需要考虑这一事实。输入特征的分布应该简明扼要地反映您计划建模的内容。
因此,您在添加数据和向输入空间添加可变性之间保持平衡。例如,在尝试生成龙珠角色时旋转 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()