yolov5于2020年由glenn-jocher首次提出,直至今日yolov5仍然在不斷進行升級迭代。
Yolov5有YOLOv5s、YOLOv5m、YOLOv5l、YOLOv5x四個版本。文件中,這幾個模型的結(jié)構(gòu)基本一樣,不同的是depth_multiple模型深度和width_multiple模型寬度這兩個參數(shù)。
yolov5主要分為輸入端,backbone,Neck,和head(prediction)。backbone是New CSP-Darknet53。Neck層為SPFF和New CSP-PAN。Head層為Yolov3 head。 yolov5 6.0版本的主要架構(gòu)如下圖所示:
從整體結(jié)構(gòu)圖中,我們可以看到Backbone,neck和head由不同的blocks構(gòu)成,下面是對于這三個部分,逐一介紹各個blocks。
1. 輸入端:
YOLOv5在輸入端采用了Mosaic數(shù)據(jù)增強,參考了CutMix數(shù)據(jù)增強的方法,Mosaic數(shù)據(jù)增強由原來的兩張圖像提高到四張圖像進行拼接,并對圖像進行隨機縮放,隨機裁剪和隨機排列。使用數(shù)據(jù)增強可以改善數(shù)據(jù)集中,小、中、大目標(biāo)數(shù)據(jù)不均衡的問題。
Mosaic數(shù)據(jù)增強的主要步驟為:1. Mosaic 2.Copy paste 3.Random affine(Scale, Translation and Shear) 4.Mixup 5.Albumentations 6. Augment HSV(Hue, Saturation, Value) 7. Random horizontal flip.
采用Mosaic數(shù)據(jù)增強的方式有幾個優(yōu)點:1.豐富數(shù)據(jù)集:隨機使用4張圖像,隨機縮放后隨機拼接,增加很多小目標(biāo),大大豐富了數(shù)據(jù)集,提高了網(wǎng)絡(luò)的魯棒性。2.減少GPU占用:隨機拼接的方式讓一張圖像可以計算四張圖像的數(shù)據(jù),減少每個batch的數(shù)量,即使只有一個GPU,也能得到較好的結(jié)果。3.同時通過對識別物體的裁剪,使模型根據(jù)局部特征識別物體,有助于被遮擋物體的檢測,從而提升了模型的檢測能力。
2.backbone
在Backbone中,有conv,C3,SPFF是我們需要闡明的。
2.1.Conv模塊
Conv卷積層由卷積,batch normalization和SiLu激活層組成。batch normalization具有防止過擬合,加速收斂的作用。SiLu激活函數(shù)是Sigmoid 加權(quán)線性組合,SiLU 函數(shù)也稱為 swish 函數(shù)。
公式:silu(x)=x?σ(x),where σ(x) is the logistic sigmoid. Silu函數(shù)處處可導(dǎo),且連續(xù)光滑。Silu并非一個單調(diào)的函數(shù),最大的缺點是計算量大。
2.2 C3模塊
C3其結(jié)構(gòu)作用基本相同均為CSP架構(gòu),只是在修正單元的選擇上有所不同,其包含了3個標(biāo)準(zhǔn)卷積層,數(shù)量由配置文件yaml的n和depth_multiple參數(shù)乘積決定。該模塊是對殘差特征進行學(xué)習(xí)的主要模塊,其結(jié)構(gòu)分為兩支,一支使用了上述指定多個Bottleneck堆疊,另一支僅經(jīng)過一個基本卷積模塊,最后將兩支進行concat操作。
這個模塊相對于之前版本BottleneckCSP模塊不同的是,經(jīng)歷過殘差輸出后的卷積模塊被去掉了,concat后的標(biāo)準(zhǔn)卷積模塊中的激活函數(shù)也為SiLU。
Bottleneck模塊借鑒了ResNet的殘差結(jié)構(gòu),其中一路先進行1 ×1卷積將特征圖的通道數(shù)減小一半,從而減少計算量,再通過3 ×3卷積提取特征,并且將通道數(shù)加倍,其輸入與輸出的通道數(shù)是不發(fā)生改變的。而另外一路通過shortcut進行殘差連接,與第一路的輸出特征圖相加,從而實現(xiàn)特征融合。
在YOLOv5的Backbone中的Bottleneck都默認(rèn)使shortcut為True,而在Head中的Bottleneck都不使用shortcut。
2.3. SPPF模塊
SPPF由SPP改進而來,SPP先通過一個標(biāo)準(zhǔn)卷積模塊將輸入通道減半,然后分別做kernel-size為5,9,13的max pooling(對于不同的核大小,padding是自適應(yīng)的)。對三次最大池化的結(jié)果與未進行池化操作的數(shù)據(jù)進行concat,最終合并后channel數(shù)是原來的2倍。
yolo的SPP借鑒了空間金字塔的思想,通過SPP模塊實現(xiàn)了局部特征和全部特征。經(jīng)過局部特征與全矩特征相融合后,豐富了特征圖的表達能力,有利于待檢測圖像中目標(biāo)大小差異較大的情況,對yolo這種復(fù)雜的多目標(biāo)檢測的精度有很大的提升。
SPPF(Spatial Pyramid Pooling - Fast )使用3個5×5的最大池化,代替原來的5×5、9×9、13×13最大池化,多個小尺寸池化核級聯(lián)代替SPP模塊中單個大尺寸池化核,從而在保留原有功能,即融合不同感受野的特征圖,豐富特征圖的表達能力的情況下,進一步提高了運行速度。
3. Neck
在Neck部分,yolov5主要采用了PANet結(jié)構(gòu)。
PANet在FPN(feature pyramid network)上提取網(wǎng)絡(luò)內(nèi)特征層次結(jié)構(gòu),F(xiàn)PN中頂部信息流需要通過骨干網(wǎng)絡(luò)(Backbone)逐層地往下傳遞,由于層數(shù)相對較多,因此計算量比較大(a)。
PANet在FPN的基礎(chǔ)上又引入了一個自底向上(Bottom-up)的路徑。經(jīng)過自頂向下(Top-down)的特征融合后,再進行自底向上(Bottom-up)的特征融合,這樣底層的位置信息也能夠傳遞到深層,從而增強多個尺度上的定位能力。
(a) FPN backbone. (b) Bottom-up path augmentation. (c) Adaptive feature pooling. (d) Box branch. (e) Fully-connected fusion.
4.Head
4.1 head
Head部分主要用于檢測目標(biāo),分別輸出20*20,40*40和80*80的特征圖大小,對應(yīng)的是32*32,16*16和8*8像素的目標(biāo)。
YOLOv5的Head對Neck中得到的不同尺度的特征圖分別通過1×1卷積將通道數(shù)擴展,擴展后的特征通道數(shù)為(類別數(shù)量+5)×每個檢測層上的anchor數(shù)量。其中5分別對應(yīng)的是預(yù)測框的中心點橫坐標(biāo)、縱坐標(biāo)、寬度、高度和置信度,這里的置信度表示預(yù)測框的可信度,取值范圍為( 0 , 1 ) ,值越大說明該預(yù)測框中越有可能存在目標(biāo)。
Head中的3個檢測層分別對應(yīng)Neck中得到的3種不同尺寸的特征圖。特征圖上的每個網(wǎng)格都預(yù)設(shè)了3個不同寬高比的anchor,可以在特征圖的通道維度上保存所有基于anchor先驗框的位置信息和分類信息,用來預(yù)測和回歸目標(biāo)。
4.2 目標(biāo)框回歸
YOLOv5的目標(biāo)框回歸計算公式如下所示:
其中(bx,by,bw,bh)表示預(yù)測框的中心點坐標(biāo)、寬度和高度,(Cx, Cy)表示預(yù)測框中心點所在網(wǎng)格的左上角坐標(biāo),(tx,ty)表示預(yù)測框的中心點相對于網(wǎng)格左上角坐標(biāo)的偏移量,(tw,th)表示預(yù)測框的寬高相對于anchor寬高的縮放比例,表示(pw,ph)先驗框anchor的寬高。
為了將預(yù)測框的中心點約束到當(dāng)前網(wǎng)格中,使用Sigmoid函數(shù)處理偏移量,使預(yù)測的偏移值保持在(0,1)范圍內(nèi)。這樣一來,根據(jù)目標(biāo)框回歸計算公式,預(yù)測框中心點坐標(biāo)的偏移量保持在(?0.5,1.5)范圍內(nèi),如上圖藍色區(qū)域所示。預(yù)測框的寬度和高度對于anchor的放縮范圍為(0,4)。
4.3 目標(biāo)的建立
如上面所述,YOLOv5的每個檢測層上的每個網(wǎng)格都預(yù)設(shè)了多個anchor先驗框,但并不是每個網(wǎng)格中都存在目標(biāo),也并不是每個anchor都適合用來回歸當(dāng)前目標(biāo),因此需要對這些anchor先驗框進行篩選,將其劃分為正樣本和負(fù)樣本。本文的正負(fù)樣本指的是預(yù)測框而不是Ground Truth(人工標(biāo)注的真實框)。
與YOLOv3/4不同的是,YOLOv5采用的是基于寬高比例的匹配策略,它的大致流程如下:
1. 對于每一個Ground Truth(人工標(biāo)注的真實框),分別計算它與9種不同anchor的寬與寬的比值(w1/w2, w2/w1)和高與高的比值(h1/h2, h2/h1)。
2. 找到Ground Truth與anchor的寬比(w1/w2, w2/w1)和高比(h1/h2, h2/h1)中的最大值,作為該Ground Truth和anchor的比值。
3. 若Ground Truth和anchor的比值r^max小于設(shè)定的比值閾值(超參數(shù)中默認(rèn)為anchor_t = 4.0),那么這個anchor就負(fù)責(zé)預(yù)測這個Ground Truth,這個anchor所回歸得到的預(yù)測框就被稱為正樣本,剩余所有的預(yù)測框都是負(fù)樣本。
通過上述方法,YOLOv5不僅篩選了正負(fù)樣本,同時對于部分Ground Truth在單個尺度上匹配了多個anchor來進行預(yù)測,總體上增加了一定的正樣本數(shù)量。除此以外,YOLOv5還通過以下幾種方法增加正樣本的個數(shù),從而加快收斂速度。
跨網(wǎng)格擴充: 如果某個Ground Truth的中心點落在某個檢測層上的某個網(wǎng)格中,除了中心點所在的網(wǎng)格之外,其左、上、右、下4個鄰域的網(wǎng)格中,靠近Ground Truth中心點的兩個網(wǎng)格中的anchor也會參與預(yù)測和回歸,即一個目標(biāo)會由3個網(wǎng)格的anchor進行預(yù)測,如下圖所示。
跨分支擴充:YOLOv5的檢測頭包含了3個不同尺度的檢測層,每個檢測層上預(yù)設(shè)了3種不同長寬比的anchor,假設(shè)一個Ground Truth可以和不同尺度的檢測層上的anchor匹配,則這3個檢測層上所有符合條件的anchor都可以用來預(yù)測該Ground Truth,即一個目標(biāo)可以由多個檢測層的多個anchor進行預(yù)測。
NMS non-maximum suppression
當(dāng)我們得到對目標(biāo)的預(yù)測后,一個目標(biāo)通常會產(chǎn)生很多冗余的預(yù)測框。Non-maximum suppression(NMS)其核心思想在于抑制非極大值的目標(biāo),去除冗余,從而搜索出局部極大值的目標(biāo),找到最優(yōu)值。
在我們對目標(biāo)產(chǎn)生預(yù)測框后,往往會產(chǎn)生大量冗余的邊界框,因此我們需要去除位置準(zhǔn)確率低的邊界框,保留位置準(zhǔn)確率高的邊界框。NMS的主要步驟為:
1.對于每個種類的置信度按照從大到小的順序排序,選出置信度最高的邊框。
2.遍歷其余所有剩下的邊界框,計算這些邊界框與置信度最高的邊框的IOU值。如果某一邊界框和置信度最高的邊框IOU閾值大于我們所設(shè)定的IOU閾值,這意味著同一個物體被兩個重復(fù)的邊界框所預(yù)測,則去掉這這個邊框。
3.從未處理的邊框中再選擇一個置信度最高的值,重復(fù)第二步的過程,直到選出的邊框不再有與它超過IOU閾值的邊框。
5.損失函數(shù)
5.1 總損失
YOLOv5的損失主要由三個部分組成。分類損失,目標(biāo)損失和定位損失。
Classes loss,分類損失,采用的是BCE loss,只計算正樣本的分類損失。
Objectness loss,置信度損失,采用的依然是BCE loss,指的是網(wǎng)絡(luò)預(yù)測的目標(biāo)邊界框與GT Box的CIoU。這里計算的是所有樣本的損失。
Location loss,定位損失,采用的是CIoU loss,只計算正樣本的定位損失。
其中,lambda為平衡系數(shù),分別為0.5,1和0.05。
5.2 定位損失 Location loss
IOU, intersection of Union交并比,它的作用是衡量目標(biāo)檢測中預(yù)測框與真實框的重疊程度。假設(shè)預(yù)測框為A,真實框為B,則IoU的表達式為
但是當(dāng)預(yù)測框與真實框沒有相交時,IoU不能反映兩者之間的距離,并且此時IoU損失為0,將會影響梯度回傳,從而導(dǎo)致無法訓(xùn)練。此外,IoU無法精確的反映預(yù)測框與真實框的重合度大小。YOLOv5默認(rèn)使用CIoU來計算邊界框損失。其中DIoU將預(yù)測框和真實框之間的距離,重疊率以及尺度等因素都考慮了進去,使得目標(biāo)框回歸變得更加穩(wěn)定。CIoU是在DIoU的基礎(chǔ)上,遵循與IoU相同的定義,進一步考慮了Bounding Box的寬和高的比。即將比較對象的形狀屬性編碼為區(qū)域(region)屬性;b)維持IoU的尺寸不變性;c) 在重疊對象的情況下確保與IoU的強相關(guān)性。
DIoU的損失函數(shù)為
其中b和b^gt 分別表示預(yù)測框和真實框的中心點,ρ表示兩個中心點之間的歐式距離,c表示預(yù)測框和真實框的最小閉包區(qū)域的對角線距離,gt是ground truth縮寫
如下圖所示:
CIoU是在DIoU的懲罰項基礎(chǔ)上添加了一個影響因子αv,這個因子將預(yù)測框的寬高比和真實框的寬高比考慮進去,即CIoU的損失計算公式為
其中α是權(quán)重參數(shù),它的表達式為
v是用來衡量寬高比的一致性,它的表達式為
5.3 分類損失
YOLOv5默認(rèn)使用二元交叉熵函數(shù)來計算分類損失。二元交叉熵函數(shù)的定義為
其中y為輸入樣本對應(yīng)的標(biāo)簽(正樣本為1,負(fù)樣本為0),p為模型預(yù)測該輸入樣本為正樣本的概率。假設(shè),交叉熵函數(shù)的定義可簡化為
YOLOv5使用二元交叉熵?fù)p失函數(shù)計算類別概率和目標(biāo)置信度得分的損失,各個標(biāo)簽不是互斥的。YOLOv5使用多個獨立的邏輯(logistic)分類器替換softmax函數(shù),以計算輸入屬于特定標(biāo)簽的可能性。在計算分類損失進行訓(xùn)練時,對每個標(biāo)簽使用二元交叉熵?fù)p失。這也避免使用softmax函數(shù)而降低了計算復(fù)雜度。
5.4 置信度損失
每個預(yù)測框的置信度表示這個預(yù)測框的可靠程度,值越大表示該預(yù)測框越可靠,也表示越接近真實框。對于置信度標(biāo)簽,YOLO之前的版本認(rèn)為所有存在目標(biāo)的網(wǎng)格(正樣本)對應(yīng)的標(biāo)簽值均為1,其余網(wǎng)格(負(fù)樣本)對應(yīng)的標(biāo)簽值為0。但是這樣帶來的問題是有些預(yù)測框可能只是在目標(biāo)的周圍,而并不能精準(zhǔn)預(yù)測框的位置。因此YOLOv5的做法是,根據(jù)網(wǎng)格對應(yīng)的預(yù)測框與真實框的CIoU作為該預(yù)測框的置信度標(biāo)簽。與計算分類損失一樣,YOLOv5默認(rèn)使用二元交叉熵函數(shù)來計算置信度損失。
同時,對于目標(biāo)損失,在不同的預(yù)測特征層也給予了不同權(quán)重。這些
在源碼中,針對預(yù)測小目標(biāo)的預(yù)測特征層采用的權(quán)重是4.0,針對預(yù)測中等目標(biāo)的預(yù)測特征層采用的權(quán)重是1.0,針對預(yù)測大目標(biāo)的預(yù)測特征層采用的權(quán)重是0.4,作者說這是針對COCO數(shù)據(jù)集設(shè)置的超參數(shù)。
【以上信息由艾博檢測整理發(fā)布,如有出入請及時指正,如有引用請注明出處,歡迎一起討論,我們一直在關(guān)注其發(fā)展!專注:CCC/SRRC/CTA/運營商入庫】
審核編輯黃宇
-
數(shù)據(jù)
+關(guān)注
關(guān)注
8文章
7256瀏覽量
91896 -
算法
+關(guān)注
關(guān)注
23文章
4710瀏覽量
95405 -
預(yù)測
+關(guān)注
關(guān)注
0文章
39瀏覽量
12504
發(fā)布評論請先 登錄
【YOLOv5】LabVIEW+YOLOv5快速實現(xiàn)實時物體識別(Object Detection)含源碼
【YOLOv5】LabVIEW+TensorRT的yolov5部署實戰(zhàn)(含源碼)

在RK3568教學(xué)實驗箱上實現(xiàn)基于YOLOV5的算法物體識別案例詳解
龍哥手把手教你學(xué)視覺-深度學(xué)習(xí)YOLOV5篇
怎樣使用PyTorch Hub去加載YOLOv5模型
如何YOLOv5測試代碼?
在C++中使用OpenVINO工具包部署YOLOv5模型
使用旭日X3派的BPU部署Yolov5

淺析基于改進YOLOv5的輸電線路走廊滑坡災(zāi)害識別

【教程】yolov5訓(xùn)練部署全鏈路教程

yolov5和YOLOX正負(fù)樣本分配策略

YOLOv5網(wǎng)絡(luò)結(jié)構(gòu)訓(xùn)練策略詳解

YOLOv5的原理、結(jié)構(gòu)、特點和應(yīng)用
在樹莓派上部署YOLOv5進行動物目標(biāo)檢測的完整流程

評論