Чтобы выполнить мультиклассовую сегментацию, маски должны быть закодированы в горячем виде. Например, если у меня есть 100 изображений формы 224x224x3 с 5 различными классами, у меня будет набор масок с формой (100, 224, 224, 5), т.е. последнее измерение (канал) относится к классу пикселя. Возьмите маски в градациях серого, которые содержат 6 классов, где каждый пиксель имеет метку 1-6, я могу легко преобразовать это в нужную мне категориальную маску, используя tf.keras.utils.to_categorical.
Если я использую ImageDataGenerator, предоставленный я знаю, что с помощью keras я могу создать генератор для изображений и масок, а затем сжать их вместе для решения проблемы (как показано в коде ниже), но где я запутался, так это как преобразовать маски в эту категоричную структуру с горячим кодированием, пока используя ImageDataGenerator? ImageDataGenerator только находит файлы в каталогах, которые сохраняются как изображения, поэтому я не могу преобразовать маски и затем сохранить их в виде numpy массивов (масок с горячим кодированием) для генератора, так как изображения могут ' у этого есть больше чем 4 канала правильно? Есть ли какой-то сигнал генератору сделать это преобразование? Или это поэтому ограничивает количество классов, которые я могу иметь в моей задаче?
Одно из решений - написать свой собственный генератор с классом последовательности, который я сделал, но я стремлюсь понять, возможно ли это делать с Keras встроенный ImageDataGenenerator? Может ли запись моего лямбда-слоя в сети быть решением?
mask_categorical = tf.keras.utils.to_categoricl(mask) #converts 224x224 grayscale mask to one-hot encoding version
imgDataGen = ImageDataGenerator(rescale=1/255.)
maskDataGen = ImageDataGenerator()
imageGenerator =imageDataGen.flow_from_directory("dataset/image/",
class_mode=None, seed=40)
maskGenerator = maskDataGen.flow_from_directory("dataset/mask/",
class_mode=None, seed=40)
trainGenerator = zip(imageGenerator, maskGenerator)