FaceNet 模型特點
該模型的主要特點在損失函數,使得所有同類人臉特徵向量的歐式距離要小於非同一人臉間的歐式距離。表達式如下:
損失函數如下,最小化L:
如上圖所示,我們能看出同一人臉的距離要遠小於不同人臉的距離。且一般我們判斷是否爲同一人只需要設置一個距離閾值即可對人臉進行判斷。
通過這兩組實驗的distance,我們很容易知道設置距離閾值0.5就可以區分趙麗穎和楊冪了!
FaceNet結構
batch:輸入一些圖像樣本,需要對原始圖像做人臉檢測,取出人臉,得到如96X96的人臉向量;
DEEP ARCHITECURE :深度神經網絡模型,一般是較爲複雜的卷積神經網絡CNN(多層)用來提取圖像特徵;
L2:對提取的特徵進行特徵歸一化處理;
EMBEDDING: 該部分是經過L2歸一化處理的特徵向量,用來表示每張人臉圖像的特徵;
Triplet Loss :該部分是一個三元損失函數。
關於Deep Architecture 結構的CNN部分,現在有很多開源的模型可以借鑑,也可以使用預訓練模型,諸如OpenFace開源項目中很多預訓練模型。
如何判別圖爲某人臉
使用圖像經過facenet模型得到的頭像特徵向量作爲訓練數據,以傳統的分類器算法如支持向量機或線性分類器等進行分類。
人臉檢測,拉伸爲同shapes的數據
使用預訓練模型步驟如下:
1.獲得數據,將要分類的頭像;
2.經過人臉檢測提取人臉;
3.將人臉拉昇同一規格,如96X96像素;
4.使用facenet預訓練模型對人臉圖像處理得到其特徵向量(一維,128);
5.對所有的人臉特徵向量做分類訓練,如傳統機器學習方法支持向量機,邏輯迴歸等。
想要實現整個代碼需要用到dlib,matplotlib,cv2,Tensorflow,keras庫等,後續有空給大家整理代碼!
-end-