第六篇—YOLOv5網絡結構(YOLOv5專題)
部分一:YOLOv5網絡結構
YOLOv5網絡結構包括三部分:Backbone骨干網絡、Neck頸部結構和Head頭部結構。其中,Backbone負責特征提??;Neck負責特征融合;Head包含了三個檢測頭,負責輸出檢測信息,YOLOv5網絡結構如下圖所示。

部分二:Backbone骨干網絡
Backbone骨干網絡主要作用是提取圖片的特征,并不斷縮小特征圖,Backbone包含了CBL模塊、Focus模塊、CSP模塊和SPP模塊。
(1)CBL模塊
CBL為標準卷積模塊,包括普通卷積層Conv、批量歸一化層BN和LeakyReLU激活函數層,如下圖所示:

CBL模塊代碼實現:
(2)Focus模塊
Focus模塊是對圖片進行切片操作,具體操作是在一張圖片中每隔一個像素取一個值,類似于鄰近下采樣,可以得到四張采樣圖片,四張圖片互補,圖片內容差不多,但是整體操作沒有信息丟失。Focus將圖片H*W空間維度的信息轉換到了Channel通道維度,H和W均減為原來一半,Channel擴充為原來四倍,然后將新圖片經過一次卷積操作,得到沒有信息丟失情況下的二倍下采樣特征圖,切片操作如下圖所示:

Focus模塊如下圖所示:

Focus模塊代碼實現:
(3)CSP模塊
CSP模塊包括CSP1_X模塊和CSP2_X模塊,兩者都借鑒了CSPNet網絡結構,CSP1_X模塊和CSP2_X模塊如下圖所示:


可見,ResUnit模塊的shortcut參數設置為True,就是CSP1_X模塊的組件;設置成False,就是CSP2_X模塊的組件,ResUnit模塊代碼實現如下:
對于ResUnit殘差模塊,是否有殘差邊取決于shortcut參數和輸入輸出通道是否相同。
CSP1_X模塊代碼實現:
CSP2_X模塊代碼實現:
(4)SPP模塊
SPP(Spatial Pyramid Pooling)模塊稱為空間金字塔池化模塊,通過引入不同的池化核來提取特征圖中不同大小目標的特征,SPP模塊如下圖所示:

SPP模塊代碼實現:
部分三:Neck頸部結構
Neck頸部結構主要實現淺層圖形特征和深層語義特征的融合。在卷積神經網絡的淺層,網絡提取的是一些像顏色、輪廓、紋理和形狀等簡單的特征,屬于圖形特征;隨著網絡的不斷加深,神經網絡會將這些特征不斷融合、升維,產生新的特征,屬于語義特征。總之,圖形特征來自卷積神經網絡淺層,只是簡單的圖形,語義信息較少;而語義特征來自卷積神經網絡的深層,語義信息豐富,但卻缺少局部細節(jié)特征信息。Neck包含了自頂向下的FPN模塊和自底向上的PAN模塊,其中,FPN是自頂向下,將深層的語義特征傳遞到淺層,增強了語義信息,不過對淺層的定位信息沒有傳遞;PAN是對FPN的補充,在FPN的后面添加了一個自底向上的金字塔結構,將淺層的強定位特征傳遞到深層,FPN和PAN又被稱為“雙塔戰(zhàn)術”,FPN如下圖(a)所示,PAN如下圖(b)所示。

YOLOv5的FPN和PAN結構:

部分四:Head頭部結構
YOLOv5輸出為255*H*W、255*2H*2W和255*4H*4W三個特征圖,尺寸最小的255*H*W負責檢測大目標,255*2H*2W負責檢測中目標,尺寸最大的255*4H*4W負責檢測小目標,通道數255=3*(5+80),其中,3表示3個Anchor,5表示四個位置信息(x,y,w,h)和一個置信度confidence(表示當前網格中可能存在物體的概率),80表示COCO數據集80個類別的概率,具體通道信息的表示如下圖所示。

YOLOv5輸出255*H*W、255*2H*2W和255*4H*4W三個特征圖,每個特征圖都有三個Anchor,一共有9個Anchor。其中,尺寸最小的255*H*W因為負責檢測大目標,所以對應的Anchor相對較大;尺寸最大的255*4H*4W負責檢測小目標,所以對應的Anchor相對較小,YOLOv5中的Anchor如下:

Anchor可視化:

Anchor可視化代碼: