1.在github下载源码
2.准备数据集
(1)创建数据集文件夹
在yolov5文件夹里创建一个shujuji文件夹,可以自己命名,不要中文。
shujuji文件夹里再创建两个文件夹分别是训练集和验证集
接着分别在train 和 val 文件夹里创建images 和 labels ,第一个文件夹里放要训练的图片
第二个用labelimg工具标注后生成的标注文件(举例:.txt, .xml)
(2)下载标注工具labelimg
pip install labelimg
下载到对应的环境,接着输入labelimg,就打开了
(3)标注图片
打开labelimg工具,在工具里打开要标注的图片文件夹,设置生成的文本保存位置到 train/labels 下(保存路径一般会自动提示)
我的文件夹里准备了56张口罩图片,接下来就是标注工作~
如果图片太多,一次不能全部标注完,关闭labelimg工具继续上次标注,
(4)标注完成
给val文件夹里也拷贝一份,要放到对应目录!
声明一下:因为没有验证集会报错,其实我这里是不规范的,只是为方便跑起来将训练集和验证集用的一样了
最终是这样子的:
3.修改yaml文件
在目录下找到data 和 models 这两个文件夹
编辑data/coco128.yaml文件
names根据自己标注的类别填
接着再编辑models/yolov5s.yaml文件
有几个类别,nc就填几
4.下载权重文件
打开官网下拉就可以看到
将yolov5s.pt放到yolov5-master目录下
5.train.py 指令运行
常规参数解释:
weights:权重文件路径
cfg:存储模型结构的配置文件
data:存储训练、测试数据的文件
epochs:指的就是训练过程中整个数据集将被迭代(训练)了多少次,显卡不行你就调小点。
batch-size:训练完多少张图片才进行权重更新,显卡不行就调小点。
img-size:输入图片宽高,显卡不行就调小点。
device:cuda device, i.e. 0 or 0,1,2,3 or cpu。选择使用GPU还是CPU
workers:线程数。默认是8
(1)第一次运行
python train.py --weights yolov5s.pt --cfg models/yolov5s.yaml --data data/coco128.yaml --epoch 100 --batch-size 8 --img 640 --device cpu
GPU训练的话将device后面的改成0
我按了回车后,不一会就报错了
解决这个问题仅需要修改一下 utils/dataloaders.py 里的一个参数num_workers
将nw改成0
(2)第二次运行
跑起来了
6.测试训练结果
python detect.py --weights best.pt --device cpu --source img/
从shujuji中拿出四张图片测试了一下,结果如下
总结:
比较麻烦的训练前的工作,比如数据的准备,有图片,有将要生成的标注文件,这些路径都不能搞错,然后就是修改yaml文件,coco128.yaml里不要空行,特别是最后一行,整行都是注释的也不要。