我正在使用带有 TensorFlow 后端的 Keras 训练语义分割模型。我采用ImageDataGenerator
做图像增强,包括旋转、翻转和移位。通过遵循文档,我创建了一个字典maskgen_args
并将其用作实例化两个ImageDataGenerator
实例的参数。
maskgen_args = dict(
rotation_range=90,
validation_split=VALIDATION_SPLIT
)
image_datagen = ImageDataGenerator(**maskgen_args)
mask_datagen = ImageDataGenerator(**maskgen_args)
训练数据生成器如下完成,通过设置seed
相同的值,掩码将匹配图像。
training_data_generator = zip(
image_datagen.flow_from_directory(
data_dir,
target_size=(512, 512),
color_mode='rgb',
batch_size=BATCH_SIZE,
class_mode=None,
save_format='jpeg',
seed=GENERATE_SEED,
subset='training'
),
mask_datagen.flow_from_directory(
label_dir,
target_size=(512, 512),
color_mode='grayscale',
batch_size=BATCH_SIZE,
class_mode=None,
save_format='png',
seed=GENERATE_SEED,
subset='training'
)
)
到目前为止,没有出现任何问题。但是由于我只需要对图像而不是掩码进行一些额外的预处理(例如标准化),因此我创建了另一个imagegen_args
字典并在实例化ImageDataGenerator
.
maskgen_args = dict(
rotation_range=90,
validation_split=VALIDATION_SPLIT
)
imagegen_args = dict(
samplewise_center=True,
samplewise_std_normalization=True,
channel_shift_range=10,
brightness_range=(0.7, 1.3),
**maskgen_args
)
image_datagen = ImageDataGenerator(**imagegen_args)
mask_datagen = ImageDataGenerator(**maskgen_args)
当我检查 的输出时training_data_generator
,出现了问题:似乎图像和蒙版是分别生成的:它们肯定有随机旋转,但它们以不同的角度旋转,与以前不同。这是食物图像和食物掩码的示例。
我检查了id
和image_datagen
,mask_datagen
两种情况id
都不同。我想知道为什么第一种情况他们可以以相同的随机角度旋转图像和蒙版,但不能在第二种情况下?当我确实需要提供额外的参数时,我应该怎么做才能让它们表现得像第一种情况image_datagen
?