当前位置:   article > 正文

万字长文!YOLO算法模型yaml文件史上最详细解析与教程!小白也能看懂!掌握了这个就掌握了魔改YOLO的核心!_yolo.yaml

yolo.yaml

请添加图片描述


在这里插入图片描述


看完这篇你能学会什么?

  1. 掌握根据yaml文件画出模型结构图的能力
  2. 掌握根据模型结构图写yaml文件的能力
  3. 掌握添加模块后写配置文件args参数的能力
  4. 掌握修改模型配置文件的能力

1. YOLOv5 模型yaml文件解析

模型尺寸 (像素)mAPval 50-95mAPval 50推理速度 CPU b1 (ms)推理速度 V100 b1 (ms)速度 V100 b32 (ms)参数量 (M)FLOPs @640 (B)
YOLOv5n64028.045.7456.30.61.94.5
YOLOv5s64037.456.8986.40.97.216.5
YOLOv5m64045.464.12248.21.721.249.0
YOLOv5l64049.067.343010.12.746.5109.1
YOLOv5x64050.768.976612.14.886.7205.7
YOLOv5n6128036.054.41538.12.13.24.6
YOLOv5s6128044.863.73858.23.612.616.8
YOLOv5m6128051.369.388711.16.835.750.0
YOLOv5l6128053.771.3178415.810.576.8111.4

YOLOv5提供了多个版本的网络模型,其中n, s, m, l, x模型是在输入尺寸640x640的图像上训练得到的,最终会对输入图像进行32倍下采样,并输出3个预测特征层。

n6, s6, m6, l6, x6是在输入尺寸为1280x1280的图像上训练得到的,最终会对输入图像进行64倍下采样,并且会输出4个预测特征层。

除此之外,这些模型的结构是完全相同的,区别只在于网络的深度和宽度,网络的深度指的就是C3模块中Bottelneck的数量,网络的宽度指的就是网络每层的通道数。

不管是YOLOv5还是v7 v8,都是使用yaml文件来定义网络结构的,YOLOv5yaml文件是下面这个样子的,我这里以最常用的yolov5s.yaml为例子说明,我们可以将这个配置文件划分成三个部分:

在这里插入图片描述

1.1 参数部分

在这里插入图片描述

首先我们来看参数部分,这里有ncdepth_multiplewidth_multipleanchors四个参数:

  • nc: 80 指的就是你数据集中的类别数量。YOLOv5是在COCO数据集上训练的,COCO数据集正好80类,在我们训练自己的数据集时要将这个参数改为自己数据集的类别数。(但其实这里不改也不报错的,因为我们在数据集的yaml文件中已经写好了nc的数量)

    • 在这里插入图片描述
  • depth_multiple: 0.33 指的是该网络模型的深度因子。这个是用来调整C3模块中的子模块Bottelneck重复次数的,在实际使用时,我们要用这个深度因子乘上主干部分C3模块的number系数的,比如主干中第一个C3模块的number系数是3,我们使用0.33x3并且向上取整就等于1了,这就代表第一个C3模块中Bottelneck只重复一次;第二个C3模块的number系数是6,我们使用0.33x6并且向上取整就等于2了,这就代表第二个C3模块中Bottelneck重复二次;第三个C3模块的number系数是9,我们使用0.33x9并且向上取整就等于3了,这就代表第三个C3模块中Bottelneck重复三次;n, s, m, l, x这些模型的深度因子都是不同的,但计算方式相同。

    • 在这里插入图片描述
  • width_multiple: 0.50指的是该网络模型的宽度因子。这个是用来调整每层模块的通道数量的,比如yolov5s.yaml文件上第一个Conv模块的输出通道数写的是64,但是实际上这个通道数并不是64,而是使用宽度因子 0.50x64得到的最终结果32;同理,C3模块的输出通道虽然在yolov5s.yaml文件上写的是128,但是在实际使用时依然要乘上宽度因子0.50,那么第一个C3模块最终的到实际通道数就是0.50x128 = 64

    • 在这里插入图片描述
  • anchors:指的是作用在每层特征图上的Anchor的尺寸。yolov5s.yaml最终会输出3个预测特征层,每个预测特征层上都会使用三个Anchor, 其中P3/8的意思是该层特征图缩放为输入图像尺寸的1/8,是第3特征层;P4/16的意思是该层特征图缩放为输入图像尺寸的1/16,是第4特征层;P5/32的意思是该层特征图缩放为输入图像尺寸的1/32,是第5特征层;

    [10,13, 16,30, 33,23]的含义就是三个Anchor的尺寸分别是10x13的,16x30的,33x23的;也就是说,3个预测特征层中,最大的预测特征层用到的Anchor的尺寸为10x13的,16x30的,33x23的;3个预测特征层中,中等大小的预测特征层用到的Anchor的尺寸为30x61的,62x45的,59x119的;3个预测特征层中,最小的预测特征层用到的Anchor的尺寸为116x90的,156x198的,373x326的。总的来说就是,大的特征图是用来检测小目标的,所以Anchor尺寸最小;小的特征图是用来检测大目标的,所以Anchor尺寸最大;

1.2 主干部分

在这里插入图片描述

主干部分有四个重要的参数,[from, number, module, args] ,我下面一一解释:

  • from,这个参数代表从哪一层获得输入,-1就表示从上一层获得输入,[-1, 6]就表示从上一层和第6层这两层获得输入。第一层比较特殊,第一层上一层 没有输入,后面我带大家精读代码后大家就理解了,我们就保持第一层的from-1就好了。
  • number,这个参数表示模块重复的次数,如果为3则表示该模块重复3次,这个有时候也并不一定是这个模块的重复次数,也有可能是这个模块中的子模块重复的次数,具体看你代码怎么写的。对于C3模块来说,这个number就代表C3Bottelneck模块重复的次数。
  • module,这个就代表你这层使用的模块的名称,比如你第一层使用了Conv模块,第二层使用了C3模块,所有的模块都在common.py中可以看到。
  • args,这个参数可以说是整个配置文件中最重要也是最难确定的参数了,这个参数的写法真的是难到了无数英雄豪杰,但是今天我就要把这个最难讲解的参数给大家彻底讲明白,如果你听明白了,记得一定要评论区给我评论一下声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop】
推荐阅读
相关标签