Corrupt JPEG data: premature end of data segment

在跑 LSTR 的效果时 , 用 tusimple数据集(1280720)正常,换成自集的数据集(12801080),出现 Corrupt JPEG data: premature end of data segment

知乎回答:在所有图片进行检查后,觉得是第3 条的原因, 在传入网络前进行数据增广时 resize操作,并未去除, 不影响训练和效果。

在这里插入图片描述

https://www.zhihu.com/question/30372655
1.
遇到了同样的问题。针对jpg文件来说,一般是由于文件下载不完整导致的,可以通过判断jpg文件的完整性来避开这个问题。最简单的办法是判断文件最后两个字节是否是’\xff\xd9’,如果不是则表明文件不完整。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() == b’\xff\xd9’
else:
return True

使用skimage可以捕获这个异常

from skimage import io

try:

io.imread(‘1.jpg’)

except Exception as e:

print(e)

本人在实验中也遇到这个问题,后来找到原因了。由于网络接受的图片大小和你的数据传入的大小不同,因此在你传入网络之后,tf内部会resize,但是注意,这个resize并不是resize函数,这个resize会让数据丢失,测过19801080的图片内部resize不会数据丢失,但是22801880的图片传入后resize会数据丢失。个人建议:既然最后都是要resize,为什么不先resize呢?训练时间也减少了将近4倍,亲测函数resize不会造成数据丢失。ps:如果你们情况和我不是很雷同,可以参考一下是不是tf内部处理你的数据是出了问题。

这只是opencv的一个stderr的输出罢了。。不是异常,不能catch的

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值