#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