「人臉識別」中的最常用一些LOSS
- 2019 年 11 月 29 日
- 筆記
2014年CVPR兩篇超多分類的人臉識別論文:DeepFace和DeepID
- Taigman Y, Yang M, Ranzato M A, et al. Deepface: Closing the gap to human-level performance in face verification [C]// CVPR, 2014.

DeepFace:4.4M訓練集,訓練6層CNN + 4096特徵映射 + 4030類Softmax,綜合如3D Aligement, model ensembel等技術,在LFW上達到97.35%。
- Sun Y, Wang X, Tang X. Deep learning face representation from predicting 10,000 classes [C]// CVPR, 2014.

DeepID:20W訓練集,訓練4層CNN + 160維特徵映射 + 10000類Softmax,加多尺度多patch特徵,加Joint Bayesian分類器,在LFW上達到97.45%。
以上兩個早期深度人臉識別方法,框架為CNN + Softmax,以「超多分類」這樣一種比較難的任務訓練CNN,強迫網路在第一個FC層形成比較緊湊的,判別力很強的深度人臉特徵,之後用於人臉識別。
Softmax優缺點

Softmax是soft(軟化)的max。在CNN的分類問題中,我們的ground truth是one-hot形式,下面以四分類為例,理想輸出應該是(1,0,0,0),或者說(100%,0%,0%,0%),這就是我們想讓CNN學到的終極目標。
網路輸出的幅值千差萬別,輸出最大的那一路對應的就是我們需要的分類結果。通常用百分比形式計算分類置信度,最簡單的方式就是計算輸出佔比,假設輸出特徵是
,這種最直接最最普通的方式,相對於soft的max,在這裡我們把它叫做hard的max:

而現在通用的是soft的max,將每個輸出x非線性放大到exp(x),形式如下:

hard的max和soft的max到底有什麼區別呢?看幾個例子

相同輸出特徵情況,soft max比hard max更容易達到終極目標one-hot形式,或者說,softmax降低了訓練難度,使得多分類問題更容易收斂。
到底想說什麼呢?Softmax鼓勵真實目標類別輸出比其他類別要大,但並不要求大很多。對於人臉識別的特徵映射(feature embedding)來說,Softmax鼓勵不同類別的特徵分開,但並不鼓勵特徵分離很多,如上表(5,1,1,1)時loss就已經很小了,此時CNN接近收斂梯度不再下降。
Softmax Loss訓練CNN,MNIST上10分類的2維特徵映射可視化如下:

不同類別明顯分開了,但這種情況並不滿足我們人臉識別中特徵向量對比的需求。人臉識別中特徵向量相似度計算,常用歐式距離(L2 distance)和餘弦距離(cosine distance),我們分別討論這兩種情況:
- L2距離:L2距離越小,向量相似度越高。可能同類的特徵向量距離(黃色)比不同類的特徵向量距離(綠色)更大

- cos距離:夾角越小,cos距離越大,向量相似度越高。可能同類的特徵向量夾角(黃色)比不同類的特徵向量夾角(綠色)更大

總結來說:
- Softmax訓練的深度特徵,會把整個超空間或者超球,按照分類個數進行劃分,保證類別是可分的,這一點對多分類任務如MNIST和ImageNet非常合適,因為測試類別必定在訓練類別中。
- 但Softmax並不要求類內緊湊和類間分離,這一點非常不適合人臉識別任務,因為訓練集的1W人數,相對測試集整個世界70億人類來說,非常微不足道,而我們不可能拿到所有人的訓練樣本,更過分的是,一般我們還要求訓練集和測試集不重疊。
- 所以需要改造Softmax,除了保證可分性外,還要做到特徵向量類內儘可能緊湊,類間儘可能分離。
雙約束的Loss Function
- Sun Y, Chen Y, Wang X, et al. Deep learning face representation by joint identification-verification [C]// NIPS, 2014.
- Sun Y, Wang X, Tang X. Deeply learned face representations are sparse, selective, and robust [C]// CVPR, 2015.
- Sun Y, Liang D, Wang X, et al. Deepid3: Face recognition with very deep neural networks [J]. arXiv, 2015.

DeepID2, DeepID2+, DeepID3都在採用Softmax + Contrastive Loss,Contrast Loss是:

同類特徵的L2距離儘可能小,不同類特徵的L2距離大於margin(間隔) m,Contrastive Loss同時約束類內緊湊和類間分離。25個patch訓練25個CNN,特徵聯合後PAC降維,訓練Joint Bayesian分類,在LFW上Softmax + Contrast Loss的DeepID2達到99.15%,多層加監督資訊的DeepID2+達到99.47,採用更大的deep CNN的DeepID3達到99.53%。DeepID系列是早期的深度學習人臉識別方法,但程式碼都沒有開源,而且深度特徵是多patch聯合,還要訓練分類器,繁瑣不實用。
- Schroff F, Kalenichenko D, Philbin J. Facenet: A unified embedding for face recognition and clustering [C]// CVPR, 2015.

FaceNet是目前引用量最高的人臉識別方法,沒有用Softmax,而是提出了Triple Loss:

以三元組(a, p, n)形式進行優化,不同類特徵的L2距離要比同類特徵的L2距離大margin m,同時獲得類內緊湊和類間分離。FaceNet用200M訓練數據,僅128維特徵映射,在LFW上達到了99.63%,非常犀利。但程式碼、模型和訓練數據集都沒有開源,三元組選擇極具技巧性,復現非常困難。好文推薦!
Largin Angular margin
- Liu W, Wen Y, Yu Z, et al. Large-Margin Softmax Loss for Convolutional Neural Networks [C]// ICML, 2016.

L-Softmax是Large-Margin Softmax Loss wy1iu/LargeMargin_Softmax_Loss,是large margin系列的開創演算法,首先聯合FC + Softmax + Cross-entropy重新並給出了Softmax loss的表達式:

然後加強分類條件,強制讓對應類別的W和x夾角增加到原來的m倍,下面看到的長得比較複雜的
是
的單調函數版本:


L-Softmax僅顯式約束類間分離,0.49M小訓練集訓練17層CNN,在LFW上達到了98.71。
- Liu W, Wen Y, Yu Z, et al. SphereFace: Deep Hypersphere Embedding for Face Recognition [C]// CVPR. 2017.

SphereFace是L-Softmax的改進 wy1iu/sphereface,歸一化了權值W,讓訓練更加集中在優化深度特徵映射和特徵向量角度上,降低樣本數量不均衡問題,提出了A-Softmax(angular softmax):


SphereFace依然僅顯式約束類間分離,0.49M小訓練集訓練64層CNN,在LFW上達到了99.42,在大型測試集MegaFace上也做到了small的SOTA。好文推薦!
L-Softmax和SphereFace都採用乘性margin使不同類別更加分離,特徵相似度都採用cos距離,而且都開源程式碼非常良心。需要注意這兩個loss直接訓練很難收斂,實際訓練中都用到了退火方法(annealing optimization strategy):

從Softmax逐漸退火到L-Softmax或A-Softmax,難以訓練我猜測可能是因為這個乘性margin太難了。因為SphereFace中m=4,即夾角要增大到原來的四倍,難度太大導致很難收斂,而採用退火方法後,最終等價於m=1.5,相當於降低了訓練難度。
目前最好,訓練更簡單的加性margin系列留在下一篇分解。
Center Loss
- Wen Y, Zhang K, Li Z, et al. A discriminative feature learning approach for deep face recognition [C]// ECCV, 2016.

Center Loss ydwen/caffe-face,為每個類別學習一個中心,並將每個類別的所有特徵向量拉向對應類別中心,聯合Softmax一起使用:

Center Loss在Softmax的基礎上,僅顯式約束類內緊湊,0.7M訓練數據7層CNN在LFW上達到了99.28,對照SphereFace論文,0.49M訓練數據64層CNN在LFW上是99.05,在大型測試集MegaFace上也做到了small的SOTA。開源程式碼非常良心,但Center Loss為每個類別需要保留一個類別中心,當類別數量很多(>10000)時,這個記憶體消耗非常可觀,對GPU的記憶體要求較高,而且這也導致caffemodel比較大。好文推薦!
由於類內緊湊約束用了L2距離,所以我覺得特徵相似度度量應該用L2距離,但論文中用了cos距離,這一點有些疑惑(或許是我理解錯了)。
其他加約束LOSS
- Wu Y, Liu H, Li J, et al. Deep Face Recognition with Center Invariant Loss [C]// ACM MM workshop, 2017.

Center Invariant Loss:首先證明了訓練樣本多的類別,Softmax訓練後特徵區域會更大,這就是訓練集類別不均衡導致的分類傾向問題,Center invariant loss聯合Softmax + Center loss一起使用:

除了Center loss每個類都拉向類別中心,額外約束每個類的類別中心都拉向一個固定半徑的超球上,這個半徑是所有類別中心的模均值,減輕類別不均衡帶來的特徵區域差異。沒有源碼不推薦。
- Zhang X, Fang Z, Wen Y, et al. Range loss for deep face recognition with long-tail [C]// ICCV, 2017.

Range loss:首先證明了訓練集的長尾分布(Long tail distribution)會影響訓練模型的性能,然後針對訓練集的長尾分布提出,類似Contrastive Loss提出了Range loss與Softmax一起使用:




Range loss同時約束類內緊湊類間分離,類內緊湊約束為每個類最小化兩個最大類內距離,類間分離約束為每次都計算每個類別中心,並使類中心距離最小的兩個類別距離大於margin m。依然沒有源碼不推薦。
- Yutong Zheng, Dipan K. Pal and Marios Savvides. Ring loss: Convex Feature Normalization for Face Recognition [C]// CVPR, 2018.

Ring loss將所有特徵向量都拉向半徑為R的超球上,需要聯合Softmax或SphereFace一起使用:

Ring loss非常類似16年年底的那一批特徵歸一化方法,將特徵向量的模長約束到固定值R附近。想法非常簡單,效果也非常簡單:相比SphereFace,SphereFace+Ring loss並沒有表現出任何優勢。依然沒有源碼不推薦。
人臉識別的LOSS(下)詳情可以查看下面的鏈接
https://zhuanlan.zhihu.com/p/34436551
再次感謝原作者分享的優質內容和總結