度量學習之人臉識別演算法總結
特徵臉Eigenface:
Eigenface(特徵臉)在人臉識別歷史上應該是具有里程碑式意義的,其被認為是第一種有效的人臉識別演算法。1987年 Sirovich and Kirby 為了減少人臉影象的表示(降維)採用了主成分分析法(Principle Component Analysis, PCA)的方法,1991年 Matthew Turk和Alex Pentland首次將PCA應用於人臉識別,即將原始影象投影到特徵空間,得到一系列降維影象,取其主元表示人臉,因其主元有人臉的形狀,估稱為“特徵臉”。
這裡的低維空間維度通常是由使用者指定的,例如原始論文中僅使用了 7個維度。 PCA 方法中得到的特徵值即為其對應特徵向量那個方向上樣本的標準差,所以另一個選擇引數 d 的方式是由重構誤差來進行選擇,例如選擇保留 d 個特徵值之和與全部特徵值之和之比大於 99% 的最小的 d。
特徵臉的主要問題在於它是一個無監督的演算法,它只能尋找到使樣本儘可能分散開的幾個維度,而分散開也不代表一定能將人臉區分開來,特徵臉無法找到能夠使樣本之間的間距拉大的那些維度,判別臉由此而生。
判別臉Fisherface:
Fisherface是一種基於線性判別分析(Linear Discriminant Analysis, LDA)的人臉識別演算法。
由Belhumeur,hespanha,Kriegman於1997年提出。它的主要思想也是降維,但降維的方向被設定為使得同類樣本的投影點儘量相近、異類樣本的投影點儘量遠離的方向。
主成分分析與線性判別分析的主要區別在於散度矩陣的定義,主成分分析使用整體散度矩陣 S
Haar、Haar-like、LBP、LBPH、HOG、DPM:
Haar-like,也就是最經典的Viola-Jones演算法中使用的特徵,由Viola和Jones於2001年發表於
《Rapid Object Detection using a Boosted Cascade of Simple Features》
《Robust Real-Time Face Detection》
《An Extended Set of Haar-like Features for Rapid Object Detection》
LBPH,區域性二值式直方圖(Local Binary Pattern Histograms),由Ahonen,Hadid,Pietikainen於2004年提出
HOG,由Navneet Dalal在cvpr2005提出
DPM,由Felzenszwalb在2008年提出,附帶一系列cvpr,nips。算是非深度學習時代最好的特徵運算元了。
Deepface:
DeepFace: Closing the Gap to Human-Level Performance in Face Verification[C]. CVPR, 2014
訓練 softmax loss
推理 cos距離
LFW上達到97.35% (人類識別cropped image結果達到97.53%) (LFW:5749人,13233張圖)
DeepID:
Deep Learning Face Representation from Predicting 10,000 Classes[C]. CVPR, 2014
湯老師組的作品
10 crops, 3 scales, rgb+gray + flipped 160*2*60dim
訓練:各自做softmax loss
推理:聯合貝葉斯 LFW 97.2%
整體流程:
網路結構:
DeepID2 (contrastive loss):
Deep Learning Face Representation by Joint Identification-Verification[J]. NIPS, 2014
湯老師組的作品
訓練200 patches+ flipped
使用2個loss,分別為softmax loss , contrastive loss
softmax loss:
contrastive loss:
推理:挑選25個feature pca降維 聯合貝葉斯 LFW 99.15%
DeepID2+:
Deeply learned face representations are sparse, selective, and robust[J]. CVPR, 2015
湯老師組的作品
增加通道維度conv128 fc512
增大訓練資料集
增加網路訓練監督次數,每一個pooling之後都外接fc,進行verification
LFW:99.47%
DeepID3:
DeepID3: Face Recognition with Very Deep Neural Networks
湯老師組的作品
改進:
採用了當時最新的vgg和googlenet網路結構,使得網路結構較DeepID2+更深。
繼續採用DeepID2+中的監督訊號跨層連線策略。 繼續採用DeepID2+中的25個patches(加flip)特徵組合策略。其中VGG和googlenet各訓練一半。 繼續採用DeepID2+中的joint bayesian用於驗證的策略。
FaceNet (triplet loss):
FaceNet: A unified embedding for face recognition and clustering[J]. CVPR, 2015
triplet loss:
xa ,xp 為同一類,xn與xa, xp為不同類,alpha為margin
實驗結果: Inception+triplet LFW 99.63%
優點:
不需像分類loss,對於訓練資料每類影象數有限制。當影象樣本不均衡且每類只有很少樣本時也可有效利用triplet loss。
缺點:
triplet選擇導致樣本數激增,選擇樣本簡單會導致訓練緩慢,選擇樣本過難會使得選triplet太慢且易受受噪聲干擾。所以triplet的選擇至關重要。
semi-hard的樣本選擇:
後續改進:
- triplet對選擇方式的改進,improved triplet,分別計算a,p的loss,a,n的loss,p,n的loss。
- loss計算方式的改進quadruplet loss,4個樣本,i表示anchor,j表示P,k,l都表示n,也就是1個anchor,1個正樣本,2個負樣本,2個負樣本為不同類別。
caffeFace(Centerloss):
A Discriminative Feature Learning Approach for Deep Face Recognition[C]. ECCV, 2016
siat喬宇老師組的,溫研東的1作
centerloss只約束內內的距離,對內間距離無約束。
Softmax+centerloss
訓練中計算方式,
實驗結果:
與softmax聯合使用
lamda = 0.003 alpha = 0.5
LFW 99.28%
range loss:
Range Loss for Deep Face Recognition with Long-tail. CVPR, 2017
siat喬宇老師組的,溫研東的3作,算是center loss的改進版,內內,內間距離都有約束
訓練,softmax+range loss
Dcenter表示在所有類別中,選擇2個不同類別中心距離最短的,即類別Q和類別R是所有距離中最短的。
優點:
- 解決訓練資料集分佈不均,長尾問題
- 聯合考慮了batch內所有類內類間距離
- contrastive loss, triplet loss是在兩三個樣本間獨立作比較,而range loss是多個類別所有樣本的中心距離的比較
實驗結果:
LFW結果 99.52% 實驗 k=2
Large-Margin Softmax (LSoftmax):
Large-margin softmax loss for convolutional neural networks[J].ICML, 2016
溫研東的2作
基於softmax的改進,
(1)去掉了偏置b,wx+b --> wx
(2)引入乘性margin m(cos函式內部),當m=1時,為softmax
優點:
之前的改進方法都是額外加一個內內,內間的優化loss,這樣會引入額外的引數和計算量。現在改為直接優化softmax函式。
Sphereface(ASoftmax(angular softmax)):
SphereFace: Deep Hypersphere Embedding for Face Recognition.cvpr,2017
溫研東的2作
改進:
去掉||w||影響,將權值W進行了歸一化操作,同時加入乘性margin(cos函式內部)
實驗結果:
NormFace:
Normface: L2 hypersphere embedding for face verification[C], ACM, 2017
成都電子,王峰的作品
改進:
去掉||w||和||x||影響,對權值w和輸入x都進行了歸一化操作,同時外部乘以係數s,注意必須乘以s,保證變換前和變換後整體的均值一樣。注意這裡去掉了margin。
AM-Softmax / CosFace:
Additive margin softmax for face verification[J]. IEEE Signal Processing Letters, 2018
分別為成都電子,王峰和騰訊AI Lab的2篇論文,做的同樣的工作。
改進:
w、x歸一化,將cos內部的乘性margin修改為cos外部的加性margin(該margin在cos函式的外面加)
多種margin約束比較:
Arcface(insightface)
改進:
w、x歸一化,將cos函式的外面的加性margin修改為cos函式裡面的加性margin
多種margin約束比較:
方法總結:
(1)contrastive loss (兩個樣本比較) triplet loss(三個樣本比較) range loss(mini_batch內比較)
(2)Softmax->LSoftmax(cos(m*seita))->ASoftmax(cos(m*seita),/||w|| )->Normface->(/||w||,/||x||)->AMSoftmax cosface (cos(seita)-m,/||w||,/||x||) -> arcface(cos(seita+m),/||w||,/||x||)