我正在使用 keras(TensorFlow 后端),并且试图了解如何使用 flow_from_directory 引入我的标签/掩码以进行图像分割(3 个标签)。
train_images 的尺寸为 (144, 144, 144) - 灰度,uint8。对应的 label_images 具有相同的尺寸,但这里的值 1 表示标签 1,值 2 = 标签 2,值 3 = 标签 3,值 0 表示未标记的像素。
由于这是语义分割,因此对图像中的每个像素进行分类需要使用逐像素的交叉熵损失函数。正如我在一些帖子中所读到的,keras(或 TensorFlow)要求我的 label_image/mask 是一个热编码的。因此,我希望我的 label_images 是具有 3 个通道的图像,其中每个像素将由一个二进制向量组成。示例:[0, 1, 0]。
如何处理存储为 0 的未标记像素?它们应该被编码为 [0, 0, 0] 吗?
但是我找不到答案的问题是:如何正确地重塑/单热编码我的 label_images?keras 中是否有一个方便的功能可以让我转换我的 image_labels?
from keras.preprocessing.image import ImageDataGenerator
train_datagen = ImageDataGenerator(rescale=1. / 255)
label_datagen = ImageDataGenerator(rescale=1. / 255)
train_image_generator = train_datagen.flow_from_directory(
directory='/train_images',
target_size=(144, 144, 144),
color_mode='grayscale',
classes=None,
class_mode=None,
batch_size=4)
train_label_generator = label_datagen.flow_from_directory(
directory='/label_images',
target_size=(144, 144, 144),
color_mode='grayscale',
classes=None,
class_mode=None,
batch_size=4)
train_generator = zip(train_image_generator, train_label_generator)