我正在使用 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)。我可以在我的自定义生成器中将这些值四舍五入;但我仍然不明白根本原因(在正常图像的情况下,这很不明显,也没有不利影响;但在掩码中,我们不想更改标签值)!!!
仍然想知道..这是一个错误(到目前为止没有人提到它)还是我的自定义代码有问题?