web-dev-qa-db-ja.com

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配列のみを取りますか?または、この問題を解決する別の方法を見つけることができますか?注意:img.set_shape([218,78,3])は私には機能しません

10
mxl

私は最近この問題に直面しました、

tf.image.decode_image() 

テンソルを形状で返しませんが、私の画像はすべてjpeg形式でした。

だから私は使用しました

 tf.image.decode_jpeg() 

形状のテンソルを返し、問題を解決しました。 tf.image.decode_png()もあることに注意してください。

詳細については、こちらをご覧ください Tensorflow tf.image.decode_jpegドキュメント

20
Nagashayan
image_string = tf.read_file(filename)
image_decoded = tf.cond(
      tf.image.is_jpeg(image_string),
      lambda: tf.image.decode_jpeg(image_string, channels=3),
      lambda: tf.image.decode_png(image_string, channels=3))
6
Alex-zhai

引数としてexpand_animations = Falseを渡すことが重要です。

試してください:

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

3次元形状のテンソルがあることを確認します。この問題はgif形式が原因です。decode_gifは3D配列[height、width、num_channels]を返すdecode_bmp、decode_jpeg、decode_pngなどの他の形式とは対照的に、4D配列[num_frames、height、width、3]を返すためです。 。

詳細については、 関連ドキュメント を確認してください。

2
Alireza Akhavan