【发布时间】:2019-12-20 13:13:08
【问题描述】:
假设我有 100 个训练灰度图像和 100 个 RGB 训练掩码,每个大小为 512x512。我能够在 Keras 中使用 to_categorical 对掩码进行一次热编码
numclasses=3
masks_one_hot=to_categorical(maskArr,numclasses)
其中maskArr 是 100x512x512x1,masks_one_hot 是 100x512x512x3。
但是,为了使用 ImageDataGenerator 和 flow_from_directory 使用来自 https://github.com/zhixuhao/unet/blob/master/data.py 的 trainGenerator,我尝试保存 one-hot 编码的训练图像,然后使用 trainGenerator 读取它们。然而,我注意到在它们上使用imwrite 然后用imread 读取它们后,它们从一键编码的 512x512x3 变为 512x512x3 RGB 图像。也就是说,每个通道的值不再是 0 或 1,而是现在的范围是 0-255
结果,如果我这样做:
myGenerator = trainGeneratorOneHot(20,'data/membrane/train','image','label',data_gen_args,save_to_dir = "data/membrane/train/aug", flag_multi_class = True,
num_class = 3, target_size=(512,512,3))
num_batch=3
for i,batch in enumerate(myGenerator):
if(i >= num_batch):
break
trainGeneratorOneHot 在下面:
def trainGeneratorOneHot(batch_size,...class_mode=None, image_class_mode=None):
image_datagen = ImageDataGenerator(**aug_dict)
mask_datagen = ImageDataGenerator(**aug_dict)
image_generator = image_datagen.flow_from_directory(train_path,classes = [image_folder], class_mode = image_class_mode, color_mode = image_color_mode,target_size = target_size, ...)
mask_generator = mask_datagen.flow_from_directory(train_path, classes = [mask_folder], class_mode = class_mode, target_size = target_size,...)
train_generator = zip(image_generator, mask_generator)
for (img,mask) in train_generator:
img,mask = adjustDataOneHot(img,mask)
yield (img,mask)
def adjustDataOneHot(img,mask):
return (img,mask)
然后我得到 `ValueError: could not broadcast input array from shape (512,512,1) into shape (512,512,3,1)
我该如何解决这个问题?
【问题讨论】: