日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學無先后,達者為師

網(wǎng)站首頁 編程語言 正文

YOLO v5模型的yaml文件參數(shù)理解

作者:小啊磊BLUE 更新時間: 2022-09-22 編程語言

YOLO v5模型的yaml文件參數(shù)理解


文章目錄

  • YOLO v5模型的yaml文件參數(shù)理解
  • 前言
  • 一、YOLO v5網(wǎng)絡配置文件
    • 1.模型深度與寬度
    • 2. anchors
  • 二、網(wǎng)絡結構部分
    • 1.Backbone
    • 2.head部分
  • 總結


前言

最近在修改YOLO v5一些模型時候或者加入一些新的東西進去,發(fā)現(xiàn)YOLO v5的模型文件也需要我們非常熟悉,這樣添加模塊就不會出現(xiàn)錯誤.


一、YOLO v5網(wǎng)絡配置文件

YOLO v5的配置文件為yaml類型,yolov5.yaml文件通過yolo.py解析文件配置模型的網(wǎng)絡結構。yaml文件配置網(wǎng)絡的好處是十分的方便不需要像YOLO v3的config設置網(wǎng)絡一樣進行疊加,只需要在yaml配置文件中的參數(shù)進行修改即可。然后我對YOLO v5的配置文件最近進行了梳理與應用。

1.模型深度與寬度

從github拉一下代碼文件,數(shù)據(jù)集配置的文件在data文件目錄下,YOLO v5模型的配置文件在models文件下,我們會看到四個YOLO v5模型的配置文件yolov5s.yaml、yolov5n.yaml、yolov5m.yaml、yolov5l.yaml,我就以yolov5s.yaml講解一下模型配置文件的參數(shù)

nc: 1  # number of classes
depth_multiple: 0.33  # model depth multiple
width_multiple: 0.50  # layer channel multiple

nc: 目標的類別數(shù)目,也是你數(shù)據(jù)集中類別標簽的數(shù)目。
depth_multiple:模型深度(控制模塊的數(shù)量),當模塊的數(shù)量number不為1時,模塊的數(shù)量= depth_multiple * number。
width_multiple:模型的寬度(控制卷積核的數(shù)量), 卷積核的數(shù)量= 數(shù)量*width_multiple

2. anchors

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

YOLO v5已經(jīng)在yolov5s.yaml預設好了輸入圖像為640*640分辨率對應的anchor尺寸,yolov5的anchor也是在大特征圖上檢測小目標,在小特征圖上檢測大目標。三個特征圖,每個特征圖上的格子有三種尺寸的anchor。
其實還可以隨機生成3中的不同檢測框,可以用一下代碼來代替:

anchors: 3

二、網(wǎng)絡結構部分

1.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]],                               # 2          
   [-1, 1, Conv, [256, 3, 2]],                       # 3-P3/8      
   [-1, 6, C3, [256]],                               # 4           
   [-1, 1, Conv, [512, 3, 2]],                       # 5-P4/16     
   [-1, 9, C3, [512]],                               # 6           
   [-1, 1, Conv, [1024, 3, 2]],                      # 7-P5/32     
   [-1, 3, C3, [1024]],                              # 8          
   [-1, 1, SPPF, [1024, 5]],                         # 9           
  ]

[from, number, module, args]
from: 輸入來自哪一層, -1表示輸入來自上一層,-2代表輸入上面兩層,3代表輸入來自第三層
number: 卷積核的數(shù)量,最終卷積核的數(shù)量需要乘以width_multiple
module: 模塊名稱,在backbone中模塊名稱分別有:Conv、C3、SPPF。
我們?nèi)∑渲械哪骋粚觼碚f明:

 [-1, 1, Conv, [128, 3, 2]],                       # 1-P2/4

后面注釋語句中為 # 1-P2/4 說明該層是第一層
對于[-1, 1, Conv, [128, 3, 2]]這一層來說中的[from, number, module, args] 對應為
form: -1
number: 1
module: Conv
args: [128, 3, 2]
對于第0層來說,[-1, 1, Conv, [64, 6, 2, 2]]的模塊參數(shù)args分析[64,6,2,2]會被解析成[3,32,6,2,2],接下來看看為什么解析成這樣,64代表卷積核的數(shù)量,最終的卷積核數(shù)量要乘以width_multiple,也是就64*0.5=32(也就是本層輸出的維度),6為卷積核大小,2位卷積核的步長。第一個解析成3(本層的輸入維度)因為輸入的圖像是彩色的RGB3通道的。
其它層的解析參數(shù)也是這個道理,如果參數(shù)里沒有卷積核的步長和大小就默認為1。于是我把其他層在代碼中給注釋出來,大家可以參考我的注釋代碼。

backbone:
  # [from, number, module, args]                                   [輸入,輸出,卷積核大小,步長]
  [[-1, 1, Conv, [64, 6, 2, 2]],                     # 0-P1/2      [3, 32, 6, 2, 2]
   [-1, 1, Conv, [128, 3, 2]],                       # 1-P2/4      [32, 64, 3, 2]     卷積核的數(shù)量=128*width_multiple=64
   [-1, 3, C3, [128]],                               # 2           [64, 64, 1]        最終的模塊數(shù)量=3*depth_multiple=1
   [-1, 1, Conv, [256, 3, 2]],                       # 3-P3/8      [64, 128, 3, 2]
   [-1, 6, C3, [256]],                               # 4           [128, 128, 2 ]
   [-1, 1, Conv, [512, 3, 2]],                       # 5-P4/16     [128, 256, 3, 2]
   [-1, 9, C3, [512]],                               # 6           [256, 256, 3]
   [-1, 1, Conv, [1024, 3, 2]],                      # 7-P5/32     [256, 512, 3, 2]
   [-1, 3, C3, [1024]],                              # 8           [512, 512, 1]
   [-1, 1, SPPF, [1024, 5]],                         # 9           [512, 512, 5]
  ]

# YOLOv5 v6.0 head

2.head部分

head部分的參數(shù)解析可以參考backbone的代碼注釋,這里就不一一注釋了。

總結

如果文章有不足之處,還需大家多多指點,自己也是剛?cè)腴T不就YOLO v5,如果depth_multiple和 width_multiple 的大小進行修改,那么模塊參數(shù)args分析中一些數(shù)值也需要修改,其實道理都是一樣的。

原文鏈接:https://blog.csdn.net/m0_60890175/article/details/126954605

欄目分類
最近更新