我正在尝试Keras的ImageDataGenerator()
,以便在训练CNN模型之前扩大图像数据集。
我使用的基本生成器对象是:
datagen = ImageDataGenerator(rotation_range = 30,
width_shift_range = 0.2,
height_shift_range = 0.2,
horizontal_flip = True)
然后我用以下方法生成一些增强数据:
batch_1 = datagen.flow(image_batch, y = labels,
batch_size = len(image_batch),
seed = 173)
当我尝试查看该batch_1
对象时,我发现了这样的图片:
如您所见,有些平行的彩色线条我无法解释。 ImageDataGenerator()
上的在线教程都没有显示出这种失真。如果输入了这些图像,是否可以对CNN进行适当的培训?
答案 0 :(得分:2)
快速搜索告诉我,这可能是因为您将您的rotation_range设置为30°,然后ImageDataGenerator填充了框架和图像之间的空白区域,并延续了图像的边框。
将角度设置为90°的倍数可能是一个解决方案,或者您可以简单地使用白色边框。
答案 1 :(得分:1)
使用ImageDataGenerator时遇到相同的问题。它不是由于rotation_range而发生的,实际上是在我们使用width_shift_range和height_shift_range时发生的。我们可以使用不同的fill_mode来处理它。我将fill_mode更改为“ reflect”,因为我的数据集包含叶子。
train_iter = tf.keras.preprocessing.image.ImageDataGenerator(rescale=1./255,validation_split = 0.2,
preprocessing_function = tf.keras.applications.efficientnet.preprocess_input,
rotation_range = 40,
zoom_range = 0.10,
cval = 0.,
width_shift_range=0.2,
height_shift_range=0.2,
shear_range = 0.2,
horizontal_flip = True,
vertical_flip = True,
fill_mode = 'reflect')