python - tf.image.decode_jpeg 经常需要永远加载文件
问题描述
以下代码是我的 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 中运行。
编辑使我的代码变慢的功能是decode_jpeg
,因为以下定义read_image
多次工作。
@tf.function()
def read_image(path):
image = tf.io.read_file(path)
image = tf.image.decode_jpeg(image)
return image
解决方案
推荐阅读
- c++ - 为什么临时对象的地址与C++中具有临时对象的对象的地址相同
- amazon-web-services - 我可以在 S3 存储桶上删除并创建一个空的 Athena 表吗?
- flutter - 为什么 onTokenRefresh 没有触发?
- c# - 当参数为真时,指示结果的属性不为空?
- node.js - 在物理或逻辑文件夹中隔离 nodejs 脚本
- flutter - 设置溢出 TextOverflow.ellipsis 文本长度 Flutter
- python - 从列表和两个为元素提供动力的数字计算矩阵
- kubernetes - Kubernetes:如何更新 livebusybox 容器的“命令”
- python-3.x - 在 GCP 中使用 python 代码创建 VM 实例时出现问题
- python - 构建我的 SQLite 数据库的聪明方法