題圖來自Coco(尋夢環遊記),恭喜拿下(意料之中的)第90屆奧斯卡金像獎最佳動畫長片,亡靈世界的安檢用了人臉識別技術哦!

超多分類的Softmax

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。

人臉識別的LOSS(上)

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。

人臉識別的LOSS(上)

DeepID

:20W訓練集,訓練4層CNN + 160維特徵對映 + 10000類Softmax,加多尺度多patch特徵,加Joint Bayesian分類器,在LFW上達到97。45%。

以上兩個早期深度人臉識別方法,框架為CNN + Softmax,

以“超多分類”這樣一種比較難的任務訓練CNN,強迫網路在第一個FC層形成比較緊湊的,判別力很強的深度人臉特徵

,之後用於人臉識別。

Softmax優缺點

人臉識別的LOSS(上)

Softmax是soft(軟化)的max。在CNN的分類問題中,我們的ground truth是one-hot形式,下面以四分類為例,理想輸出應該是(1,0,0,0),或者說(100%,0%,0%,0%),這就是我們想讓CNN學到的終極目標。

網路輸出的幅值千差萬別,輸出最大的那一路對應的就是我們需要的分類結果。通常用百分比形式計算分類置信度,最簡單的方式就是計算輸出佔比,假設輸出特徵是

(x_{1}, x_{2}, x_{3}, x_{4})

,這種最直接最最普通的方式,相對於soft的max,在這裡我們把它叫做

hard的max

人臉識別的LOSS(上)

而現在通用的是

soft的max

,將每個輸出x非線性放大到exp(x),形式如下:

人臉識別的LOSS(上)

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

人臉識別的LOSS(上)

相同輸出特徵情況,soft max比hard max更容易達到終極目標one-hot形式,或者說,softmax降低了訓練難度,使得多分類問題更容易收斂。

到底想說什麼呢?Softmax鼓勵真實目標類別輸出比其他類別要大,但並不要求大很多。對於人臉識別的特徵對映(feature embedding)來說,

Softmax鼓勵不同類別的特徵分開,但並不鼓勵特徵分離很多

,如上表(5,1,1,1)時loss就已經很小了,此時CNN接近收斂梯度不再下降。

Softmax Loss訓練CNN,MNIST上10分類的2維特徵對映視覺化如下:

人臉識別的LOSS(上)

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

L2距離

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

人臉識別的LOSS(上)

cos距離

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

人臉識別的LOSS(上)

總結來說:

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。

人臉識別的LOSS(上)

DeepID2, DeepID2+, DeepID3

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

人臉識別的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。

人臉識別的LOSS(上)

FaceNet

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

人臉識別的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。

人臉識別的LOSS(上)

L-Softmax

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

人臉識別的LOSS(上)

然後

加強分類條件,強制讓對應類別的W和x夾角增加到原來的m倍

,下面看到的長得比較複雜的

\psi(\theta)

cos(m\theta)

的單調函式版本:

人臉識別的LOSS(上)

人臉識別的LOSS(上)

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。

人臉識別的LOSS(上)

SphereFace

是L-Softmax的改進 wy1iu/sphereface,

歸一化了權值W,讓訓練更加集中在最佳化深度特徵對映和特徵向量角度上,降低樣本數量不均衡問題

,提出了A-Softmax(angular softmax):

人臉識別的LOSS(上)

人臉識別的LOSS(上)

SphereFace依然僅顯式約束類間分離,0。49M小訓練集訓練64層CNN,在LFW上達到了99。42,在大型測試集MegaFace上也做到了small的SOTA。

好文推薦!

L-Softmax和SphereFace都採用乘性margin使不同類別更加分離,特徵相似度都採用cos距離,而且都開原始碼非常良心。需要注意這兩個loss直接訓練很難收斂,實際訓練中都用到了

退火方法

(annealing optimization strategy):

人臉識別的LOSS(上)

從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。

人臉識別的LOSS(上)

Center Loss

ydwen/caffe-face,

為每個類別學習一箇中心,並將每個類別的所有特徵向量拉向對應類別中心

,聯合Softmax一起使用:

人臉識別的LOSS(上)

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。

人臉識別的LOSS(上)

Center Invariant Loss:首先證明了訓練樣本多的類別,Softmax訓練後特徵區域會更大

,這就是訓練集類別不均衡導致的分類傾向問題,Center invariant loss聯合Softmax + Center loss一起使用:

人臉識別的LOSS(上)

除了Center loss每個類都拉向類別中心,額外約束每個類的類別中心都拉向一個固定半徑的超球上,這個半徑是所有類別中心的模均值,減輕類別不均衡帶來的特徵區域差異。沒有原始碼不推薦。

Zhang X, Fang Z, Wen Y, et al。 Range loss for deep face recognition with long-tail [C]// ICCV, 2017。

人臉識別的LOSS(上)

Range loss:

首先

證明了訓練集的長尾分佈(Long tail distribution)會影響訓練模型的效能

,然後針對訓練集的長尾分佈提出,類似Contrastive Loss提出了Range loss與Softmax一起使用:

人臉識別的LOSS(上)

人臉識別的LOSS(上)

人臉識別的LOSS(上)

人臉識別的LOSS(上)

Range loss同時約束類內緊湊類間分離,類內緊湊約束為每個類最小化兩個最大類內距離,類間分離約束為每次都計算每個類別中心,並使類中心距離最小的兩個類別距離大於margin m。依然沒有原始碼不推薦。

Yutong Zheng, Dipan K。 Pal and Marios Savvides。 Ring loss: Convex Feature Normalization for Face Recognition [C]// CVPR, 2018。

人臉識別的LOSS(上)

Ring loss

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

人臉識別的LOSS(上)

Ring loss非常類似16年年底的那一批特徵歸一化方法,

將特徵向量的模長約束到固定值R附近

。想法非常簡單,效果也非常簡單:相比SphereFace,SphereFace+Ring loss並沒有表現出任何優勢。依然沒有原始碼不推薦。

END

下一篇介紹特徵歸一化,和目前最好的加性margin方法:

如有不同意見和看法,歡迎討論,感謝您的關注。