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