三万字硬核详解:yolov1、yolov2、yolov3、yolov4、yolov5、yolov7
文章目錄
- YOLO的每個(gè)版本都是基于前一版本進(jìn)行更新,故需要先理解初始版本。
- 前言:評(píng)價(jià)指標(biāo)
-
- (1)指標(biāo):IOU
- (2)指標(biāo):Precision(精度)、Recall(召回率)
- (3)指標(biāo):mAP
- 一、開山之作:yolov1
-
- (1.1)簡(jiǎn)介
- (1.2)網(wǎng)絡(luò)模型
-
- 備注:連續(xù)使用兩個(gè)全連接層的作用?
- (1.3)損失函數(shù)(四部分組成)
- (1.4)NMS非極大值抑制
- (1.5)性能表現(xiàn)
- 二、更快更強(qiáng):yolov2
-
- (2.1)性能表現(xiàn)
- (2.2)網(wǎng)絡(luò)模型(Darknet-19)
- (2.3)改進(jìn)之處
-
- (2.3.1)加入批標(biāo)準(zhǔn)化(Batch Normalization,BN)
- (2.3.2)使用高分辨率圖像,微調(diào)分類模型。
- (2.3.3)聚類提取先驗(yàn)框(Anchor Box)
- (2.3.4)相對(duì)偏移量計(jì)算 —— 在當(dāng)前網(wǎng)格中進(jìn)行相對(duì)位置的微調(diào)
- (2.3.5)Fine-Grained Features(細(xì)粒度特性)
- (2.3.6)Multi-Scale多尺度檢測(cè)(yolov2版)
- 三、巔峰之作:yolov3
-
- (3.1)性能表現(xiàn)
- (3.2)網(wǎng)絡(luò)模型(Darknet-53)
- (3.3)改進(jìn)之處
-
- (3.3.1)Multi-Scale多尺度檢測(cè)(yolov3版)
- (3.3.2)多標(biāo)簽分類:softmax()改成logistic()
- 四、大神接棒:yolov4
-
- (4.1)性能表現(xiàn)
- (4.2)網(wǎng)絡(luò)模型(CSPDarknet53)
-
- (4.2.1)跨階段部分網(wǎng)絡(luò)(Cross Stage Partial Networks,CSPNet)
- (4.2.2)空間金字塔池化網(wǎng)絡(luò)(Spatial Pyramid Pooling Network,SPPNet)
- (4.2.3)空間注意力機(jī)制(Spatial Attention Module,SAM)
- (4.2.4)路徑聚合網(wǎng)絡(luò)(Path Aggregation Network,PANet)
- (4.2.5)Mish激活函數(shù)
- (4.3)改進(jìn)之處
-
- (4.3.1)馬賽克(Mosaic)數(shù)據(jù)增強(qiáng) + CutMix數(shù)據(jù)增強(qiáng)
- (4.3.2)自對(duì)抗訓(xùn)練(Self-Adversarial Training,SAT)
- (4.3.3)改進(jìn)的Dropout(DropBlock)
- (4.3.4)標(biāo)簽平滑(Label Smoothing)
- (4.3.5)CIoU損失函數(shù)
- (4.3.6)DIoU-NMS
- 五、橫空出世:YOLOv5
-
- (5.1)性能表現(xiàn)
- (5.2)網(wǎng)絡(luò)模型(YOLOv5s)
-
- (5.2.1)Backbone(特征提取模塊)
- (5.2.1)EfficientNet
- (5.3)改進(jìn)之處
- 六、曇花一現(xiàn):YOLOv6
- 七、誰(shuí)與爭(zhēng)鋒:YOLOv7
-
- (7.1)性能表現(xiàn)
- (7.2)網(wǎng)絡(luò)模型
- (7.3)改進(jìn)之處
-
- (7.3.1)RepVGG(最大改進(jìn))
- (7.3.2)正樣本分配策略
- (7.3.3)相對(duì)偏移量計(jì)算(yolov5/v7版)
- (7.3.4)輔助頭(auxiliary head)+主頭(lead head)
- 參考文獻(xiàn)
YOLO的每個(gè)版本都是基于前一版本進(jìn)行更新,故需要先理解初始版本。
前言:評(píng)價(jià)指標(biāo)
(1)指標(biāo):IOU
(2)指標(biāo):Precision(精度)、Recall(召回率)
(3)指標(biāo):mAP
一、開山之作:yolov1
論文地址:You Only Look Once: Unified, Real-Time Object Detection
官方代碼:https://github.com/pjreddie/darknet
(1.1)簡(jiǎn)介
在yolov1提出之前,雙階段(two-stage)的R-CNN系列算法在目標(biāo)檢測(cè)領(lǐng)域獨(dú)占鰲頭。
2016年,單階段(one-stage)的YOLO(You Only Look Once) 初出茅廬。可以在圖像中找出特定物體,并識(shí)別種類和位置。
備注:FPS是指視頻每秒傳輸?shù)膸瑪?shù)。例如:FPS=45 表示為45幀/秒。幀數(shù)愈多,所顯示的動(dòng)作就會(huì)越流暢。
❤️ yolo核心思想:把目標(biāo)檢測(cè)轉(zhuǎn)變成一個(gè)回歸問(wèn)題。將整個(gè)圖像作為網(wǎng)絡(luò)的輸入,僅僅經(jīng)過(guò)一個(gè)神經(jīng)網(wǎng)絡(luò),得到邊界框的位置信息及其所屬的類別。
(1.2)網(wǎng)絡(luò)模型
備注:yolov1的輸入圖像大小固定為448×448,與全連接層的輸出大小有關(guān)。訓(xùn)練時(shí):224×224;測(cè)試時(shí):448×448。 原因:224×224×3 相比448×448×3相差四倍,其像素點(diǎn)大幅度降低,減少對(duì)計(jì)算機(jī)的性能要求。
備注:連續(xù)使用兩個(gè)全連接層的作用?
第一個(gè)全連接層作用:將卷積得到的分布式特征映射到樣本標(biāo)記空間。即把該輸入圖像的所有卷積特征整合到一起。
第二個(gè)全連接層作用:將所有神經(jīng)元得到的卷積特征進(jìn)行維度轉(zhuǎn)換,最后得到與目標(biāo)檢測(cè)網(wǎng)絡(luò)輸出維度相同的維度。
【小問(wèn)題思考】?jī)蓚€(gè)全連接層連用 1x1卷積作用
(1.3)損失函數(shù)(四部分組成)
損失函數(shù)由四個(gè)部分組成:
- (1)位置誤差:對(duì)每個(gè)網(wǎng)格的兩個(gè)邊界框,提取IOU最大的一個(gè),并計(jì)算其預(yù)測(cè)值與真實(shí)值的位置誤差。其中,對(duì)w和h取根號(hào)計(jì)算,以避免物體大小因素對(duì)結(jié)果的影響。
- (2)置信度誤差(obj):前景誤差。 計(jì)算IOU大于置信度閾值的邊界框與真實(shí)值的誤差。若存在多個(gè)滿足要求的邊界框,則進(jìn)行非極大值抑制。
我們希望前景框的誤差趨近于1。- (3)置信度誤差(noobj):背景誤差。 若邊界框的IOU小于置信度閾值或IOU=0,則該邊界框?qū)儆诒尘啊1尘翱蜻h(yuǎn)遠(yuǎn)大于前景框,故
對(duì)背景框誤差設(shè)置閾值(如:0.1),降低背景框誤差對(duì)損失函數(shù)的影響。我們希望背景框的誤差趨近于0。- (4)分類誤差:計(jì)算預(yù)測(cè)的分類標(biāo)簽與真實(shí)標(biāo)簽的誤差。
(1.4)NMS非極大值抑制
非極大值抑制可以用來(lái)修正多重檢測(cè)目標(biāo),能增加2~3%的mAP。
即在檢測(cè)結(jié)果中,若存在多個(gè)檢測(cè)框的IOU大于置信度閾值,通過(guò)非極大值抑制最后只取一個(gè)框。如下圖:五個(gè)框中只取最大值(置信度=0.98)的預(yù)測(cè)框。
(1.5)性能表現(xiàn)
優(yōu)點(diǎn)
- (1)YOLO檢測(cè)速度非常快。標(biāo)準(zhǔn)版本的YOLO可以每秒處理 45 幀圖像,極速版本可以每秒處理 150 幀圖像,完全滿足視頻的實(shí)時(shí)檢測(cè)要求;而對(duì)于欠實(shí)時(shí)系統(tǒng),在保證準(zhǔn)確率的情況下,速度也快于其他方法。
- (2)YOLO 實(shí)時(shí)檢測(cè)的平均精度是其他實(shí)時(shí)監(jiān)測(cè)系統(tǒng)的兩倍。
- (3)遷移能力強(qiáng),能運(yùn)用到其他的新的領(lǐng)域(比如:藝術(shù)品目標(biāo)檢測(cè))。
局限
- (1)YOLO對(duì)相互靠近的物體,以及很小的群體檢測(cè)效果不好,這是因?yàn)橐粋€(gè)網(wǎng)格只預(yù)測(cè)了2個(gè)框,并且都只屬于同一類。
- (2)由于損失函數(shù)的問(wèn)題,位置誤差是影響檢測(cè)效果的主要原因,尤其是對(duì)于物體大小因素的處理,還有待加強(qiáng)。(原因:對(duì)于一大一小兩個(gè)邊界框而言,對(duì)更小邊界框的誤差影響更大)
二、更快更強(qiáng):yolov2
論文地址:YOLO9000: Better, Faster, Stronger
官方代碼:http://pjreddie.com/darknet/yolo/
- 2017年,提出了yolov2和yolo9000,yolo9000能夠?qū)崟r(shí)檢測(cè)超過(guò)9000種物體,主要檢測(cè)網(wǎng)絡(luò)還是yolov2。yolov2的整體網(wǎng)絡(luò)架構(gòu)和基本思想沒(méi)有變化,重點(diǎn)解決yolov1召回率和定位精度方面的不足。相比其它的檢測(cè)器,速度更快、精度更高、可以適應(yīng)多種尺寸的圖像輸入。
- yolov1是利用全連接層直接預(yù)測(cè)Bounding Box的坐標(biāo)。而yolov2借鑒了Faster R-CNN的思想,引入Anchor機(jī)制;利用K-means聚類的方法在訓(xùn)練集中聚類計(jì)算出更好的Anchor模板,大大提高了算法的召回率;同時(shí)結(jié)合圖像細(xì)粒度特征,將淺層特征與深層特征相連,有助于對(duì)小尺寸目標(biāo)的檢測(cè)。
(2.1)性能表現(xiàn)
隨著yolov2的每一步改進(jìn),mAP值持續(xù)上升。
(2.2)網(wǎng)絡(luò)模型(Darknet-19)
Darknet-19采用了19個(gè)卷積層,5個(gè)池化層。
- (1)取消yolov1的兩個(gè)全連接層。yolov1的依據(jù)全連接層直接預(yù)測(cè) Bounding Boxes 的坐標(biāo)值。 而yolov2采用 Faster R-CNN 的方法,只用卷積層與 Region Proposal Network 來(lái)預(yù)測(cè) Anchor Box 偏移量與置信度,而不是直接預(yù)測(cè)坐標(biāo)值。
- (2)添加了五個(gè)最大池化層(2的5次方)。最終的輸出大小:輸入圖像(h,w)轉(zhuǎn)換為(h / 32,w / 32)。
- (3)yolov2的實(shí)際輸入圖像大小為416×416,而不是448×448(416/32=13、448/32=14)。因?yàn)槲覀兿M詈蟮玫降氖瞧鏀?shù)值,有實(shí)際的中心點(diǎn)。最終得到13×13的輸出。與yolov1的7×7相比,可以預(yù)測(cè)更多的先驗(yàn)框。
- (4)基于VGG的思想,大部分的卷積核都是3×3,一方面權(quán)重參數(shù)少,一方面感受野比較大;且采用降維的思想,將1×1的卷積核置于3×3之間,在保持整體網(wǎng)絡(luò)結(jié)構(gòu)的同時(shí)減少權(quán)重參數(shù)。并且每一次池化后,下一層卷積核的通道數(shù) = 池化輸出的通道 × 2。
- (5)在網(wǎng)絡(luò)模型的最后,而增加了一個(gè)全局平均池化層。
Darknet-19 與 yolov1、VGG16網(wǎng)絡(luò)的性能對(duì)比
- (1)VGG-16: 大多數(shù)檢測(cè)網(wǎng)絡(luò)框架都是以VGG-16作為基礎(chǔ)特征提取器,它功能強(qiáng)大,準(zhǔn)確率高,但是計(jì)算復(fù)雜度較大,所以速度會(huì)相對(duì)較慢。因此YOLOv2的網(wǎng)絡(luò)結(jié)構(gòu)基于該方面進(jìn)行改進(jìn)。
- (2)yolov1: 基于GoogLeNet的自定義網(wǎng)絡(luò),比VGG-16的速度快,但是精度稍不如VGG-16。
- (3)Darknet-19: 速度方面,處理一張圖片僅需要55.8億次運(yùn)算,相比于VGG的306.9億次,速度快了近6倍。精度方面,在ImageNet上的測(cè)試精度為:top1準(zhǔn)確率為72.9%,top5準(zhǔn)確率為91.2%。
(2.3)改進(jìn)之處
(2.3.1)加入批標(biāo)準(zhǔn)化(Batch Normalization,BN)
最終約提升2%的mAP。
具體操作: 在每一個(gè)卷積層后面都加入BN,對(duì)數(shù)據(jù)進(jìn)行預(yù)處理操作(如:統(tǒng)一格式、均衡化、去噪等)。
優(yōu)點(diǎn):解決梯度消失和爆炸問(wèn)題,起到一定的正則化效果(yolov2不再使用dropout),獲得更好的收斂速度。
(2.3.2)使用高分辨率圖像,微調(diào)分類模型。
最終約提升4%的mAP。
背景:yolov1訓(xùn)練時(shí)的分辨率:224×224;測(cè)試時(shí):448×448。
具體操作:yolov2保持yolov1的操作不變,但在原訓(xùn)練的基礎(chǔ)上又加上了(10個(gè)epoch)的448×448高分辨率樣本進(jìn)行微調(diào),使網(wǎng)絡(luò)特征逐漸適應(yīng) 448×448 的分辨率;然后再使用 448×448 的樣本進(jìn)行測(cè)試,緩解了分辨率突然切換造成的影響。
(2.3.3)聚類提取先驗(yàn)框(Anchor Box)
最終約提升7%的recall達(dá)到88%,但降低了0.3%的mAP。
- ❤️ yolov1邊界框都是手工設(shè)定的,通過(guò)直接對(duì)邊界框的(x,y,w,h)位置進(jìn)行預(yù)測(cè),方法簡(jiǎn)單但訓(xùn)練困難,很難收斂。
- ❤️ Faster R-CNN共有9種先驗(yàn)框:分三個(gè)不同的scale(大中小),每個(gè)scale的(h,w)比例分為:1:1、1:2、2:1。
- ❤️ yolov2引入先驗(yàn)框機(jī)制。 但由于Faster R-CNN中先驗(yàn)框的大小和比例是按經(jīng)驗(yàn)設(shè)定的,不具有很好的代表性。故yolov2對(duì)訓(xùn)練集中所有標(biāo)注的邊界框先進(jìn)行聚類分析(比如:5類),然后獲取每一類的中心值即實(shí)際的(w,h)比值作為先驗(yàn)框,該值與真實(shí)值更接近,使得網(wǎng)絡(luò)在訓(xùn)練時(shí)更容易收斂。
備注1:yolov1將圖像拆分為7×7個(gè)網(wǎng)格,每個(gè)網(wǎng)格grid只預(yù)測(cè)2個(gè)邊界框,共7×7×2=98個(gè)。
備注2:yolov2將圖像拆分為13×13個(gè)網(wǎng)格,在Faster R-CNN的9種先驗(yàn)框基礎(chǔ)上,將所有的邊界框13×13×9=1521進(jìn)行K-means聚類,最終選擇最優(yōu)參數(shù)k=5。即yolov2的每個(gè)網(wǎng)格grid只預(yù)測(cè)5個(gè)邊界框,共13×13×5=845個(gè)。
傳統(tǒng)K-means聚類方法使用標(biāo)準(zhǔn)的歐氏距離,將導(dǎo)致大的box會(huì)比小的box產(chǎn)生更多的誤差。而yolo的目的是使得先驗(yàn)框與真實(shí)框有更大的IOU值,故自定義距離公式。
距離公式:計(jì)算每一類的中心值對(duì)應(yīng)的先驗(yàn)框centroids與真實(shí)框box的距離。即計(jì)算IOU=(先驗(yàn)框與真實(shí)框的交集)除以(先驗(yàn)框與真實(shí)框的并集)。IOU越大,越相關(guān),則距離越小,反之亦然。備注:數(shù)據(jù)均已采用批標(biāo)準(zhǔn)化處理。
左圖:x軸表示k的個(gè)數(shù),y軸表示平均IOU值。紫色與黑色分別表示兩個(gè)不同的數(shù)據(jù)集(形狀相似)。綜合考慮精確度和運(yùn)算速度后,yolov2最終取k=5個(gè)先驗(yàn)框。
右圖:k=5個(gè)先驗(yàn)框的圖形化顯示。
(2.3.4)相對(duì)偏移量計(jì)算 —— 在當(dāng)前網(wǎng)格中進(jìn)行相對(duì)位置的微調(diào)
背景:已知先驗(yàn)框的位置為(x,y,w,h),現(xiàn)在得到的預(yù)測(cè)邊界框?yàn)?#xff08;tx,ty,tw,th),即系統(tǒng)判定需要在先驗(yàn)框位置的基礎(chǔ)上進(jìn)行一定的偏移,進(jìn)而可以得到更真實(shí)的位置。故需要將預(yù)測(cè)的偏移量加到先驗(yàn)框中(x+tx,y+ty,w+tw,h+th)。
問(wèn)題:由于模型剛開始訓(xùn)練時(shí),網(wǎng)絡(luò)參數(shù)都是隨機(jī)初始化,雖然進(jìn)行了批標(biāo)準(zhǔn)化但是參數(shù)的基數(shù)比較大,將導(dǎo)致預(yù)測(cè)的邊界框加上偏移量之后到處亂飄。
yolov2的本質(zhì):在當(dāng)前網(wǎng)格中進(jìn)行相對(duì)位置的微調(diào)。
下圖參數(shù)說(shuō)明:
- (Cx,Cy):表示當(dāng)前網(wǎng)格的左上角位置坐標(biāo)。
- (tx,ty,tw,th):表示預(yù)測(cè)的結(jié)果在當(dāng)前網(wǎng)格相對(duì)位置的偏移量。
- σ(tx):表示對(duì)漂移量 tx 取sigmoid函數(shù),得到(0~1)之間的值。即預(yù)測(cè)邊框的藍(lán)色中心點(diǎn)被約束在藍(lán)色背景的網(wǎng)格內(nèi)。約束邊框位置使得模型更容易學(xué)習(xí),且預(yù)測(cè)更為穩(wěn)定。
- e的tw次方:是由于預(yù)測(cè)時(shí)取的log()對(duì)數(shù)值,故計(jì)算位置時(shí)進(jìn)行還原。
- (bx,by,bw,bh):表示當(dāng)前預(yù)測(cè)結(jié)果在特征圖位置(即預(yù)處理后得到的13×13網(wǎng)格)。
(2.3.5)Fine-Grained Features(細(xì)粒度特性)
背景:
- 由于Faster R-CNN有大中小三種尺度scale的經(jīng)驗(yàn)框,最終將對(duì)應(yīng)得到小中大三種感受野。
- 感受野越大,其在原圖像中對(duì)應(yīng)的尺度越大,導(dǎo)致其對(duì)尺度較小的目標(biāo)不敏感,故無(wú)法兼顧考慮小尺度目標(biāo)。
- 備注:高分辨率(尺度大) - 感受野小;低分辨率(尺度小) - 感受野大。
yolov2需要同時(shí)考慮三種不同的感受野,通過(guò)不同層的特征融合實(shí)現(xiàn)。具體操作:通過(guò)添加一個(gè)passthrough Layer,把高分辨率的淺層特征(26×26×512)進(jìn)行拆分,疊加到低分辨率的深層特征(13×13×1024)中,然后進(jìn)行特征融合(13×13×3072),最后再檢測(cè)。(在yolov1中,FC起到全局特征融合的作用)。
目的:提高對(duì)小目標(biāo)的檢測(cè)能力。
(2.3.6)Multi-Scale多尺度檢測(cè)(yolov2版)
背景:由于實(shí)際檢測(cè)數(shù)據(jù)的輸入圖像大小不一,若都裁剪為相同大小,最后檢測(cè)結(jié)果將有所下降。
限制:由于yolov2只有卷積層,故對(duì)輸入圖像大小沒(méi)有限制;而yolov1由于有全連接層,故輸入圖像大小固定。
具體操作:訓(xùn)練模型每經(jīng)過(guò)一定迭代之后,可以進(jìn)行輸入圖像尺度變換。如:每迭代100次,輸入圖像尺寸大小增加10%。(備注:輸入圖像大小必須可以被32整除)
三、巔峰之作:yolov3
論文地址:YOLOv3: An Incremental Improvement
官網(wǎng)代碼:https://github.com/yjh0410/yolov2-yolov3_PyTorch
(3.1)性能表現(xiàn)
x軸表示預(yù)測(cè)一張圖片所需要的時(shí)間;y軸為mAP。原點(diǎn)的x軸坐標(biāo)為50
由圖可得:youlov3的檢測(cè)速度和mAP值都強(qiáng)高于其他方法。
(3.2)網(wǎng)絡(luò)模型(Darknet-53)
Darknet-53網(wǎng)絡(luò)架構(gòu):
(1)由53個(gè)卷積層構(gòu)成,包括1×1和3×3的卷積層,卷積省時(shí)省力速度快效果好,對(duì)于分析物體特征最為有效。每個(gè)卷積層之后包含一個(gè)批量歸一化層和一個(gè)Leaky ReLU,加入這兩個(gè)部分的目的是為了防止過(guò)擬合。
(2)沒(méi)有全連接層,可以對(duì)應(yīng)任意大小的輸入圖像。
(3)沒(méi)有池化層,通過(guò)控制卷積層conv的步長(zhǎng)stride達(dá)到下采樣的效果,需要下采樣時(shí)stride=2;否則stride=1;
(4)除此之外,Darknet-53中還使用了類似ResNet結(jié)構(gòu)。
Darknet-53網(wǎng)絡(luò)及在yolov3中的實(shí)際應(yīng)用。可以看下面這張圖:
- DBL:由一個(gè)卷積層、一個(gè)批量歸一化層和一個(gè)Leaky ReLU組成的基本卷積單元。在Darknet-53中,共有53個(gè)這樣的DBL,所以稱其為Darknet-53。
- res unit:輸入通過(guò)兩個(gè)DBL后,再與原輸入進(jìn)行特征add,得到與原圖像大小維度相同的圖像;這是一種常規(guī)的殘差單元。殘差單元的目的是為了讓網(wǎng)絡(luò)可以提取到更深層的特征,同時(shí)避免出現(xiàn)梯度消失或爆炸。殘差網(wǎng)絡(luò)的特點(diǎn):至少不比原來(lái)差。
- res(n):表示n個(gè)res unit。resn = Zero Padding + DBL + n × res unit 。
- y1、y2、y3: 分別表示yolov3的三種不同尺度輸出(分別對(duì)應(yīng):大中小感受野)。
- concat1: (大中小感受野)將大感受野的特征圖像進(jìn)行上采樣,得到與中感受野的特征圖像相同大小,然后進(jìn)行維度拼接,達(dá)到多尺度特征融合的目的。 為了加強(qiáng)算法對(duì)小目標(biāo)檢測(cè)的精確度
- concat2: (大中小感受野)將中感受野的特征圖像進(jìn)行上采樣,得到與小感受野的特征圖像相同大小,然后進(jìn)行維度拼接,達(dá)到多尺度特征融合的目的。 為了加強(qiáng)算法對(duì)小目標(biāo)檢測(cè)的精確度
bounding box 與anchor box的輸出區(qū)別- (1)Bounding box輸出:框的位置(中心坐標(biāo)與寬高),confidence以及N個(gè)類別。
- (2)anchor box輸出:一個(gè)尺度即只有寬高。
(3.3)改進(jìn)之處
(3.3.1)Multi-Scale多尺度檢測(cè)(yolov3版)
前提:分辨率信息直接反映目標(biāo)的像素?cái)?shù)量。分辨率越高,像素?cái)?shù)量越多,對(duì)細(xì)節(jié)表現(xiàn)越豐富。在目標(biāo)檢測(cè)中,語(yǔ)義信息主要用于區(qū)分前景(目標(biāo))和背景(非目標(biāo))。其不需要很多細(xì)節(jié)信息,分辨率大反而會(huì)降低語(yǔ)義信息。yolov3主要針對(duì)小目標(biāo)檢測(cè)的不足之處做出改進(jìn)。
具體形式:在網(wǎng)絡(luò)預(yù)測(cè)的最后某些層進(jìn)行上采樣+拼接操作。
(詳細(xì)請(qǐng)看yolov3網(wǎng)絡(luò)架構(gòu))
(3.3.2)多標(biāo)簽分類:softmax()改成logistic()
將yolov2的單標(biāo)簽分類改進(jìn)為yolov3的多標(biāo)簽分類。即softmax()分類函數(shù)更改為logistic()分類器。
具體形式:邏輯分類器通過(guò)對(duì)每個(gè)類別都進(jìn)行二分類,以實(shí)現(xiàn)多標(biāo)簽分類。使用sigmoid函數(shù)將特征圖的結(jié)果約束在[0~1]之間,如果有一個(gè)或多個(gè)值大于設(shè)定閾值,就認(rèn)定該目標(biāo)框所對(duì)應(yīng)的目標(biāo)屬于該類。多個(gè)值稱為多標(biāo)簽對(duì)象。(如:一個(gè)人有woman、person、地球人等多個(gè)標(biāo)簽)
四、大神接棒:yolov4
論文地址:YOLOv4: Optimal Speed and Accuracy of Object Detection
官網(wǎng)代碼:https://github.com/AlexeyAB/darknet
核心思想:yolov4篩選了一些從yolov3發(fā)布至今,被用在各式各樣檢測(cè)器上,能夠提高檢測(cè)精度的tricks,并加以組合及適當(dāng)創(chuàng)新的算法,實(shí)現(xiàn)了速度和精度的完美平衡。雖然有許多技巧可以提高卷積神經(jīng)網(wǎng)絡(luò)CNN的準(zhǔn)確性,但是某些技巧僅適合在某些模型上運(yùn)行,或者僅在某些問(wèn)題上運(yùn)行,或者僅在小型數(shù)據(jù)集上運(yùn)行。
主要調(diào)優(yōu)手段:加權(quán)殘差連接(WRC)、跨階段部分連接(CSP)、跨小批量標(biāo)準(zhǔn)化(CmBN)、自對(duì)抗訓(xùn)練(SAT)、Mish激活、馬賽克數(shù)據(jù)增強(qiáng)、CmBN、DropBlock正則化、CIoU Loss等等。經(jīng)過(guò)一系列的堆料,終于實(shí)現(xiàn)了目前最優(yōu)的實(shí)驗(yàn)結(jié)果:43.5%的AP(在Tesla V100上,MS COCO數(shù)據(jù)集的實(shí)時(shí)速度約為65FPS)。
(4.1)性能表現(xiàn)
(4.2)網(wǎng)絡(luò)模型(CSPDarknet53)
CSPDarknet53網(wǎng)絡(luò)及在yolov4中的實(shí)際應(yīng)用。
yolov4的CSPDarknet53與yolov3的Darknet-53相比,主要區(qū)別:
- (1)將原來(lái)的Darknet53與CSPNet進(jìn)行結(jié)合,形成Backbone網(wǎng)絡(luò)。
- (2)采用SPPNet適應(yīng)不同尺寸的輸入圖像大小,且可以增大感受野;
- (3)采用SAM引入空間注意力機(jī)制;
- (4)采用PANet充分利用了特征融合;
- (5)激活函數(shù)由MIsh替換Leaky ReLU; 在yolov3中,每個(gè)卷積層之后包含一個(gè)批歸一化層和一個(gè)Leaky ReLU。而在yolov4的主干網(wǎng)絡(luò)CSPDarknet53中,使用Mish替換原來(lái)的Leaky ReLU。
CSPDarknet53網(wǎng)絡(luò)架構(gòu):
(4.2.1)跨階段部分網(wǎng)絡(luò)(Cross Stage Partial Networks,CSPNet)
背景: 2019年Chien-Yao Wang等人提出,用來(lái)解決網(wǎng)絡(luò)優(yōu)化中的重復(fù)梯度信息問(wèn)題,在ImageNet dataset和MS COCO數(shù)據(jù)集上有很好的測(cè)試效果。且易于實(shí)現(xiàn),在ResNet、ResNeXt和DenseNet網(wǎng)絡(luò)結(jié)構(gòu)上都能通用。
目的: 實(shí)現(xiàn)更豐富的梯度組合,同時(shí)減少計(jì)算量。
具體方式: 將基本層的特征圖分成兩部分:11、主干部分繼續(xù)堆疊原來(lái)的殘差塊;22、支路部分則相當(dāng)于一個(gè)殘差邊,經(jīng)過(guò)少量處理直接連接到最后。
(4.2.2)空間金字塔池化網(wǎng)絡(luò)(Spatial Pyramid Pooling Network,SPPNet)
論文地址:Spatial Pyramid Pooling in Deep Convolutional Networks for Visual Recognition
yolov1背景:yolov1訓(xùn)練時(shí)的分辨率:224×224;測(cè)試時(shí):448×448。
yolov2背景:yolov2保持yolov1的操作不變,但在原訓(xùn)練的基礎(chǔ)上又加上了(10個(gè)epoch)的448×448高分辨率樣本進(jìn)行微調(diào),使網(wǎng)絡(luò)特征逐漸適應(yīng) 448×448 的分辨率;然后再使用 448×448 的樣本進(jìn)行測(cè)試,緩解了分辨率突然切換造成的影響。
目的:使得網(wǎng)絡(luò)模型的輸入圖像不再有固定尺寸 的大小限制。通過(guò)最大池化將不同尺寸的輸入圖像變得尺寸一致。
優(yōu)點(diǎn):增大感受野。
如圖是SPP中經(jīng)典的空間金字塔池化層。
(4.2.3)空間注意力機(jī)制(Spatial Attention Module,SAM)
具體方式: yolov4采用改進(jìn)的SAM方法
優(yōu)化歷程: CBAM(Convolutional Block AM) -> SAM(Spatial Attention Module) -> 改進(jìn)的SAM
優(yōu)化原因:
(1)由于CBAM計(jì)算比較復(fù)雜且耗時(shí),而yolo的出發(fā)點(diǎn)是速度,故只計(jì)算空間位置的注意力機(jī)制。
(2)常規(guī)的SAM最大值池化層和平均池化層分別作用于輸入的feature map,得到兩組shape相同的feature map,再將結(jié)果輸入到一個(gè)卷積層。 過(guò)程過(guò)于復(fù)雜,yolo采取直接卷積進(jìn)行簡(jiǎn)化。
- CBAM與SAM的區(qū)別:
- 特征圖注意力機(jī)制(Channel Attention Module):在Channel維度上,對(duì)每一個(gè)特征圖(channel)加一個(gè)權(quán)重,然后通過(guò)sigmoid得到對(duì)應(yīng)的概率值,最后乘上輸入圖像,相當(dāng)于對(duì)輸入圖像的特征圖進(jìn)行加權(quán),即注意力。❤️
如:32×32×256,對(duì)256個(gè)通道進(jìn)行加權(quán)。- 空間注意力機(jī)制(Spatial Attention Module):在Spatial維度上,對(duì)每一個(gè)空間位置(Spatial)加一個(gè)權(quán)重,然后通過(guò)sigmoid得到對(duì)應(yīng)的概率值,最后乘上輸入圖像,相當(dāng)于對(duì)輸入圖像的所有位置特征進(jìn)行加權(quán),即注意力。❤️
如:32×32×256,對(duì)任意空間位置進(jìn)行加權(quán)。
- SAM與改進(jìn)的SAM的區(qū)別:
(4.2.4)路徑聚合網(wǎng)絡(luò)(Path Aggregation Network,PANet)
論文地址(FPNet):Feature Pyramid Networks for Object Detection
論文地址(PANet):Path Aggregation Network for Instance Segmentation
背景: PANet發(fā)表于CVPR2018,其是COCO2017實(shí)例分割比賽的冠軍,也是目標(biāo)檢測(cè)比賽的第二名。
具體方式: yolov4采用改進(jìn)的PANet方法
優(yōu)化歷程: FPNet(Feature Pyramid Networks) -> PANet(Path Aggregation Network) -> 改進(jìn)的PAN
優(yōu)化原因:
- (1)FPNet網(wǎng)絡(luò)采取自上而下的方式,將高層特征逐層與中高層、中層、中底層、低層特征進(jìn)行融合。缺點(diǎn)是無(wú)法自下而上融合,而PANet的優(yōu)化了該部分不足,詳見示意圖的(b)部分。
- (2)FANet采用特征相加的融合方式,而yolo采用特征拼接的融合方式。加法可以得到一個(gè)加強(qiáng)版的特征圖,但特征權(quán)重不大于1,而拼接可能得到大于1的特征圖。
FPNet示意圖
PANet示意圖
- (a)FPNet:通過(guò) 融合高層特征 來(lái)提升目標(biāo)檢測(cè)的效果。
- (b)Bottom-up Path Augmentation:通過(guò) 融合低層特征(邊緣形狀等)來(lái)提升目標(biāo)檢測(cè)的效果。
- (c)Adaptive Feature Pooling:采用 拼接特征融合。詳見下圖。拼接相比加法,特征更明顯,可以提高檢測(cè)效果。
- (d)Fully-connected Fusion
(4.2.5)Mish激活函數(shù)
論文地址:Mish: A Self Regularized Non-Monotonic Activation Function
Mish在負(fù)值的時(shí)候并不是完全截?cái)?#xff0c;允許比較小的負(fù)梯度流入。實(shí)驗(yàn)中,隨著層深的增加,ReLU激活函數(shù)精度迅速下降,而Mish激活函數(shù)在訓(xùn)練穩(wěn)定性、平均準(zhǔn)確率(1%-2.8%)、峰值準(zhǔn)確率(1.2% - 3.6%)等方面都有全面的提高。
22個(gè)激活函數(shù)
(4.3)改進(jìn)之處
BackBone訓(xùn)練策略:數(shù)據(jù)增強(qiáng)、自對(duì)抗訓(xùn)練、DropBlock正則化、類標(biāo)簽平滑、CIoU損失函數(shù)、DIoU-NMS等。
(4.3.1)馬賽克(Mosaic)數(shù)據(jù)增強(qiáng) + CutMix數(shù)據(jù)增強(qiáng)
CutMix論文: https://arxiv.org/pdf/1905.04899v2.pdf
最大特點(diǎn):使得yolov4只通過(guò)單CPU就能完成訓(xùn)練,不用再擔(dān)心設(shè)備問(wèn)題。
具體方式:
- 11、采用常用的數(shù)據(jù)增強(qiáng)方法(如:亮度、飽和度、對(duì)比度;隨機(jī)縮放、旋轉(zhuǎn)、翻轉(zhuǎn)等)對(duì)所有的圖像進(jìn)行數(shù)據(jù)增強(qiáng);
- 22、采用CutMix數(shù)據(jù)增強(qiáng)方法。詳細(xì)見下。
- 33、采取馬賽克(Mosaic)數(shù)據(jù)增強(qiáng)方法,即隨機(jī)取四張圖像拼接為一張圖像。
由圖可得(左):CutMix表現(xiàn)最優(yōu)。- (1)ResNet-50:采用常規(guī)的數(shù)據(jù)增強(qiáng)方法。如:調(diào)整亮度、飽和度、對(duì)比度;隨機(jī)縮放、旋轉(zhuǎn)、翻轉(zhuǎn)等。
- (2)Mixup:將貓狗兩張圖像進(jìn)行圖像融合,其中狗和貓的權(quán)重參數(shù)都為0.5,故標(biāo)簽概率值都為0.5。
- (3)Cutout:隨機(jī)刪除/遮擋一個(gè)區(qū)域。
- (4)CutMix:隨機(jī)刪除/遮擋一個(gè)區(qū)域,并用A圖像的一部分粘貼到B圖像上。 如:將狗頭替換為貓頭,其中狗和貓的權(quán)重參數(shù)分別為0.6、0.4,故標(biāo)簽softmax的概率值分別為0.6、0.4。
備注1:softmax能夠得到當(dāng)前輸入屬于各個(gè)類別的概率。
備注2:標(biāo)簽(分類結(jié)果)會(huì)根據(jù)patch的面積按比例分配,計(jì)算損失時(shí)同樣采用加權(quán)求和的方式進(jìn)行求解。
數(shù)據(jù)增強(qiáng)的其余方法擴(kuò)展:
(4.3.2)自對(duì)抗訓(xùn)練(Self-Adversarial Training,SAT)
在第一階段:在原始圖像的基礎(chǔ)上,添加噪音并設(shè)置權(quán)重閾值,讓神經(jīng)網(wǎng)絡(luò)對(duì)自身進(jìn)行對(duì)抗性攻擊訓(xùn)練。
在第二階段:用正常的方法訓(xùn)練神經(jīng)網(wǎng)絡(luò)去檢測(cè)目標(biāo)。
備注:詳細(xì)可參考對(duì)抗攻擊的快速梯度符號(hào)法(FGSM)。
(4.3.3)改進(jìn)的Dropout(DropBlock)
- b圖:Dropout是隨機(jī)刪除一些神經(jīng)元(如:a圖的紅點(diǎn)),但對(duì)于整張圖來(lái)說(shuō),效果并不明顯。比如:眼睛被刪除,我們?nèi)匀豢梢酝ㄟ^(guò)眼睛的周邊特征(眼角、眼圈等)去近似識(shí)別。
- c圖:DropBlock是隨機(jī)刪除一大塊神經(jīng)元。 如:將狗頭的左耳全部刪除。
(4.3.4)標(biāo)簽平滑(Label Smoothing)
問(wèn)題:標(biāo)簽絕對(duì)化:要么0要么1。該現(xiàn)象將導(dǎo)致神經(jīng)網(wǎng)絡(luò)在訓(xùn)練過(guò)程中,自我良好,從而過(guò)擬合。
具體方式:將絕對(duì)化標(biāo)簽進(jìn)行平滑( 如:[0,0] ~ [0.05,0.95] ),即分類結(jié)果具有一定的模糊化,使得網(wǎng)絡(luò)的抗過(guò)擬合能力增強(qiáng)。
左圖(使用前):分類結(jié)果相對(duì)不錯(cuò),但各類別之間存在一定的誤差;
右圖(使用后):分類結(jié)果比較好,簇內(nèi)距離變小,簇間距離變大。
(4.3.5)CIoU損失函數(shù)
效果:采用CIoU Loss損失函數(shù),使得預(yù)測(cè)框回歸的速度和精度更高一些。
loss優(yōu)化歷程:經(jīng)典IOU損失 -> GIOU損失(Generalized IoU) -> DIOU損失(Distance IoU) -> CIOU損失
優(yōu)缺點(diǎn):
- IoU_Loss:主要考慮檢測(cè)框和目標(biāo)框重疊面積。
- GIoU_Loss:在IOU的基礎(chǔ)上,解決邊界框不重合時(shí)的問(wèn)題。
- DIoU_Loss:在IOU和GIOU的基礎(chǔ)上,考慮邊界框中心點(diǎn)距離的信息。
- CIoU_Loss:在DIOU的基礎(chǔ)上,考慮邊界框?qū)捀弑鹊某叨刃畔ⅰ?br />
(4.3.6)DIoU-NMS
在檢測(cè)結(jié)果中,若存在多個(gè)檢測(cè)框的IOU大于置信度閾值
(1)NMS非極大值抑制:只取IoU最大值對(duì)應(yīng)的框。
(2)DIoU-NMS:只取公式計(jì)算得到的最大值對(duì)應(yīng)的框。取最高置信度的IoU,并計(jì)算最高置信度候選框(M)與其余所有框(Bi)的中心點(diǎn)距離。優(yōu)點(diǎn):在有遮擋的情況下識(shí)別效果更好。
(3)SOFT-NMS:對(duì)于不滿足要求,且與最大置信度對(duì)應(yīng)的檢測(cè)框高度重疊的檢測(cè)框,不直接刪除,而采取降低置信度的方式。優(yōu)點(diǎn):召回率更高
五、橫空出世:YOLOv5
論文下載:yolov5沒(méi)有論文
官網(wǎng)代碼:https://github.com/ultralytics/yolov5
2020年2月YOLO之父Joseph Redmon宣布退出計(jì)算機(jī)視覺研究領(lǐng)域🚀。
2020 年 4 月 23 日YOLOv4發(fā)布☘️。
2020 年 6 月 10 日YOLOv5發(fā)布🔥。
⭐(1)該兩個(gè)版本的改進(jìn)都屬于多種技術(shù)堆積版本,且兩個(gè)版本差異不大。
🌟(2)一直在更新中,且更新較快(平均2~3個(gè)月一次)。
✨(3)yolov5對(duì)應(yīng)的GitHub上有詳細(xì)的項(xiàng)目說(shuō)明。但由于v5項(xiàng)目的訓(xùn)練數(shù)據(jù)集過(guò)于龐大,故可以選擇自己的數(shù)據(jù)集 or 小樣本數(shù)據(jù)集學(xué)習(xí)。
Roboflow:開源自動(dòng)駕駛數(shù)據(jù)集。該數(shù)據(jù)集已經(jīng)畫好邊界框;下載格式:YOLO v5 PyTorch。
(5.1)性能表現(xiàn)
yolov5是在COCO數(shù)據(jù)集上預(yù)訓(xùn)練的系列模型,包含5個(gè)模型:YOLOv5n、YOLOv5s、YOLOv5m、YOLOv5l、YOLO5x。不同的變體模型使得YOLOv5能很好的在精度和速度中權(quán)衡,方便用戶選擇。
(5.2)網(wǎng)絡(luò)模型(YOLOv5s)
模塊1:CBL-CBL模塊由Conv+BN+Leaky_relu激活函數(shù)組成。
模塊2:Res unit-借鑒ResNet網(wǎng)絡(luò)中的殘差結(jié)構(gòu),用來(lái)構(gòu)建深層網(wǎng)絡(luò),CBM是殘差模塊中的子模塊。
模塊3:CSP1_X-借鑒CSPNet網(wǎng)絡(luò)結(jié)構(gòu),該模塊由CBL模塊、Res unint模塊以及卷積層、Concate組成而成。
模塊4:CSP2_X-借鑒CSPNet網(wǎng)絡(luò)結(jié)構(gòu),該模塊由卷積層和X個(gè)Res unint模塊Concate組成而成。
模塊5:Focus結(jié)構(gòu)首先將多個(gè)slice結(jié)果Concat起來(lái),然后將其送入CBL模塊中。
模塊6:SPP-采用1×1、5×5、9×9和13×13的最大池化方式,進(jìn)行多尺度特征融合。
(5.2.1)Backbone(特征提取模塊)
- (1)Backbone(骨干網(wǎng)絡(luò)):用于提取圖像特征的網(wǎng)絡(luò)。*常用不是我們自己設(shè)計(jì)的網(wǎng)絡(luò),而是通用網(wǎng)絡(luò)模型resnet、VGG等。
使用方式: 將通用模型作為backbone時(shí),直接加載預(yù)訓(xùn)練模型的參數(shù),再拼接上我們自己的網(wǎng)絡(luò)。網(wǎng)絡(luò)訓(xùn)練方法參考遷移學(xué)習(xí)的微調(diào)算法,即對(duì)預(yù)訓(xùn)練模型進(jìn)行微調(diào),使其更適合我們自己的任務(wù)。- (2)Neck(脖子):在backbone和head之間,是為了更好的利用backbone提取的特征。
- (3)Bottleneck(瓶頸):指輸出維度比輸入維度小很多,就像由身體到脖子,變細(xì)了。經(jīng)常設(shè)置的參數(shù) bottle_num=256,指的是網(wǎng)絡(luò)輸出的數(shù)據(jù)的維度是256 ,可是輸入進(jìn)來(lái)的可能是1024維度的。
- (4)Head(頭部):head是獲取網(wǎng)絡(luò)輸出內(nèi)容的網(wǎng)絡(luò),利用之前提取的特征,head利用這些特征,做出預(yù)測(cè)。
Backbone結(jié)構(gòu)主要分成三類:CNNs結(jié)構(gòu)(非輕量級(jí)、輕量級(jí))、Transformer結(jié)構(gòu)、CNNs+Transformer結(jié)構(gòu)。
深度學(xué)習(xí)框架-Backbone匯總(超詳細(xì)講解)
❤️ 一、普通(非輕量化)CNNs結(jié)構(gòu)Backbone
- LeNet5:(1998)
- AlexNet:(2012)
- VGG:(2014)
- GoogLeNet(InceptionNet)系列:Inception-v1(GoogleNet): (2015)、Inception-v2 (2015,BN-inception)、Inception-v3 (2015)、Inception-v4: (2017)、Inception-resnet-v2: (2017)
- Resnet: (2016)
- ResNet變種:ResNeXt (2016)、ResNeSt(2020)、Res2Net(2019)、DenseNet (2017)
- DPNet:(2017)
- NasNet:(2018)
- SENet及其變體SKNet:SENet(2017)、SKNet(2019)
- EfficientNet 系列:EfficientNet-V1(2019)、EfficientNet-V2(2021)
- Darknet系列:Darknet-19 (2016, YOLO v2 的 backbone)、Darknet-53 (2018, YOLOv3的 backbone)
- DLA (2018, Deep Layer Aggregation)
❤️ 二、輕量化CNNs結(jié)構(gòu)Backbone
- SqueezeNet:(2016)
- MobileNet-v1:(2017)
- XCeption:(2017, 極致的 Inception)
- MobileNet V2:(2018)
- ShuffleNet-v1:(2018)
- ShuffleNet-v2:(2018)
- MnasNet:(2019)
- MobileNet V3 (2019)
- CondenseNet(2017)
- ESPNet系列:ESPNet (2018)、ESPNetv2 (2018)
- ChannelNets
- PeleeNet
- IGC系列:IGCV1、IGCV2、IGCV3
- FBNet系列:FBNet、FBNetV2、FBNetV3
- GhostNet
- WeightNet
- MicroNet
❤️ 三、 ViT(Vision Transformer )結(jié)構(gòu)Backbone
- ViT-H/14 和 ViT-L/16 (2020)(Vision Transformer,ViT)
- Swin Transformer(2021)
- PVT(2021, Pyramid Vision Transformer)
- MPViT (CVPR 2022,Multi-path Vision Transformer, 多路徑 Vision Transformer)
- EdgeViTs (CVPR 2022,輕量級(jí)視覺Transformer)
❤️ 四、CNNs+Transformer/Attention結(jié)構(gòu)Backbone
- CoAtNet(#2 2021)
- BoTNet(#1 2021)
(5.2.1)EfficientNet
EfficientNet網(wǎng)絡(luò)詳解
(5.3)改進(jìn)之處
深入淺出Yolo系列之Yolov5核心基礎(chǔ)知識(shí)完整講解
六、曇花一現(xiàn):YOLOv6
手把手教你運(yùn)行YOLOv6(超詳細(xì))
yolov6與v7相差不到十天,區(qū)別不大。
七、誰(shuí)與爭(zhēng)鋒:YOLOv7
論文下載:YOLOv7: Trainable bag-of-freebies sets new state-of-the-art for real-time object
detectors
代碼地址:https://gitcode.net/mirrors/WongKinYiu/yolov7
在項(xiàng)目實(shí)戰(zhàn)中,只研究yolov5或yolov7對(duì)應(yīng)的項(xiàng)目即可,yolov3不要再研究了。因?yàn)楝F(xiàn)在的torch版本是高版本,而v3當(dāng)時(shí)是低版本。
(7.1)性能表現(xiàn)
(7.2)網(wǎng)絡(luò)模型
(7.3)改進(jìn)之處
(7.3.1)RepVGG(最大改進(jìn))
- 2014年:牛津大學(xué)著名研究組VGG (Visual Geometry Group), 提出VGGNet。
- 2021年:清華大學(xué)、曠視科技以及香港科技大學(xué)等機(jī)構(gòu),基于VGG網(wǎng)絡(luò)提出了RepVGG網(wǎng)絡(luò)。
由圖可得:RepVGG無(wú)論是在精度還是速度上都已經(jīng)超過(guò)了ResNet、EffcientNet以及ResNeXt等網(wǎng)絡(luò)。
(7.3.1.1)結(jié)構(gòu)重參數(shù)化
RepVGG采用結(jié)構(gòu)重參數(shù)化方法(structural re-parameterization technique)。
詳細(xì)過(guò)程:
- (1)在訓(xùn)練時(shí),使用ResNet-style的多分支模型(特點(diǎn):增加模型的表征能力);
- (2)在測(cè)試時(shí),轉(zhuǎn)化成VGG-style的單線路模型(特點(diǎn):速度更快、更省內(nèi)存并且更加的靈活。)。
過(guò)程特點(diǎn):訓(xùn)練的網(wǎng)絡(luò)結(jié)構(gòu)和測(cè)試的網(wǎng)絡(luò)結(jié)構(gòu)可以不一樣。
核心操作:在測(cè)試時(shí),將訓(xùn)練時(shí)的多分支模型進(jìn)行合并得到一條單線路模型,即將1 x 1卷積 + BN(批標(biāo)準(zhǔn)化)與3 x 3卷積進(jìn)行合并。詳見下圖。RepVGG網(wǎng)絡(luò):結(jié)構(gòu)重參數(shù)化 - 詳細(xì)過(guò)程
- (1)將1x1卷積轉(zhuǎn)換成3x3卷積
- (2)將BN和3x3卷積進(jìn)行融合,轉(zhuǎn)換成3x3卷積
- (3)多分支融合
備注1:yolo的核心是檢測(cè)速度快,而不是檢測(cè)精度高。
備注2:在前六個(gè)版本的優(yōu)化后,網(wǎng)絡(luò)層只留下了3 x 3卷積、1 x 1卷積和BN(每一個(gè)網(wǎng)絡(luò)層之后都進(jìn)行批標(biāo)準(zhǔn)化)。
備注3:VGG在2014年告訴我們,3 x 3卷積是計(jì)算速度最快的,優(yōu)化最好的。
備注4:黃色模塊是激活函數(shù)ReLU,藍(lán)色模塊是卷積層。
備注5:單支路模型可以節(jié)約內(nèi)存。
(7.3.1.2)將1x1卷積轉(zhuǎn)換成3x3卷積
具體過(guò)程:
(1)取1x1卷積(卷積核:1個(gè)參數(shù)),設(shè)置padding=1(即在其周圍填補(bǔ)一圈全為零的元素)
(2)設(shè)置原始輸入的padding=1
(3)輸入與卷積核進(jìn)行卷積操作,得到3x3的卷積層。。
注意:原始輸入和1x1卷積都需要設(shè)置padding=1。
(7.3.1.3)將BN和3x3卷積進(jìn)行融合,轉(zhuǎn)換成3x3卷積
通俗來(lái)講:將BN公式拆解為 一元二次方程(y1 = k1* x1 + b1);然后與損失函數(shù)(y2 = k2* x2 + b2)進(jìn)行合并得到新的方程(y3 = k3* x3 + b3)。
(7.3.1.4)多分支融合
具體過(guò)程:(1)將1x1卷積 + BN全部轉(zhuǎn)換為3x3卷積,然后與3x3卷積進(jìn)行合并,得到一個(gè)3x3卷積。
(7.3.2)正樣本分配策略
主要目的:為了得到更多的正樣本。正樣本即先驗(yàn)框(anchor),負(fù)樣本即背景。
具體計(jì)算過(guò)程分兩個(gè)步驟:(1)提取anchor;(2)篩選anchor。
具體過(guò)程(提取anchor):
- (1)計(jì)算先驗(yàn)框的中心點(diǎn)位置
- (2)在當(dāng)前網(wǎng)格中進(jìn)行上、下、左、右四個(gè)方向的位置偏移,偏移大小為0.5。
- (3)最后取當(dāng)前網(wǎng)格 + 四個(gè)方向的中心點(diǎn)所對(duì)應(yīng)的除當(dāng)前網(wǎng)格的二個(gè)網(wǎng)格。共三個(gè)網(wǎng)格作為正樣本
具體過(guò)程(篩選anchor):
提取滿足要求的anchor,去掉匹配度低的anchor(該類anchor無(wú)意義)。
- 條件一:候選框和先驗(yàn)框(anchor)的長(zhǎng)款比范圍:[0.25,4] 。
- 條件二: 候選框和先驗(yàn)框(anchor)的IOU要大于自定義閾值。
- 條件三: 候選框和先驗(yàn)框(anchor)的類別預(yù)測(cè)損失要大于自定義閾值。
- 條件四: 將以上三個(gè)條件進(jìn)行權(quán)重相加,并進(jìn)行損失排名。 loss = (權(quán)重系數(shù)1 * 條件一) + (權(quán)重系數(shù)2 * 條件二) + (權(quán)重系數(shù)3 * 條件三)
舉例:以下是具體過(guò)程(篩選anchor)中,條件二的損失計(jì)算。
- 備注1:計(jì)算真實(shí)框(Ground Truth,GT) 對(duì)應(yīng)的候選框數(shù)量(損失計(jì)算得到的結(jié)果):向下取整。
- 備注2:若一個(gè)候選框同時(shí)和多個(gè)anchor高度匹配,則按照損失計(jì)算原則,只能匹配損失最小對(duì)應(yīng)的一個(gè)anchor。
(7.3.3)相對(duì)偏移量計(jì)算(yolov5/v7版)
(7.3.4)輔助頭(auxiliary head)+主頭(lead head)
詳細(xì)說(shuō)明請(qǐng)看論文
圖5:輔助用粗,頭部用細(xì)。與常規(guī)模型(a)相比,(b)模式具有輔助頭。與通常的獨(dú)立標(biāo)簽分配器?不同,我們提出(d)鉛頭引導(dǎo)標(biāo)簽分配器和(e)粗至細(xì)鉛頭引導(dǎo)標(biāo)簽分配器。該標(biāo)簽分配器通過(guò)前導(dǎo)頭預(yù)測(cè)和地面真實(shí)值進(jìn)行優(yōu)化,同時(shí)得到訓(xùn)練前導(dǎo)頭和輔助頭的標(biāo)簽。詳細(xì)的從粗到細(xì)的實(shí)現(xiàn)方法和約束設(shè)計(jì)細(xì)節(jié)將在附錄中詳細(xì)闡述。
參考文獻(xiàn)
1.YOLO學(xué)習(xí):召回率Recall、精確率Precision、IoU、Map
2.YOLOv1到Y(jié)OLOv3的演變過(guò)程及每個(gè)算法詳解
3.YOLO系列總結(jié):YOLOv1, YOLOv2, YOLOv3, YOLOv4, YOLOv5, YOLOX
4.YOLO系列詳解:YOLOv1、YOLOv2、YOLOv3、YOLOv4、YOLOv5
5.YOLO系列算法精講:從yolov1至yolov5的進(jìn)階之路(2萬(wàn)字超全整理)
6.深入淺出Yolo系列:Yolov3、Yolov4、Yolov5、YoloX(超多-免費(fèi)數(shù)據(jù)集)
7.深度學(xué)習(xí)框架-Backbone匯總(超詳細(xì)講解)
8.深入淺出Yolo系列之Yolov5核心基礎(chǔ)知識(shí)完整講解
9.YOLOv7 RepVGG網(wǎng)絡(luò):結(jié)構(gòu)重參數(shù)化 - 詳細(xì)過(guò)程
10.目標(biāo)檢測(cè)算法——YOLOV7——詳解
實(shí)戰(zhàn)一:目標(biāo)檢測(cè):教你利用yolov5訓(xùn)練自己的目標(biāo)檢測(cè)模型
實(shí)戰(zhàn)二:認(rèn)真總結(jié)6000字Yolov5保姆級(jí)教程(2022.06.28全新版本v6.1)
實(shí)戰(zhàn)三:利用yolov5實(shí)現(xiàn)口罩佩戴檢測(cè)算法(非常詳細(xì))
實(shí)戰(zhàn)四:YOLOv7(目標(biāo)檢測(cè))入門教程詳解—檢測(cè),推理,訓(xùn)練
❤️ roboflow官網(wǎng):開源自動(dòng)駕駛數(shù)據(jù)集(Computer Vision Datasets)❤️
總結(jié)
以上是生活随笔為你收集整理的三万字硬核详解:yolov1、yolov2、yolov3、yolov4、yolov5、yolov7的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 《重构-改善既有代码的设计》学习笔记(一
- 下一篇: 电脑上usb无法识别usb设备(电脑上无