損失函數:Center Loss

ECCV2016的文章《A Discriminative Feature Learning Approach for Deep Face Recognition》 主要爲了進一步區分人臉。

code:https://github.com/ydwen/caffe-face
無法上github的可以在這裏下載:https://download.csdn.net/download/duan19920101/12178594
Center Loss的Caffe實現:https://github.com/BOBrown/SSD-Centerloss

        Center Loss是通過將特徵和特徵中心的距離和softmax loss一同作爲損失函數,使得類內距離更小,有點L1,L2正則化的意思。最關鍵是在訓練時要使用2個Loss函數:Softmax Loss + lamda * Center Loss

       和metric learning(度量學習)的想法一致,希望同類樣本之間緊湊,不同類樣本之間分散。現有的CNN最常用的softmax損失函數來訓練網絡,得到的深度特徵通常具有比較強的區分性,也就是比較強的類間判別力。關於softmax的類內判別力,直接看圖:

      上面給的是mnist的最後一層特徵在二維空間的一個分佈情況,可以看到類間是可分的,但類內存在的差距還是比較大的,在某種程度上類內間距大於類間的間距。對於像人臉這種複雜分佈的數據,我們通常不僅希望數據在特徵空間不僅是類間可分,更重要的是類內緊湊(分類任務中類別較多時均存在這個問題)因爲同一個人的類內變化很可能會大於類間的變化,只有保持類內緊湊,我們才能對那些類內大變化的樣本有一個更加魯棒的判定結果。也就是學習一種discriminative的特徵。

下圖就是我們希望達到的一種效果:

考慮保持softmax loss的類間判別力,提出center loss,center loss就是爲了約束類內緊湊的條件。相比於傳統的CNN,僅改變了原有的損失函數,易於訓練和優化網絡。

下面公式中log函數的輸入就是softmax的結果(是概率),而Ls表示的是softmax loss的結果(是損失)。wx+b是全連接層的輸出,因此log的輸入就表示xi屬於類別yi的概率。

Center Loss

       先看看center loss的公式LC。cyi表示第yi個類別的特徵中心,xi表示全連接層之前的特徵。實際使用的時候,m表示mini-batch的大小。因此這個公式就是希望一個batch中的每個樣本的feature離feature 的中心的距離的平方和要越小越好,也就是類內距離要越小越好。

關於LC的梯度和cyi的更新公式如下:

這個公式裏面有個條件表達式如下式,這裏當condition滿足的時候,下面這個式子等於1,當不滿足的時候,下面這個式子等於0。

       因此上面關於cyi的更新的公式中,當yi(表示yi類別)和cj的類別j不一樣的時候,cj是不需要更新的,只有當yi和j一樣才需要更新。

NNCC:當我們在更新yi類的特徵中心cyi時,如果類別yi和該特徵中心對應的類別不一樣時不更新,即某類別的特徵只負責更新它對應的類別中心cyi。

完整的loss function:

       作者文中用的損失L的包含softmax loss和center loss,用參數lamda控制二者的比重,如下式所示。這裏的m表示mini-batch的包含的樣本數量,n表示類別數。

具體的算法實現:

數據準備

與基於 Softmax Loss 的分類問題的數據格式一致,即:

img1 label1
img2 label2
img3 label3
...
...
...

其中,label 從 0 開始。

根據數據集 labels 的總數設置 CenterLossLayer 的 num_output。

 

網絡訓練

類似於分類問題的訓練,進行網絡訓練即可。

 

CNN框架:

總結:

        Center Loss損失函數對分類數不多的工程項目並沒有明顯的改善,如果你的分類任務中分類數大於1000,例如人臉識別,使用它效果會有明顯提升。

       Center Loss使得類內距離縮小,類間距離擴大,有效的將各個類別區分開。

       使用了centerloss之後,每個類的樣本更加聚合,因此類間的距離也隨着增大。隨着loss_weight的值越來越大,類間距越來越大。達到了增大類間距,縮小類內距離的效果。

 

參考文章:
https://blog.csdn.net/yang_502/article/details/72792786
https://blog.csdn.net/u014380165/article/details/76946339
https://blog.csdn.net/sinat_33486980/article/details/101214447
https://blog.csdn.net/u011808673/article/details/81050616

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章