TensorFlow: ValueError: «изображения» не содержат формы

Я использовал функцию TensorFlow tf.image.resize_images для изменения размера моего изображения, но я получил эту ошибку в коде: ValueError: «images» не содержит формы. Полный код ниже:

# -*- coding: utf-8 -*-
import tensorflow as tf
file = ["./1.jpg"]
f = tf.train.string_input_producer(file)
reader = tf.WholeFileReader()
key, img = reader.read(f)

img = tf.image.decode_image(img)
# img.set_shape([218,178,3])
img = tf.image.resize_images(img, [64,64])

coord = tf.train.Coordinator()    
with tf.Session() as sess:
    tf.train.start_queue_runners(coord=coord)
    image = sess.run(img)

Полная информация об ошибке

Traceback (most recent call last):
  File "image_read_test.py", line 10, in <module>
    img = tf.image.resize_images(img, [64,64])
  File "C:\Python35\lib\site-packages\tensorflow\python\ops\image_ops_impl.py", line 724, in resize_images
    raise ValueError('\'images\' contains no shape.')
ValueError: 'images' contains no shape.

Затем я пытаюсь это исправить, но нахожу только такой способ

# -*- coding: utf-8 -*-
    import tensorflow as tf
    file = ["./1.jpg"]
    f = tf.train.string_input_producer(file)
    reader = tf.WholeFileReader()
    key, img = reader.read(f)

    img = tf.image.decode_image(img)
    # img.set_shape([218,178])
    # img = tf.image.resize_images(img, [64,64])

    coord = tf.train.Coordinator()    
    with tf.Session() as sess:
        tf.train.start_queue_runners(coord=coord)
        image = sess.run(img)
        image = tf.image.resize_images(image, [64,64])

Только так функция может работать хорошо, но я не знаю, почему? Является ли функция tf.image.resize_images только массивом numpy в качестве параметра? Или я могу найти другой способ решить эту проблему? NB: img.set_shape([218,78,3]) у меня не работает


person mxl    schedule 06.07.2017    source источник


Ответы (2)


Я столкнулся с этой проблемой недавно,

tf.image.decode_image() 

не возвращает тензор с формой, но все мои изображения были в формате jpeg.

Так что я использовал

 tf.image.decode_jpeg() 

он возвращает тензор с формой, и это решило проблему. Обратите внимание, что также есть tf.image.decode_png().

Дополнительную информацию можно найти здесь документация Tensorflow tf.image.decode_jpeg

person Nagashayan    schedule 04.03.2018
comment
Почему tensorfow избегает параметра формы из decode_image()? - person Swaroop; 31.03.2020
comment
@alireza Akhavan ответила на ваш вопрос ниже; это потому, что метод также может читать в GIF. Немного раздражает и загадочно, потому что в документах говорится, что он возвращает форму. - person zipline86; 26.05.2020
comment
tf.image.decode_jpeg() работал. Разве tf.image.decode_image() не должно автоматически определять формат jpeg? - person Karan Shah; 20.02.2021

Важно передать expand_animations = False в качестве аргумента:

Пытаться:

tf.image.decode_image(img, expand_animations = False) 

чтобы убедиться, что у вас есть тензор с трехмерной формой. Эта проблема связана с форматом gif, поскольку decode_gif возвращает четырехмерный массив [число_кадров, высота, ширина, 3] в отличие от других форматов, включая decode_bmp, decode_jpeg и decode_png, которые возвращают трехмерные массивы [высота, ширина, число_каналов]. .

Для получения дополнительной информации см. сопутствующую документацию.

person Alireza Akhavan    schedule 28.01.2020