我正在写一个图像分割的网络。我有我的ImageDataGenerator用于我的掩码(这是只有0和255作为值的RGB图像,黑色和白色),它是:
train_mask_data_gen = ImageDataGenerator(rotation_range=10,
width_shift_range=10,
height_shift_range=10,
zoom_range=0.3,
horizontal_flip=True,
vertical_flip=True,
fill_mode='nearest',#interpolation used for augmenting the image
cval=0,
rescale=1./255)
并从目录中流出:
train_mask_gen = train_mask_data_gen.flow_from_directory(os.path.join(training_dir, 'masks'),
target_size=(img_h, img_w),
batch_size=bs,
class_mode=None, # Because we have no class subfolders in this case
shuffle=True,
interpolation='nearest',#interpolation used for resizing
#color_mode='grayscale',
seed=SEED)
代码运行得很好,唯一的问题是,当我对掩码应用数据增强时,我将不再有二进制图像,但我得到一些介于0和1之间的值(标准化)。例如,如果我打印输出矩阵(图像),我会得到如下结果:
[[0. 0. 0. ]
[0. 0. 0. ]
[0. 0. 0. ]
...
[1. 1. 1. ]
[1. 1. 1. ]
[1. 1. 1. ]]
...
[[0. 0. 0. ]
[0.3457849 0.3457849 0.3457849 ]
[1. 1. 1. ]
...
[0. 0. 0. ]
[0. 0. 0. ]
[0. 0. 0. ]]
它还包含那些由于增强而产生的“额外”值。如果我不应用任何增强,我会得到我想要的二值图像
如何将强制转换嵌入整数(以获得仅为0或1的值)
我试图使用ImageDataGenerator
中的dtype=int
字段,但它没有起任何作用,我一直得到相同的结果
Keras文档确实建议设置Dtype是正确的做法,因此它可能是一个bug。。。你可以做的一件事是自己包裹Keras发生器并正确地投下它:
输出:
相关问题 更多 >
编程相关推荐