基於Triplet loss函數訓練人臉識別深度網絡(Open Face)
Git: http://cmusatyalab.github.io/openface/
FaceNet’s innovation comes from four distinct factors: (a) thetriplet loss, (b) their triplet selection procedure, (c) training with 100 million to 200 million labeled images, and (d) (not discussed here) large-scale experimentation to find an network architecture.
首先resize為如下尺寸: 96*96
輸入Image(需要100M-200M張圖片)
Face detection(檢測人臉)、Preprocessing(尺度歸一、灰度校正、每一張臉都進行一次仿射變換)
輸入神經網絡(進行特征提取)最終實現面部表示
再進行分類sklearn’s SVM(python中的一個庫)
圖1 模型訓練結構
Triplet loss結構:一組三個圖像:一個標準圖像,一個正樣本(與標準同一人),一個負樣本(不同的人)
通過損失公式來調節整個網絡,公式如下,思想將在文末介紹:
圖2 Triplet loss公式
Resize(96*96)預處理采用簡單2D仿射變換可規格化臉部、訓練神經網絡-低維面部表示(神經網絡提取特征)
OpenFaceis trained with 500k images from combining the two largest labeled face recognition datasets forresearch.
e network provides an embedding on the unit
hypersphere and Euclidean distance represents similarity.
網絡提供了一種嵌入式的超平面和歐氏距離來表示相似性。
邏輯流:
圖3 模型邏輯流
最後神經網絡提取特征形成初始模型面部表示。如下圖所示:
誤差函數Triplet loss
最後,說一說基於度量學習的誤差函數Triplet loss,其思想來源如下:
其中xai表示參考樣本,xpi表示同類樣本,xni表示異類樣本,threshold表示特定閾值。該不等式可表示成下列形式:
該不等式本質上定義了同類樣本和異類樣本之間的距離關系,即:所有同類樣本之間的距離+閾值threshold,要小於異類樣本之間的距離。當距離關系不滿足上述不等式時,我們可通過求解下列誤差函數,通過反向傳播算法來調節整個網絡:
只有括號內公式的值大於0時,才計算誤差。利用該公式可分別計算出xai,xpi和xni的梯度方向,並根據反向傳播算法調節前面的網絡。
在FaceNet中,作者利用該方法與Zeiler&Fergus以及GoogLeNet中提出的網絡結構相結合,實現人臉識別,達到了很高的精度。
為了驗證TripletLoss的有效性,我們在WebFace數據庫上利用TripletLoss訓練了另一種深度卷積網來實現人臉驗證,WebFace中有該網絡的結構描述。與FaceNet不同,我們並沒有采用作者使用的semi-hard樣本選取策略,而是直接擴大batch中樣本的數量。得益於雙Titan X顯卡,BatchSize達到了540,較大的BatchSize能夠保證求得的梯度方向與semi-hard策略所求得的梯度方向相類似。
在得到TripletLoss訓練好的網絡後,我們利用Joint-Bayesian方法對網絡最後一層提取的特征進行學習,得到相似度估計模型。最終模型與DeepID在LFW測試集上的對比ROC曲線如下圖所示:
Openface nn4,small2 network改進於Facenet
基於Triplet loss函數訓練人臉識別深度網絡(Open Face)