赞
踩
yaml
文件画出模型结构图的能力yaml
文件的能力args
参数的能力模型 | 尺寸 (像素) | mAPval 50-95 | mAPval 50 | 推理速度 CPU b1 (ms) | 推理速度 V100 b1 (ms) | 速度 V100 b32 (ms) | 参数量 (M) | FLOPs @640 (B) |
---|---|---|---|---|---|---|---|---|
YOLOv5n | 640 | 28.0 | 45.7 | 45 | 6.3 | 0.6 | 1.9 | 4.5 |
YOLOv5s | 640 | 37.4 | 56.8 | 98 | 6.4 | 0.9 | 7.2 | 16.5 |
YOLOv5m | 640 | 45.4 | 64.1 | 224 | 8.2 | 1.7 | 21.2 | 49.0 |
YOLOv5l | 640 | 49.0 | 67.3 | 430 | 10.1 | 2.7 | 46.5 | 109.1 |
YOLOv5x | 640 | 50.7 | 68.9 | 766 | 12.1 | 4.8 | 86.7 | 205.7 |
YOLOv5n6 | 1280 | 36.0 | 54.4 | 153 | 8.1 | 2.1 | 3.2 | 4.6 |
YOLOv5s6 | 1280 | 44.8 | 63.7 | 385 | 8.2 | 3.6 | 12.6 | 16.8 |
YOLOv5m6 | 1280 | 51.3 | 69.3 | 887 | 11.1 | 6.8 | 35.7 | 50.0 |
YOLOv5l6 | 1280 | 53.7 | 71.3 | 1784 | 15.8 | 10.5 | 76.8 | 111.4 |
YOLOv5
提供了多个版本的网络模型,其中n, s, m, l, x
模型是在输入尺寸为640x640
的图像上训练得到的,最终会对输入图像进行32
倍下采样,并输出3
个预测特征层。
n6, s6, m6, l6, x6
是在输入尺寸为1280x1280
的图像上训练得到的,最终会对输入图像进行64
倍下采样,并且会输出4
个预测特征层。
除此之外,这些模型的结构是完全相同的,区别只在于网络的深度和宽度,网络的深度指的就是C3
模块中Bottelneck
的数量,网络的宽度指的就是网络每层的通道数。
不管是YOLOv5
还是v7 v8
,都是使用yaml
文件来定义网络结构的,YOLOv5
的yaml
文件是下面这个样子的,我这里以最常用的yolov5s.yaml
为例子说明,我们可以将这个配置文件划分成三个部分:
首先我们来看参数部分,这里有nc
,depth_multiple
,width_multiple
和anchors
四个参数:
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
尺寸最大;
主干部分有四个重要的参数,[from, number, module, args]
,我下面一一解释:
from
,这个参数代表从哪一层获得输入,-1
就表示从上一层获得输入,[-1, 6]
就表示从上一层和第6
层这两层获得输入。第一层比较特殊,第一层上一层 没有输入,后面我带大家精读代码后大家就理解了,我们就保持第一层的from
是-1
就好了。number
,这个参数表示模块重复的次数,如果为3
则表示该模块重复3
次,这个有时候也并不一定是这个模块的重复次数,也有可能是这个模块中的子模块重复的次数,具体看你代码怎么写的。对于C3
模块来说,这个number
就代表C3
中Bottelneck
模块重复的次数。 module
,这个就代表你这层使用的模块的名称,比如你第一层使用了Conv
模块,第二层使用了C3
模块,所有的模块都在common.py
中可以看到。args
,这个参数可以说是整个配置文件中最重要也是最难确定的参数了,这个参数的写法真的是难到了无数英雄豪杰,但是今天我就要把这个最难讲解的参数给大家彻底讲明白,如果你听明白了,记得一定要评论区给我评论一下声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop】Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。