FaceNet: A Unified Embedding for Face Recognition and Clustering

本文有以下幾個亮點:一是利用DNN直接學習到從原始圖片到歐氏距離空間的映射,從而使得在歐式空間裏的距離的度量直接關聯着人臉相似度;二是引入triplet損失函數,使得模型的學習能力更高效。

這裏寫圖片描述
本文的模型示意圖如上,輸入層後緊接着DNN,然後再運用L2正則化避免模型的過擬合,最後接上triplet損失函數層,以反映在人臉驗證、識別和聚類中所想要的結果。這裏的關鍵就是triplet損失函數的確定,我們想要的結果就是,找到嵌入函數f(x),使得所有人臉之間的距離較小,但不同配對人臉間的距離較大。

首先我們來看看本文中用到的網絡模型:ZF-Net和GoogleNet。

這裏寫圖片描述
在ZF-Net可以看到,在前幾個卷積層中加入了1*1*d的卷積層, 有效的減小了參數的個數。但和GoogleNet相比,參數量還是很大。爲了使得模型可以嵌入到移動設備中,本文中也對模型進行了裁剪,NNS1即只需要26M的參數和220M的浮點運算開銷,NNS2則只有4.3M的參數和20M的浮點運算量,NN3和NN2的模型一樣,但輸入圖片大小隻有160*160,而NN4則是96*96,這樣極大幅度的降低了對CPU的需求。

這裏寫圖片描述
上圖給出了在精確率和運算量上這四個模型之間的比較。可以看到,模型越複雜精確率越高,其所需的運算開銷也會隨之增大。
同時需要注意的是,NN2和NN1達到的精確率相當,但NN2所用的參數卻大大減少,不過運算量卻又沒降下來。這是一個值得思考的地方。

接下來看看triplet損失函數的確定。嵌入函數f(x)將輸入圖片x嵌入到一個d維的歐式空間,同時對嵌入引入限制,即這裏寫圖片描述。一如上述所述,我們需要使得配對人臉間的距離比任何其他人臉之間的距離都要小。假設定標圖片記爲這裏寫圖片描述,配對圖片記爲這裏寫圖片描述,其他圖片記爲這裏寫圖片描述,則我們想要的效果是:
這裏寫圖片描述。式中的a是強化配對圖片和費配對圖片之間邊界的量,而T是在訓練集上所有可能的triplet。所以,損失函數就可以寫成:
這裏寫圖片描述
需要注意的是,若生成所有可能的triplet,會導致很多的triplet滿足條件,而這些triplet對訓練沒有任何益處且會導致收斂變慢,所以選擇合適的triplet很關鍵。

爲了加速收斂過程,選擇那些不滿足條件的triplet至爲關鍵,即給定這裏寫圖片描述,需要選定這裏寫圖片描述使得述,同時這裏寫圖片描述。不過計算上述兩個量不方便,可以通過以下兩種方法解決:
1)在數據子集上利用網絡最近的檢測點計算argmin和argmax,並且每n步線下生成triplets。
2)通過從小批量樣本中選擇hard positive/negtive樣例來生成triplets。

同時本文也對該網絡對圖片質量、嵌入維度的大小以及訓練集大小的敏感性做了分析。

實踐發現該模型對圖片質量的高低有着較好的魯棒性,即使JPEG的質量降低20倍,性能仍然能保持。如下圖所示:
這裏寫圖片描述

對於嵌入維度而言,維度越大性能應該越好,但其需要的數據集也會變大,所以此處的衡量不能一概而論。
而增大訓練集卻是可以提高模型的性能,但因爲網絡的學習能力有限,一旦數據集達到某一極限時性能也開始達到瓶頸。

本文的triplets實現是個值得深入思考的地方。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章