轉載請注明出處:
http://www.cnblogs.com/darkknightzh/p/8858998.html
論文:
Ring loss: Convex Feature Normalization for Face Recognition
https://arxiv.org/abs/1803.00130v1
理解的不對的地方請見諒
Ring loss將特征限制到縮放后的單位圓上,同時能保持凸性,來得到更穩健的特征。
該損失函數作為輔助的損失,結合Softmax或者A-softmax等損失函數,來學習到特征的模,因而唯一的超參數就是ring loss的權重。論文中在權重為0.01時效果最好。
論文中指出,arcface,cosface等在訓練時,損失函數之前將特征進行了歸一化,但網絡實際上並未學習到歸一化的特征。如下圖所示,a為訓練樣本的特征分布,b為測試樣本的特征分布,訓練樣本特征均集中在一定的夾角范圍內。但是對於測試樣本中模比較小的,其變化范圍比較大。
令F為深度模型,x為輸入圖像,則F(x)為特征。可優化下面的損失函數:
$\min {{L}_{s}}(F(x))\text{ s}\text{.t}\text{. }{{\left\| F(x) \right\|}_{2}}=R$
R為歸一化后特征的模。由於模的等式限制,導致實際上該損失函數是非凸的(這句話不太確定怎么翻譯,反正是非凸)。
因而Ring loss定義如下:
${{L}_{R}}=\frac{\lambda }{2m}\sum\limits_{i=1}^{m}{{{({{\left\| F({{x}_{i}}) \right\|}_{2}}-R)}^{2}}}$
相應的梯度計算如下:
$\frac{\partial {{L}_{R}}}{\partial R}=-\frac{\lambda }{m}\sum\limits_{i=1}^{m}{({{\left\| F({{x}_{i}}) \right\|}_{2}}-R)}$
$\frac{\partial {{L}_{R}}}{\partial F({{x}_{i}})}=\frac{\lambda }{m}(1-\frac{R}{{{\left\| F({{x}_{i}}) \right\|}_{2}}})F({{x}_{i}})$
上式中R為特征模的長度,類似於cosface及arcface中使用到的s,只不過s是提前設定的(將特征的模歸一化,並放大到該值),如30,而此處的R是通過訓練學到的。m為batchsize, 為Ring loss的權重。實際使用時,可以結合softmax loss/A-softmax loss。Softmax/A-softmax loss為主損失函數,Ring loss為輔助損失函數。論文中 為0.01時,訓練效果最好。
下圖是一個簡單的例子,其中綠色點為初始化的點,藍色的為目標類別,紅色的為經過20次訓練后,特征的分布。a為使用softmax的結果;b為使用ring loss,權重為1;c為使用ring loss,權重為10。可見,使用softmax后,特征收斂到比較大的范圍。由於使用ring loss時,設置的特征模長為1,因而b能收斂到比較合理的位置(特征較集中)。當權重太大時,softmax起的作用很小,導致特征收斂到單位圓上,如c所示。因而需要合理的權重來平衡輔助損失函數ring loss和主損失函數。
論文中在MsCeleb1M(31000人,3.5M圖像)上訓練64層的resnet網絡,性能比較好。
我這邊在pytorch中進行了實現,初始化時R為0-30之間的隨機數,在casia上訓練resnet20的網絡,效果稍微好於直接使用softmax訓練后的模型(softmax的dir78%,ring loss的dir:不到80%。這兩個模型均使用了batchnorm,否則dir沒有這么高。。。)。