YOLOv5白皮书-第Y3周:yolov5s.yaml文件解读
OLOv5-第Y2周:训练自己的数据集)
YOLOv5白皮书-第Y3周:yolov5s.yaml文件解读
一、前言
- 🍨 本文为🔗365天深度学习训练营 中的学习记录博客
- 🍖 原作者:K同学啊
二、我的环境
- 电脑系统:Windows 10
- 语言环境:Python 3.8.5
- 编译器:colab在线编译
- 深度学习环境:PyTorch
三、yolov5s.yaml源文件内容
可以看到,yaml源文件主要分为4个部分的内容:Parameters、anchors、backbone和head。
四、Parameters
这一部分是yolov5s.yaml,yolov5m.yaml,yolov5l.yaml,yolov5x.yaml几个文件之间主要的不同点,有不同的宽度与深度
nc:分类的数量,根据你自己训练的数据集当中的数量进行修改
depth__multiple:控制子模块的数量
width_multiple:控制卷积核的数量
通过depth__multiple和width_multiple就可以实现不同复杂度的模型设计。YOLOv5s 、 YOLov5m 、 YOLOv51 、 YOLOv5x四种模型的区别仅在于depth_multiple与width_multiple这个两个参数的不同。
五、anchors配置
anchor一共有三行,分别在图片当中大,中,小的目标进行计算,
第一行在最大特征图上,小数值检测大目标
第二行在图片第二大的特征图上
第三行在最小的特征图上,大数值检测小目标
YOLOv5初始化了9个anchors,在三个Detect层使用(3个feature map)中使用,每个featuremap的每个grid_cell都有三个anchor进行预测。分配的规则是:
尺度越大的feature map越靠前,相对原图的下采样率越小,感受野越小,所以相对可以预测一些尺度比较小的物体,所有分配到的 anchors越小;
尺度越小的 feature map越靠后,相对原图的下采样率越大,感受野越大,所以相对可以预测一些尺度比较大的物体,所有分配到的 anchors越大。
即可以在小特征图(feature map)上检测大目标,也可以在大特征图上检测小目标。
YOLOv5根据工程经验得到了这么3组anchors,对于很多数据集而言确实挺合适的。但是也不能保证这3组anchors就适用于所有的数据集,所有
六、backbone
- from:表示当前模块的来源取自于哪一层的输出,比如-1表示取自上一层的输出
- number:表示当前选择的模块需要重复的次数,比如3就是要重复3次,但这只是理论上的重复次数,具体还要看depth_multiple共同决定网络模型的深度
- module:模块类名,根据给到的类名到common.py当中寻找相应的类进行模块化的搭建网络
- args:是一个list,模块搭建所需要的参数,channel(通道数),bias(偏差,残差)等
- Focus:对特征图进行切片操作,[64,3]得到[3,32,3],即输入channel=3(RGB),输出为64*0.50(width_multiple)=32,3为卷积核尺
- Conv:nn.conv(kenel_size=1,stride=1,groups=1,bias=False)+Bn+Leaky_ReLu.[-1, 1, Conv, [128, 3, 2]]具体主要含义是指输入来自上一层,模块数量(number)为1个,子模块为Conv,网络中最终有128*0.5=32个卷积核,卷积核尺寸为3,stride=2。
- BottleNeckCSP:借鉴CSPNet网络结构,由3个卷积层和X个残差模块Concat组成,若有False,则没有残差模块,那么组成结构为nn.conv+Bn+Leaky_ReLu
- SPP:[-1, 1, SPP, [1024, [5, 9, 13]]]表示5×5,9×9,13×13的最大池化方式,进行多尺度融合
七、head
这是YOLOv5s的head,数据格式和backbone一样
八、总结
通过Y3学习,解读了yolov5s.yaml的源文件,学会了yolov5s.yaml的文件配置。