0


Yolov5-模型配置文件(yolov5l.yaml)讲解

配置文件:github.com/ultralytics/
在这里插入图片描述

一、参数部分

这部分比较简单,以下是yolov5l的配置文件

# Parameters
nc:80# number of classes
depth_multiple:1.0# model depth multiple
width_multiple:1.0# layer channel multiple
anchors:-[10,13,16,30,33,23]# P3/8-[30,61,62,45,59,119]# P4/16-[116,90,156,198,373,326]# P5/32
  1. nc:类别数,你的类别有多少就填写多少。从1开始算起,不是0-14这样算。
  2. depth_multiple:控制模型的深度。
  3. width_multiple:控制卷积核的个数。

yolov5提供了s、m、l、x四种,所有的yaml文件都设置差不多,只有上面2和3的设置不同,作者团队很厉害,只需要修改这两个参数就可以调整模型的网络结构。

yaml文件的内容会在yolo.py中进行调用,只需要修改"width_multiple"和"depth_multiple"两个参数就可以,可以灵活地修改网络的结构,具体分析如下。

第一部分是三个参数,第一个是数据集中的类别数.
第二个用来调整网络的深度.
第三个用来调整网络的宽度,具体怎么调整的结合后面的backbone代码解释。

depth_multiple和width_multiple用来生成不同大小的模型,如果希望大一点,就把这个数字改大一点,网络就会按比例变深、变宽;如果希望小一点,就把这个数字改小一点,网络就会按比例变浅、变窄;如下。

# Parameters
nc:80# number of classes
depth_multiple:0.33# model depth multiple
width_multiple:0.50# layer channel multiple
anchors:-[10,13,16,30,33,23]# P3/8-[30,61,62,45,59,119]# P4/16-[116,90,156,198,373,326]# P5/32

Yolov5的源码中,是将yolov5s的结构封装在"yolov5s.yaml"中,但是他没有单独写neck,将neck分开在了backbone和head里面。

二、网络backbone部分

以下是常规yolov5l的backbone部分

四个参数的意义分别是:

第一个参数 from :从哪一层获得输入,-1表示从上一层获得,[-1, 6]表示从上层和第6层两层获得。
第二个参数 number:表示有几个相同的模块,如果为9则表示有9个相同的模块。
第三个参数 module:模块的名称,这些模块写在common.py中。
第四个参数 args:这个参数就与第一部分的"width_multiple"参数有关了,上面把width_multiple设置为了0.5,那么第一个
[64, 6, 2, 2] 就会被解析为[3,64*0.5=32,6,2,2],
其中第一3为输入channel(因为输入),32为输出channel。(具体可以通过第三个参数(module) 在common.py文件中找到对应传入参数。)

# YOLOv5 v6.0 backbone
backbone:# [from, number, module, args][[-1,1, Conv,[64,6,2,2]],# 0-P1/2[-1,1, Conv,[128,3,2]],# 1-P2/4[-1,3, C3,[128]],[-1,1, Conv,[256,3,2]],# 3-P3/8[-1,6, C3,[256]],[-1,1, Conv,[512,3,2]],# 5-P4/16[-1,9, C3,[512]],[-1,1, Conv,[1024,3,2]],# 7-P5/32[-1,3, C3,[1024]],[-1,1, SPPF,[1024,5]],# 9]
  • a. Bottleneck 可以译为“瓶颈层”;
  • b. from列参数:-1 代表是从上一层获得的输入,-2表示从上两层获得的输入(head同理);
  • c. number列参数:1表示只有一个,3表示有三个相同的模块;
  • d. SPP、Conv、Bottleneck、BottleneckCSP的代码可以在./models/common.py中获取到;
  • e. [64, 3] 解析得到[3, 32, 3] ,输入为3(RGB),输出为32,卷积核k为3;
  • f. [128, 3, 2] 这是固定的,128表示输出128个卷积核个数。根据 [128, 3, 2] 解析得到[32, 64, 3, 2] ,32是输入,64是输出(128*0.5=64),3表示3×3的卷积核,2表示步长为2;
  • g. 主干网是图片从大到小,深度不断加深;
  • h. args这里的输入都省去了,因为输入都是上层的输出。为了修改过于麻烦,这里输入的获取是从./models/yolo.py的def parse_model(md, ch)函数中解析得到的。

**yolov5会按照配置文件实例化各个层,每行的列表中的四个元素分别代表:[from, number, module, args],

  • from:该层的输入
  • number:该层的数量
  • module:类名
  • args:类的初始化参数

**

三、anchors解释

anchors:-[10,13,16,30,33,23]# P3/8,检测小目标,10,13是一组尺寸,总共三组检测小目标-[30,61,62,45,59,119]# P4/16,检测中目标,共三组-[116,90,156,198,373,326]# P5/32,检测大目标,共三组

该anchor尺寸是为输入图像640×640分辨率预设的,实现了即可以在小特征图(feature map)上检测大目标,也可以在大特征图上检测小目标。三种尺寸的特征图,每个特征图上的格子有三个尺寸的anchor。

四,结合流程图理解

在这里插入图片描述
在这里插入图片描述

超参数

初始化超参
YOLOv5的超参文件见data/hyp.finetune.yaml(适用VOC数据集)或者hyo.scrach.yaml(适用COCO数据集)文件

lr0:0.01# 初始学习率 (SGD=1E-2, Adam=1E-3)
lrf:0.2# 循环学习率 (lr0 * lrf)
momentum:0.937# SGD momentum/Adam beta1 学习率动量
weight_decay:0.0005# 权重衰减系数 
warmup_epochs:3.0# 预热学习 (fractions ok)
warmup_momentum:0.8# 预热学习动量
warmup_bias_lr:0.1# 预热初始学习率
box:0.05# iou损失系数
cls:0.5# cls损失系数
cls_pw:1.0# cls BCELoss正样本权重
obj:1.0# 有无物体系数(scale with pixels)
obj_pw:1.0# 有无物体BCELoss正样本权重
iou_t:0.20# IoU训练时的阈值
anchor_t:4.0# anchor的长宽比(长:宽 = 4:1)# anchors: 3  # 每个输出层的anchors数量(0 to ignore)#以下系数是数据增强系数,包括颜色空间和图片空间
fl_gamma:0.0# focal loss gamma (efficientDet default gamma=1.5)
hsv_h:0.015# 色调 (fraction)
hsv_s:0.7# 饱和度 (fraction)
hsv_v:0.4# 亮度 (fraction)
degrees:0.0# 旋转角度 (+/- deg)
translate:0.1# 平移(+/- fraction)
scale:0.5# 图像缩放 (+/- gain)
shear:0.0# 图像剪切 (+/- deg)
perspective:0.0# 透明度 (+/- fraction), range 0-0.001
flipud:0.0# 进行上下翻转概率 (probability)
fliplr:0.5# 进行左右翻转概率 (probability)
mosaic:1.0# 进行Mosaic概率 (probability)
mixup:0.0# 进行图像混叠概率(即,多张图像重叠在一起) (probability)

网络结构

接下来可以通过运行python models/yolo.py 脚本得到网路结构,结果如下:

yolo: cfg=yolov5s.yaml, batch_size=1, device=, profile=False, line_profile=False, test=False
YOLOv5 🚀 v6.1-383-g7a40e2b Python-3.8.13 torch-1.10.0+cu113 CUDA:0(NVIDIA GeForce RTX 3080 Ti, 12054MiB)from  n    params  module                                  arguments                     
  0-113520  models.common.Conv                      [3,32,6,2,2]1-1118560  models.common.Conv                      [32,64,3,2]2-1118816  models.common.C3                        [64,64,1]3-1173984  models.common.Conv                      [64,128,3,2]4-12115712  models.common.C3                        [128,128,2]5-11295424  models.common.Conv                      [128,256,3,2]6-13625152  models.common.C3                        [256,256,3]7-111180672  models.common.Conv                      [256,512,3,2]8-111182720  models.common.C3                        [512,512,1]9-11656896  models.common.SPPF                      [512,512,5]10-11131584  models.common.Conv                      [512,256,1,1]11-110  torch.nn.modules.upsampling.Upsample    [None,2,'nearest']12[-1,6]10  models.common.Concat                    [1]13-11361984  models.common.C3                        [512,256,1,False]14-1133024  models.common.Conv                      [256,128,1,1]15-110  torch.nn.modules.upsampling.Upsample    [None,2,'nearest']16[-1,4]10  models.common.Concat                    [1]17-1190880  models.common.C3                        [256,128,1,False]18-11147712  models.common.Conv                      [128,128,3,2]19[-1,14]10  models.common.Concat                    [1]20-11296448  models.common.C3                        [256,256,1,False]21-11590336  models.common.Conv                      [256,256,3,2]22[-1,10]10  models.common.Concat                    [1]23-111182720  models.common.C3                        [512,512,1,False]24[17,20,23]1229245  Detect                                  [80,[[10,13,16,30,33,23],[30,61,62,45,59,119],[116,90,156,198,373,326]],[128,256,512]]
YOLOv5s summary:270 layers,7235389 parameters,7235389 gradients,16.6 GFLOPs

Fusing layers... 
YOLOv5s summary:213 layers,7225885 parameters,7225885 gradients,16.4 GFLOPs

本文转载自: https://blog.csdn.net/weixin_42001184/article/details/129891510
版权归原作者 Terrence Shen 所有, 如有侵权,请联系我们删除。

“Yolov5-模型配置文件(yolov5l.yaml)讲解”的评论:

还没有评论