【发布时间】:2019-11-12 22:10:49
【问题描述】:
我正在使用 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)
【问题讨论】:
标签: python keras image-segmentation semantic-segmentation