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