介紹
對象檢測是計算機視覺社區中研究最廣泛的主題之一,它已經進入了各個行業,涉及從圖像安全,監視,自動車輛系統到機器檢查等領域。
當前,基於深度學習的對象檢測可以大致分爲兩類:
- 兩級檢測器,例如基於區域檢測的CNN(R-CNN)及其後續產品。
- 一級探測器,例如YOLO系列探測器和SSD
基於錨框的常規一級檢測器可能會更快,更簡單,但由於在訓練過程中遇到極端的等級失衡,其精度已經落後於兩級探測器。
FAIR在2018年發表了一篇論文,其中他們引入了焦點損失的概念,使用他們稱之爲RetinaNet的一級探測器來處理此類不平衡問題。
在我們深入探討焦點損失(Focal Loss)的本質之前,讓我們首先了解這個類不平衡問題是什麼以及它可能引起的問題。
目錄- 爲什麼需要焦點損失
- 什麼是焦點損失
- 交叉熵損失
交叉熵問題
例子 - 平衡交叉熵損失
平衡交叉熵問題
例子
- 焦點損失說明
例子 - 交叉熵損失 vs 焦點損失
容易正確分類的記錄
分類錯誤的記錄
非常容易分類的記錄 - 最後的想法
爲什麼需要焦點損失
兩種經典的一級檢測方法,如增強型檢測器,DPM和最新的方法(如SSD)都可以評估每個圖像大約10^4 至 10^5個候選位置,但只有少數位置包含對象(即前景),而其餘的只是背景對象,這就導致了類不平衡的問題。
這種不平衡會導致兩個問題 - 訓練效率低下,因爲大多數位置都容易被判斷爲負類(這意味着檢測器可以輕鬆地將其歸類爲背景),這對檢測器的學習沒有幫助。
- 容易產生的負類(概率較高的檢測)佔輸入的很大一部分。雖然單獨計算的梯度和損失較小,但它們可能使損耗和計算出的梯度不堪重負,並可能導致模型退化。
什麼是焦點損失
簡而言之,焦點損失(Focal Loss,FL)是交叉熵損失(Cross-Entropy Loss,CE)的改進版本,它通過爲難分類的或容易錯誤分類的示例(即帶有噪聲紋理的背景或部分對象的或我們感興趣的對象)分配更多的權重並對簡單示例(即背景對象)降低權重來處理類不平衡問題。
因此,焦點損失減少了簡單示例的損失貢獻,並加強了對糾正錯誤分類示例的重視。
首先讓我們來了解一下二進制分類的交叉熵損失。
交叉熵損失
交叉熵損失背後的思想是懲罰錯誤的預測,而不是獎勵正確的預測。
二進制分類的交叉熵損失如下:
其中:
Yact = Y的實際值
Ypred = Y的預測值
爲了標記方便,我們記 Yact = Y 且 Ypred = p 。
Y∈{0,1},這是正確標註
p∈[0,1],是模型對Y = 1的類別的估計概率。
爲了符號上的方便,我們可以將上述方程式改寫爲:
pt = {-ln(p) ,當Y=1 -ln(1-p) ,當 Y=}
CE(p,y)= CE(pt)=-ln(pt)
交叉熵問題
如你所見,下圖中的藍線表示當p非常接近0(當Y = 0時)或1時,容易分類的pt > 0.5的示例可能會產生不小幅度的損失。
讓我們用下面的例子來理解它。
例子
假設,前景(我們稱其爲類1)正確分類爲p = 0.95 ——
CE(FG)= -ln(0.95)= 0.05
並且背景(我們稱其爲類0)正確分類爲p = 0.05 ——
CE(BG)=-ln(1- 0.05)= 0.05
現在問題是,對於類不平衡的數據集,當這些小的損失在整個圖像上相加時,可能會使整體損失(總損失)不堪重負,將導致模型退化。
平衡交叉熵損失
解決類別不平衡問題的一種常見方法是爲類別引入權重因子∝[0,1]
爲了標記方便,我們可以在損失函數中定義 ∝t 如下:
CE(pt)= -∝t ln ln(pt)
如你所見,這只是交叉熵的擴展。
平衡交叉熵的問題
我們的實驗將表明,在密集檢測器訓練過程中遇到的大類不平衡壓倒了交叉熵損失。
容易分類的負類佔損耗的大部分,並主導梯度。雖然平衡了正例/負例的重要性,但它並沒有區分簡單/困難的示例。
讓我們通過一個例子來理解這一點
例子
假設,前景(我們稱其爲類1)正確分類爲p = 0.95 ——
CE(FG)= -0.25 ln(0.95)= 0.0128
正確分類爲p = 0.05的背景(我們稱之爲類0)——
CE(BG)=-(1-0.25)
ln(1- 0.05)= 0.038
雖然可以很好地正確區分正類和負類,但仍然不能區分簡單/困難的樣本。
這就是焦點損失(擴展到交叉熵)所要解決的問題。
焦點損失說明
焦點損失只是交叉熵損失函數的擴展,它將降低簡單示例的權重,並將訓練重點放在困難的負樣本上。
爲此,研究人員提出:(1- pt)γ 爲交叉熵損失,且可調聚焦參數γ≥0。
RetinaNet物體檢測方法使用焦點損失的α平衡變體,其中α = 0.25,γ= 2效果最佳。
因此,焦點損失可以定義爲——
FL (pt) = -αt(1- pt)γ log log(pt).
對於γ∈[0,5]的幾個值,可以看到焦點損失,請參見圖1。
我們將注意到焦點損失的以下特性:- 當示例分類錯誤並且pt小時,調製因數接近1,並且損失不受影響。
- 當 pt →1 時,該因子變爲0,並且對分類良好的示例的損失進行了權衡。
- 聚焦參數γ平滑地調整了簡單示例的權重。
隨着增加,調製因數的作用同樣增加。(經過大量實驗和試驗,研究人員發現γ = 2效果最佳)
注意:當γ= 0時,FL等效於CE,參考圖中藍色曲線。
直觀上,調製因數減少了簡單示例的損耗貢獻,並擴展了示例接收低損耗的範圍。
讓我們通過一個例子來了解上述焦點損失的特性。
例子
- 當記錄(前景或背景)被正確分類時,
1.前景正確分類,預測概率p=0.99,背景正確分類,預測概率p=0.01。
pt = {0.99,當Yact = 1 時; 1-0.01,當Y act = 0時},調製因數(FG)=(1-0.99)2 = 0.0001 ,調製因數(BG)=(1-(1-0.01))2 = 0.0001,如你所見,調製因數接近於0,因此損耗將被權重降低。
2.前景被錯誤分類,預測概率p = 0.01,背景對象被錯誤分類,預測概率p = 0.99。pt = {0.01,當Yact = 1 時; 1-0.99,當Y act = 0時},調製因數(FG)=(1-0.01)2 = 0.9801 ,調製因數(BG)=(1-(1-0.99))2 = 0.9801,如你所見,調製因數接近於1,因此損耗不受影響。
現在,讓我們使用一些示例來比較交叉熵和焦點損失,並查看焦點損失在訓練過程中的影響。
交叉熵損失 vs 焦點損失
讓我們通過考慮以下幾種情況來進行比較。
容易正確分類的記錄
假設前景正確分類的預測概率爲p = 0.95,背景正確分類的背景爲預測概率p = 0.05。pt = {0.95, 當 Yact=1時;1-0.05 ,當 Yact = 0時}, CE(FG)= -ln (0.95) = 0.0512932943875505,讓我們考慮在∝ = 0.25和γ= 2時的焦點損失。
FL(FG)= -0.25 (1-0.95)2 ln (0.95) = 3.2058308992219E-5
FL(BG)= -0.75 (1-(1-0.05))2 ln (1-0.05) = 9.61E-5
分類錯誤的記錄
假設預測概率p=0.05的前景被分類爲預測概率p=0.05的背景對象。
pt = {0.95,當Y act = 1;1-0.05時,當Y act = 0時},
CE(FG)= -ln(0.05)= 2.995732273553991
CE(BG)= -ln(1-0.95)= 2.995732273553992
讓我們考慮相同的場景,即∞=0.25和γ=2。
FL(FG)= -0.25 (1-0.05)2 ln(0.05)= 0.675912094220619,FL(BG)= -0.75 (1-(1-0.95))2 ln(1-0.95)= 2.027736282661858
非常容易分類的記錄
假設對預測概率p=0.01的背景對象,用預測概率p=0.99對前景進行分類。
pt = {0.99, 當 Yact=1時;1-0.01 ,當 Yact = 0時},CE(FG)= -ln (0.99)= 0.0100503358535014,
CE(BG)= -ln(1-0.01)= 0.0100503358535014
讓我們考慮相同的場景,即∞=0.25和γ=2。
FL(FG)= -0.25 (1-0.01)2 ln(0.99)= 2.51 10 -7,FL(BG)= -0.75 (1-(1-0.01))2 ln(1-0.01) = 7.5377518901261E-7
最後的想法
方案1:0.05129 / 3.2058
10 -7 =小1600倍
方案2:2.3 / 0.667 =小4.5倍
方案3:0.01 / 0.00000025 =小40,000倍。
這三個案例清楚地說明了焦點損失是如何減小分類良好記錄的權重的,另一方面又爲錯誤分類或較難分類的記錄賦予較大的權重。
經過大量的試驗和實驗,研究人員發現 ∝ = 0.25和 γ = 2 效果最佳。
尾註
在本文,我們經歷了從交叉熵損失到焦點損失的整個進化過程,詳細解釋了目標檢測中的焦點損失。
參考 - https://arxiv.org/ftp/arxiv/papers/2006/2006.01413.pdf
-
https://medium.com/@14prakash/the-intuition-behind-retinanet-eb636755607d
- https://developers.arcgis.com/python / guide / how-retinanet-works /
參考鏈接:https://www.analyticsvidhya.com/blog/2020/08/a-beginners-guide-to-focal-loss-in-object-detection/