问题描述
在使用yolo(yolov5)训练自己的模型时候,有时候会发现出现下面的问题:
ignoring corrupt image/label: [Errno 2].....
仔细一看,这是自己的数据集出现了问题。
再细心一看,好家伙,一共5000张数据图片,有2000多没被训练,这不难受死了?辛辛苦苦打的数据标签,最后全都用不上???
不,肯定有方法解决!!!
解决方法在下面,只需要操作一波就可以全部训练了~~~
原因分析:
原因是,yolov5需要训练【JPG】格式的图片,而我们喂进去的部分是【JPEG】数据
我们需要将自己的数据集中【JPEG】图片修改下格式(简单来说,就是修改下后缀名),就可以解决这个问题了,让自己的数据全部训练!!!
解决方案:
1.新建一个python脚本,建议放在和数据集文件同级下。在脚本里放入下面的代码,注意路径中不应存在中文。
2.新建一个文件夹,用来存放修改好的图片文件。这是为了双保险,可以避免修改过程中出现问题,自己的源文件也出现问题.
数据图片中通常使用的是JPEG和jpg两种文件格式。我们在yolo训练的时候,运行【train.py】文件时会出现报错而无法正常训练,故需要将文件格式统一成【.jpg】格式后便可成功训练。代码如下:
import os
import cv2 as cv
image_path = 'J:/102HorizontalProject/zong/image' #设置图片读取的路径
save_path = 'J:/yolov5-master-cow/data/images' #设置图片保存的路径
if not os.path.exists(save_path): #判断路径是否正确,如果正确就打开
os.makedirs(save_path)
image_file = os.listdir(image_path)
for image in image_file:
if image.split('.')[-1] in ['bmp', 'jpg', 'jpeg', 'png', 'JPG', 'PNG']:
str = image.rsplit(".", 1) #从右侧判断是否有符号“.”,并对image的名称做一次分割。如112345.jpeg分割后的str为["112345","jpeg"]
output_img_name = str[0] + ".jpg" #取列表中的第一个字符串与“.jpg”放在一起。
src = cv.imread(os.path.join(image_path, image))
newimg = cv.imwrite(save_path + '/' + output_img_name, src)
print('FINISHED')
成功后,自己新建的文件里图片就都是【JPG】格式的文件了~~~
再次运行自己的【train.py】就会发现,所有的图片已经都开始训练了~~~完美解决!!!