Focal Loss 損失函數簡述


Focal Loss

摘要

Focal Loss目標是解決樣本類別不平衡以及樣本分類難度不平衡等問題,如目標檢測中大量簡單的background,很少量較難的foreground樣本。Focal Loss通過修改交叉熵函數,通過增加類別權重\(\alpha\) 和 樣本難度權重調因子(modulating factor)\((1-p_t)^\gamma\),來減緩上述問題,提升模型精確。

一、技術背景

我們知道object detection的算法主要可以分為兩大類:two-stage detector和one-stage detector。前者是指類似Faster RCNN,RFCN這樣需要region proposal的檢測算法,這類算法可以達到很高的准確率,但是速度較慢。雖然可以通過減少proposal的數量或降低輸入圖像的分辨率等方式達到提速,但是速度並沒有質的提升。后者是指類似YOLO,SSD這樣不需要region proposal,直接回歸的檢測算法,這類算法速度很快,但是准確率不如前者。作者提出focal loss的出發點也是希望one-stage detector可以達到two-stage detector的准確率,同時不影響原有的速度。

二、擬解決問題

作者認為one-stage detector的准確率不如two-stage detector的原因是:樣本不均衡問題,其中包括兩個方面:

    1. 解決樣本的類別不平衡問題
    1. 解決簡單/困難樣本不平衡問題

When summed over a lager number of easy examples, these small loss values can overwhelm the rare class.
大量loss小的簡單樣本相加,可以淹沒稀有類.

如在object detection領域,一張圖像可能生成成千上萬的candidate locations,但是其中只有很少一部分是包含object的(1:1000)。這就帶來了類別不均衡。那么類別不均衡會帶來什么后果呢?引用原文講的兩個后果:(1) training is inefficient as most locations are easy negatives that contribute no useful learning signal; (2) en masse, the easy negatives can overwhelm training and lead to degenerate models.
負樣本數量太大,占總的loss的大部分,而且多是容易分類的,因此使得模型的優化方向並不是我們所希望的那樣。

三、解決方案

為了解決(1)解決樣本的類別不平衡問題和(2)解決簡單/困難樣本不平衡問題,作者提出一種新的損失函數:focal loss。這個損失函數是在標准交叉熵損失基礎上改進得到:

該focal loss函數曲線為:

其中,\(-log(p_t)\) 為初始交叉熵損失函數,\(\alpha\)類別間(0-1二分類)的權重參數\((1-p_t)^\gamma\)簡單/困難樣本調節因子(modulating factor),而\(\gamma\)聚焦參數(focusing parameter)

1、形成過程:

(1)初始二分類的交叉熵(Cross Emtropy, CE)函數:


在上面的\(y\in \{\pm1\}\) 為指定的ground-truth類別,\(p \in [0, 1]\) 是模型對帶有 \(y=1\) 標簽類別的概率估計。為了方便,我們將\(p_t\)定義為:

和重寫的\(CE(p, y)\)

(2)平衡交叉熵(Balanced Cross Entropy):

一個普遍解決類別不平衡的方法是增加權重參數\(\alpha \in [0 ,1]\),當$ y=1 \(類的權重為\)\alpha$ ,\(y=-1\) 類的權重為\(1-\alpha\) 。在實驗中,\(\alpha\) 被設成逆類別頻率(inverse class frequence),\(\alpha_t\)定義與\(p_t\)一樣:

因此,\(\alpha-balanced\) 的CE損失函數為:

(3)聚焦損失(Focal Loss):

盡管\(\alpha\)能平衡positive/negative的重要性,但是無法區分簡單easy/困難hard樣本。為此,對於簡單的樣本增加一個小的權重(down-weighted),讓損失函數聚焦在困難樣本的訓練。
因此,在交叉熵損失函數增加調節因子\((1-p_t)^\gamma\) ,和可調節聚參數\(\gamma \geq 0\)。,所以損失函數變成:

\(p_t\rightarrow0\)時,同時調節因子也 \((1-p_t)^\gamma\rightarrow0\) ,因此簡單樣本的權重越小。直觀地講,調節因子減少了簡單示例的loss貢獻,並擴展了樣本接收低loss的范圍。 例如,在γ= 2的情況下,與CE相比,分類為pt = 0.9的示例的損失將降低100倍,而對於pt≈0.968的示例,其損失將降低1000倍。 這反過來增加了糾正錯誤分類示例的重要性(對於pt≤0.5和γ= 2,其損失最多縮小4倍)。

(4)最終的損失函數Focal Loss形式:

根據論文作者實驗,\(\alpha=0.25\)\(\gamma=2\) 效果最好

實現代碼:

def focal_loss(y_true, y_pred):
    alpha, gamma = 0.25, 2
    y_pred = K.clip(y_pred, 1e-8, 1 - 1e-8)
    return - alpha * y_true * K.log(y_pred) * (1 - y_pred)**gamma\
           - (1 - alpha) * (1 - y_true) * K.log(1 - y_pred) * y_pred**gamma

四、Reference

  1. https://blog.csdn.net/u014380165/article/details/77019084
  2. Lin T Y, Goyal P, Girshick R, et al. Focal loss for dense object detection[C]//Proceedings of the IEEE international conference on computer vision. 2017: 2980-2988.


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM