天天看點

yolo 系列筆記1.yolo曆史2.改進過程

1.yolo曆史

  • YOLOv1:2015年Joseph Redmon和 Ali Farhadi等 人(華盛頓大學)
  • YOLOv2:2016年Joseph Redmon和**Ali Farhadi等人*(華盛頓大學)*
  • YOLOv3:2018年Joseph Redmon和**Ali Farhadi等人*(華盛頓大學)*
  • YOLOv4:2020年Alexey Bochkovskiy和Chien-Yao Wang等人
  • YOLOv5:2020年Ultralytics公司
  • YOLOv6:2022年美團公司
  • YOLOv7:2022年Alexey Bochkovskiy和Chien-Yao Wang等人
  • YOLOv8:2023年Ultralytics公司

2.改進過程

2.1 yolov3

yolo 系列筆記1.yolo曆史2.改進過程
yolov3 改進
backbone darknet-19改進為darknet-53
多尺度預測
yolo 系列筆記1.yolo曆史2.改進過程
參考:目标檢測算法——YOLOv3_Clichong的部落格-CSDN部落格_yolov3算法

2.2 yolov4

yolo 系列筆記1.yolo曆史2.改進過程
yolov4
Backbone CSPDarknet53
Neck SPP, PAN
Head yolov3

Cross Stage Partial(CSP)結構,其初衷是減少計算量并且增強梯度的表現。主要思想是:在輸入block之前,将輸入分為兩個部分,其中一部分通過block進行計算,另一部分直接通過一個shortcut進行concatenate。(實際很多地方直接用1×1卷積調整通道,而不是均分)

參考:

YOLOv4網絡詳解_yolov4網絡結構圖_太陽花的小綠豆的部落格-CSDN部落格

【目标檢測】YOLOv4特征提取網絡——CSPDarkNet結構解析及PyTorch實作_Cai Yichao的部落格-CSDN部落格_yolov4中的csp

2.3 yolov5

yolo 系列筆記1.yolo曆史2.改進過程
yolov5
Backbone New CSP-Darknet53
Neck SPPF, New CSP-PAN
Head yolov3
loss 函數

分類: BEC Loss

回歸: CIoU Loss

  • 通過對比可以發現,兩者的計算結果是一模一樣的,但SPPF比SPP計算速度快了不止兩倍,快樂翻倍。
  • 在Neck部分另外一個不同點就是New CSP-PAN了,在YOLOv4中,Neck的PAN結構是沒有引入CSP結構的,但在YOLOv5中作者在PAN結構中加入了CSP。詳情見上面的網絡結構圖,每個C3子產品裡都含有CSP結構。在Head部分,YOLOv3, v4, v5都是一樣的。
參考:YOLOv5網絡詳解_yolov5網絡結構詳解_太陽花的小綠豆的部落格-CSDN部落格

2.4 yolov6

yolo 系列筆記1.yolo曆史2.改進過程
yolov6
Backbone RepVGG Block, RepBlock
Neck RepBlock
Head YOLOX改進
Anchor Anchor-Free
  • 不難發現,Block中都由“Rep”的字樣,這也是YOLO_v6的重點——RepVGG style結構。
  • RepPANNeck: 其實就是将CSP-PAN中的CSP子產品換成了Rep子產品,形成了Rep-PAN罷了,這裡不作贅述。
  • Head: 原始 YOLOv5 的檢測頭是通過分類和回歸分支融合共享的方式來實作的,而 YOLOX 的檢測頭則是将分類和回歸分支進行解耦,同時新增了兩個額外的 3x3 的卷積層,雖然提升了檢測精度,但一定程度上增加了網絡延時。

        YOLOv5/YOLOX 使用的 Backbone 和 Neck 都基于 CSPNet 搭建,采用了多分支的方式和殘差結構。對于 GPU 等硬體來說,這種結構會一定程度上增加延時,同時減小記憶體帶寬使用率。是以,YOLOv6對Backbone 和 Neck 都進行了重新設計,Head層沿用了YOLO_x中的Decoupled Head并稍作修改。相當于YOLO_v5而言,v6對網絡模型結構進行了大量的更改。

        除了網絡結構上的改進,作者還對訓練政策進行了改進,應用了Anchor-free 無錨範式、SimOTA标簽配置設定政策、SIOU邊界框回歸損失。

        整個head借鑒了yolox中的解耦頭設計,并對其做了改進,head流程如下:從neck層輸出三個分支,對于每個分支,先對輸出fm通過BConv層,做fm的特征融合後,分成兩個分支一個分支通過BConv+Conv完成分類任務的預測,另外一個分支先通過BConv融合特征後再分成兩個分支,一個分支通過Conv完成邊框的回歸,一個分支通過Conv完成前後背景的分類,至此三個分支再通過concate在channel層上融合,輸出未經後處理的預測結果。

參考:YOLO_v6講解_yolov6_江南綿雨的部落格-CSDN部落格

2.5 yolov7

yolo 系列筆記1.yolo曆史2.改進過程

        整體上和YOLOV5是相似的,主要是網絡結構的内部元件的更換(涉及一些新的sota的設計思想)、輔助訓練頭、标簽配置設定思想等。

yolov7
Backbone

ELAN結構

MP 結構

Neck

SPPCSPC結構,

MP 結構(和backbone參數不同)

Rep結構

Head 類似yolov5 (anchor based )
Anchor Anchor-Base
  •  ELAN:在不破壞原有梯度路徑的情況下不斷增強網絡學習能力的能力。(看着就是從CSP結構過來的)
  • MP:之前下采樣我們通常最開始使用maxpooling,之後大家又都選用stride = 2的3*3卷積。這裡作者同時使用了max pooling 和 stride=2的conv。  需要注意backbone中的MP前後通道數是不變的。
  • SPPCSPC結構:從圖上可以看出來,還是在yolov4的SPP結構(五九十三結構)上優化的。
  • Rep: 寬度。
參考:目标檢測算法——YOLOV7——詳解_TigerZ*的部落格-CSDN部落格_yolov7

2.6 yolov8

這裡有兩個結構圖:

yolo 系列筆記1.yolo曆史2.改進過程
yolo 系列筆記1.yolo曆史2.改進過程
yolov8
Backbone C3 換成 C2f
Neck PAN-FPN
Head Decoupled-Head
Anchor Anchor-Free
loss 函數

分類損失:VFL Loss

回歸損失:   DFL Loss+CIOU Loss

樣本比對 IOU比對 換成 Task-Aligned Assigner比對
  • C2f子產品:參考了C3子產品以及ELAN的思想進行的設計,讓YOLOv8可以在保證輕量化的同時獲得更加豐富的梯度流資訊。(第一個圖中C2f結構更加直覺)
  • PAN-FPN: 相對于YOLOv5,YOLOv8将C3子產品以及RepBlock替換為了C2f,同時細心可以發現,相對于YOLOv5,YOLOv8選擇将上采樣之前的1×1卷積去除了,将Backbone不同階段輸出的特征直接送入了上采樣操作。

參考:YOLO v8詳解_櫻花的浪漫的部落格-CSDN部落格

(17)目标檢測算法之 YOLOv8 算法改進詳細解析_明月醉窗台的部落格-CSDN部落格

其他yolo模型後續再添加!

繼續閱讀