谷歌人臉識別系統FaceNet解析

論文筆記:FaceNet- A Unified Embedding for Face Recognition and Clustering

簡介:

近年來,人臉識別技術取得了飛速的進展,但是人臉驗證和識別在自然條件中應用仍然存在困難。本文中,作者開發了一個新的人臉識別系統:FaceNet,可以直接將人臉圖像映射到歐幾里得空間,空間距離的長度代表了人臉圖像的相似性。只要該映射空間生成,人臉識別,驗證和聚類等任務就可以輕鬆完成。文章的方法是基於深度卷積神經網路。FaceNet在LFW數據集上,準確率為0.9963,在YouTube Faces DB數據集上,準確率為0.9512。

1,前言

FaceNet是一個通用的系統,可以用於人臉驗證(是否是同一人?),識別(這個人是誰?)和聚類(尋找類似的人?)。FaceNet採用的方法是通過卷積神經網路學習將圖像映射到歐幾里得空間。空間距離直接和圖片相似度相關:同一個人的不同圖像在空間距離很小,不同人的圖像在空間中有較大的距離。只要該映射確定下來,相關的人臉識別任務就變得很簡單。

當前存在的基於深度神經網路的人臉識別模型使用了分類層(classification layer):中間層為人臉圖像的向量映射,然後以分類層作為輸出層。這類方法的弊端是不直接和效率低。

與當前方法不同,FaceNet直接使用基於triplets的LMNN(最大邊界近鄰分類)的loss函數訓練神經網路,網路直接輸出為128維度的向量空間。我們選取的triplets(三聯子)包含兩個匹配臉部縮略圖和一個非匹配的臉部縮略圖,loss函數目標是通過距離邊界區分正負類,如圖1-1所示。

圖1-1 模型結構

臉部縮略圖為緊密裁剪的臉部區域,沒有使用2d,3d對齊以及放大轉換等預處理。

本文中,作者探索了兩類深度卷積神經網路。第一類為Zeiler&Fergus研究中使用的神經網路,我們在網路後面加了多個1*1*d卷積層;第二類為Inception網路。模型結構的末端使用triplet loss來直接分類。triplet loss 的啟發是傳統loss函數趨向於將有一類特徵的人臉圖像映射到同一個空間。而triplet loss嘗試將一個個體的人臉圖像和其它人臉圖像分開。下文包含以下內容:

  • 三聯子(triplets)loss

  • triplets篩選方法

  • 模型結構描述

  • 實驗結果
  • 評論

2,三聯子(triplets)loss

模型的目的是將人臉圖像X embedding入d維度的歐幾里得空間f(x)in R^{d} 。在該向量空間內,我們希望保證單個個體的圖像x_{i}^{a} (anchor) 和該個體的其它圖像x_{i}^{p} (positive) 距離近,與其它個體的圖像x_{i}^{n} (negtive) 距離遠。如圖5-1所示:

圖2-1 triplet loss示意圖

其中,alpha 為positive/negtive的邊界。

3, triplets篩選

triplets 的選擇對模型的收斂非常重要。如公式1所示,對於x_{i}^{a} ,我們我們需要選擇同一個體的不同圖片x_{i}^{p} ,使argmax_{x_{i}^{p} } left| left| f(x_{i}^{a} )-f(x_{i}^{p} )
ight|  
ight| _{2}^{2} ;同時,還需要選擇不同個體的圖片x_{i}^{n} ,使得argmin_{x_{i}^{n} } left| left| f(x_{i}^{a} )-f(x_{i}^{n} )
ight|  
ight| _{2}^{2} 。在實際訓練中,跨越所有訓練樣本來計算argmin和argmax是不現實的,還會由於錯誤標籤圖像導致訓練收斂困難。實際訓練中,有兩種方法來進行篩選:一,每隔n步,計運算元集的argmin和argmax。

二,在線生成triplets,即在每個mini-batch中進行篩選positive/negative樣本。

本文中,我們採用在線生成triplets的方法。我們選擇了大樣本的mini-batch(1800樣本/batch)來增加每個batch的樣本數量。每個mini-batch中,我們對單個個體選擇40張人臉圖片作為正樣本,隨機篩選其它人臉圖片作為負樣本。負樣本選擇不當也可能導致訓練過早進入局部最小。為了避免,我們採用如下公式來幫助篩選負樣本:

4, 深度卷積神經網路

採用adagrad優化器,使用隨機梯度下降法訓練CNN模型。在cpu集群上訓練了1000-2000小時。邊界值alpha 設定為0.2。總共實驗了兩類模型,參數如表4-1和表4-2所示。

表4-1 CNN模型1

表4-2CNN模型2

5, 實驗結果

作者採用了約8million個個體的將近100million-200million張人臉縮略圖。人臉縮略圖通過臉部檢測器緊密裁剪生成。最後,在四類數據集上評價零FaceNet:

  • hold-out 測試集:從訓練集中分出100million圖像作為測試集。

  • 個人照片:總共包括12k個人照片。

  • 學術數據集:我們採用了LFW數據集和Youtube Faces DB。

5.1 計算量與準確率權衡

在測試中,隨著神經網路深度增加,計算量增加,準確率也增加,如表5-1和圖5-1所示。

表5-1 深度神經網路結構與VAL

圖5-1 計算量(FLOPS)與準確率關係

5.2 CNN模型結構對loss的影響

作者考察了不同CNN模型對結果的影響,如圖5-2所示。

圖5-2 網路結構對VAL的影響

5.3 圖像質量對結果的影響

模型對圖像質量(像素值)不敏感,即使80*80像素的圖片生成的結果也可以接受,如表5-2所示。

表5-2 圖像質量(像素值)對結果的影響

5.4 Embedding維度對結果的影響

作者測試了不同的embedding維度,結果如表5-3所示,發現128維度是最為合適的。

表5-3 不同輸出維度對結果的影響

5.5 訓練數據量對結果的影響

隨著訓練數據量的增加,準確率也隨之增加,如表5-4所示。

表5-4 訓練數據量與VAL

5.6 評價結果

FaceNet在LFW數據集上取得了99.63%pm 0.09的準確率;在Youtube Faces DB數據集上獲得了95.12%pm 0.39的結果。在個人照片的數據集上,對單個個體進行embeding後聚類測試,結果如圖5-3所示。

圖5-3 對單個個體的不同照片進行聚類的結果

6, 評論

FaceNet是google的工作,工作量非常大,結果也很好。FaceNet是一種直接將人臉圖像embedding進入歐幾里得空間的方法。該模型的優點是只需要對圖片進行很少量的處理(只需要裁剪臉部區域,而不需要額外預處理,比如3d對齊等),即可作為模型輸入。同時,該模型在數據集上準確率非常高。未來的工作可以有幾個方向:

一,分析錯誤的樣本,進一步提高識別精度,特別是增加模型在現實場景中的識別精度。

二,以該模型為基礎,將其用於現實應用開發中。(預告:後續文章中,我將對使用FaceNet進行人臉識別的項目源碼進行解析,敬請關注)

三,減少模型大小,減少對cpu計算量的消耗,以及減少訓練時間(作者在cpu集群上需要1000-2000小時的訓練。)
推薦閱讀:

TAG:深度学习DeepLearning | 人脸识别 |