Try   HackMD

Focal Loss for Desnse Object Detection

Tsung-Yi Lin Priya Goyal Ross Girshick Kaiming He Piotr Dollar´
Facebook AI Research (FAIR)

[paper link]

重點整理

  • Focal Loss主要目的在於解決資料不平衡的情形,但資料是指什麼資料?誰跟誰不平衡?
  • 本篇提出的架構RetinaNet的來由及架構淵源
  • 單就Focal Loss的技巧就讓One-Stage表現與Two-Stage旗鼓相當,另外模型的架構也是提升準確率的一大原因
  • 作者自己強調,效果好不是架構的功勞,是那個厲害的Loss

背景介紹

本篇任務為Object Detection,談到物件偵測,就要先聊聊常見的兩大架構。

One-Stage vs Two-Stage

首先介紹Object Detection任務中常見的兩種架構

  • Two-Stage: (1)提出候選區域 (2)對候選區域分類。R-CNN、Fast R-CNN、Faster R-CNN都屬於此類。
  • One-Stage: (1)直接預測特徵圖每個grid屬於什麼類別的機率以及(x, y, w, h)。YOLO系列、SSD(Single Shot Detector)屬於此類。

在當時,Two-Stage的雖然速度較慢但有較好的表現。另外,有人提出降低input的解析度,或是減少候選區域的數目,這些策略讓Two-Stage獲得更快的計算速度,漸漸取得優勢。

為此,本篇論文希望為One-Stage的架構爭一口氣,更快的速度且有更好的表現。

本文貢獻

Focal Loss

在當時One-Stage表現大多不如Two-Stage,原因是如果整個畫面大多為背景,model只要傾向判斷為背景,就能得到不錯的結果。相較之下,Two-Stage在第一步驟就已經濾除大部分背景了,因此有較好的表現。

為了解決資料不平衡(Class Imbalance)的問題 > 提出Focal Loss

Image Not Showing Possible Reasons
  • The image was uploaded to a note which you don't have access to
  • The note which the image was originally uploaded to has been deleted
Learn More →

對比上圖的兩個公式,不難發現與CE Loss相比,FL Loss多了一項

(1pt)γ,其中
pt
代表label類別的信心分數,
γ
是一個可調的參數,用於影響曲線的位置。

  • γ=0
    時,CE Loss等同於FL Loss,藍線所示
  • γ
    漸漸變大時,FL Loss的曲線越來越靠近綠色
  • γ=5
    的綠線為例,在
    pt
    (橫軸)越大時,整體loss值越小。代表了當預測越有自信時,此樣本越不影響模型訓練。
  • 透過策略壓制容易預測的樣本,提升難判斷樣本的影響力,變向達到平衡數量的目的。

事實上,Focal Loss完整定義如下,包括了接下來提到的BCE Loss的概念

FC(pt)=αt(1pt)γlog(pt)

Balanced Cross Entropy

平衡樣本不平均的基本想法,在原始CE上加上一平衡係數,對應不同類別係數

αt 也會變動,通常是類別數量的反比。

CE(pt)=αtlog(pt)

Focal Loss vs. Huber Loss

概略上而言,HL對於信心分數低的樣本加強Loss。相反的FL對於信心分數高的樣本降低Loss,即使 數量多也不影響整體表現。

RetinaNet

Image Not Showing Possible Reasons
  • The image was uploaded to a note which you don't have access to
  • The note which the image was originally uploaded to has been deleted
Learn More →

架構簡介:

  • Feature Pyramid Network : 圖中間部分,對原始圖片做上下採樣的捲積,獲得不同尺度大小的特徵圖,概念來自於FPN、SSD論文。
  • 對每一層特徵圖都做雙流的預測 : 圖右的上半部為分類任務用來預測BBOX的分類(K類別 * A種Anchor),圖右的下半部分為regression任務用來預測BBOX的與最鄰近gt的offset。
  • 模型的輸出 : 三層特徵圖的預測結果合併。

下面列出實驗結果,論文中還有對不同參數的消融實驗。

Image Not Showing Possible Reasons
  • The image was uploaded to a note which you don't have access to
  • The note which the image was originally uploaded to has been deleted
Learn More →

順帶一提,資料不平衡時對model訓練時的初始化策略也有一套

模型驗證

作者對訓練完畢的模型,重新輸入資料並紀錄輸出的Loss,對Loss排序後的結果累加,得到下圖的曲線。可以驗證Focal Loss確實有關注少數樣本的能力

Image Not Showing Possible Reasons
  • The image was uploaded to a note which you don't have access to
  • The note which the image was originally uploaded to has been deleted
Learn More →

補充

Focal Loss參考程式碼

import torch
import torch.nn as nn

class FocalLoss(nn.Module):
    def __init__(self, loss_fn, alpha=1, gamma=2, reduction='mean'):
        super(FocalLoss, self).__init__()
        self.loss_fn = loss_fn
        self.alpha = alpha
        self.gamma = gamma
        self.reduction = reduction

    def forward(self, inputs, targets):
        loss = self.loss_fn(inputs, targets)

        pt = torch.exp(-loss)  # 還原pt值,loss_fn包含log性質才可以這樣還原
        focal_loss = self.alpha * (1.00001 - pt) ** self.gamma * loss

        if self.reduction == 'mean':
            return focal_loss.mean()
        elif self.reduction == 'sum':
            return focal_loss.sum()
        else:
            return focal_loss

名詞

  • Easy Example : 預測一個類別信心分數很高時,這個樣本就稱為Easy Example。反之是Hard Example。
  • Hard Negative Mining : 將難以分類的樣本挑出來加強學習,可以加強模型的表現,也對樣本不平衡時有幫助。
  • Inlier : Easy Example的別稱。
  • Outlier : Hard Example的別稱。
  • Anchors : 來自Faster R-CNN論文中的RPN(Rigion Proposal Network),預測BBOX時會事先定義幾種不同比例、大小的方框,幫助模型的預測。

延伸

  • SPP(Spatial Pyramid Pooling),讓模型可以處理不同輸入大小的圖像,尺度不變性。不同於crop、wrap,尤其wrap等會破壞長寬比
  • ROI Pooling,都能使不同尺度的輸入特徵有效轉換為相同大小的輸出
  • SSD(Single Shot Detector),屬於FPN(Feature Pyramid Network)的一種
  • RPN(Rigion Proposal Network)在Faster R-CNN中被提出
  • OHEM(online hard
    example mining) vs. heuristic sampling
  • FPN論文
  • Huber Loss也是為了解決樣本不均發展出來的Loss