YOLO演變史(一)

在YOLOV1發布后,作者并沒有滿足于此,而是持續對YOLO進行了改進。

YOLOV2:Better, Faster, Stronger

YOLOv2(又稱YOLO9000)發表于2017年CVPR,是YOLO系列的第二代版本。其論文標題“Better, Faster, Stronger”直觀體現了其三大改進目標:更高的精度、更快的速度和更強的能力。YOLOv2在mAP(平均精度)上達到了當時最高水平,同時速度遠超前代,成為實時目標檢測領域的標桿。

Better部分:精度提升的改進

1.引入BN層(Batch Normalization Layer)
作用:
BN層對每一層的輸入進行歸一化處理,通過規范化每批數據的均值和方差(均值為0,方差為1),加速訓練收斂并減少過擬合。
具體操作:
對輸入 xxx 計算 x^=x?μσ2+?\hat{x} = \frac{x - \mu}{\sqrt{\sigma^2 + \epsilon}}x^=σ2+??x?μ?,再通過可學習的參數 γ\gammaγβ\betaβ 進行縮放和偏移。

作者在卷積層后加入BN層,使訓練過程更穩定,收斂速度更快。同時,BN層減少了對Dropout等正則化技術的依賴,作者甚至在YOLOv2中移除了Dropout層。
BN層的引入降低了對參數初始化的敏感性,允許使用更高的學習率。提供輕微正則化效果,提升模型泛化能力。
簡單來說,BN層就像一個“調音師”,讓網絡各層輸出更“和諧”,訓練更穩、更快。

2.更高分辨率的分辨器
改進:
YOLOv1使用448×448的輸入分辨率,而YOLOv2調整為416×416(適配特征圖網格劃分),并在訓練時使用更高分辨率的圖像。更高的分辨率使網絡能捕捉更細致的特征,尤其提升了對小目標的檢測能力。
“分辨器”在這里指網絡的輸入分辨率,訓練時的高分辨率輸入增強了模型的細節感知能力。推理時,圖像會被resize到416×416,平衡精度與速度。高分辨率就像“高清相機”,讓網絡“看得更清楚”,對小物體更加敏感。

3.基于Anchor的目標邊界框預測

由于YOLOv1直接回歸邊界框坐標,學習難度大,尤其當目標形狀多樣時效果不佳。因此為了改進,YOLOv2引入了Anchor Boxes(錨框),預定義一組固定形狀的框,網絡只需預測這些框的偏移量(offset)和置信度。這種方式將復雜的邊界框預測簡化為對預定義框的“微調”,降低了學習難度。
采用Anchor后,召回率(recall)從YOLOv1的81%提升到88%,顯著提高了檢測能力。就像“模板”,網絡只需調整模板形狀,預測更準、更快。

4.使用聚類方法選擇Anchor
傳統方法(如Faster R-CNN)手動設計Anchor Boxes,可能不適配特定數據集的目標形狀。YOLOv2使用K-means聚類對訓練集中的真實邊界框進行分析,自動選擇最優的Anchor Boxes形狀。
聚類目標:使Anchor與真實框的IOU(交并比)最大化。
距離度量:自定義距離公式:d=1?IOU(box,centroid)d = 1 - \text{IOU}(box, centroid)d=1?IOU(box,centroid),IOU越大,距離越小,表示Anchor與真實框越匹配。
K-means聚類就像“量身定制”,根據數據集自動挑選最合適的“模板框”,提升預測精度。
5.細粒度特征與Passthrough層
深層特征圖分辨率低,適合檢測大目標;淺層特征圖分辨率高,適合小目標。YOLOv2引入Passthrough層,將高分辨率的淺層特征圖與低分辨率的深層特征圖連接,進行特征融合。類似于ResNet中的shortcut連接,Passthrough層以前面高分辨率特征圖為輸入,連接到后面的低分辨率特征圖上。增強了對小目標的檢測能力,提升了模型的多尺度適應性。
Passthrough層就像“望遠鏡 + 顯微鏡”,融合粗細特征,讓網絡“大處著眼,小處著手”。

YOLOV3:集大成者

YOLOV3發布于2018年,相比YOLOv2 的基礎上進行了多項改進,顯著提升了目標檢測的準確性和靈活性,同時保持了實時性。

YOLOv3 在 YOLOv2 的基礎上引入了以下關鍵改進:
1.特征提取器升級:Darknet-53
YOLOv2 使用 Darknet-19 作為骨干網絡,而 YOLOv3 升級為更強大的 Darknet-53,包含 53 個卷積層,特征提取能力更強。
此外,作者還提供了輕量級版本 Tiny-Darknet,適用于資源受限的設備。
Darknet-53 是 YOLOv3 的骨干網絡,由 53 個卷積層組成。其基本構建單元稱為 DBL(Darknet Basic Layer),包括:

  • 卷積層:1×1 和 3×3 卷積交替使用,1×1 卷積用于降維,3×3 卷積用于特征提取。
  • 批量歸一化(BN)層:在每個卷積層后加入 BN層,規范化特征,防止過擬合。
  • Leaky ReLU 激活函數:緩解梯度消失問題,提升非線性表達能力。
    與darknet-19相比,做出了如下改進:首先,darknet-53摒棄了最大池化層,改用步長為2的卷積層進行下采樣,來保留更多空間信息。其次,引入了殘差網絡的思想,通過跳躍連接加深網絡層次,提取更深層特征,同時避免梯度消失或爆炸。
    2.多尺度檢測:特征金字塔網絡(FPN)
    YOLOv3 借鑒了特征金字塔網絡(FPN)的思想,通過多尺度特征融合實現對不同大小目標的檢測(通過上采樣和張量拼接,將淺層高分辨率特征與深層低分辨率特征融合)。
    網絡輸出三個不同尺度的特征圖(Y1、Y2、Y3),對應三種層的特征圖,分別用于檢測大、中、小目標。

3.多標簽分類:邏輯回歸替代 Softmax
YOLOv2 使用 Softmax 假設目標只屬于一個類別(單標簽分類)。YOLOv3 改用邏輯分類器(Sigmoid),對每個類別獨立進行二分類,支持多標簽分類。實現方式:每個類別的輸出經過 Sigmoid 函數映射到 [0, 1]。如果輸出值大于閾值(例如 0.5),則認為目標屬于該類別。
在復雜場景中(如交通場景),目標可能同時屬于多個類別(例如“汽車”和“卡車”),多標簽分類更靈活。

4.損失函數優化
位置損失仍采用平方和誤差(Sum-Square Error),而置信度和類別預測改為交叉熵損失(Cross-Entropy Loss),提升分類性能,更適合判斷是否有目標的二分類問題。

這些改進使得 YOLOv3 在性能上顯著優于前代,成為目標檢測領域的里程碑。從 YOLOv1 到 YOLOv3,每一代的性能提升都離不開骨干網絡的改進。YOLOv3 在保持實時性的同時兼顧高精度,使其廣泛應用于目標檢測任務。

YOLOV4:命運多舛

2020年,YOLO系列的作者Redmon在推特上發表聲明,出于道德方面的考慮,從此退出CV界。在疫情的原因加持下,本以為YOLO就此完結,然而Alexey Bochkovskiy等人與Redmon取得聯系,正式將他們的研究命名為YOLOv4。

YOLOv4 集成了多種深度學習技巧,這些“Tricks”包括網絡架構優化、數據增強和損失函數改進等,旨在提升檢測速度和精度的平衡。
1.網絡架構優化

  • WRC(Weighted-Residual-Connections,重權殘差連接):
    研究表明,WRC 通過加權殘差連接,強調網絡中某些特征的傳遞,可能提升特征提取能力。
    適用范圍廣,適合大多數模型和任務。
  • CSP(Cross-Stage-Partial-connections,跨階段部分連接):
    CSP 是 YOLOv4 骨干網絡 CSPDarknet53 的核心設計,通過部分連接不同網絡階段,減少計算量并提升特征流。
    具體實現:將特征圖分成兩部分,一部分直接傳遞,另一部分經過卷積處理后融合。
  • CmBN(Cross mini-Batch Normalization,跨小批量歸一化):
    CmBN 是一種批量歸一化變體,允許在單 GPU 上高效訓練,適合資源受限的場景。
    與傳統 BN 相比,CmBN 在小批量訓練中更穩定。

2.訓練優化

  • SAT(Self-adversarial-training,自我對抗訓練):
    SAT 通過生成對抗樣本并在訓練中加入,增強模型對噪聲和擾動的魯棒性。
    研究顯示,SAT 幫助模型泛化到新特征,提升檢測性能。
  • Mish 激活函數:
    Mish 激活函數公式為 Mish(x)=x?tanh?(softplus(x))\text{Mish}(x) = x \cdot \tanh(\text{softplus}(x))Mish(x)=x?tanh(softplus(x)),平滑且無上界。
    相比 ReLU,Mish 可能提升網絡深度表達能力,實驗表明在 YOLOv4 中表現優于傳統激活函數。
  • Mosaic 數據增強:
    Mosaic 數據增強將四張圖像隨機裁剪并拼接成一張,模擬復雜場景。
    增加訓練樣本多樣性,特別適合檢測小目標或密集場景。
  • DropBlock 正則化:
    DropBlock 是 Dropout 的擴展,在特征圖上隨機丟棄連續區域,強制網絡學習更魯棒的特征。
    例如,隱藏圖像部分(如狗的頭部),迫使網絡依賴其他特征。

3.損失函數改進

  • CIoU 損失(Complete Intersection over Union Loss):
    CIoU 損失公式為 LCIoU=1?IoU+d2C2+αvL_{CIoU} = 1 - \text{IoU} + \frac{d^2}{C^2} + \alpha vLCIoU?=1?IoU+C2d2?+αv,其中:
    ddd 是預測框和真實框中心距離。
    CCC 是最小外接框對角線長度。
    v=4π2(arctan?wgthgt?arctan?wh)2v = \frac{4}{\pi^2} \left( \arctan \frac{w^{gt}}{h^{gt}} - \arctan \frac{w}{h} \right)^2v=π24?(arctanhgtwgt??arctanhw?)2 考慮長寬比。
    α=v(1?IoU)+v\alpha = \frac{v}{(1 - \text{IoU}) + v}α=(1?IoU)+vv? 為權衡參數。

相比 IoU 損失,CIoU 考慮了框中心距離和長寬比,加速收斂并提升定位精度。
YOLOV4的其他具體改進:
1.多 Anchor 負責單個 GT
YOLOv3 中,一個 Anchor 只負責一個 Ground Truth(GT),可能導致正負樣本不均衡。YOLOv4 允許多個 Anchor 負責同一個 GT,只要 IoU(anchori,GTj)>threshold\text{IoU}(\text{anchor}_i, \text{GT}_j) > \text{threshold}IoU(anchori?,GTj?)>threshold。Anchor 數量不變,但正樣本比例增加,緩解了正負樣本不均衡問題,提升召回率。就像多個“模板框”可以同時匹配一個目標,增加訓練數據的多樣性。

2.邊界框預測公式改進
YOLOv2 和 v3 中,bx,byb_x, b_ybx?,by? 使用 Sigmoid 函數,輸出范圍為 (0, 1),無法預測到邊界。
YOLOv4 修改公式為:
bx=1.1?σ(tx)+cxb_x = 1.1 \cdot \sigma(t_x) + c_xbx?=1.1?σ(tx?)+cx?
by=1.1?σ(ty)+cyb_y = 1.1 \cdot \sigma(t_y) + c_yby?=1.1?σ(ty?)+cy?

其中 σ(tx)\sigma(t_x)σ(tx?) 是 Sigmoid 函數輸出,乘以 1.1 擴展范圍,允許預測框覆蓋整個網格。這樣提升了邊界框預測的靈活性,特別適合邊界目標。

3.損失函數的改進歷程
YOLOv1中使用的是 MSE 損失(平方和誤差)計算邊界框回歸,簡單但不直接優化 IoU。后來引入 IoU 損失,直接優化重疊度,但當框無重疊時,IoU 為 0,無梯度回傳。
GIoU 損失(Generalized IoU)考慮最小外接框,解決無重疊問題。
DIoU 損失(Distance IoU)進一步加入框中心距離,加速收斂。
CIoU 損失在 DIoU 基礎上加入長寬比一致性,綜合考慮幾何因素。
YOLOv4 的選擇是采用 CIoU 損失,實驗表明其在 COCO 數據集上表現優于 GIoU 和 DIoU。
在解決 IoU 損失的梯度消失問題的同時考慮框中心距離,加速訓練收斂。加入長寬比項,提升定位精度。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/91747.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/91747.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/91747.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

專題:2025智能體研究報告|附70份報告PDF、原數據表匯總下載

原文鏈接:https://tecdat.cn/?p43035 智能體正在改寫商業規則:某城商行的智能客服用公有云部署,把單筆交互成本從5.7元砍到1.2元,投訴率直降42%(《賽迪智庫:2025全球智能體進展報告》P24)&…

Axios 完整功能介紹和完整示例演示

Axios 是一個基于 Promise 的現代化 HTTP 客戶端庫,用于瀏覽器和 Node.js 環境。它提供了簡潔的 API 和強大的功能,是前端開發中最常用的網絡請求工具之一。核心功能 瀏覽器 & Node.js 雙平臺支持 瀏覽器中使用 XMLHttpRequestNode.js 中使用 http 模…

math.h函數

math.c函數作用 1. 基本三角函數(參數為弧度) sin(double x):計算正弦值。cos(double x):計算余弦值。tan(double x):計算正切值。asin(double x):反正弦(返回值范圍:[-π/2, π/2]&…

在Next.js里玩轉pdf預覽

1.背景在項目開發中,pdf預覽是一個很常見的業務。各大公司為了保護自己的知識產權,也會對pdf預覽進行限制,比如:不允許下載、打印,不允許提取文字等等。要想在實現預覽功能的基礎上還要附加這些限制,有很多…

算法競賽備賽——【圖論】求最短路徑——Floyd算法

floyd算法 基于動態規劃 應用:求多源最短路 時間復雜度:n^3 dijkstra:不能解決負邊權 floyd:能解決負邊權 不能解決負邊權回路問題 求最短路徑:dijkstra bfs floyd 思路 1.讓任意兩點之間的距離變短:引入…

雙指針(滑動窗口)相關算法題

雙指針算法有時候也叫尺取法或者滑動窗口,是?種優化暴力枚舉策略的手段:當我們發現在兩層 for 循環的暴力枚舉過程中,兩個指針是可以不回退的,此時我們就可以利用兩個指針不回退的性質來優化時間復雜度。因為雙指針算法中&#x…

ScratchCard刮刮卡交互元素的實現

效果展示 刮刮卡是?種常見的網頁交互元素,通過模擬物理世界的刮涂層來揭示下方的內容。這種效果主要依賴于HTML5的 元素來實現。以下是?個基于TypeScript的刮刮卡實現示例,包括配置項、初始化方法和核心的刮開邏輯。下面是展示的效果部分刮開效果&…

【Python LeetCode 專題】熱題 100,重在思路

哈希1. 兩數之和49. 字母異位詞分組128. 最長連續序列雙指針283. 移動零11. 盛最多水的容器15. 三數之和42. 接雨水滑動窗口3. 無重復字符的最長子串438. 找到字符串中所有字母異位詞子串560. 和為 K 的子數組239. 滑動窗口最大值普通數組53. 最大子數組和56. 合并區間189. 輪轉…

openEuler 22.03 LTS Rootless Docker 安裝指南

openEuler 22.03 LTS Rootless Docker 安裝指南 1.創建普通用戶(用于無根模式) sudo useradd -m docker-user sudo passwd docker-user # 設置密碼 sudo usermod --add-subuids 100000-165535 docker-user sudo usermod --add-subgids 100000-165535 do…

CMake指令:常見內置命令行工具( CMake -E )

目錄 1.簡介 2.核心作用 3.常用命令介紹 3.1.文件操作命令 3.2.系統命令執行 3.3.校驗與哈希 3.4.流程控制與等待 3.5.路徑與文件處理 3.6.歸檔與壓縮 3.7.網絡與下載 3.8.實用工具 4.使用示例 5.與 shell 命令的對比 6.在 CMake 腳本中使用 7.總結 相關鏈接 1…

YOLO融合CAF-YOLO中的ACFM模塊

YOLOv11v10v8使用教程: YOLOv11入門到入土使用教程 YOLOv11改進匯總貼:YOLOv11及自研模型更新匯總 《CAF-YOLO: A Robust Framework for Multi-Scale Lesion Detection in Biomedical Imagery》 一、 模塊介紹 論文鏈接:https://arxiv.org…

Webpack 項目構建優化詳解

1. 相關面試題 1.1. 做過哪些Webpack打包構建優化? 代碼分割:使用 Webpack 的 SplitChunksPlugin 進行代碼分割,將第三方庫、公共代碼與業務代碼分離,提高緩存利用率和加載速度。 Tree Shaking:通過配置 mode: production 或使用 TerserPlugin,移除未引用的代碼,減少…

【深度學習基礎】張量與Tensor的區別?從標量到深度學習的多維世界

目錄引言一、張量(Tensor)的定義與特性1. 數學中的張量2. 深度學習中的Tensor二、標量(Scalar)是什么?三、深度學習中的其他核心量1. 向量(Vector)2. 矩陣(Matrix)3. 高階…

設計模式一: 模板方法模式 (Template Method Pattern)

模板方法模式是一種行為設計模式,它通過定義一個算法的骨架,而將一些步驟延遲到子類中實現。Template Method 使得子類可以不改變(復用)一個算法結構 即可重定義(override 重寫)該算法的某些特定步驟。基本…

Linux驅動學習day24(UART子系統)

一、UART硬件理論1.1 作用及功能UART:通用異步收發傳輸器,簡稱串口。功能:移植u-boot、內核時,主要使用串口查看打印信息。外接各種模塊,比如藍牙GPS模塊。使用UART的時候,要注意1. 波特率 2. 格式&#xf…

NFS共享服務器

目錄 任務要求 思路總結 1.NFS共享服務 服務端 (ip 192.168.48.128) 客戶端 (ip 192.168.48.130) 2.配置autofs自動掛載 任務要求 1.NFS服務器,可以讓PC將網絡中的NFS服務器共享的目錄掛載到本地端的文件系統中,而在本地端的系統中看來,那個遠程主機的目…

FreeRTOS學習筆記之隊列

小編正在學習嵌入式軟件,目前建立了一個交流群,可以留下你的評論,我拉你進群一、簡介隊列是為了任務與任務、任務與中斷之間的通信而準備的,可以在任務與任務、任務與中斷之間消息傳遞,隊列中可以存儲有限的、大小固定…

垃圾收集器-ZGC

前言在Java開發中,垃圾收集器的選擇對系統性能有著致命的影響。Java 8后,雖然G1 GC成為默認,但是它在延遲性控制上仍有限。ZGC作為最新一代高性能低延遲垃圾收集器,解決了CMS和G1在延遲、垃圾堆容量和吞吐量方面的重大突破。本文將…

計算機“十萬個為什么”之跨域

計算機“十萬個為什么”之跨域 本文是計算機“十萬個為什么”系列的第五篇,主要是介紹跨域的相關知識。 作者:無限大 推薦閱讀時間:10 分鐘 一、引言:為什么會有跨域這個“攔路虎”? 想象你正在參觀一座戒備森嚴的城堡…

C語言:20250719筆記

字符數組在C語言中,支持字符串常量,不支持字符串變量。如果想要實現類似的字符串變量,C語言提供了兩種實現方式:字符數組:char name[] “哪吒”;字符指針:char *name "娜吒"&#x…