RetinaNet 論文閱讀

李謦伊
謦伊的閱讀筆記
8 min readJan 27, 2021

由於在當前的目標檢測上 One-stage 的精準度始終落後 Two-stage 檢測器,Facebook AI Research 在2017 年提出了 Focal Loss,該論文研究發現 One-stage 精準度之所以較差的主要原因是在於前景 (positive) 與背景 (negatives) 類別不平衡的關係,為了驗證 Focal Loss 的有效性便設計了一種 One-stage 檢測器 RetinaNet

📝 Paper: https://arxiv.org/pdf/1708.02002.pdf

Class Imbalance

通常一張圖像中的物體較少,大多數是背景,而 One-stage 檢測器在每一次檢測時會生成非常多的候選框,導致正負樣本不均勻 (正樣本為前景、負樣本為背景)。這樣的情況下,模型學習更多的背景使得分類器效果不佳。

但對於 Two-stage 檢測器 (例如: Faster R-CNN) 在第一階段的 RPN 就可以過濾掉很大部分的負樣本,第二階段則採用固定正負樣本比例或 OHEM 方法,如此一來減輕了類別不平衡對檢測精度造成的影響。

為了解決 One-stage 類別不平衡的問題,因此則有了 Focal Loss。

Focal Loss

Focal Loss 是從二分類的 cross entropy (CE) 演變而來的,以下為 CE 定義

其中 y ∈ {1,-1} 為 ground truth,1表示為正樣本、-1表示為負樣本,p ∈ [0,1] 則是指預測為正樣本的機率值,以下為 p 的定義

接著就可以將 CE 簡寫為

🔹 Balanced Cross Entropy

為了解決類別不平衡的問題,比較直觀的想法就是引入權重系數: α∈ [0,1] (for 正樣本)、1-α (for 負樣本),此時 CE loss 就變為 α-balanced CE loss

🔹 Focal Loss Definition

但 α-balanced CE loss 僅根據正負樣本進行平衡,並沒有考慮樣本的難易度,雖然降低了容易分類的負樣本損失,同時也讓模型更難分類較難的負樣本。

因此 Focal Loss 以 CE 為基礎加上了調節因子 -(1-pt)^r,以下為 Focal Loss 的定義,其中 γ≥ 0

藉由公式可以看到當樣本被誤分且 pt 很小時,調節因子接近 1,對 loss 不會產生影響;而對於被分類正確且 pt 接近 1 時,調節因子接近 0,可以有效降低對正確分類的 loss,讓模型更關注較難分類的樣本。

下圖為 γ∈ [0,5] 的 loss 曲線。當 γ 為 0 時,Focal Loss (FL) = CE;當 γ 增加時,調節因子也會跟著增加。經過實驗結果得知,γ=2時,效果最好。

在最終的 Focal loss 引入了權重系數 α,經實驗結果證明,效果比原始的更好,其中 γ=2,α=0.25 的組合效果最佳。

🔹 Class Imbalance and Model Initialization

二分類模型初始時對於正負樣本的預測機率是相同的,在類別不平衡的情況下,數量較多的樣本會主導網路的學習,導致訓練不穩定。

為了解決這個問題,在模型初始化時,針對前景 (正樣本) 的預測值設置了先驗值 (prior) 的概念,以 π 表示 (設定 π=0.01),如此一來使得模型前景樣本的預測機率比較低,模型傾向預測為背景,大幅降低負樣本的 loss。

實驗證明這個方法可以提高 focal loss和 cross entropy 的訓練穩定性,要注意的是只會影響模型初始化,並不會改變 loss。

RetinaNet

RetinaNet 是由 Resnet、FPN 為主要架構,detection 部分則是由兩個 FCN 子網路組成,分別用於預測分類及 bndBox。

🔹 Feature Pyramid Network Backbone

RetinaNet backbone 是基於 Resnet的 FPN,分別嘗試了 Resnet50、Resnet101,於第 3~7 層建構 FPN,且每層通道維度為 256。

FPN 是一種自下而上、自上而下並橫向連接的網路結構,通過橫向連接可以融合不同層次的特徵,從而增強網路的特徵提取能力,網路架構為下圖d

📝 FPN 論文連接: https://arxiv.org/pdf/1612.03144.pdf

下圖為四種生成多尺度特徵的網路:

  • 圖 a 為圖像金字塔,對不同維度的圖像各自作為模型輸入,生成不同尺度的特徵,再將其 concat 得到最後的輸出,需要花費較多的計算與時間成本
  • 圖 b 由單一維度的圖像作為模型輸入並且僅拿最後一層的特徵做預測,對於小目標的檢測性能較差,使用此方法的有 R-CNN, Fast-RCNN, Faster-RCNN, SPP-Net
  • 圖 c 也是由單一維度的圖像作為模型輸入,但在每一層都生成不同尺度的特徵,採用多尺度特徵融合的方式,最後再將其 concat 起來,這種方式不會增加額外的計算量,使用此方法的為 SSD

FPN 的橫向連接如下圖所示,特徵會從下自上進行 2 倍的下采樣,而另一邊特徵會由上自下進行 2 倍的上采樣,接著使用 1x1 卷積層降低 channel 維度,使得兩邊維度一致後再做相加。

🔹 Anchors

RetinaNet 的anchor 設置和 RPN 類似,在 FPN 中每層 (第 3~7 層) 的 anchor 尺寸分別為 32x32、64x64、128x128、256x256、512x512,以及每一個 anchor 的長寬比設定為 1:1, 1:2, 2:1,並且再增加三種不同尺寸 {2⁰, 2^(1/3), 2^(2/3)},因此每層共有 9 個 anchor。由這些數值可以算出所有層的 anchor size 最小值為32、最大值為 813

對於每個 anchor 會對應一個長度為 K 維的 one-hot 向量及 4 維的 bndBox 向量,其中 k 為類別數。

Anchor 的匹配策略與 RPN 也類似,也是使用雙閾值 IOU,RetinaNet 設定的閾值為 0.4 與 0.5,當 IOU > 0.5 視為正樣本、IOU < 0.4 視為負樣本,但如果 IOU 介在 [0.4, 0.5) 則忽略此樣本,不參與訓練。

🔹 Classification Subnet

從網路架構圖中可以知道 FPN 每一層都會連接分類子網路,這些分類子網路權值是共享的。

分類子網路用於預測每個 anchor 的 K 個類別預測機率,網路模型總共使用五層,其中四層為 3x3x256 的 FCN 網路 (激活函數使用 ReLU) 以及最後一層 FCN 的維度則是使用 3x3xKA (使用 Sigmoid),是因為對於 A 個 anchor 都有 K 維的 one-hot 向量,表示每一個類別的預測機率。

🔹 Box Regression Subnet

Box 回歸子網路架構與分類子網路一樣,差別在於最後一層 FCN 的維度則是使用 3x3x4A,這是因為 Box 回歸子網路用於預測與 ground truth 位置的偏移量 offset (x, y, w, h)

需要注意的是雖然兩個子網路架構類似,但彼此之間的參數不共享。

接著來看模型在 COCO 數據集上的檢測效果比較,由下表可以看到 RetinaNet 比其他 One-stage 方法有 5.9 AP 的提升,以及比 Faster R-CNN model based on Inception-ResNet-v2-TDM 提升了大約 2.3 AP

下圖是模型檢測性能與速度的對比,可以看出 RetinaNet-101 的檢測性能比其他的模型要來的好,並且速度也更快。

--

--