2

我正在使用 keras 中的生成器进行运行时数据增强来解决分割问题。

这是我的数据生成器

    data_gen_args = dict(
                     width_shift_range=0.1,
                     height_shift_range=0.1,
                     zoom_range=0.2,
                     horizontal_flip=True,
                     validation_split=0.2
                    )

image_datagen = ImageDataGenerator(**data_gen_args)

def generate_data_generator(generator, Xi, Yi):
    genXi = generator.flow(Xi, seed=7, batch_size=32)
    genYi = generator.flow(Yi, seed=7,batch_size=32)


    while True:
            Xi = genXi.next()
            Yi = genYi.next()
            print(Yi.dtype)
            print(np.unique(Yi))
            yield (Xi, Yi)

train_generator = generate_data_generator(image_datagen,
                                    x_train,
                                    y_train)

我的标签位于数据类型为 float 32 且值为 0.0 和 1.0 的 numpy 数组中。

#Output of np.unique(y_train)
array([0., 1.], dtype=float32

但是,数据生成器似乎会修改像素值,如下所示:-

#Output of print(np.unique(Yi))
[0.00000000e+00 1.01742386e-04 1.74021334e-04 ... 9.99918878e-01
 9.99988437e-01 1.00000000e+00]

它应该在数据生成后具有相同的值(0.0 和 1.0)。此外,官方文档显示了一个使用相同增强参数一起生成掩码和图像的示例。

但是,当我删除移位和缩放时,我得到(0.0 和 1.0)作为输出。Keras 版本 2.2.4,Python 3.6.8

更新:-

我将这些图像保存为 numpy 数组并使用 matplotlib 绘制它。看起来边缘在包含移位和缩放增强时以某种方式平滑插值(0.0-1.0)。我可以在我的自定义生成器中将这些值四舍五入;但我仍然不明白根本原因(在正常图像的情况下,这很不明显,也没有不利影响;但在掩码中,我们不想更改标签值)!!!

仍然想知道..这是一个错误(到目前为止没有人提到它)还是我的自定义代码有问题?

4

0 回答 0