文章位址:史上最全的FaceNet源碼使用方法和講解(一)(附預訓練模型下載下傳)轉載請注明出處。
前提條件:已安裝并配置好Tensorflow的運作環境。
第一步:準備facenet程式:
一、下載下傳FaceNet源碼。
下載下傳位址:facenet源碼
二、精簡代碼。作者在代碼裡實作了很多功能,但是對于初學者來說,很多代碼是沒有必要的,反倒找不到學習這個程式的入口。建議先精簡一下代碼,便于讀懂代碼:建立一個檔案夾,取名:facenet,把源碼中的src檔案夾直接拷貝過來。
注:便于大家能夠看懂代碼,以上兩步我已經完成,同時,自己運作程式之後,還對裡邊的代碼做了詳細的注釋,如果想先了解facenet的源碼,強烈建議下載下傳這個,下載下傳位址:facenet精簡版
當然,大家别忘了順手點個星哦~~~
第二步:下載下傳預訓練模型。
facenet提供了兩個預訓練模型,分别是基于CASIA-WebFace和MS-Celeb-1M人臉庫訓練的,不過需要去谷歌網盤下載下傳,這裡給其中一個模型的百度網盤的連結:連結: 預訓練模型百度網盤位址 密碼: 12mh
下載下傳完成後,把預訓練模型的檔案夾拷貝在剛才的檔案夾裡。用pycharm打開這個工程檔案如圖:
第三步:運作人臉比對程式(compare.py)。
facenet可以直接比對兩個人臉經過它的網絡映射之後的歐氏距離。
-1、在compare.py所在目錄下放入要比對的檔案1.png和2.png。
-2、運作compare.py檔案,但是會報錯如下:
這是因為這個程式需要輸入參數,在上方的工具欄裡選擇Run>EditConfigurations ,在Parameters中配置參數:20170512-110547 1.png 2.png。再次運作程式
可以看到,程式會算出這兩個圖檔的內插補點矩陣
第四步:圖檔預處理——運作人臉對齊程式(align\align_dataset_mtcnn.py)。
我們可以下載下傳LFW資料集用來測試這個程式,也為後邊的訓練函數做好資料準備。
下載下傳連結:http://vis-www.cs.umass.edu/lfw/。下載下傳後解壓在data檔案夾中。
因為程式中神經網絡使用的是谷歌的“inception resnet v1”網絡模型,這個模型的輸入時160160的圖像,而我們下載下傳的LFW資料集是250250限像素的圖像,是以需要進行圖檔的預處理。
在運作時需要輸入的參數:
input_dir:輸入圖像的檔案夾(E:\facenet\data\lfw E:\facenet\data\lfw)
output_dir:輸出圖像的檔案夾(E:\facenet\data\lfw E:\facenet\data\lfw_160)
指定裁剪後圖檔的大小:–image_size 160 --margin 32 --random_order(如果不指定,預設的裁剪結果是182*182像素的)
比如我的是:E:\facenet\data\lfw E:\facenet\data\lfw_160 --image_size 160 --margin 32 --random_order
如果在pycharm中運作,按照同樣的方法配置以上參數如下:
第五步:運作訓練程式:(train_tripletloss.py)。
前邊已經下載下傳并處理好了LFW的資料集,現在,可以進行訓練了。
運作之前,要在train_tripletloss.py中把加載資料的路徑改成自己的資料集所在路徑,如下圖:
注:train_tripletloss.py和train_softmax.py的差別:這是作者對論文做出的一個延伸,除了使用facenet裡提到的train_tripletloss三元組損失函數來訓練,還實作了用softmax的訓練方法來訓練。當然,在樣本量很小的情況下,用softmax訓練會更容易收斂。但是,當訓練集中包含大量的不同個體(超過10萬)時,最後一層的softmax輸出數量就會變得非常大,但是使用train_tripletloss的訓練仍然可以正常工作。
更多内容參見:史上最全的FaceNet源碼使用方法和講解(二)
最後,附上原來的檔案中各py檔案的作用(持續更新):
一、主要函數
align/ :用于人臉檢測與人臉對齊的神經網絡
facenet :用于人臉映射的神經網絡
util/plot_learning_curves.m:這是用來在訓練softmax模型的時候用matlab顯示訓練過程的程式
二、facenet/contributed/相關函數:
1、基于mtcnn與facenet的人臉聚類
代碼:facenet/contributed/cluster.py(facenet/contributed/clustering.py實作了相似的功能,隻是沒有mtcnn進行檢測這一步)
主要功能:
① 使用mtcnn進行人臉檢測并對齊與裁剪
② 對裁剪的人臉使用facenet進行embedding
③ 對embedding的特征向量使用歐式距離進行聚類
2、基于mtcnn與facenet的人臉識别(輸入單張圖檔判斷這人是誰)
代碼:facenet/contributed/predict.py
主要功能:
① 使用mtcnn進行人臉檢測并對齊與裁剪
② 對裁剪的人臉使用facenet進行embedding
③ 執行predict.py進行人臉識别(需要訓練好的svm模型)
3、以numpy數組的形式輸出人臉聚類和圖像标簽
代碼:facenet/contributed/export_embeddings.py
主要功能:
① 需要對資料進行對齊與裁剪做為輸入資料
② 輸出embeddings.npy;labels.npy;label_strings.npy
作者:東寫西讀1
來源:CSDN
原文:https://blog.csdn.net/u013044310/article/details/79556099
版權聲明:本文為部落客原創文章,轉載請附上博文連結!