Y3、yolov5s.yaml文件解读
YOLOv5配置了4种不同大小的网络模型,分别是YOLOv5s、YOLOv5m、YOLOv5l、YOLOv5x,其中 YOLOv5s 是网络深度和宽度最小但检测速度最快的模型,其他3种模型都是在YOLOv5s的基础上不断加深、加宽网络使得网络规模扩大,在增强模型检测性能的同时增加了计算资源和速度消耗。出于对检测精度、模型大小、检测速度的综合考量,本文选择YOLOv5s作为研究对象进行介绍。
主要两个个任务:
- 将yolov5s网络模型中第4层的C32修改为C31
- 第6层的C33修改为C32
其实也就是修改./models/yolov5s.yaml文件
yolov5s网络模型简览
参数文件
1、参数配置
# Parameters
nc: 80 # number of classes
depth_multiple: 0.33 # model depth multiple 控制模型深度
width_multiple: 0.50 # layer channel multiple 控制Conv通道channel个数(卷积核数量)
depth_multiple:控制子模块数量, = int(numberdepth)
width_multiple:控制卷积核的数量, = int(numberwidth)
通过这两个参数可以实现不同复杂度的模型设计。
2、参数详解
2.1 nc
nc就是学习的类别个数,一般和使用的数据集相互绑定
2.2 depth/width_multiple
depth/width_multiple分别代表了所用模型的深度和宽度因子,实际运行代码的时候所有的参数量会与这两个因子相乘
2.3 anchors
anchors代表了检测框的大小,在源代码中是针对coco数据集使用K++算法求解出的大、中、小三种大小检测框,如果是自己的数据集建议也是用K++算法进行求解。
2.4 backbone
YOLOv5的主干网络,主要作用是用于特征提取,可以替换为ResNet、ShuffleNet等
每一行参数意义分别是[和谁连接,使用个数,使用模块,模块中的参数]
2.5 head
head其实包括了Nec和head两个部分,一般在绘图时head都默认为是最后一行
调整模型
需要调整的地方主要是backbone部分
# YOLOv5 v6.0 backbone
backbone:
# [from, number, module, args]
[[-1, 1, Conv, [64, 6, 2, 2]], # 0-P1/2
[-1, 1, Conv, [128, 3, 2]], # 1-P2/4
[-1, 3, C3, [128]],
[-1, 1, Conv, [256, 3, 2]], # 3-P3/8
[-1, 3, C3, [256]], # 第4层改动
[-1, 1, Conv, [512, 3, 2]], # 5-P4/16
[-1, 6, C3, [512]], # 第6层改动
[-1, 1, Conv, [1024, 3, 2]], # 7-P5/32
[-1, 3, C3, [1024]],
[-1, 1, SPPF, [1024, 5]], # 9
]
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律