日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

三万字硬核详解:yolov1、yolov2、yolov3、yolov4、yolov5、yolov7

發布時間:2023/12/2 综合教程 36 生活家
生活随笔 收集整理的這篇文章主要介紹了 三万字硬核详解: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

  1. LeNet5:(1998)
  2. AlexNet:(2012)
  3. VGG:(2014)
  4. GoogLeNet(InceptionNet)系列:Inception-v1(GoogleNet): (2015)、Inception-v2 (2015,BN-inception)、Inception-v3 (2015)、Inception-v4: (2017)、Inception-resnet-v2: (2017)
  5. Resnet: (2016)
  6. ResNet變種:ResNeXt (2016)、ResNeSt(2020)、Res2Net(2019)、DenseNet (2017)
  7. DPNet:(2017)
  8. NasNet:(2018)
  9. SENet及其變體SKNet:SENet(2017)、SKNet(2019)
  10. EfficientNet 系列:EfficientNet-V1(2019)、EfficientNet-V2(2021)
  11. Darknet系列:Darknet-19 (2016, YOLO v2 的 backbone)、Darknet-53 (2018, YOLOv3的 backbone)
  12. DLA (2018, Deep Layer Aggregation)

❤️ 二、輕量化CNNs結構Backbone

  1. SqueezeNet:(2016)
  2. MobileNet-v1:(2017)
  3. XCeption:(2017, 極致的 Inception)
  4. MobileNet V2:(2018)
  5. ShuffleNet-v1:(2018)
  6. ShuffleNet-v2:(2018)
  7. MnasNet:(2019)
  8. MobileNet V3 (2019)
  9. CondenseNet(2017)
  10. ESPNet系列:ESPNet (2018)、ESPNetv2 (2018)
  11. ChannelNets
  12. PeleeNet
  13. IGC系列:IGCV1、IGCV2、IGCV3
  14. FBNet系列:FBNet、FBNetV2、FBNetV3
  15. GhostNet
  16. WeightNet
  17. MicroNet

❤️ 三、 ViT(Vision Transformer )結構Backbone

  1. ViT-H/14 和 ViT-L/16 (2020)(Vision Transformer,ViT)
  2. Swin Transformer(2021)
  3. PVT(2021, Pyramid Vision Transformer)
  4. MPViT (CVPR 2022,Multi-path Vision Transformer, 多路徑 Vision Transformer)
  5. EdgeViTs (CVPR 2022,輕量級視覺Transformer)

❤️ 四、CNNs+Transformer/Attention結構Backbone

  1. CoAtNet(#2 2021)
  2. 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的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。