gpt4 book ai didi

python - 在 Tensorflow 中检测损坏的图像

转载 作者:行者123 更新时间:2023-12-03 14:43:14 28 4
gpt4 key购买 nike

我无法在数据集中找到一些有问题的图像。

我的模型开始训练,但出现以下错误:

tensorflow.python.framework.errors_impl.InvalidArgumentError: Invalid PNG data, size 135347
[[{{node case/cond/cond_jpeg/decode_image/cond_jpeg/cond_png/DecodePng}} = DecodePng[channels=3, dtype=DT_UINT8, _device="/device:CPU:0"](case/cond/cond_jpeg/decode_image/cond_jpeg/cond_png/cond_gif/DecodeGif/Switch:1, ^case/Assert/AssertGuard/Merge)]]
[[node IteratorGetNext (defined at object_detection/model_main.py:105) = IteratorGetNext[output_shapes=[[24], [24,300,300,3], [24,2], [24,3], [24,100], [24,100,4], [24,100,2], [24,100,2], [24,100], [24,100], [24,100], [24]], output_types=[DT_INT32, DT_FLOAT, DT_INT32, DT_INT32, DT_FLOAT, DT_FLOAT, DT_FLOAT, DT_FLOAT, DT_INT32, DT_BOOL, DT_FLOAT, DT_INT32], _device="/job:localhost/replica:0/task:0/device:CPU:0"](IteratorV2)]]

因此,我编写了一个小脚本,在生成 TFRecords 之前运行该脚本以 try catch 任何有问题的图像。这基本上是教程代码,但批量大小为 1。这是我能想到的 try catch 错误的最简单方法。

def preprocess_image(image):
image = tf.image.decode_png(image, channels=3)
image = tf.image.resize_images(image, [192, 192])
image /= 255.0 # normalize to [0,1] range

return image

def load_and_preprocess_image(path):
image = tf.read_file(path)
return preprocess_image(image)

mobile_net = tf.keras.applications.MobileNetV2(input_shape=(192, 192, 3), include_top=False)
mobile_net.trainable=False

path_ds = tf.data.Dataset.from_tensor_slices(images)

image_ds = path_ds.map(load_and_preprocess_image, num_parallel_calls=4)

def change_range(image):
return (2*image-1)

keras_ds = image_ds.map(change_range)
keras_ds = keras_ds.batch(1)

for i, batch in tqdm(enumerate(iter(keras_ds))):
try:
feature_map_batch = mobile_net(batch)
except KeyboardInterrupt:
break
except:
print(images[i])

这正式崩溃,但没有正确处理异常。它只是抛出异常并崩溃。所以两个问题:
  • 有没有办法可以强制正确处理它?好像没有 Tensorflow, try and except doesn't handle exception
  • 有没有更好的方法来查找损坏的输入?

  • 我已经隔离了一个失败的图像,但是 OpenCV、SciPy、Matplotlib 和 Skimage 都打开了它。例如,我试过这个:
    import scipy
    images = images[1258:]
    print(scipy.misc.imread(images[0]))

    import matplotlib.pyplot as plt
    print(plt.imread(images[0]))

    import cv2
    print(cv2.imread(images[0]))

    import skimage
    print(skimage.io.imread(images[0]))

    ... try to run inference in Tensorflow

    我打印出四个矩阵。我假设这些库都使用 libpng 或类似的东西。

    然后图像 1258 使 Tensorflow 崩溃。查看解码Png source ,看起来它实际上正在崩溃 TF png library .

    我意识到我可能可以编写自己的数据加载器,但这似乎是废话。

    编辑:

    这也可以作为一个片段:
    tf.enable_eager_execution()

    for i, image in enumerate(images):
    try:
    with tf.gfile.GFile(image, 'rb') as fid:
    image_data = fid.read()

    image_tensor = tf.image.decode_png(
    image_data,
    channels=3,
    name=None
    )
    except:
    print("Failed: ", i, image_tensor)

    最佳答案

    打开一个新的python文件。复制下面的代码。指定您的图片所在的目录。并运行代码。你可以看到Corrupt JPEG data: premature end of data segment列表中的消息(如果您有损坏的文件)。

    from os import listdir
    import cv2

    #for filename in listdir('C:/tensorflow/models/research/object_detection/images/train'):
    for filename in listdir(yourDirectory):
    if filename.endswith(".jpg"):
    print(yourDirectory+filename)
    #cv2.imread('C:/tensorflow/models/research/object_detection/images/train/'+filename)
    cv2.imread(yourDirectory+filename)
    You can find the corrupt file in the list

    关于python - 在 Tensorflow 中检测损坏的图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56569342/

    28 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com