- Yolov5配置了4种不同大小的网络模型,分别是YOLOv5s、YOLOv5m、YOLOv5l、YOLOv5x,其中YOLOv5s是网络深度和宽度最小但检测速度最快的模型,其他3种模型都是在YOLOv5的基础上不断加深、加宽网络是的网络规模扩大,在增强模型检测性能的同时,增加了计算资源和速度。处于对检测精度、模型大小以及检测速度的综合考量,本文对YOLOv5s进行研究。
- ./models/yolov5s.yaml文件是yolov5s的网络结构,如果要改算法网络结构可以再此文件中进行修改,然后再修改./models/common.py和./models/yolo.py中的代码。
一、YOLOv5s网络结构
如下图,根据yolov5s.yaml文件中结构,参考网上资料使用PPT画的。
二、代码解读
1、参数配置
nc: 80 # number of classes
depth_multiple: 0.33 # model depth multiple 控制模型的深度
width_multiple: 0.50 # layer channel multiple 控制Conv通道channel个数
- depth_multiple 表示 BottleneckCSP 模块层的缩放因子,将所有的 BottleneckCSP 模块的 Bottleneck 乘上该参数得到最终个数。控制子模块数量=int(number*depth)
- width_multiple 表示卷积通道的缩放因子,就是将配置里面的 backbone 和 head 部分有关 Conv 通道的设置,全部乘以该系数。控制卷积核的数量=int(number*width)
YOLOv5s、YOLOv5m、YOLOv5l、YOLOv5x四种模型的区别仅在于depth_multiple 和width_multiple两个参数的不同。
以上三个参数,会用于模型搭建yolo.py文件中
读取 yaml 中的 anchors 和 parameters
anchors, nc, gd, gw = d['anchors'], d['nc'], d['depth_multiple'], d['width_multiple']
通过深度参数 depth gain, 在搭建每层时, 实际深度 = 理论深度(每一