我正在训练一个神经网络,以预测鼠标大脑图像上的二进制掩码。 为此,我使用来自keras的ImageDataGenerator扩展了数据。
对于我来说,重要的是网络对于输入图像中的强度移动是不变的,这意味着即使强度线性移动,它也需要为相同的输入图像预测相同的掩模。
要教授这种不变性,我想扩充数据,以便对于使用keras ImageDataGenerator创建的每个图像,我都具有一个不变的掩码。 有什么办法吗?
我还要在遮罩接收与输入图像相同的变换的情况下应用其他空间变换。
我目前正在通过以下方式扩充我的数据:
image_datagen = kp.image.ImageDataGenerator(**data_gen_args)
mask_datagen = kp.image.ImageDataGenerator(**data_gen_args)
image_val_datagen = kp.image.ImageDataGenerator(**data_gen_args)
mask_val_datagen = kp.image.ImageDataGenerator(**data_gen_args)
image_generator = image_datagen.flow(x_train, seed=seed)
mask_generator = mask_datagen.flow(y_train, seed=seed)
image_val_generator = image_val_datagen.flow(x_val, seed=seed + 1)
mask_val_generator = mask_val_datagen.flow(y_val, seed=seed + 1)
imgs = [next(image_generator) for _ in range(1000)]
masks = [next(mask_generator) for _ in range(1000)]
imgs_val = [next(image_val_generator) for _ in range(1000)]
masks_val = [next(mask_val_generator) for _ in range(1000)]
imgs = np.concatenate(imgs)
masks = np.concatenate(masks)
imgs_val = np.concatenate(imgs_val)
masks_val = np.concatenate(masks_val)
train_dataset = tf.data.Dataset.zip((tf.data.Dataset.from_tensor_slices(imgs), tf.data.Dataset.from_tensor_slices(masks)))
train_dataset = train_dataset.repeat().shuffle(1000).batch(32)
validation_set = tf.data.Dataset.zip((tf.data.Dataset.from_tensor_slices(imgs_val), tf.data.Dataset.from_tensor_slices(masks_val)))
validation_set = validation_set.repeat().shuffle(1000).batch(32)