You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用ImageDataGenerator训练多分类模型时出现图像截断OSError如何解决

问题解决方法

报错的核心原因是存在尾部数据截断的JPG图片,你之前用Image.verify()仅校验图片文件头合法性,不会校验全量像素数据,因此无法检出这类问题;小数据集训练时未触发报错是因为没有随机读取到这些问题文件,类别增多、数据集扩大后才会碰到。

解决方案按优先级排序如下:

  • 方案1:设置PIL自动兼容截断图片(最快生效,无需修改数据集)
    在你所有代码的最开头(导入库的部分)加入两行配置,即可让PIL自动忽略截断错误,正常加载图片:
from PIL import ImageFile
ImageFile.LOAD_TRUNCATED_IMAGES = True

该配置对绝大多数场景都适用,不会影响正常训练效果。

  • 方案2:修正图片校验逻辑,清理问题文件
    如果不想兼容截断文件,需要把所有问题文件找出来删除或替换,使用如下校验代码(替代你之前的校验逻辑):
import os
from PIL import Image

categ = ['Train', 'Valid', 'Test']
dataset = '/content/drive/MyDrive/Colab Notebooks/Datasets/FSLR_Application_Dataset'
truncated_files = []

for cat in categ:
  img_path = os.path.join(dataset, cat)
  for foldername in os.listdir(img_path):
    sign_path = os.path.join(img_path, foldername)
    for sign in os.listdir(sign_path):
      if sign.endswith('.jpg'):
        file_path = os.path.join(sign_path, sign)
        try:
          img = Image.open(file_path)
          img.load() # 加载全量像素数据,检出截断问题
          img.resize(image_size) # 模拟训练时的resize操作,进一步校验
        except Exception as e:
          truncated_files.append(file_path)
          print('问题文件:', file_path, '错误信息:', str(e))

print(f"共检出{len(truncated_files)}个异常文件,可手动清理后重新训练")

额外代码优化建议

你当前代码存在参数冲突:flow_from_directory中已经指定了batch_size=5,model.fit中传入的batch_size=2000对生成器输入的训练流程完全无效,可以直接删除fit中的batch_size参数,避免后续混淆。


内容的提问来源于stack exchange,提问作者Lord Dickenstein

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 09:48:03