yolov5s配置文件解析

539 阅读3分钟

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

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

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

在项目models/yolov5s.yaml文件中 第13~14行,定义如下:

backbone:
  # [from, number, module, args]

四个参数的意义分别是:

  1. 第一个参数 from :从哪一层获得输入,-1表示从上一层获得,[-1, 6]表示从上层和第6层两层获得。
  2. 第二个参数 number:表示有几个相同的模块,如果为9则表示有9个相同的模块。
  3. 第三个参数 module:模块的名称,这些模块写在common.py中。
  4. 第四个参数 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文件中找到对应传入参数。)

在yolo.py的256行 有对yaml 文件的nc,depth_multiple等参数读取,具体代码如下:

anchors, nc, gd, gw = d['anchors'], d['nc'], d['depth_multiple'], d['width_multiple']

"width_multiple"参数的作用已经介绍过了,那么"depth_multiple"又是什么作用呢?

在yolo.py的257行有对参数的使用:

 n = n_ = max(round(n * gd), 1) if n > 1 else n  # depth gain 暂且将这段代码当作公式(1)

其中gd就是depth_multiple的值,n的值就是backbone中列表的第二个参数: 根据公示(1) 很容易看出gd影响 n 的大小,从而影响网络的结构。

接下来可以通过运行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                -1  1      3520  models.common.Conv                      [3, 32, 6, 2, 2]              
  1                -1  1     18560  models.common.Conv                      [32, 64, 3, 2]                
  2                -1  1     18816  models.common.C3                        [64, 64, 1]                   
  3                -1  1     73984  models.common.Conv                      [64, 128, 3, 2]               
  4                -1  2    115712  models.common.C3                        [128, 128, 2]                 
  5                -1  1    295424  models.common.Conv                      [128, 256, 3, 2]              
  6                -1  3    625152  models.common.C3                        [256, 256, 3]                 
  7                -1  1   1180672  models.common.Conv                      [256, 512, 3, 2]              
  8                -1  1   1182720  models.common.C3                        [512, 512, 1]                 
  9                -1  1    656896  models.common.SPPF                      [512, 512, 5]                 
 10                -1  1    131584  models.common.Conv                      [512, 256, 1, 1]              
 11                -1  1         0  torch.nn.modules.upsampling.Upsample    [None, 2, 'nearest']          
 12           [-1, 6]  1         0  models.common.Concat                    [1]                           
 13                -1  1    361984  models.common.C3                        [512, 256, 1, False]          
 14                -1  1     33024  models.common.Conv                      [256, 128, 1, 1]              
 15                -1  1         0  torch.nn.modules.upsampling.Upsample    [None, 2, 'nearest']          
 16           [-1, 4]  1         0  models.common.Concat                    [1]                           
 17                -1  1     90880  models.common.C3                        [256, 128, 1, False]          
 18                -1  1    147712  models.common.Conv                      [128, 128, 3, 2]              
 19          [-1, 14]  1         0  models.common.Concat                    [1]                           
 20                -1  1    296448  models.common.C3                        [256, 256, 1, False]          
 21                -1  1    590336  models.common.Conv                      [256, 256, 3, 2]              
 22          [-1, 10]  1         0  models.common.Concat                    [1]                           
 23                -1  1   1182720  models.common.C3                        [512, 512, 1, False]          
 24      [17, 20, 23]  1    229245  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

看到这,,,好人顺便帮忙点赞关注哈。感谢!