深度学习Week14-yolov5s.yaml文件解读(YOLOv5)
這周接著詳細解析小白YOLOv5全流程-訓練+實現數字識別_牛大了2022的博客-CSDN博客_yolov5識別數字,上周入門教大家下載配置環境,如果沒有的話請參考上一篇的文章深度學習Week12-訓練自己的數據集(YOLOv5)_牛大了2022的博客-CSDN博客
一、介紹和要求
YOLOv5配置了4種不同大小的網絡模型,分別是YOLOv5s、YOLOv5m、YOLOv5l、YOLOv5x,其中 YOLOv5s 是網絡深度和寬度最小但檢測速度最快的模型(之前數字監測就是用yolov5s),其他3種模型都是在YOLOv5s的基礎上不斷加深、加寬網絡使得網絡規模擴大,在增強模型檢測性能的同時增加了計算資源和速度消耗。出于對檢測精度、模型大小、檢測速度的綜合考量,本文選擇YOLOv5s作為研究對象進行介紹。
./models/yolov5s.yaml文件是YOLOv5s網絡結構的定義文件,如果你想改進算法的網絡結構,需要先修改該文件中的相關參數,然后再修改./models/common.py與./models/yolo.py中的相關代碼。
📌 本周任務:將yolov5s網絡模型中第4層的C3*2修改為C3*1,第6層的C3*3修改為C3*2。
💫 任務提示:僅需修改./models/yolov5s.yaml文件。
?1、參數配置
# Parameters nc: 80 # number of classes depth_multiple: 0.33 # model depth multiple width_multiple: 0.50 # layer channel multiple·depth_multiple:控制子模塊數量=int(number*depth)(該參數與任務有關)
·width_multiple:控制卷積核的數量=int(number*width)
四種模型的這兩者不同。
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三者分別適合小目標、中目標和大目標的檢測。
??YOLOv5初始化了9個anchors,在三個Detect層使用(3個feature map)中使用,每個feature map的每個grid_cell 都有三個anchor進行預測。分配規則:
尺度越大的 feature map 越靠前,相對原圖的下采樣率越小,感受野越小,所以相對可以預測一些尺度比較小的物體,所有分配到的 anchors 越小;
尺度越小的 feature map 越靠后,相對原圖的下采樣率越大,感受野越大,所以相對可以預測一些尺度比較大的物體,所有分配到的 anchors 越大。
即可以在小特征圖(feature map)上檢測大目標,也可以在大特征圖上檢測小目標。
3、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, 3, C3, [256]],[-1, 1, Conv, [512, 3, 2]], # 5-P4/16[-1, 6, C3, [512]],[-1, 1, Conv, [1024, 3, 2]], # 7-P5/32[-1, 3, C3, [1024]],[-1, 1, SPPF, [1024, 5]], # 9]這是yolov5s的backbone,可以看到每一個模塊算一行,每行都由四個參數構成。分別是:
·from:表示當前模塊的輸入來自那一層的輸出,-1表示來自上一層的輸出。
·number:表示當前模塊的理論重復次數,實際的重復次數還要由上面的參數depth_multiple共同決定,決定網絡模型的深度。
·module:模塊類名,通過這個類名去common.py中尋找相應的類,進行模塊化的搭建網絡。
·args:是一個1ist,模塊搭建所需參數,channe1,kernel_size,stride,padding,bias等,會在網絡搭建過程中根據不同層進行改變。
4.head
# YOLOv5 v6.0 head head:[[-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]], # 13[-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]], # 17 (P3/8-small)[-1, 1, Conv, [256, 3, 2]],[[-1, 14], 1, Concat, [1]], # cat head P4[-1, 3, C3, [512, False]], # 20 (P4/16-medium)[-1, 1, Conv, [512, 3, 2]],[[-1, 10], 1, Concat, [1]], # cat head P5[-1, 3, C3, [1024, False]], # 23 (P5/32-large)[[17, 20, 23], 1, Detect, [nc, anchors]], # Detect(P3, P4, P5)]和backbone一樣
修改模型
?找到后打開,然后進行修改
?改好后之后訓練選yolov5s模型就可以了~詳情見頂端文章鏈接。
(運行train.py文件后,將可以在控制臺看到網絡模型的輸出)
總結
以上是生活随笔為你收集整理的深度学习Week14-yolov5s.yaml文件解读(YOLOv5)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 手机图案锁屏小记
- 下一篇: 正则表达式验证手机号 身份证号 银行卡号