【问题标题】:UnidentifiedImageError when training a model using TF ImageGenerator使用 TF ImageGenerator 训练模型时出现 UnidentifiedImageError
【发布时间】:2021-02-08 08:41:51
【问题描述】:

我正在运行一个包含 21250 个图像的二进制分类器(2 个类的总数)。我的批量大小为 425,步数为 50。

当我运行模型时出现以下错误:

UnknownError: 2 root error(s) found.
  (0) Unknown:  UnidentifiedImageError: cannot identify image file <_io.BytesIO object at 0x0000019FA183C8B0>
Traceback (most recent call last): 

据我了解,此处的图像可能已损坏或由于其他原因无法读取图像。有没有办法让训练师跳过无法识别的图像?

请让我知道在我的代码/数据中考虑解决此问题的其他建议。

【问题讨论】:

  • 可能是某些图像属于“无”类型,而不是 jpeg 或 png。
  • @yudhiesh - 有没有办法将所有图像设置为 jpeg 格式,而无需手动尝试查找并执行此操作?
  • 因此,如果图像是“NoneType”形式,我认为不可能将它们转换为 JPEG。您必须删除它们。
  • 我会附上一个为你做的答案。

标签: tensorflow image-processing keras deep-learning


【解决方案1】:

此错误可能是由于图像属于“NoneType”而发生的,尽管您可能会看到它们属于.jpeg or .png,但图像实际上在预处理图像期间以某种方式损坏。在大型数据集上,我多次遇到过这个问题。

您可以做的是删除这些图像,因为我认为无法将它们转换为所需的格式。

请记住在删除图像之前保留整个数据集的副本,以防代码出现任何问题。

我不知道您的图像文件夹的结构,所以我将向您展示如何使用已找到的图像的完整路径来执行此操作。这是您必须要做的事情,但可以使用 os.walk() 轻松完成,然后将 root 的返回值和文件与 image_path = os.path.join(root, files) 组合起来以获得图像的完整路径。在执行此操作时循环遍历所有图像以将其应用于所有图像。

import cv2
import imghdr
import os


image = cv2.imread(image_path)
img_type = imghdr.what(image_path)
if img_type != "jpeg":
    os.remove(image_path)

【讨论】:

  • 谢谢,我假设我应该在加载文件夹后在代码的开头运行它?
  • 模块 cv2 不存在这是 python 2 模块吗?我在 Jupyter notebook 中运行 Python 3...
  • 是的,使用os.walk() 获取所有文件、根目录和目录。您可以通过进入图像并查看其路径来获取完整路径的示例。然后在根和文件上使用os.join(),但打印每个首先返回的内容以进行仔细检查。此代码必须在每个图像的每个完整路径上运行。
  • cv2 必须安装然后使用这个!pip3 install opencv-python
  • 我成功实现了您的代码以删除损坏/非类型文件。有用!我观察到目录中的文件号下降并且在训练数据集时不再出现错误。非常感谢!
猜你喜欢
  • 1970-01-01
  • 2022-10-22
  • 1970-01-01
  • 2021-05-18
  • 2017-08-19
  • 2022-01-12
  • 2019-09-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多