场景
异常:Corrupt JPEG data: 2 extraneous bytes before marker 0xd9
python语言,CV2读图像数据集,训练目标检测模型。在数据集分批送入模型训练过程中,出现大片图片异常情况。

(建议直接去看修复图像方法二,简单直接)
原因分析
在 python 中导入python-opencv库,读图难以检测到这个问题
-
产生图像读取异常的主要原因:图像数据在读取时,因为图像格式问题,解析含有data[0]数据段时,若data[0]后面还有其他字段,需要加上data[0]的实际长度才能赋值后面的字段,否则会覆盖data[0]中相关字段。

-
由于数据集中图像损坏或不完整的 jpeg 图像引起的低级 C 错误,opencv报的warning,在 python 中难以检测到。
3.可能是图像截取或微信下载的时候,命名导致,或重命名图像造成格式上的不对应。
解决办法
使用yolov训练数据集时,出现该错误,不影响训练流程,程序会自动跳过错误的数据。所以,会中断异常的batch,跳过后正常训练。但是,毕竟缺太多关键数据,感觉对不起标注时的付出。所以,想到一个笨办法来解决这个问题,修复图像。
解决步骤:
1)复现异常,找出问题图像。
因为训练数据集图像很多,几千张,要找出来不容易。它在python里面是一个警告,需要用CV2读图的时候才会爆出这个异常。我这里有个笨办法:用手动二分法和cv2.imread读图来定位图像。
def checkImg(dirPath):
for fileName in os.listdir(dirPath):
filePath = Path(os.path.join(dirPath, fileName))
if filePath.suffix.

最低0.47元/天 解锁文章
3万+





