1. 修改数据集配置文件.\data\data_test.yaml,注意反斜杠
# Custom data for safety helmet
# train and val data as 1) directory: path/images/, 2) file: path/images.txt, or 3) list: [path1/images/, path2/images/]
train: D:/GProject/myYolo/yoloV5SourceCode/data/images/images/train
val: D:/GProject/myYolo/yoloV5SourceCode/data/images/images/val
# number of classes
nc: 2
# class names
names: ['man', 'woman']
2. 修改模型的配置文件.\models\model_test.yaml中的分类数据
# YOLOv5 🚀 by Ultralytics, GPL-3.0 license
# yolov5.yaml是配置文件,指导common.py去执行搭建模型
# yologv5s的结构
# 图片进来先到backbone层处理,再到head层处理
# Parameters
nc: 2 # number of classes,能够预测的目标的类别数
# 以下两个参数是用来控制模型大小的
depth_multiple: 0.33 # model depth multiple,模型深度倍数,会和第二个参数(模型层数)相乘
width_multiple: 0.50 # layer channel multiple,通道倍数,会和第四个参数的第一个参数(通道数)相乘
# 定义用来检测的矩形框矩形框
# anchor分为三组,每组3个,每个包含宽和高
anchors:
- [10,13, 16,30, 33,23] # P3/8, 低层,预测小目标,anchor比较小
- [30,61, 62,45, 59,119] # P4/16
- [116,90, 156,198, 373,326] # P5/32 高层,预测大目标,anchor比较大
# YOLOv5 v6.0 backbone
backbone:
# [from, number, module, args]
# from表示这一层的输入是从哪里过来的,-1表示从上一层过来
# number,初步理解表示数量,就比如第0层1表示,有1个Conv,第2层3表示有3个C3,但跟其他参数也有关系,不一定一成不变,跟depth_multiple这个深度倍数的参数有关
# module,这一层的层结构,比如conv,c3等等,这些层结构都定义宰了common.py文件中
# args, [64, 6, 2, 2],传给参数3层定义需要的参数
[[-1, 1, Conv, [64, 6, 2, 2]], # 0-P1/2,这里开始就是yolov5的层结构,这里是第0层,一共24层,每一层包含4个值,[from, number, module, args]
[-1, 1, Conv, [128, 3, 2]], # 1-P2/4
[-1, 3, C3, [128]],
[-1, 1, Conv, [256, 3, 2]], # 3-P3/8
[-1, 6, C3, [256]],
[-1, 1, Conv, [512, 3, 2]], # 5-P4/16
[-1, 9, C3, [512]],
[-1, 1, Conv, [1024, 3, 2]], # 7-P5/32
[-1, 3, C3, [1024]],
[-1, 1, SPPF, [1024, 5]], # 9
]
# YOLOv5 v6.0 head
head:
[[-1, 1, Conv, [512, 1, 1]],
[-1, 1, nn.Upsample, [None, 2, 'nearest']],
[[-1, 6], 1, Concat, [1]], # cat backbone P4,这里的from是[-1,6],表示是从上一层和第6层过来的
[-1, 3, C3, [512, False]], # 13
[-1, 1, Conv, [256, 1, 1]],
[-1, 1, nn.Upsample, [None, 2, 'nearest']],
[[-1, 4], 1, Concat, [1]], # cat backbone P3
[-1, 3, C3, [256, False]], # 17 (P3/8-small) 低层次用来检测小目标
[-1, 1, Conv, [256, 3, 2]],
[[-1, 14], 1, Concat, [1]], # cat head P4
[-1, 3, C3, [512, False]], # 20 (P4/16-medium) 中层次用来检测中目标
[-1, 1, Conv, [512, 3, 2]],
[[-1, 10], 1, Concat, [1]], # cat head P5
[-1, 3, C3, [1024, False]], # 23 (P5/32-large) 高层次用来检测大目标
[[17, 20, 23], 1, Detect, [nc, anchors]], # Detect(P3, P4, P5)
]
3. 开始训练
"D:\GProject\myYolo\yoloV5SourceCode\env\Scripts\python.exe" .\train.py --data .\data\data_test.yaml --cfg .\models\model_test.yaml --weights .\pretrained\yolov5s.pt --epoch 10 --batch-size 2
4. 使用训练完的模型检测
"D:\GProject\myYolo\yoloV5SourceCode\env\Scripts\python.exe" .\detect.py --weights .\runs\train\exp9\weights\last.pt --source .\data\images\images\test\19.jpg