1

私は 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 を正しく再形成/ワンホット エンコードするにはどうすればよいですか? image_labels を変換できる keras の便利な関数はありますか?

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)
4

1 に答える 1