1.簡介:facenet 是基於 TensorFlow 的人臉識別開源庫,有興趣的同窗能夠扒扒源代碼:https://github.com/davidsandberg/facenethtml
2.安裝和配置 facenetpython
咱們先將 facenet 源代碼下載下來:git
git clone https://github.com/davidsandberg/facenet.git
在使用 facenet 前,務必安裝下列這些庫包:github
或者直接移動到 facenet 目錄下,一鍵安裝網絡
pip install -r requirements.txt
3.下載 LFW 數據集dom
LFW 是由美國馬薩諸塞大學阿姆斯特分校計算機視覺實驗室整理的。它包含13233張圖片,共5749人,其中4096人只有一張圖片,1680人的圖片多餘一張,每張圖片尺寸是250x250 。ui
下載地址:http://vis-www.cs.umass.edu/lfw/ ->Menu->Download->All images as gzipped tar filespa
下載完成後,咱們將文件解壓到 facenet/data/lfw_data/lfw 目錄下(沒有的話本身建個目錄),在 lfw_data 目錄下新建一個目錄 lfw_160,用來存放裁剪後圖片。線程
4.對圖像進行預處理code
由於程序中神經網絡使用的是谷歌的「inception resnet v1」網絡模型,這個模型的輸入時160*160的圖像,而咱們下載的LFW數據集是250*250限像素的圖像,因此須要進行圖片的預處理。
運行 facenet/src/align/align_dataset_mtcnn.py 來修改圖片尺寸大小,加入下列參數
facenet/data/lfw_data/lfw #輸入圖像文件夾 facenet/data/lfw_data/lfw_160 #輸出圖像文件夾 --image_size 160 --margin 32 --random_order--gpu_memory_fraction 0.25 #指定裁剪後圖像大小(若是不指定,默認的裁剪結果是182*182像素的)
即
python align_dataset_mtcnn.py facenet/data/lfw_data/lfw facenet/data/lfw_data/lfw_160 --image_size 160 --margin 32 --random_order--gpu_memory_fraction 0.25
若是用的是 pycharm,能夠在 RUN -> Edit Configurations 下添加參數信息,而後運行 align_dataset_mtcnn.py 文件:
**這裏本身運行的時候一直報錯提示:No module named 'align'
將 align_dataset_mtcnn.py 移動至 src 文件夾下再運行就不會報錯了。
校準後圖像大小即變爲160 x 160 。
5.評估 Google 預訓練模型在數據集中的準確性
facenet提供了兩個預訓練模型,分別是基於CASIA-WebFace和 VGGFace2人臉庫訓練的。(因爲存儲在 Google 網盤中,須要 FQ 下載使用)
GitHub 地址:https://github.com/davidsandberg/facenet
這裏我採用的是 CASIA-WebFace 預訓練模型,有興趣瞭解的小夥伴,能夠到CASIA-WebFace 官網看看:
http://www.cbsr.ia.ac.cn/english/CASIA-WebFace-Database.html
將下載好的預訓練文件解壓到 facenet/src/models目錄下:
添加參數
facenet/data/lfw_data/lfw_160 facenet/src/models/20180408-102900
運行 validate_on_lfw.py 文件。
這裏我剛開始運行的時候報錯:
發現是預訓練模型版本太舊,咱們在 facenet 上下載最新的CASIA-WebFace 訓練庫再從新運行便可。
運行結果以下:
能夠看到識別精度能夠達到 97.7%,其識別準確度仍是很是不錯的。
可是程序運行完之後雖然最終運行結果正確,可是最後卻仍是報了個錯誤:_2_input_producer: Skipping cancelled enqueue attempt with queue not closed
緣由是主線程已經關閉,可是讀取數據入隊線程還在執行入隊。
因爲本身對 TensorFlow 線程還不是特別瞭解,暫時尚未解決這個問題。