此文由google 於2015年發表
論文鏈接:http://xueshu.baidu.com/s?wd=paperuri%3A%28b5457de3c4f74fbbb7d4703e93dc5974%29&filter=sc_long_sign&tn=SE_xueshusource_2kduw22v&sc_vurl=http%3A%2F%2Farxiv.org%2Fabs%2F1503.03832&ie=utf-8&sc_us=12680360272531669381
1.研究問題
人臉識別、人臉驗證、人臉聚類
2.此文工作
傳統的方法:首先利用softmax 損失函數訓練網絡,然後從網絡中抽取某些層或輸出層作爲特徵,然後基於此特徵訓練分類器,對人臉進行識別、驗證。
FaceNet 則認爲最後的分類器其實也可以用網絡模擬,替代softmax。
FaceNet 採用三元損失函數訓練網絡,直接進行端到端學習一個圖像到歐式空間的編碼方式,然後基於這個編碼再做人臉識別、人臉驗證和人臉聚類。
2.1 模型結構
去掉了最後的softmax ,經過L2歸一化,得到特徵表示,再基於這個特徵計算三元組損失。
2.2 Triplet Loss
2.3 Triplet Selection
很少的數據就能產生很多的三元組,選取合適的三元組可以加快收斂速度。
最粗暴的方式是對每個樣本,找到離它最近的反例和最遠的正例,然後優化,但是這樣會有兩個問題:耗時,比訓練時間還長;容易受不好的數據主導。
採用的方法:
生成mini-batch, 每個mini-batch 中每個人平均有40張圖片,然後隨機加入一些反例
生成triplet, 不是找到所有的艱難正樣本,而是找到所有的anchor-positive 對,然後根據這些特徵對,找到semi-hard-negative
2.4 網絡結構
此文中比較了好幾個網絡,有些網絡很深,參數較多(1.4億),也有網絡較淺,參數較少(4.3百萬,此網絡可用於手機)。此文重點不在網絡,可視爲黑箱子。
2.5 人臉識別、人臉驗證、人臉聚類
當完成端到端學習到圖像到歐式空間的編碼,則可以輕鬆完成以下三個任務:
人臉識別:成爲一個k-NN 問題
人臉驗證:對兩個編碼求歐氏距離,與閾值對比
人臉聚類:利用像k-means 之類的聚類算法
2.6 實驗與討論
訓練數據:100-200M張圖像,分佈在8M個人上。恐怖!
結果:在LFW 上人臉不對齊,效果在98.87%左右,如果使用額外的人臉對齊,效果在99.63%,優於DeepID
3.總結
拋棄了softmax, 創造性的採用triplet-loss, 得到特徵的歐式編碼,使得人臉識別、驗證、聚類大大簡化。但是其超大量的訓練數據他人難以效仿。