yolov5多种模型文件解读

以yolov5n6.yaml为例。其他m、s、l与x只是在倍数上有差距。

# YOLOv5 ? by Ultralytics, GPL-3.0 license

# Parameters
nc: 80  # number of classes
depth_multiple: 0.33  # model depth multiple
width_multiple: 0.25  # layer channel multiple
anchors:
  - [19,27,  44,40,  38,94]  # P3/8
  - [96,68,  86,152,  180,137]  # P4/16
  - [140,301,  303,264,  238,542]  # P5/32
  - [436,615,  739,380,  925,792]  # P6/64

# 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, [768, 3, 2]],  # 7-P5/32
   [-1, 3, C3, [768]],
   [-1, 1, Conv, [1024, 3, 2]],  # 9-P6/64
   [-1, 3, C3, [1024]],
   [-1, 1, SPPF, [1024, 5]],  # 11
  ]

# YOLOv5 v6.0 head
head:
  [[-1, 1, Conv, [768, 1, 1]],
   [-1, 1, nn.Upsample, [None, 2, 'nearest']],
   [[-1, 8], 1, Concat, [1]],  # cat backbone P5
   [-1, 3, C3, [768, False]],  # 15

   [-1, 1, Conv, [512, 1, 1]],
   [-1, 1, nn.Upsample, [None, 2, 'nearest']],
   [[-1, 6], 1, Concat, [1]],  # cat backbone P4
   [-1, 3, C3, [512, False]],  # 19

   [-1, 1, Conv, [256, 1, 1]],
   [-1, 1, nn.Upsample, [None, 2, 'nearest']],
   [[-1, 4], 1, Concat, [1]],  # cat backbone P3
   [-1, 3, C3, [256, False]],  # 23 (P3/8-small)

   [-1, 1, Conv, [256, 3, 2]],
   [[-1, 20], 1, Concat, [1]],  # cat head P4
   [-1, 3, C3, [512, False]],  # 26 (P4/16-medium)

   [-1, 1, Conv, [512, 3, 2]],
   [[-1, 16], 1, Concat, [1]],  # cat head P5
   [-1, 3, C3, [768, False]],  # 29 (P5/32-large)

   [-1, 1, Conv, [768, 3, 2]],
   [[-1, 12], 1, Concat, [1]],  # cat head P6
   [-1, 3, C3, [1024, False]],  # 32 (P6/64-xlarge)

   [[23, 26, 29, 32], 1, Detect, [nc, anchors]],  # Detect(P3, P4, P5, P6)
  ]

nc——数据集上检测的类别数

depth_multiple——模型深度倍数。多图对比虽然描述不同,但修改的地方相同。下图1是对Backbone主干网络中的BCSP中残差网络块的数量进行乘以倍数的修改,下图2是对模型的Bakebone主干网络的CSP中残差网络块的进行乘以倍数的修改,修改后得到不同复杂度的模型来应对不同复杂度的任务。具体残差网络作用可以看Resnet的作用。

 

 width_multiple——模型宽度倍数。宽度由卷积核的数量(通道channel)所决定。通过乘以倍数进行卷积核数量(通道channel)的调整,修改后得到不同复杂度的模型来应对不同复杂度的任务。

anchors——锚框(先验框),对应不同的下采样倍数的锚框大小。可以从图中Head部分可以观察到,一共是9个锚框。

backbone——主干网络,[from, number, module, args],从这四个分别进行阐述。

1.from:当前输入来源于哪里,类似于yolov3中的cfg文件中的表示

[shortcut]    
from=-3      
activation=linear  

yolov5不再用这种表述形式,但from的含义相同,换汤不换药。

2.number:本模块重复次数。yolov3是用了全部列出的方法,冗长。yolov5表示形式简洁,修改方便。

3.module:采用的模块类型。

4.args:模块对应的参数。

neck和head模块没有区分,放在了一块,与backbone形式上相同。

同时出现,nn.Upsample上采样,这是为了除了拼接的那个维度其他维度大小相等。concat,拼接操作,注意from部分,通过数可知-1表示前一个,8指的是8模块前,而不是8模块后。


版权声明:本文为wzfafabga原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。