1. 程式人生 > >基於Triplet loss函數訓練人臉識別深度網絡(Open Face)

基於Triplet loss函數訓練人臉識別深度網絡(Open Face)

驗證 ofo 擴大 沒有 detect sent euc research 邏輯

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 模型邏輯流

最後神經網絡提取特征形成初始模型面部表示。如下圖所示:

技術分享圖片
圖4 Torch與Python結合

誤差函數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)