YOLOV5源碼解讀-export.py網絡結構、配置文件


 yolov5默認模型文件格式為:".pt",使用上述可視化工具的時候,需要利用yolov5給的代碼(export.py),將模型轉為".torchscript.pt"格式,然后就可以完整地可視化網絡結構了。

 

yolo5s四個針對coco數據集的預訓練模型下載地址:

# Download latest models from     https://github.com/ultralytics/yolov5/releases

下載好模型之后,我們在控制台激活虛擬環境,開始轉換模型,使用如下指令:

 

(yolov5) D:\yolov5\yolov5-master>python models/export.py --weights ./weights/yolov5x.pt --img 640 --batch 1   

我這里在網頁版netron加載、可視化模型文件;

網頁版netron:https://netron.app/

 

二、models/yolov5s.yaml網絡配置文件講解

 在四個yaml文件中,5s 5m 5l 5x 也就下面網絡的深度、寬度兩個參數不同,其他一樣的,你可以對比結構圖。
 1 # parameters
 2 nc: 80  # number of classes 6 
 7 # eg:下面backbone中的模塊:[-1, 9, C3, [512]]  8 # 重復9次,在yolo5s中,0.33 * 9 = 3,表示僅重復三次,表示backbone、head中bottleNeck(csp殘差組件)重復次數
 9 depth_multiple: 0.33  # model depth multiple
10 
11 # width_multiple:卷積核個數,也就決定了當前層featuremap輸出channels維度
12 # eg:[-1, 1, Focus, [64, 3]],中的64表示經過該模塊后
13 # 得到64個特征圖,但是由於這里網絡寬度設置為0.5,所以
14 # 輸出應該是0.5 * 64 = 32個特征圖
15 width_multiple: 0.50  # layer channel multiple
16 
17 # anchors 先驗框,和V3一樣
18 anchors:
19   - [10,13, 16,30, 33,23]  # P3/8   # 負責大特征圖(感受野小)上檢測小目標
20   - [30,61, 62,45, 59,119]  # P4/16
21   - [116,90, 156,198, 373,326]  # P5/32    # 負責小特征圖(感受野大)上檢測大目標
22 
23 # YOLOv5 backbone
24 backbone:
25   # [from, number, module, args] # 下面參數格式
26   # from:當前層輸入來自哪里,例如:-1:連接上一層;6:表示第6層輸入
27   # number:模塊重復次數,例如:32行C3表示CSP殘差組件,它默認重復9次,和上面深度參數相乘,得到5s版本模型
28   # module:模型名字
29   # args:模型參數,eg:卷積核尺寸
30   [[-1, 1, Focus, [64, 3]],  # 0-P1/2  
31    [-1, 1, Conv, [128, 3, 2]],  # 1-P2/4
32    [-1, 3, C3, [128]], # bottleneckCSP:CSP殘差組件,bottleneck表示殘差組件
33    [-1, 1, Conv, [256, 3, 2]],  # 3-P3/8
34    [-1, 9, C3, [256]],
35    [-1, 1, Conv, [512, 3, 2]],  # 5-P4/16
36    [-1, 9, C3, [512]],
37    [-1, 1, Conv, [1024, 3, 2]],  # 7-P5/32
    # 5、9、13表示MaxPooling時候的三種情況,即:划分的網格
38 [-1, 1, SPP, [1024, [5, 9, 13]]], # 5、9、13表示SPP層中在多大區域進行maxPooling,eg:5表示在5×5區域找出最大值 39 [-1, 3, C3, [1024, False]], # 9 40 ] 41 42 # YOLOv5 head 43 head: 44 [[-1, 1, Conv, [512, 1, 1]], 45 [-1, 1, nn.Upsample, [None, 2, 'nearest']], # 上采樣 46 [[-1, 6], 1, Concat, [1]], # cat backbone P4 ,這里的P4就是上述backbone中的P4,信息傳遞 47 [-1, 3, C3, [512, False]], # 13 48 49 [-1, 1, Conv, [256, 1, 1]], 50 [-1, 1, nn.Upsample, [None, 2, 'nearest']], 51 [[-1, 4], 1, Concat, [1]], # cat backbone P3,同理和backbone中的P3模塊進行拼接 52 [-1, 3, C3, [256, False]], # 17 (P3/8-small) 53 54 [-1, 1, Conv, [256, 3, 2]], 55 [[-1, 14], 1, Concat, [1]], # cat head P4 56 [-1, 3, C3, [512, False]], # 20 (P4/16-medium) 57 58 [-1, 1, Conv, [512, 3, 2]], 59 [[-1, 10], 1, Concat, [1]], # cat head P5 60 [-1, 3, C3, [1024, False]], # 23 (P5/32-large) 61 62 [[17, 20, 23], 1, Detect, [nc, anchors]], # Detect(P3, P4, P5) # 17 20 23層在下圖已經標注 63 ]

上述紅色256、512、1024表示PANet不同尺度下特征圖輸入維度,如下圖左邊三個藍色圈標注所示,不要誤解為右邊三個藍色圈。最終,網絡最后一層,三個卷積輸出三個尺度特征圖,輸出維度都是na*(nc + 5),na = 3,表示三個先驗框,nc = 80,表示80個類別,后面是1×1卷積、stride。

 

上面四個concat已經在下圖紅色數字標注

 

 

 

 

 

 reference:https://blog.csdn.net/mary_0830/article/details/107124459


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM