目標檢測中焦點損失的原理

介紹
對象檢測是計算機視覺社區中研究最普遍的主題之一,它已經進入了各個行業,涉及從圖像安全,監視,自動車輛系統到機器檢查等領域。
目標檢測中焦點損失的原理
當前,基於深度學習的對象檢測能夠大體分爲兩類:python

  • 兩級檢測器,例如基於區域檢測的CNN(R-CNN)及其後續產品。
  • 一級探測器,例如YOLO系列探測器和SSD
    基於錨框的常規一級檢測器可能會更快,更簡單,但因爲在訓練過程當中遇到極端的等級失衡,其精度已經落後於兩級探測器。
    FAIR在2018年發表了一篇論文,其中他們引入了焦點損失的概念,使用他們稱之爲RetinaNet的一級探測器來處理此類不平衡問題。
    在咱們深刻探討焦點損失(Focal Loss)的本質以前,讓咱們首先了解這個類不平衡問題是什麼以及它可能引發的問題。
    目錄
    1. 爲何須要焦點損失
    2. 什麼是焦點損失
    3. 交叉熵損失
      交叉熵問題
      例子
    4. 平衡交叉熵損失
      平衡交叉熵問題
      例子
  • 焦點損失說明
    例子
  • 交叉熵損失 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。
    咱們將注意到焦點損失的如下特性:
    1. 當示例分類錯誤而且pt小時,調製因數接近1,而且損失不受影響。
    2. 當 pt →1 時,該因子變爲0,而且對分類良好的示例的損失進行了權衡。
    3. 聚焦參數γ平滑地調整了簡單示例的權重。
      隨着增長,調製因數的做用一樣增長。(通過大量實驗和試驗,研究人員發現γ = 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/
相關文章
相關標籤/搜索