问题描述
我知道图像的数据增强技术。但是,我对如何生成增强数据有疑问。
我将使用 Keras 和 Tensorflow 分享我的场景和代码,但任何库的概念都是相同的。
以下场景的图像增强技术:
在 Keras 中,我们有 ImageDataGenerator
可以在提取数据进行训练时增强图像。
例如,如果我们有 100 张图像开始。然后 ImageDataGenerator
将对这些图像应用上述转换,并且每个时期输出 100 个图像(默认 ImageDataGenerator
)。
但是,如果我们实现自己的 ImageDataGenerator
,我们也可以实现它以返回 100 + 2*100 = 300 个用于训练的图像。
上述哪种情况总体上是好的?
解决方法
如果您在三个 epoch 中使用相同的 100 张图片并进行增强,您将获得 300 张独特的图片。每次加载图片时,Keras 都会应用随机变换。
往下看。这是一张图像数据集的 16 次重复。相同的图像永远不会以相同的方式转换。
import tensorflow as tf
import matplotlib.pyplot as plt
from sklearn.datasets import load_sample_image
import numpy as np
imgs = np.stack([load_sample_image('flower.jpg') for i in range(4*4)],axis=0)
data_gen = tf.keras.preprocessing.image.ImageDataGenerator(
rotation_range = 90,width_shift_range = 0.1,height_shift_range = 0.1,horizontal_flip = True,preprocessing_function=lambda x: x[...,np.random.permutation([0,1,2])]
)
fig = plt.figure(figsize=(4,4))
for index,image in enumerate(next(data_gen.flow(imgs)).astype(int)):
ax = plt.subplot(4,4,index + 1)
ax.set_xticks([])
ax.set_yticks([])
ax.imshow(image)
plt.show()