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

yolov3 改進 | |
backbone | darknet-19改進為darknet-53 |
多尺度預測 | |
參考:目标檢測算法——YOLOv3_Clichong的部落格-CSDN部落格_yolov3算法
2.2 yolov4
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
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
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
整體上和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
這裡有兩個結構圖:
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模型後續再添加!