最近在用YOLOv5跑一个图像检测的项目,在训练模型时出现以下警告内容:
train: WARNING C:\Users\ADMIN\Desktop\deeplearning\yolov5\data\images\train\0000234.jpg: corrupt JPEG restored and saved
实际上该警告并不影响训练,因为我发现所有的图片还是正常被读取了的:
train: Scanning 'C:\Users\ADMIN\Desktop\deeplearning\yolov5\data\labels\train.cache' images and labels... 450 found, 0 missing, 0 empty, 0 corrupted: 100%|██████████| 450/450 [00:00<?, ?it/s]
但是有这么一大堆警告看着就是不舒服,为了不影响模型训练效果,因此想办法试着去解决掉这些警告。
在进行资料查找之后发现了问题的关键,在模型训练时,他读取到的图片数据不符合图像原本所包含的数据,也就是出现了数据的丢失因此会弹出警告“corrupt JPEG restored and saved”。
原因:这很多时候是因为我们下载过图像之后为了直接方便读取数据而简单地将文件后缀直接重命名来更改格式,比如将.png文件直接修改为.jpg文件,这样可能就会导致图像的失真,即代码警告中所说的“corrupt”。

解决方式: 在读取图片时用openCV对图像数据进行读取,将原始的图片数据重组复现到新路径下,接着用新路径下的图片去进行模型训练,实践发现警告内容消失。
具体操作代码:
import os
import cv2
dataDir = "pics/" # 原始图像所在的路径
saveDir = "images/" # 新图像需保存到的路径
if not os.path.exists(saveDir):
os.makedirs(saveDir)
for one_pic in os.listdir(dataDir):
one_path = dataDir + one_pic
one_img = cv2.imread(one_path)
new_path = saveDir + one_pic
cv2.imwrite(new_path, one_img)