深度學習之損失函數小結
在深度學習中,損失函數扮演着很重要的角色。通過最小化損失函數,使得模型達到收斂狀態,減少模型預測值的誤差。因此,不同的損失函數,對模型的影響是重大的。下面總結一下常用的損失函數:
- 圖像分類:交叉熵
- 目標檢測: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的真實概率函數會帶來兩個問題:
- 無法保證模型的泛化能力,容易造成過擬合;
- 全概率和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中
- 無法對兩個不重疊的框進行優化
- 無法反映出兩個框到底距離有多遠。
為了解決這個問題,作者提了GIOU。
其中,C表示兩個框的最小外接矩陣面積。即先求出兩個框的IOU,然后求出外接矩陣C的面積,減去A與B的面積。最終得到GIOU的值。
GIOU具有以下的性質:
- GIOU可以作為一種衡量距離的方式
- GIOU具有尺度不變性
- GIOU是IOU的下限,GIOU(A,B)≤IOU(A,B)
- 當矩形框A、B類似時,
- 當矩形框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會致使收斂慢。
基於上述問題,作者提出兩個問題:
- 直接最小化預測框與目標框之間的歸一化距離是否可行,以達到更快的收斂速度。
- 如何使回歸在與目標框有重疊甚至包含時更准確、更快
好的目標框回歸損失應該考慮三個重要的幾何因素:重疊面積,中心點距離,長寬比。
基於問題一,作者提出了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具有如下性質:
- DIOU依然具有尺度不變性;
- DIOU直接最小化兩個框的距離,因此收斂會更快;
- 對於目標框包裹預測框的這種情況,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來進行衡量。
參考文章: