简体   繁体   English

InvalidArgumentError:断言失败:[无法将字节解码为 JPEG、PNG、GIF 或 BMP]

[英]InvalidArgumentError: assertion failed: [Unable to decode bytes as JPEG, PNG, GIF, or BMP]

I have a folder structure where every subfolder represents a class, for every class there is exactly one example picture.我有一个文件夹结构,其中每个子文件夹都代表一个 class,对于每个 class,只有一个示例图片。 I want to load the data in a Keras dataset as described here: https://www.tensorflow.org/api_docs/python/tf/keras/preprocessing/image_dataset_from_directory I expect to get the tuple "(images, labels)" returned, but when I assign the functions output to a tuple, I get an error. I want to load the data in a Keras dataset as described here: https://www.tensorflow.org/api_docs/python/tf/keras/preprocessing/image_dataset_from_directory I expect to get the tuple "(images, labels)" returned,但是当我将函数 output 分配给元组时,出现错误。

Here is my code:这是我的代码:

import pathlib
data_path = "./patterns"
data_dir = pathlib.Path(data_path)

batch_size = 32
img_height = 120
img_width = 30

train_ds, train_labels = tf.keras.preprocessing.image_dataset_from_directory(
  data_dir,
  labels='inferred',
  label_mode='categorical', #int
  validation_split=0.2,
  subset="training",
  seed=123,
  image_size=(img_height, img_width),
  batch_size=batch_size)

And this is the error I receive:这是我收到的错误:

Found 2160 files belonging to 2160 classes.
Using 1728 files for training.
---------------------------------------------------------------------------
InvalidArgumentError                      Traceback (most recent call last)
/usr/local/lib/python3.7/site-packages/tensorflow/python/eager/context.py in execution_mode(mode)
   2101       ctx.executor = executor_new
-> 2102       yield
   2103     finally:

/usr/local/lib/python3.7/site-packages/tensorflow/python/data/ops/iterator_ops.py in _next_internal(self)
    757             output_types=self._flat_output_types,
--> 758             output_shapes=self._flat_output_shapes)
    759 

/usr/local/lib/python3.7/site-packages/tensorflow/python/ops/gen_dataset_ops.py in iterator_get_next(iterator, output_types, output_shapes, name)
   2609     except _core._NotOkStatusException as e:
-> 2610       _ops.raise_from_not_ok_status(e, name)
   2611     except _core._FallbackException:

/usr/local/lib/python3.7/site-packages/tensorflow/python/framework/ops.py in raise_from_not_ok_status(e, name)
   6842   # pylint: disable=protected-access
-> 6843   six.raise_from(core._status_to_exception(e.code, message), None)
   6844   # pylint: enable=protected-access

/usr/local/lib/python3.7/site-packages/six.py in raise_from(value, from_value)

InvalidArgumentError: assertion failed: [Unable to decode bytes as JPEG, PNG, GIF, or BMP]
     [[{{node decode_image/cond_jpeg/else/_1/decode_image/cond_jpeg/cond_png/else/_20/decode_image/cond_jpeg/cond_png/cond_gif/else/_39/decode_image/cond_jpeg/cond_png/cond_gif/Assert/Assert}}]] [Op:IteratorGetNext]

During handling of the above exception, another exception occurred:

InvalidArgumentError                      Traceback (most recent call last)
<ipython-input-74-f878a6f234dd> in <module>
      7   seed=123,
      8   image_size=(img_height, img_width),
----> 9   batch_size=batch_size)

/usr/local/lib/python3.7/site-packages/tensorflow/python/data/ops/iterator_ops.py in __next__(self)
    734 
    735   def __next__(self):  # For Python 3 compatibility
--> 736     return self.next()
    737 
    738   def _next_internal(self):

/usr/local/lib/python3.7/site-packages/tensorflow/python/data/ops/iterator_ops.py in next(self)
    770   def next(self):
    771     try:
--> 772       return self._next_internal()
    773     except errors.OutOfRangeError:
    774       raise StopIteration

/usr/local/lib/python3.7/site-packages/tensorflow/python/data/ops/iterator_ops.py in _next_internal(self)
    762         return self._element_spec._from_compatible_tensor_list(ret)  # pylint: disable=protected-access
    763       except AttributeError:
--> 764         return structure.from_compatible_tensor_list(self._element_spec, ret)
    765 
    766   @property

/usr/local/lib/python3.7/contextlib.py in __exit__(self, type, value, traceback)
    128                 value = type()
    129             try:
--> 130                 self.gen.throw(type, value, traceback)
    131             except StopIteration as exc:
    132                 # Suppress StopIteration *unless* it's the same exception that

/usr/local/lib/python3.7/site-packages/tensorflow/python/eager/context.py in execution_mode(mode)
   2103     finally:
   2104       ctx.executor = executor_old
-> 2105       executor_new.wait()
   2106 
   2107 

/usr/local/lib/python3.7/site-packages/tensorflow/python/eager/executor.py in wait(self)
     65   def wait(self):
     66     """Waits for ops dispatched in this executor to finish."""
---> 67     pywrap_tfe.TFE_ExecutorWaitForAllPendingNodes(self._handle)
     68 
     69   def clear_error(self):

InvalidArgumentError: assertion failed: [Unable to decode bytes as JPEG, PNG, GIF, or BMP]
     [[{{node decode_image/cond_jpeg/else/_1/decode_image/cond_jpeg/cond_png/else/_20/decode_image/cond_jpeg/cond_png/cond_gif/else/_39/decode_image/cond_jpeg/cond_png/cond_gif/Assert/Assert}}]]

Anyway it is interesting that I still get the output:无论如何,有趣的是我仍然得到 output:

Found 2160 files belonging to 2160 classes.
Using 1728 files for training.

When I assign the function output just to a single variable (train_ds), I do not receive an error.当我将 function output 分配给单个变量(train_ds)时,我没有收到错误。

I think one of your images is corrupted.认为您的一张图片已损坏。 Use this function and see if it crashes.使用这个 function 看看它是否崩溃。 It will print the filename before reading it, so you'll see which picture is corrupted.它会在读取之前打印文件名,因此您会看到哪张图片已损坏。

Modify the os.listdir() part so it includes all your images in the different folders.修改os.listdir()部分,使其包含不同文件夹中的所有图像。

import tensorflow as tf
import os

def validate_image(file_name):
    tf.py_function(tf.print, inp=[file_name], Tout=[])
    image = tf.io.read_file(file_name)
    image = tf.io.decode_image(image, channels=3)
    return image

os.chdir(r'path\to\images')

accepted_extensions = ('jpg', 'png', 'bmp', 'gif')

files = list(filter(lambda x: x.lower().endswith(accepted_extensions), os.listdir()))

ds = tf.data.Dataset.from_tensor_slices(files).map(validate_image)

for i in ds:
    pass

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 Tensorflow 预测错误,invalidArgumentError:断言失败:[无法将字节解码为 JPEG、PNG、GIF 或 BMP] - Tensorflow prediciton error, invalidArgumentError: assertion failed: [Unable to decode bytes as JPEG, PNG, GIF, or BMP] “预测失败:模型执行期间出错:无法将字节解码为JPEG,PNG,GIF或BMP” - “Prediction failed: Error during model execution: Unable to decode bytes as JPEG, PNG, GIF, or BMP” 使用 tf.image.decode_image 时出错“b'无法将字节解码为 JPEG、PNG、GIF 或 BMP'” - Error using tf.image.decode_image " b'Unable to decode bytes as JPEG, PNG, GIF, or BMP'" tensorflow.python.framework.errors_impl.InvalidArgumentError:未知的图像文件格式。 需要 JPEG、PNG、GIF、BMP 之一 - tensorflow.python.framework.errors_impl.InvalidArgumentError: Unknown image file format. One of JPEG, PNG, GIF, BMP required Tensorflow:InvalidArgumentError:预期图像(JPEG、PNG 或 GIF),文件为空 - Tensorflow: InvalidArgumentError: Expected image (JPEG, PNG, or GIF), got empty file Tensorflow 无法解码 tfrecords 中的 jpeg 字节 - Tensorflow failed to decode jpeg bytes in tfrecords 未知的图像文件格式。 需要 JPEG、PNG、GIF、BMP 之一 - Unknown image file format. One of JPEG, PNG, GIF, BMP required Tensorflow Keras 错误:未知的图像文件格式。 需要 JPEG、PNG、GIF、BMP 之一 - Tensorflow Keras error: Unknown image file format. One of JPEG, PNG, GIF, BMP required tf.image.decode_jpeg引发InvalidArgumentError - tf.image.decode_jpeg raise InvalidArgumentError 如何在wxpython中获取png或jpeg或bmp图片 - How to get png or jpeg or bmp pictures in wxpython
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM