OSError: image file is truncated (71 bytes not processed)

在加载训练图像数据,准备训练模型的时候,报错如下:

OSError: image file is truncated (71 bytes not processed) 

搜索查了一下,有两种原因,一种说是图像太大,另一种说是图像不完整。找到的解决方式为如下:

from PIL import ImageFile

ImageFile.LOAD_TRUNCATED_IMAGES = True

这么设置,确实可以了,但是对于训练集中有多少有问题的图像,不清楚,而且这些图像如果比例太大,对训练效果会不会产生影响也不清楚。

所以还是想先确认一下,到底这种类型的图像有多少.

报错位置信息如下:

for i, (images, target) in enumerate(train_loader):

具体内部错误如下:

File "/opt/anaconda3/envs/yolov5/lib/python3.6/site-packages/PIL/ImageFile.py", line 260, in load
    "image file is truncated "
OSError: image file is truncated (34 bytes not processed)

所以写了一个测试脚本,就是对训练路径下面的所有图像都用pillow中的Image读取一下,看看哪个图像报错,结果遍历完图像发现一个报错的也没有,这个地方有些疑问。在网上查的时候,看到有人使用keras.preprocessing.image.load_img()找到了出问题的图像,所以打算试一下,结果安装虚拟环境下载需要好久,就先让它下载着,在另外一个环境中使用OpenCV进行读取测试一下,在imread的过程中,出现了几条Premature end of JPEG file提示,总共有三张图像,还好不多,看了下这三张图像确实显示不完整,就是图像下面的一部分是灰色的,看着就像是没有下载完。这样只要剔除这三张有问题的图像就可以了。

但在查询torchvision.datasets.ImageFolder的时候,发现其中有一个参数可以对加载的图像进行判断,is_valid_file:A function that takes path of an Image file and check if the file is a valid file (used to check of corrupt files)

def is_valid_jpg(jpg_file):      
    """判断JPG文件下载是否完整"""      
    if jpg_file.split('.')[-1].lower() == 'jpg':          
        with open(jpg_file, 'rb') as f:              
            f.seek(-2, 2)              
            return f.read() == '\xff\xd9'      
    else:          
        return True

通过这种方式就可以对训练数据集中出错的图像进行判断,剔除不满足要求的图像。

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值