YOLOv5白皮书-第Y3周:yolov5s.yaml文件解读

YOLOv5白皮书-第Y3周:yolov5s.yaml文件解读

  • YOLOv5白皮书-第Y3周:yolov5s.yaml文件解读
    • 一、前言
    • 二、我的环境
    • 三、yolov5s.yaml源文件内容
    • 四、Parameters
    • 五、anchors配置
    • 六、backbone
    • 七、head
    • 八、总结

OLOv5-第Y2周:训练自己的数据集)

YOLOv5白皮书-第Y3周:yolov5s.yaml文件解读

一、前言

  • 本文为365天深度学习训练营 中的学习记录博客
  • 原作者:K同学啊

二、我的环境

  • 电脑系统:Windows 10
  • 语言环境:Python 3.8.5
  • 编译器:colab在线编译
  • 深度学习环境:PyTorch

三、yolov5s.yaml源文件内容

YOLOv5白皮书-第Y3周:yolov5s.yaml文件解读_第1张图片
可以看到,yaml源文件主要分为4个部分的内容:Parametersanchorsbackbonehead

四、Parameters

这一部分是yolov5s.yaml,yolov5m.yaml,yolov5l.yaml,yolov5x.yaml几个文件之间主要的不同点,有不同的宽度与深度

nc: 20 #80  # number of classes
depth_multiple: 0.33  # model depth multiple
width_multiple: 0.50  # layer channel multiple

nc:分类的数量,根据你自己训练的数据集当中的数量进行修改
depth__multiple:控制子模块的数量
width_multiple:控制卷积核的数量

通过depth__multiplewidth_multiple就可以实现不同复杂度的模型设计。YOLOv5s 、 YOLov5m 、 YOLOv51 、 YOLOv5x四种模型的区别仅在于depth_multiple与width_multiple这个两个参数的不同。

五、anchors配置

YOLOv5白皮书-第Y3周:yolov5s.yaml文件解读_第2张图片
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

YOLOv5白皮书-第Y3周:yolov5s.yaml文件解读_第3张图片

  • 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

YOLOv5白皮书-第Y3周:yolov5s.yaml文件解读_第4张图片这是YOLOv5s的head,数据格式和backbone一样

八、总结

通过Y3学习,解读了yolov5s.yaml的源文件,学会了yolov5s.yaml的文件配置。

你可能感兴趣的:(深度学习,深度学习训练营,YOLO)