TensorFlow實現人臉檢測和人臉識別
facenet 進行人臉識別測試
1.簡介:facenet 是基於 TensorFlow 的人臉識別開源庫,有興趣的同學可以扒扒原始碼:https://github.com/davidsandberg/facenet
2.安裝和配置 facenet
我們先將 facenet 原始碼下載下來:
git clone https://github.com/davidsandberg/facenet.git
在使用 facenet 前,務必安裝下列這些庫包:
或者直接移動到 facenet 目錄下,一鍵安裝
pip install -r requirements.txt
3.下載 LFW 資料集
LFW 是由美國馬薩諸塞大學阿姆斯特分校計算機視覺實驗室整理的。它包含13233張圖片,共5749人,其中4096人只有一張圖片,1680人的圖片多餘一張,每張圖片尺寸是250x250 。
下載地址:http://vis-www.cs.umass.edu/lfw/ ->Menu->Download->All images as gzipped tar file
下載完成後,我們將檔案解壓到 facenet/data/lfw_data/lfw 目錄下(沒有的話自己建個目錄),在 lfw_data 目錄下新建一個目錄 lfw_160,用來存放裁剪後圖片。
4.對影象進行預處理
因為程式中神經網路使用的是谷歌的“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 執行緒還不是特別瞭解,暫時還沒有解決這個問題。