- 本文为365天深度学习训练营 中的学习记录博客
- 原作者:K同学啊|接辅导、项目定制
✅本周任务:将yolov5s网络模型中第4层的C3*2修改为C3*1,第6层的C3*3修改为C3*2。
简单介绍:
YOLOv5配置了4种不同大小的网络模型,分别是
YOLOv5s
、YOLOv5m
、YOLOv5l
、YOLOv5x
,其中YOLOv5s
是网络深度和宽度最小但检测速度最快的模型,其他3中模型都是在YOLOv5s
的基础上不断加深、加宽网络使得网络规模扩大,在增强模型检测性能的同时增加了计算资源和速度消耗。出于对检测精度、模型大小、检测速度的综合考量,本文选择YOLOv5s
作为研究对象进行介绍。
./models/yolov5s.yaml
文件是YOLOv5s网络结构的定义文件,如果你想改进算法的网络结构,需先修改该文件中的相关参数,然后再修改./models/common.py
与./models/yolo.py
中的相关代码。
YAML简单介绍
yolov5的所有网络yaml文件如下:
我们需要修改的网络参数配置文件为yolov5s.yaml
,其文件的内容如下:
小 目标3组:[10, 13], [16, 30], [33, 23]
中 目标3组:[30, 61], [62, 45], [59,119]
大 目标3组:[116,90], [156,198], [373,326]
YOLOv5初始化了9个anchor,在3个Detect层(3个feature map)中使用,每个feature map的每个grid_cell都有3个anchor进行预测。分配规则是:尺度越大的feature map越靠前,相对原图的下采样率越小,感受野越小,则相对可以预测一些尺度比较小的物体,所有分配到定anchor越小;尺度越小的feature map越靠后,相对原图的下采样率越大,感受野越大,则相对可以预测一些尺寸比较大的物体,所有分配到的anchor也越大。即可以在小特征图(feature map)上检测大目标,也可以在大特征图上检测小目标。
YOLOv5根据工程经验得到了这么3组anchors(9对尺寸参数),对于很多数据集而言已经很合适了。但也不能保证这3组anchor就适用于所有数据集,所以YOLOv5还有一个anchor进化的策略:使用k-means
和遗传进化算法,找到与当前数据集最吻合的anchors。
主要修改backbone
python yolo.py
,you will see:参考:yolov5s.yaml中各参数作用意义及使用netron工具来可视化yolov5s的结构
YOLOV5-5.x 源码解读-autoanchor.py
【YOLOV5-5.x 源码解读】yolov5s.yaml