Как использовать ImageDataGenerator с масками с несколькими метками для мультиклассовой сегментации изображений? - PullRequest
1 голос
/ 05 марта 2020

Чтобы выполнить мультиклассовую сегментацию, маски должны быть закодированы в горячем виде. Например, если у меня есть 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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...