我正在运行21250个图像的二进制分类器(这两个类总计)。我的批量大小为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):
据我了解,此处的图像可能已损坏或由于其他原因而无法读取该图像。有没有办法让培训者跳过无法识别的图像?
请让我知道在我的代码/数据中要考虑的其他建议,以解决此问题。
答案 0 :(得分:2)
此错误可能是由于图像为'NoneType'所致,尽管您可能看到它们为.jpeg or .png
,但在预处理图像期间,该图像实际上已以某种方式损坏。在大型数据集上,我已经多次遇到这个问题。
您可以做的是删除这些图像,因为我认为无法将它们转换为所需的格式。
请记住在删除图像之前保留整个数据集的副本,以防万一代码中出现任何问题。
我不知道您的图像文件夹的结构,所以我仅向您展示如何使用已找到图像的完整路径来进行操作。这是您必须要做的,但是可以很容易地通过os.walk()
完成,然后将根目录和文件的返回值与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)