網(wǎng)站首頁 編程語言 正文
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
相關推薦
- 2022-12-21 詳解Golang中Channel的原理和使用技巧_Golang
- 2023-03-11 Golang的Fork/Join實現(xiàn)代碼_Golang
- 2022-04-20 C++中的函數(shù)你真的理解了嗎_C 語言
- 2022-12-08 C#調(diào)用C++?DLL?bool返回值始終為true的問題_C#教程
- 2022-01-06 npm ERR! code ERESOLVE npm ERR! ERESOLVE unable to
- 2024-01-13 nvm命令
- 2022-08-30 Python正則表達式re.compile()和re.findall()詳解_python
- 2022-04-25 Entity?Framework?Core批處理SQL語句_實用技巧
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細win安裝深度學習環(huán)境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結構-簡單動態(tài)字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支