跳至主要内容

Backbone

YOLO 的 backbone 演進,並不是單純「越做越深」,而是一條讓深度可訓練、梯度可流動、計算可控的設計路線。

Classification → Detection Backbones

早期 YOLO 並沒有為 detection 設計專用 backbone,而是直接沿用分類模型。

  • YOLOv1–v2
    • 使用類分類 CNN(YOLOv1 自建 CNN、YOLOv2 的 Darknet-19)
    • 優點是結構簡單、速度快
    • 但特徵表達能力有限,難以同時支撐多尺度與精細定位
  • 關鍵問題
    • 分類 backbone 追求語意抽象
    • Detection 需要同時保留 空間細節 + 語意層級
    • 這個衝突在小物體與密集場景中特別明顯
yolov1-custom-cnnyolov2-darknet-19
YOLOv1 Custom CNNYOLOv2 Darknet-19

Residual Backbone:讓深度可用(YOLOv3)

YOLOv3 是第一個真正解決 backbone 深度問題的版本。

  • Darknet-53
    • 引入 residual connection
    • 讓梯度可以穩定傳遞到深層
  • 設計意義
    • backbone 不再只是「跑得快」
    • 而是開始能承載多尺度特徵學習
  • 影響
    • 為後續 multi-scale prediction、FPN / PAN 打下基礎
    • YOLO 開始進入「可長期演化」的架構狀態

但這一代的問題是:深度增加 ≠ 計算效率好

yolov3-darknet-53


CSP:不是加深,而是「切開」梯度流(YOLOv4–YOLOv5)

CSP(Cross Stage Partial Network)的提出,不是為了做一個更深的 backbone,而是為了解決深度 CNN 中一個被忽略的問題:

大量重複的梯度資訊,正在浪費計算與學習能力

Residual / Dense 的效率瓶頸

論文指出,即使是 ResNet 或 DenseNet 這類「梯度友善」的架構,仍存在結構性問題:

  • 在 residual / dense 架構中:
    • 每一層都會接收到來自所有前層的梯度
    • 梯度路徑雖然變短,但資訊高度相關
  • 結果是:
    • 不同層學到高度重複的梯度資訊
    • 造成:
      • 不必要的計算
      • 記憶體流量(memory traffic)增加
      • 訓練與推論效率下降

Residual 解決了「梯度消失」,但沒有解決「梯度重複」。

CSP 的核心假設

CSPNet 明確提出一個假設:

CNN 的效能瓶頸,不只是深度或寬度, 而是「不同層是否真的學到不同的資訊」。

因此 CSP 的目標不是增加 capacity,而是:

  • 最大化梯度組合的多樣性(gradient combination diversity)
  • 最小化重複梯度造成的無效學習

cspnet

CSP 的核心做法

不讓所有 feature 都參與所有層的梯度回傳,而是刻意截斷一部分梯度流

具體作法是:

  • 在一個 stage 開始時:
    • 將輸入 feature map 沿 channel 切成兩部分
  • 兩條路徑:
    • Path A:直接 bypass(不進入深層 block)
    • Path B:進入完整的 residual / dense block
  • 在 stage 結尾:
    • 先對 Path B 做 transition(如 conv / pooling)
    • 再與 Path A concat
    • 刻意選擇「fusion last」策略以截斷梯度重用
dense-netcsp-dense-net
DenseNetCross Stage Partial DenseNet

為什麼一定要「fusion last」?

論文做了非常關鍵的 ablation:

  • Fusion first(先 concat 再 transition)
    • 梯度仍然高度重複
    • 計算下降,但 accuracy 明顯掉
  • Fusion last(先 transition 再 concat)
    • 梯度流被有效截斷
    • 計算量下降 20%
    • Top-1 accuracy 幾乎不變(僅 ~0.1%)

這證實 CSP 的關鍵不是結構形式,而是 「避免不同路徑學到相同梯度訊號」

cspnet-fusion-stagecspnet-fusion-experimental-results
Fusion Fisrt 和 Fusion Last 的模型架構Fusion Last 明顯比 Fusion First 好

CSP 解決的三個實際問題

CSPNet 在論文中明確說,它同時解決三個工程層面的問題:

  1. 強化 learning capability
    • 在計算更少的情況下,模型反而學得更好
    • 特別對 lightweight backbone 效果顯著
  2. 降低 computational bottleneck
    • 計算不再集中在少數層
    • 提升硬體 utilization(GPU / CPU / ASIC)
  3. 降低 memory traffic
    • 減少 feature map 的重複讀寫
    • 對 edge / embedded 裝置特別重要

在 YOLO 中的影響

  • YOLOv4:CSPDarknet-53
    • 明顯降低 FLOPs
    • 改善梯度流動穩定性
  • YOLOv5:CSP-based Backbone
    • CSP 成為「工程上可維護」的核心骨幹
    • 讓模型 scaling(s / m / l / x)變得可控
yolov4-cspnetyolov5-csp1-csp2
YOLOv4:CSPDarknet-53YOLOv5:CSP-based Backbone

CSP1_X(用在 Backbone)

  • 核心設計目的
    • 解決 深層網路中梯度重複、學習冗餘 的問題
    • 讓 backbone 可以變深,但不讓計算與梯度爆炸
  • 結構特徵
    • 將輸入 feature 切成兩條路徑
      • 主幹路徑:經過多個 Residual / Bottleneck block
      • 捷徑路徑:幾乎不做計算,直接保留原始特徵
    • 在 stage 結尾進行 Concat + Conv 融合

yolov5-csp1_x

CSP2_X(用在 Neck)

  • 核心設計目的
    • 降低 Neck 階段的計算量與延遲
    • 在特徵已經足夠語意化的前提下,避免過度複雜化
  • 結構特徵
    • 同樣採用雙分支結構,但:
      • 不使用 Residual block
      • 改為 連續的 CBS / CBL 卷積
    • 整體結構更淺,計算成本更可控
  • 為什麼不用 Residual
    • Neck 的特徵已是融合後的高階語意
    • 不再需要深層表示學習,Residual 的收益有限

yolov5-csp2_x


CSP 到 C2f(YOLOv5 → YOLOv8)

YOLOv8 並沒有否定 CSP,而是重新整理它的工程形態

YOLOv5 的特徵

  • CSP + Bottleneck 結構
  • 架構成熟、穩定
  • 但 block 組合偏複雜,對新任務與新 head 擴展不夠直覺

YOLOv8 的改動:C2f

  • C2f(Cross-Stage with 2 flows)
    • 保留 CSP「分流」的精神
    • 但減少巢狀 bottleneck 與重複模組
  • 設計動機
    • 提高 feature reuse
    • 讓梯度路徑更短、更可預期
    • 對 anchor-free、multi-task head 更友善

效果

  • backbone 結構更乾淨
  • 訓練穩定性更好
  • 成為 Ultralytics 生態系的長期基線

YOLOv8 的 backbone 並不是追求 SOTA,而是追求可長期擴展性


ELAN / E-ELAN / GELAN:從「深」轉向「梯度路徑設計」(YOLOv7–YOLOv9)

這一條線是 WongKinYiu 系列 YOLO 的核心思想。

ELAN(YOLOv7)

  • 不只是 residual,而是規劃梯度傳遞路徑
  • 目標是:
    • 保持深度
    • 但避免梯度在 merge 時失真

E-ELAN

  • 延伸 ELAN 的 aggregation 思想
  • 強調:
    • 多分支
    • 但可控的 feature 合流順序

GELAN(YOLOv9)

  • 從資訊理論角度出發(information bottleneck)
  • 結合 PGI(Programmable Gradient Information)
  • 重點不是 FLOPs 最低,而是:
    • 單位參數資訊保留最大化
    • 梯度更「可靠」

這一系列 backbone 的核心不是「多快」,而是「學到的資訊是否被浪費」。


後期 Backbone 的共通趨勢(YOLOv9–YOLOv11)

到了最新世代,YOLO backbone 的關注點非常一致:

  • 不再追求更深、更大
  • 而是:
    • 更好的 parameter utilization
    • 更穩定的梯度
    • 更清楚的結構語意
  • 為多任務(det / seg / pose / OBB)服務

這也是為什麼:

  • YOLOv11 的 backbone 改動相對「溫和」
  • 但在效率與泛化上仍有提升