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

在RK3568教學(xué)實(shí)驗(yàn)箱上實(shí)現(xiàn)基于YOLOV5的算法物體識(shí)別案例詳解
龍哥手把手教你學(xué)視覺(jué)-深度學(xué)習(xí)YOLOV5篇
怎樣使用PyTorch Hub去加載YOLOv5模型
如何YOLOv5測(cè)試代碼?
yolov5模型onnx轉(zhuǎn)bmodel無(wú)法識(shí)別出結(jié)果如何解決?
yolov5訓(xùn)練部署全鏈路教程

在C++中使用OpenVINO工具包部署YOLOv5模型
使用旭日X3派的BPU部署Yolov5

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

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

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

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

評(píng)論