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