前言
准备做目标检测,所以学习yolov5。教程参考保姆式yolov5教程,训练你自己的数据集
一、前期准备
- 创建虚拟环境的时候,使用以下代码,这样虚拟环境中有
conda create -n 虚拟环境名称 python=3.9 anaconda
- 开始使用的是python3.10,后面发现在安装labelimg,进行标注的时候,一直闪退。后发现是因为相关依赖库没有。降低版本到python3.9
- 安装第三方库是pip install -r requirements.txt
二、训练自己数据
1.数据
- 使用火焰数据集网上下载的,在教程评论区下载:火焰数据集
- 将数据集导入的过程中又报错,因为需要的label文件是txt,但是下载的数据是xml文件。需要将这个文件进行转换:目标检测中将已有的.xml数据集转换成.txt数据集(附代码,归一化后供YOLO格式使用)
2.训练
- yolov5训练自己的数据集-问题_train.cache_qq_409992227的博客-CSDN博客遇见问题参考文章:yolov5报错
- 报错:SSL: CERTIFICATE_VERIFY_FAILED
在train.py的最开头加入下列代码:
import ssl
ssl._create_default_https_context = ssl._create_unverified_context
- 报错:export GIT_PYTHON_REFRESH=quiet
参考:https://blog.csdn.net/qq_63034152/article/details/131623372
- 报错:train: WARNING D:\...\fire_fire_80.jpg: ignoring corrupt image/label: non-normalized or out of bounds coordinates
原因1:yolov5需要训练【JPG】格式的图片,而我们喂进去的部分是【JPEG】数据
参考修改文章:将所有图片格式转化为JPG
原因2:归一化错误,之前不小心把正确代码改错了,在转化文件的时候,注意路径问题:
# 进行归一化操作
def convert(size, box): # size:(原图w,原图h) , box:(xmin,xmax,ymin,ymax)
dw =1/ size[0] # 1/w
dh =1/ size[1] # 1/h
x = (box[0] + box[1])/2.0 # 物体在图中的中心点x坐标
y = (box[2] + box[3])/2.0 # 物体在图中的中心点y坐标
w = box[1] - box[0] # 物体实际像素宽度
h = box[3] - box[2] # 物体实际像素高度
x = x*dw # 物体中心点x的坐标比(相当于 x/原图w)
w = w*dw # 物体宽度的宽度比(相当于 w/原图w)
y = y*dh # 物体中心点y的坐标比(相当于 y/原图h)
h = h*dh # 物体宽度的宽度比(相当于 h/原图h)
return (x, y, w, h) # 返回 相对于原图的物体中心点的x坐标比,y坐标比,宽度比,高度比,取值范围[0-1]
-
报错:AssertionError: Label class 1 exceeds nc=1 in data/fire.yaml. Possible class labels are 0-0
原因:fire.yaml里面的类别代码没有修改
# Classes
nc: 2 # number of classes
names: ['fire','smoke'] # class names