【发布时间】:2021-04-23 08:55:28
【问题描述】:
以下代码是我的 tf 图读取图像代码的一部分。当我使用此代码遍历数据时,程序在几百张图像之后一直卡在tf.io.read_file(path) 中并且不执行任何操作。更具体地说,代码甚至无法暂停,我每次都必须重新启动会话。
@tf.function()
def read_image(path):
image = tf.io.read_file(path)
image = tf.image.decode_jpeg(image)
return image
...
div8k_list=[os.path.join(div8k_save_path, x) for x in os.listdir(div8k_save_path)]
train_path = tf.data.Dataset.from_tensor_slices(div8k_list)
train_images = train_path.map(read_image, num_parallel_calls=tf.data.AUTOTUNE)
我首先怀疑是数据中有一些损坏的图像或错误的路径导致了这个问题,并测试了以下代码。
for path in train_path:
print(path)
image = tf.io.read_file(path)
image = tf.image.decode_jpeg(image)
令人惊讶的是,循环卡住的图像路径没有共同特征。而且这不是图像的问题,因为循环曾经卡在1056.png,但是当我显式加载1056.png时,就没有问题了。
这个问题的原因可能是什么?
编辑:总而言之,程序永远停留在read_image,而我在数据集中找不到问题。
我的数据集是 DIV8K 数据集,我在 COLAB 中运行。
EDIT 使我的代码变慢的函数是decode_jpeg,因为read_image 的以下定义多次工作。
@tf.function()
def read_image(path):
image = tf.io.read_file(path)
image = tf.image.decode_jpeg(image)
return image
【问题讨论】:
-
我愿意分享我的 COLAB 环境,但不幸的是,数据在我的 Google Drive 帐户中并且太大(~50GB)。
-
你能用
tf.io.decode_image(image, expand_animations = False)代替tf.image.decode_jpeg吗? -
@M.Innat 谢谢!我会试试看。多亏了你,我认为问题出在 tf.image.decode_jpeg
-
@M.Innat 非常感谢!你救了我的命!我仍然不明白为什么
tf.image.decode_jpeg有问题,而tf.io.decode_image工作得很好。请发布答案,以便您获得赏金。
标签: python tensorflow keras