Keras ImageDataGenerator返回具有意外失真的图像

时间:2019-04-11 10:17:43

标签: python tensorflow keras

我正在尝试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对象时,我发现了这样的图片:

enter image description here

如您所见,有些平行的彩色线条我无法解释。 ImageDataGenerator()上的在线教程都没有显示出这种失真。如果输入了这些图像,是否可以对CNN进行适当的培训?

2 个答案:

答案 0 :(得分:2)

快速搜索告诉我,这可能是因为您将您的rotation_range设置为30°,然后ImageDataGenerator填充了框架和图像之间的空白区域,并延续了图像的边框。

将角度设置为90°的倍数可能是一个解决方案,或者您可以简单地使用白色边框。

This image shows the same type of images being produced.

答案 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')