YOLOv5s网络模型讲解(一看就会)

文章目录
前言
1、YOLOv5s-6.0组成
2、YOLOv5s网络介绍
2.1、参数解析
2.2、YOLOv5s.yaml
2.3、YOLOv5s网络结构图
3、附件
3.1、yolov5s.yaml 解析表
3.2、 yolov5l.yaml 解析表
总结
前言
最近在重构YOLOv5代码,本章主要介绍YOLOv5s的网络结构

1、YOLOv5s-6.0组成
我们熟知YOLOv5s由三部分组成,分别为backbone、neck、head

backbone:主干网络,大多时候指的是提取特征的网络,其作用就是提取图片中的信息,供后面的网络使用。backbone主干网络可以直接加载官方已经训练好的模型参数,此外其后面,添加自己需要的网络,让自定义模型更加贴合实际使用。
neck:放在backbone和head之间,进一步利用backbone提取的特征,提高模型的鲁棒性
head:获取网络输出,head利用之前提取的特征,做出预测。
2、YOLOv5s网络介绍
2.1、参数解析
nc:数据集中的类别数

depth_multiple:模型层数因子(用来调整网络的深度)

为了控制层的重复的次数。它会和后面的backbone & head的number相乘后取整,代表该层的重复的数量
如:[[-1, 1, Conv, [64, 6, 2, 2]],当depth_multiple为1时候,则重复1*1个
width_multiple:模型通道数因子(用来调整网络的宽度)

为了控制输出特征图的通道数,它会和出特征图的通道数相乘,代表该层的输出通道数。
如:[[-1, 1, Conv, [64, 6, 2, 2]],当width_multiple为0.5时候,则输出通道为64*0.5=32通道
anchors:锚定框

yolov5 初始化了 9 个 anchors,分别在三个特征图 (feature map)中使用,每个 feature map 的每个 grid cell (网络单元)都有三个 anchor 进行预测。分配规则:
尺度越大的 feature map 越靠前,相对原图的下采样率越小,感受野越小,所以相对可以预测一些尺度比较小的物体(小目标),分配到的 anchors 越小。
尺度越小的 feature map 越靠后,相对原图的下采样率越大,感受野越大,所以可以预测一些尺度比较大的物体(大目标),所以分配到的 anchors 越大。
即在小特征图(feature map)上检测大目标,中等大小的特征图上检测中等目标,在大特征图上检测小目标。
[from, number, module, args] 参数

第一个参数 from :从哪一层获得输入,-1表示从上一层获得,[-1, 6]表示从上层和第6层两层获得。

第二个参数 number:表示有几个相同的模块,如果为9则表示有9个相同的模块。

第三个参数 module:模块的名称,这些模块写在common.py中。

第四个参数 args:类的初始化参数,用于解析作为 moudle 的传入参数。

args参数依次为:输出channel,卷积核大小kernel size,步长stride,p零填充大小
2.2、YOLOv5s.yaml
nc: 80  # number of classes 数据集中的类别数,也就是你要检测的类别数
depth_multiple: 0.33  # model depth multiple  模型层数因子(用来调整网络的深度)
width_multiple: 0.50  # layer channel multiple 模型通道数因子(用来调整网络的宽度)
 
anchors: # 表示作用于当前特征图的Anchor大小为 xxx
# 9个anchor,其中P表示特征图的层级,P3/8该层特征图缩放为1/8,是第3层特征
  - [10,13, 16,30, 33,23]  # P3/8, 表示[10,13],[16,30], [33,23]3个anchor
  - [30,61, 62,45, 59,119]  # P4/16
  - [116,90, 156,198, 373,326]  # P5/32
 
 
# YOLOv5s v6.0 backbone
backbone:
  # [from, number, module, args]
  [[-1, 1, Conv, [64, 6, 2, 2]],  # 0-P1/2,通过该层之后特征图的大小变成原图的1/2
   [-1, 1, Conv, [128, 3, 2]],  # 1-P2/4,通过该层之后特征图的大小变成原图的1/4
   [-1, 3, C3, [128]],          # 2,通过该层之后特征图的大小不变
   [-1, 1, Conv, [256, 3, 2]],  # 3-P3/8,过该层之后特征图的大小变成原图的1/8
   [-1, 6, C3, [256]],            # 4,通过该层之后特征图的大小不变
   [-1, 1, Conv, [512, 3, 2]],  # 5-P4/16,,过该层之后特征图的大小变成原图的1/16
   [-1, 9, C3, [512]],
   [-1, 1, Conv, [1024, 3, 2]],  # 7-P5/32
   [-1, 3, C3, [1024]],
   [-1, 1, SPPF, [1024, 5]],  # 9
  ]
 
# YOLOv5s v6.0 head
head:
  [[-1, 1, Conv, [512, 1, 1]],
   [-1, 1, nn.Upsample, [None, 2, 'nearest']], #11 不改变通道数,特征图的长和宽会增加一倍
   [[-1, 6], 1, Concat, [1]],  # 12 cat backbone P4 与第6层的输出进行特征图的融合
   [-1, 3, C3, [512, False]],  # 13
 
   [-1, 1, Conv, [256, 1, 1]],
   [-1, 1, nn.Upsample, [None, 2, 'nearest']],
   [[-1, 4], 1, Concat, [1]],  # cat backbone P3,与第4层的输出进行特征图的融合。
   [-1, 3, C3, [256, False]],  # 17 (P3/8-small)
 
   [-1, 1, Conv, [256, 3, 2]],
   [[-1, 14], 1, Concat, [1]],  # cat head P4,与第14层的输出进行特征图的融合
   [-1, 3, C3, [512, False]],  # 20 (P4/16-medium)
 
   [-1, 1, Conv, [512, 3, 2]],
   [[-1, 10], 1, Concat, [1]],  # cat head P5,与第10层的输出进行特征图的融合
   [-1, 3, C3, [1024, False]],  # 23 (P5/32-large)
 
   [[17, 20, 23], 1, Detect, [nc, anchors]],  # Detect(P3, P4, P5)
  ]

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
2.3、YOLOv5s网络结构图


3、附件
在yolov5中有l,n,m,s,x,5种配置文件,这5种配置文件只是depth_multiple和width_multiple两个参数不同,其它部分都相同的。

3.1、yolov5s.yaml 解析表
yolov5s.yaml的width_multiple都为0.50
举例:[[-1, 1, Conv, [64, 6, 2, 2]],当width_multiple为0.5时候,则输出通道为64*0.5=32通道
层数    from    moudule    arguments    input    output
0    -1    Conv    [3, 32, 6, 2, 2]    [3, 640, 640]    [32, 320, 320]
1    -1    Conv    [32, 64, 3, 2]    [32, 320, 320]    [64, 160, 160]
2    -1    C3    [64, 64, 1]    [64, 160, 160]    [64, 160, 160]
3    -1    Conv    [64, 128, 3, 2]    [64, 160, 160]    [128, 80, 80]
4    -1    C3    [128, 128, 2]    [128, 80, 80]    [128, 80, 80]
5    -1    Conv    [128, 256, 3, 2]    [128, 80, 80]    [256, 40, 40]
6    -1    C3    [256, 256, 3]    [256, 40, 40]    [256, 40, 40]
7    -1    Conv    [256, 512, 3, 2]    [256, 40, 40]    [512, 20, 20]
8    -1    C3    [512, 512, 1]    [512, 20, 20]    [512, 20, 20]
9    -1    SPPF    [512, 512, 5]    [512, 20, 20]    [512, 20, 20]
10    -1    Conv    [512, 256, 1, 1]    [512, 20, 20]    [256, 20, 20]
11    -1    Upsample    [None, 2, ‘nearest’]    [256, 20, 20]    [256, 40, 40]
12    [-1, 6]    Concat    [1]    [1, 256, 40, 40],[1, 256, 40, 40]    [512, 40, 40]
13    -1    C3    [512, 256, 1, False]    [512, 40, 40]    [256, 40, 40]
14    -1    Conv    [256, 128, 1, 1]    [256, 40, 40]    [128, 40, 40]
15    -1    Upsample    [None, 2, ‘nearest’]    [128, 40, 40]    [128, 80, 80]
16    [-1, 4]    Concat    [1]    [1, 128, 80, 80],[1, 128, 80, 80]    [256, 80, 80]
17    -1    C3    [256, 128, 1, False]    [256, 80, 80]    [128, 80, 80]
18    -1    Conv    [128, 128, 3, 2]    [128, 80, 80]    [128, 40, 40]
19    [-1, 14]    Concat    [1]    [1, 128, 40, 40],[1, 128, 40, 40]    [256, 40, 40]
20    -1    C3    [256, 256, 1, False]    [256, 40, 40]    [256, 40, 40]
21    -1    Conv    [256, 256, 3, 2]    [256, 40, 40]    [256, 20, 20]
22    [-1, 10]    Concat    [1]    [1, 256, 20, 20],[1, 256, 20, 20]    [512, 20, 20]
23    -1    C3    [512, 512, 1, False]    [512, 20, 20]    [512, 20, 20]
24    [17, 20, 23]    Detect    [80, [[10, 13, 16, 30, 33, 23], [30, 61, 62, 45, 59, 119], [116, 90, 156, 198, 373, 326]], [128, 256, 512]]    [1, 128, 80, 80],[1, 256, 40, 40],[1, 512, 20, 20]    [1, 3, 80, 80, 85],[1, 3, 40, 40, 85],[1, 3, 20, 20, 85]
3.2、 yolov5l.yaml 解析表
注:yolov5l.yaml的depth_multiple和width_multiple都为1

层数    from    moudule    arguments    input    output
0    -1    Conv    [3, 64, 6, 2, 2]    [3, 640, 640]    [64, 320, 320]
1    -1    Conv    [64, 128, 3, 2]    [64, 320, 320]    [128, 160, 160]
2    -1    C3    [128,128, 1]    [128, 160, 160]    [128 160, 160]
3    -1    Conv    [128,256, 3, 2]    [128 160, 160]    [256, 80, 80]
4    -1    C3    [256,256, 2]    [256, 80, 80]    [256, 80, 80]
5    -1    Conv    [256,512, 3, 2]    [256, 80, 80]    [512, 40, 40]
6    -1    C3    [512, 512, 3]    [512, 40, 40]    [512, 40, 40]
7    -1    Conv    [512, 1024, 3, 2]    [512, 40, 40]    [1024, 20, 20]
8    -1    C3    [1024, 1024, 1]    [1024, 20, 20]    [1024, 20, 20]
9    -1    SPPF    [1024, 1024, 5]    [1024, 20, 20]    [1024, 20, 20]
10    -1    Conv    [1024,512, 1, 1]    [1024, 20, 20]    [512, 20, 20]
11    -1    Upsample    [None, 2, ‘nearest’]    [512, 20, 20]    [512, 40, 40]
12    [-1, 6]    Concat    [512+512]    [1, 512, 40, 40],[1, 512, 40, 40]    [1024, 40, 40]
13    -1    C3    [1024,512, 1, False]    [1024, 40, 40]    [512, 40, 40]
14    -1    Conv    [512,256, 1, 1]    [512, 40, 40]    [256, 40, 40]
15    -1    Upsample    [None, 2, ‘nearest’]    [256, 40, 40]    [256, 80, 80]
16    [-1, 4]    Concat    [256+256]    [1, 256, 80, 80],[1, 256, 80, 80]    [512, 80, 80]
17    -1    C3    [512, 256, 1, False]    [512, 80, 80]    [256, 80, 80]
18    -1    Conv    [256, 256, 3, 2]    [256, 80, 80]    [256, 40, 40]
19    [-1, 14]    Concat    [256+256]    [1, 256, 40, 40],[1, 256, 40, 40]    [512, 40, 40]
20    -1    C3    [512, 512, 1, False]    [512, 40, 40]    [512, 40, 40]
21    -1    Conv    [512, 512, 3, 2]    [512, 40, 40]    [512, 20, 20]
22    [-1, 10]    Concat    [512+512]    [1, 512, 20, 20],[1, 512, 20, 20]    [1024 20, 20]
23    -1    C3    [1024,1024, 1, False]    [1024, 20, 20]    [1024, 20, 20]
24    [17, 20, 23]    Detect    [80, [[10, 13, 16, 30, 33, 23], [30, 61, 62, 45, 59, 119], [116, 90, 156, 198, 373, 326]], [128, 256, 512]]    [1, 256, 80, 80],[1, 512, 40, 40],[1, 1024, 20, 20]    [1, 3, 80, 80, 85],[1, 3, 40, 40, 85],[1, 3, 20, 20, 85]
总结
其实看懂代码,结合画的网络结构图,就很容易理解YOLO的模型。后续,将会介绍如何利用YOLOv5进行训练。

参考文章

YOLOv5 模型结构及代码详细讲解
YOLOv5-网络结构
YOLOv5 Focus C3 各模块详解及代码实现
————————————————

                            版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
                        
原文链接:https://blog.csdn.net/qq_44231797/article/details/129408786

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Yolov5s是一种用于目标检测的深度学习模型,其网络结构可以通过可视化图进行详解。Yolov5s的网络结构主要包括以下几个部分:输入层、主干网络、特征金字塔、预测头和输出层。 在Yolov5s中,输入层接受输入图像,并将其缩放到预定义的输入尺寸。接下来,主干网络是由一系列卷积层和残差块组成的,用于提取图像特征。这些特征经过特征金字塔模块处理,以获取不同尺度的特征图用于目标检测。 预测头是用来预测目标的位置和类别的。它由一系列卷积层和全连接层组成,将主干网络输出的特征图转化为边界框的位置和类别的预测。 最后,输出层将预测的结果进行后处理,如非极大值抑制(NMS),以去除重叠的边界框,并输出最终的目标检测结果。 需要注意的是,Yolov5s的网络结构可以通过调整超参数来适应不同的检测任务和计算资源。此外,还有其他几个版本的Yolov5,如Yolov5m、Yolov5l和Yolov5x,它们在网络结构上略有不同,但基本原理相同。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [【YOLOv5】详细讲解全过程](https://blog.csdn.net/u013066730/article/details/126068967)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值