Ошибка генератора набора данных Tensorflow в измерении канала

#python #tensorflow #conv-neural-network #mask

#python #tensorflow #conv-нейронная сеть #маска

Вопрос:

Я пытаюсь обучить свою модель задаче сегментации изображений, и для этого я использую генератор для получения набора данных. я обучал его несколько раз раньше, но недавно я столкнулся с этой ошибкой.

 ValueError:'generator' yielded an element of shape (128,192,3) where an element of shape (128,192,1) was expected.
  

когда я распечатал формы моего изображения и маски, которые выходят из генератора, он показывает.

 image:(128,192,1)
mask:(128,192,3)
  

Элемент generator получает данные изображения и маски, загруженные из набора данных tensorflow. Вопрос в том, как форма маски изображения в оттенках серого изменяется на 3, когда даже входное изображение имеет оттенки серого, равные 1?
Как возможно преобразовать маску обратно в канал 1?

К сожалению, я не могу опубликовать полный код для воспроизведения в разделе «Конфиденциальность»

Ответ №1:

Не зная больше библиотеки, которую вы используете для чтения изображения, это трудно понять. Я предполагаю, что вы используете PIL, и я сделаю

 from PIL import Image

img = Image.open('im1.jpg','r')
img = img.convert('L') 
  

‘L’ для оттенков серого, вы можете проверить дополнительный режим -> https://pillow.readthedocs.io/en/stable/handbook/concepts.html

Пока вы обновляете свой код, вы должны проверить модуль предварительной обработки keras, тогда код будет

 # Returns a PIL image
image = tf.keras.preprocessing.image.load_img(image_path, color_mode="grayscale")
 
input_arr = keras.preprocessing.image.img_to_array(image)
input_arr = np.array([input_arr])  # Convert single image to a batch.
predictions = model.predict(input_arr)
  

Дополнительная информация -> https://www.tensorflow.org/api_docs/python/tf/keras/preprocessing/image/load_img

Комментарии:

1. Спасибо за ответ. Я использую opencv для чтения изображений. Я вроде как решил проблему, загрузив маски с помощью [:,:,:1] из словаря dataset. Но все еще не могу понять, почему изменилась только форма маски, хотя у меня была предварительная проверка загрузки масок и изображений в оттенки серого, если это еще не оттенки серого.

2. Без дополнительного кода трудно угадать, может быть, неправильную форму при преобразовании из изображения opencv в тензор.

3. Если у вас есть время, я рекомендую вам попробовать модуль tf.keras.preprocessing.image, он справится с этим за вас, и вы сможете увидеть другие полезные функции для увеличения ваших изображений

4. хорошо. Но прямо сейчас я использую конвейер предварительной обработки непосредственно в моей модели, и внутри него должно быть что-то. Да, я также рассмотрю предварительную обработку Keras