交叉熵、Focal loss、L1,L2,smooth L1損失函數、IOU Loss、GIOU、DIOU和CIOU


深度學習之損失函數小結

在深度學習中,損失函數扮演着很重要的角色。通過最小化損失函數,使得模型達到收斂狀態,減少模型預測值的誤差。因此,不同的損失函數,對模型的影響是重大的。下面總結一下常用的損失函數:

  • 圖像分類:交叉熵
  • 目標檢測:Focal loss、L1/L2損失函數、IOU Loss、GIOU、DIOU、CIOU

IOU Loss:考慮檢測框和目標框重疊面積。

GIOU Loss:在IOU的基礎上,解決邊界框不重合時的問題。

DIOU Loss:在IOU的基礎上,考慮邊界框中心距離的信息。

CIOU Loss:在DIOU的基礎上,考慮邊界框寬高比的尺度信息。

  • 圖像識別:Triplet Loss、Center Loss、Sphereface、Cosface、Arcface

現存問題

IOU、GIOU沒有考慮真值框與預測框中心的之間的距離信息,實際情況下,中心點的距離越小框預測的越准。DIOU可以很好的反應中心點距離的情況z

圖像分類

交叉熵

在圖像分類中,經常使用softmax+交叉熵作為損失函數:
在這里插入圖片描述
其中,p(x)表示真實概率分布,q(x)表示預測概率分布。交叉熵損失函數通過縮小兩個概率分布的差異,來使預測概率分布盡可能達到真實概率分布。
后來,谷歌在交叉熵的基礎上,提出了label smoothing(標簽平滑),具體介紹,可以參考這篇博客。

在實際中,需要用預測概率去擬合真實概率,而擬合one-hot的真實概率函數會帶來兩個問題:

  1. 無法保證模型的泛化能力,容易造成過擬合;
  2. 全概率和0概率鼓勵所屬類別和其他類別之間的差距盡可能加大,而由梯度有界可知,這種情況很難adapt,會造成模型過於相信預測的類別。

因此,為了減少這種過於自信,同時減緩人為標注的誤差帶來的影響,需要對p(x)進行變化:
在這里插入圖片描述
其中,δ(k,y)為Dirac函數,u(k)為均勻分布。簡單而言,降低標簽y的置信度,提高其余類別的置信度。從而,交叉熵變成了:
在這里插入圖片描述

目標檢測

一篇很好的博文,是介紹目標檢測中的損失函數的,可以參考一下:

在目標檢測中,損失函數一般由兩部分組成,classification loss和bounding box regression loss。calssification loss的目的是使類別分類盡可能正確;bounding box regression loss的目的是使預測框盡可能與Ground truth框匹對上。

Focal loss

該Focal loss損失函數出自於論文《Focal Loss for Dense Object Detection》,主要是解決正負樣本之間的不平衡問題。通過降低easy example中的損失值,間接提高了hard example中損失值的權重。Focal loss是基於交叉熵進行改進的:
在這里插入圖片描述
可以看到,在交叉熵前增加了(1−pt)γ,當圖片被錯分時,pt會很小,(1−pt)接近於1,所以損失受到的影響不大;而增加參數γ是為了平滑降低esay example的權重。當γ=0時,Focal loss退化成交叉熵。對於不同的γ,其影響如下圖所示。
在這里插入圖片描述

L1,L2,smooth L1損失函數

利用L1,L2或者smooth L1損失函數,來對4個坐標值進行回歸。smooth L1損失函數是在Fast R-CNN中提出的。三個損失函數,如下所示:
在這里插入圖片描述
從損失函數對x的導數可知:L1損失函數對x的導數為常數,在訓練后期,x很小時,如果learning rate 不變,損失函數會在穩定值附近波動,很難收斂到更高的精度。L2損失函數對x的導數在x值很大時,其導數也非常大,在訓練初期不穩定。smooth L1完美的避開了L1和L2損失的缺點。

在一般的目標檢測中,通常是計算4個坐標值與GT框之間的差異,然后將這4個loss進行相加,構成regression loss。

但使用上述的3個損失函數,會存在以下的不足:

  • 上面的三種Loss用於計算目標檢測的Bounding Box Loss時,獨立的求出4個點的Loss,然后進行相加得到最終的Bounding Box Loss,這種做法的假設是4個點是相互獨立的,實際是有一定相關性的
  • 實際評價框檢測的指標是使用IOU,這兩者是不等價的,多個檢測框可能有相同大小的Loss,但IOU可能差異很大,為了解決這個問題就引入了IOU LOSS
IOU Loss

該IOU Loss是曠視在2016年提出的《UnitBox: An Advanced Object Detection Network》。該論文的主要觀點之一是:

  • 使用基於歐式距離的L-n損失函數,其前提是假設4個坐標變量都是獨立的,但實際上,這些坐標變量是具有一定的關聯性。
  • 評價指標使用了IOU,而回歸坐標框又使用4個坐標變量,這兩者是不等價的。
  • 具有相同的歐式距離的框,其IOU值卻不是唯一的。

所以,提出了IOU loss,直接使用IOU作為損失函數:
在這里插入圖片描述
同時,也會有人使用的是:
在這里插入圖片描述
在這里插入圖片描述

GIOU

該GIOU Loss損失函數是斯坦福於2019年提出的《Generalized Intersection over Union: A Metric and A Loss for Bounding Box Regression》。在上面的IOU Loss中

  1. 無法對兩個不重疊的框進行優化
  2. 無法反映出兩個框到底距離有多遠。

為了解決這個問題,作者提了GIOU。
在這里插入圖片描述
其中,C表示兩個框的最小外接矩陣面積。即先求出兩個框的IOU,然后求出外接矩陣C的面積,減去A與B的面積。最終得到GIOU的值。
在這里插入圖片描述
GIOU具有以下的性質:

  1. GIOU可以作為一種衡量距離的方式
    在這里插入圖片描述
  2. GIOU具有尺度不變性
  3. GIOU是IOU的下限,GIOU(A,B)≤IOU(A,B)
  4. 當矩形框A、B類似時,
    在這里插入圖片描述
  5. 當矩形框A、B重疊時,GIOU(A,B)=IOU(A,B) 當矩形框A、B不相交時,GIOU(A,B)=−1

總的來說,GIOU包含了IOU所有的優點,同時克服了IOU的不足

DIOU和CIOU

DIOU和CIOU是天津大學於2019年提出的《Distance-IoU Loss: Faster and Better Learning for Bounding Box Regression》。為了解決GIOU收斂慢和提高回歸精度,提出DIOU來加速收斂。同時考慮到框回歸的3個幾何因素(重疊區域,中心點距離,寬高比),基於DIOU,再次提出CIOU,進一步提高收斂速度和回歸精度。另外,可以將DIOU結合NMS組成DIOU-NMS,來對預測框進行后處理

GIOU收斂慢的原因:
當出現下圖的情況(GT框完全包含預測框)時,IOU與GIOU的值相同,此時GIOU會退化成IOU,無法區分其相對位置關系。同時由於嚴重依賴於IOU項,GIOU會致使收斂慢。
在這里插入圖片描述
基於上述問題,作者提出兩個問題:

  1. 直接最小化預測框與目標框之間的歸一化距離是否可行,以達到更快的收斂速度。
  2. 如何使回歸在與目標框有重疊甚至包含時更准確、更快

好的目標框回歸損失應該考慮三個重要的幾何因素:重疊面積,中心點距離,長寬比

基於問題一,作者提出了DIoU Loss,相對於GIoU Loss收斂速度更快,該Loss考慮了重疊面積和中心點距離,但沒有考慮到長寬比;
基於問題二,作者提出了CIoU Loss,其收斂的精度更高,以上三個因素都考慮到了。

首先,定義一下基於IOU Loss的損失函數:
在這里插入圖片描述
R(B,Bgt) 表示預測框與GT框的懲罰項。
在IOU Loss中,R(B,Bgt)=0
在GIOU中:
在這里插入圖片描述
而在DIOU中,該懲罰項
在這里插入圖片描述
其中b和bgt表示預測框與GT框的中心點,ρ()表示歐式距離,c表示預測框B與GT框Bgt的最小外接矩陣的對角線距離,如下圖所示。
在這里插入圖片描述
因此,LossDIOU定義為:
在這里插入圖片描述
所以,LossDIOU具有如下性質:

  1. DIOU依然具有尺度不變性;
  2. DIOU直接最小化兩個框的距離,因此收斂會更快;
  3. 對於目標框包裹預測框的這種情況,DIoU Loss可以收斂的很快,而GIoU Loss此時退化為IoU Loss收斂速度較慢

DIOU同時考慮了重疊面積和中心點之間的距離,但是沒有考慮到寬高比。進一步提出了CIOU,同時考慮了這3個因素,在DIOU的懲罰項中加入了αυ:
在這里插入圖片描述
其中,α表示trade-off參數,υ表示寬高比一致性參數。
在這里插入圖片描述
這里的υ為什么會有4/π^2呢?這里arctan的范圍是[0,π/2)。
所以,CIOU的損失函數為:
在這里插入圖片描述
而在實際操作中,w^2+ h^2 是很小的數字,在后向傳播時,容易造成梯度爆炸。通常用1來代替w^2+ h^2 。

另外,提醒一點的是,GIOU、CIOU、DIOU都是衡量方式,在使用時可以代替IOU。但是這里需要考慮的一個問題是,預測框與GT框的匹配規則問題。並不是說anchor一定會去匹配一個不重疊的GT框。類似於SSD中所說,anchor會選擇一個重疊最大的GT框進行預測,而這個重疊最大可以使用IOU、GIOU、CIOU、DIOU來進行衡量。

參考文章:

  1. 深度學習之損失函數小結
  2. 目標檢測回歸損失函數簡介:SmoothL1/IoU/GIoU/DIoU/CIoU Loss
  3. IoU、GIoU、DIoU損失函數的那點事兒
  4. AAAI 2020 | DIoU 和 CIoU:IoU 在目標檢測中的正確打開方式


免責聲明!

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



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