網站首頁 編程語言 正文
YOLO v5模型的yaml文件參數理解
文章目錄
- YOLO v5模型的yaml文件參數理解
- 前言
- 一、YOLO v5網絡配置文件
- 1.模型深度與寬度
- 2. anchors
- 二、網絡結構部分
- 1.Backbone
- 2.head部分
- 總結
前言
最近在修改YOLO v5一些模型時候或者加入一些新的東西進去,發現YOLO v5的模型文件也需要我們非常熟悉,這樣添加模塊就不會出現錯誤.
一、YOLO v5網絡配置文件
YOLO v5的配置文件為yaml類型,yolov5.yaml文件通過yolo.py解析文件配置模型的網絡結構。yaml文件配置網絡的好處是十分的方便不需要像YOLO v3的config設置網絡一樣進行疊加,只需要在yaml配置文件中的參數進行修改即可。然后我對YOLO v5的配置文件最近進行了梳理與應用。
1.模型深度與寬度
從github拉一下代碼文件,數據集配置的文件在data文件目錄下,YOLO v5模型的配置文件在models文件下,我們會看到四個YOLO v5模型的配置文件yolov5s.yaml、yolov5n.yaml、yolov5m.yaml、yolov5l.yaml,我就以yolov5s.yaml講解一下模型配置文件的參數
nc: 1 # number of classes
depth_multiple: 0.33 # model depth multiple
width_multiple: 0.50 # layer channel multiple
nc: 目標的類別數目,也是你數據集中類別標簽的數目。
depth_multiple:模型深度(控制模塊的數量),當模塊的數量number不為1時,模塊的數量= depth_multiple * number。
width_multiple:模型的寬度(控制卷積核的數量), 卷積核的數量= 數量*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已經在yolov5s.yaml預設好了輸入圖像為640*640分辨率對應的anchor尺寸,yolov5的anchor也是在大特征圖上檢測小目標,在小特征圖上檢測大目標。三個特征圖,每個特征圖上的格子有三種尺寸的anchor。
其實還可以隨機生成3中的不同檢測框,可以用一下代碼來代替:
anchors: 3
二、網絡結構部分
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: 卷積核的數量,最終卷積核的數量需要乘以width_multiple
module: 模塊名稱,在backbone中模塊名稱分別有:Conv、C3、SPPF。
我們取其中的某一層來說明:
[-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]]的模塊參數args分析[64,6,2,2]會被解析成[3,32,6,2,2],接下來看看為什么解析成這樣,64代表卷積核的數量,最終的卷積核數量要乘以width_multiple,也是就64*0.5=32(也就是本層輸出的維度),6為卷積核大小,2位卷積核的步長。第一個解析成3(本層的輸入維度)因為輸入的圖像是彩色的RGB3通道的。
其它層的解析參數也是這個道理,如果參數里沒有卷積核的步長和大小就默認為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] 卷積核的數量=128*width_multiple=64
[-1, 3, C3, [128]], # 2 [64, 64, 1] 最終的模塊數量=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部分的參數解析可以參考backbone的代碼注釋,這里就不一一注釋了。
總結
如果文章有不足之處,還需大家多多指點,自己也是剛入門不就YOLO v5,如果depth_multiple和 width_multiple 的大小進行修改,那么模塊參數args分析中一些數值也需要修改,其實道理都是一樣的。
原文鏈接:https://blog.csdn.net/m0_60890175/article/details/126954605
- 上一篇:使用einops簡化數據維度操作
- 下一篇:解決ubuntu18.04 磁盤空間不足
相關推薦
- 2022-12-08 利用C語言編寫一個無限循環語句_C 語言
- 2022-07-26 Fatal error in launcher: Unable to create process
- 2022-12-10 React?useCallback詳細使用教程_React
- 2023-12-08 table 單元格垂直居中
- 2022-08-22 Golang實現快速求冪的方法詳解_Golang
- 2022-09-03 pandas如何將datetime64[ns]轉為字符串日期_python
- 2022-08-29 Python神器之Pampy模式匹配庫的用法詳解_python
- 2022-02-10 Linux環境下安裝docker環境(親測無坑)_docker
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支