在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 損失的梯度消失問題的同時考慮框中心距離,加速訓練收斂。加入長寬比項,提升定位精度。