YOLOv5官方讲解: Train Custom Data - YOLOv8 Docs (ultralytics.com)
labelImg(制作标签用) :GitHub - liyunfei0411/labelimg-master
目录
1、Create dataset.yaml
将yaml文件放入yolov5/datasets文件夹中,此处命名为lego.yaml文件,接下来需要对yaml文件 进行修改。yaml文件主要进行2个设置:①dataset的路径设置;②classes的设置
①路径设置
(1)path:训练集和测试集所在的上一级文件夹
(2)train:训练集所在文件夹,路径为path/train
(3)val:验证集所在文件夹,路径为path/val
(4)test:测试集所在文件夹,路径为path/test,可不设置,为空
举例:
②classes设置
nc -- 类别数
类名字典 -- 编号: 类别名
例:0对应lego
或
2、Create Labels
1、下载labelimg仓库并安装labelimg
https://github.com/liyunfei0411/labelimg-master.git
win+anaconda环境下根据提示进行安装
打开Anaconda Prompt 后切换到labelimg文件夹输入以下命令
conda install pyqt=5 pyrcc5 -o libs/resources.py resources.qrc python labelImg.py python labelImg.py [IMAGE_PATH] [PRE-DEFINED CLASS FILE]
运行labelImg.py后顺利弹出以下界面即为成功
若运行labelImg.py时遇到报错
(py38) F:\labelimg-master>python labelImg.py
Traceback (most recent call last):
File "labelImg.py", line 39, in <module>
from libs.labelFile import LabelFile, LabelFileError
File "F:\labelimg-master\libs\labelFile.py", line 10, in <module>
from libs.pascal_voc_io import PascalVocWriter
File "F:\labelimg-master\libs\pascal_voc_io.py", line 6, in <module>
from lxml import etree
ModuleNotFoundError: No module named 'lxml'
安装这个包后就能顺利运行labelImg.py
pip install lxml
2、开始标注
①创建文件夹
我在labelimg文件夹中创建了两个文件夹:images、labels。其中,images用来保存图片,labels用来保存标签的xml文件
②设置路径
放大后界面:
open dir -- 图片所在文件夹,此处为C:\Users\r***\Pictures\labelimg\images
change save dir -- 用来保存标签的文件夹,此处为C:\Users\r***\Pictures\labelimg\labels
save下面是change save format,点击后即可切换为YOLO(如下图所示)。PascalVOC的保存格式为xml,yolo的格式为txt
③打标
设置号open dir后,中间会自动加载出images文件夹中的图片,就可以开始标注了。
按w -- 开始标注
按a -- 上一张
按d -- 下一张
按w进行标注,移动鼠标画框
下面会弹出小框
填入所属的class(此处为person)后ok,再ctrl+s保存
完成一张的标注后,按d进行下一张,如果设置了auto save mode,labelimg会在加载上一张前自动替你保存(意思就是不需要再手动ctrl+s来保存了)
每完成一张图片,anaconda prompt会显示,labels文件夹中会多出一个xml文件。若images中的图片名为1.jpg,那么labels中对应的文件名为1.xml
3、xml文件
记录一下xml中保存了什么信息
若有多个物体
4、txt文件(YOLO v5)
当保存为txt文件时,labels文件夹内部如下所示,主要是包括①所设置的类别及对应编号的说明(classes.txt)②每张图片对应的bounding box信息(如67.jpg对应信息保存在67.txt中)
①classes.txt当中内容如下,classes由0开始编号
②73.txt当中内容:
其中第一列(15和16)代表对应class的编号,如15表示lego,16表示water;后四列是bounding box的边框信息。yolov5要求将坐标归一化到0-1,这里与xml当中的坐标不同
3、Organize Directories
因为YOLOv5会将路径中最后一个 /images/
替换为 /labels/,所以labels文件夹放置位置如下
4、运行命令行
(以下两种都可以)
F:\PycharmProjects\yolov5-master>python train.py --img 640 --epochs 3 --data datasets/lego.yaml --weights yolov5s.pt
F:\PycharmProjects\yolov5-master>python train.py --img 640 --epochs 3 --data datasets/lego1.yaml --weights yolov5s.pt