人臉識別(Facenet)

人臉識別是目前應用非常廣泛的一種生物識別技術,與其他生物識別技術(指紋識別,掌形識別,眼虹膜識別和聲音識別)相比,人臉識別具有以下優勢:

  • 其他每種生物識別方法都需要一些人的配合動作,而人臉識別不需要被動配合,可以自動用在隱蔽的場合,如公安部門監控行動;
  • 當記錄一個企圖登入的人的生物記錄時,只有人臉能更直觀,更方便的核查該人的身份;

由於與傳統的生物識別技術相比,人臉識別具有更為簡便、準確、經濟及可擴充套件性良好等眾多優勢,可廣泛應用於安全驗證、監控、控制等各個方面。 人臉相關的任務有以下幾種:

  • 人臉檢測(將圖片中包含的人臉進行初步定位,以及關鍵點如眼睛、鼻子、嘴巴等更精細的定位,文章封面即為典型人臉檢測結果);
  • 人臉跟蹤(視訊中跟蹤人臉位置變化);
  • 人臉驗證(輸入兩張人臉,判定是否屬於同一人);
  • 人臉識別(輸入一張人臉,判斷其屬於人臉資料庫全部記錄中具體哪一人);
  • 人臉聚類(輸入一批人臉,將屬於同一人的自動歸為一類);

準備工作

1. 確保已安裝TensorFlow;

2. 確保已安裝Anaconda整合環境或者在python下安裝以下依賴;

3. 更新Sklearn至最新版本,在Anaconda prompt內輸入以下命令:

pip install –U scikit-learn

安裝介面如下:

下載Facenet原始碼工程

1. 原始碼下載地址:https://github.com/davidsandberg/facenet.git

2. 將下載的原始碼解壓,如圖所示:

安裝和配置Facenet環境

1. 在自己電腦對應的Anaconda3\Lib\site-packages目錄下,新建facenet資料夾,本人的目錄如下:

2. 然後,將facenet-master\src目錄下的全部檔案複製到上面新建的facenet資料夾內;

facenet-master\src目錄下的全部檔案資訊如下:

複製到facenet目錄內,如下:

3. 最後,在Anaconda Prompt內輸入import facenet,不會報錯即可,如下:

 下載LFW資料集

1. LFW資料集是由美國馬薩諸塞大學阿姆斯特分校計算機視覺實驗室整理的人臉檢測資料集,是評估人臉識別演算法效果的公開測試資料集,全稱為帶標籤的自然人臉資料庫(Labeled Faces in the Wild);

2. LFW資料庫內每張圖片命名方式為“lfw/name/name_xxxx.jpg”,這裡“xxxx”是前面補零的四點陣圖片編號。例如,前美國總統喬治•W•布什的第10張圖片為“lfw/George_W_Bush/George_W_Bush_0010.jpg”。

3. LFW資料庫 總共有 13233 張 JPEG 格式圖片,屬於 5749 個不同人。每張圖片尺寸都是 250×250;

4. 資料庫下載地址:http://vis-www.cs.umass.edu/lfw/lfw.tgz

5. 下載完成後,把資料集解壓到facenet\data\lfw\raw下面,如下:

對LFW資料集進行預處理

1. 在下載的資料集內新建一個空資料夾,命名為“lfw_160”;

原影象大小為250*250,如下圖:

2. 我們需要將待檢測所使用的資料集校準為和預訓練模型所使用的資料集大小一致(160*160),轉換後的資料集儲存在lfw_160資料夾內;

3. 設定環境變數,在計算機–>屬性–>高階系統設定–>環境變數 中,新建PYTHONPATH,鍵入

C:\ProgramFiles\Anaconda3\Lib\site-packages\facenet,如圖所示;

4. 在cmd命令列下面,輸入set,檢視設定情況,如下:

5. 開啟Anaconda Prompt切換到facenet目錄,輸入如下命令進行校準:

python src\align\align_dataset_mtcnn.py --help

6. 再輸入如下命令:

python src\align\align_dataset_mtcnn.py data/lfw/rawdata/lfw/lfw_160 --image_size 160 --margin 32 --random_order --gpu_memory_fraction0.25

經過20-30分鐘,圖片轉換結束,如下:

7. 校準後,發現影象大小變成160*160;

下載訓練好的網路模型

1. facenet提供了兩個預訓練模型,分別是基於CASIA-WebFace和MS-Celeb-1M人臉庫訓練的,如下:

2. 第一個模型20170511-185253下載地址:

https://drive.google.com/file/d/0B5MzpY9kBtDVOTVnU3NIaUdySFE/edit

第二個模型20170512-110547下載地址:

https://drive.google.com/file/d/0B5MzpY9kBtDVZ2RpVDYwWmxoSUk/edit

3. 本人使用的是基於資料集CASIA-WebFace採用Inception ResNet v1神經網路結構訓練好的模型。模型儲存在Google網盤,需要翻牆。推薦大家用Lantern;

4. 把下載的檔案解壓到src\models\目錄下面,如下所示:

5. 程式也下載了,測試資料集LFW也有了,模型也有了,接下來就是評估模型的準確率;

評估預訓練模型的準確率

1. 在cmd命令列或者Anaconda Propmt下定位到facenet資料夾下;

2. 輸入以下命令:

Python src\validate_on_lfw.py data\lfw\lfw_160 src\models\20170511-185252\20170511-185252

預測中,結果如圖:

人臉對比

1. Facenet可以直接對比2個人臉經過它的網路對映之後的歐式距離;

執行程式為facenet-master\src\compare.py;

2. 在compare.py所在目錄下放入要對比的人臉影象43.jpg和44.jpg(完全不同的2人臉圖);

3. 在Anaconda Prompt視窗使用cd進到compare.py所在路徑;

4. 輸入如下命令:

python compare.py models\20170511-185253\20170511-185253 43.jpg 44.jpg

左圖為43.jpg,右圖為44.jpg:

 

執行結果如下:

5. 從LFW資料集內隨機選取同一人的2人臉圖;

複製到與compare.py同級的目錄下:

6. 在Anaconda Prompt內輸入如下命令:

python compare.py models\20170511-185253\20170511-185253 Cate_Blanchett_0001.png  Cate_Blanchett_0002.png

執行結果如圖: