FaceNet源碼解讀:史上最全的FaceNet源碼使用方法和講解(一)(附預訓練模型下載)

文章地址:史上最全的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”網絡模型,這個模型的輸入時160*160的圖像,而我們下載的LFW數據集是250*250限像素的圖像,所以需要進行圖片的預處理。

在運行時需要輸入的參數:

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

 

個人知乎主頁地址:知乎個人主頁,主要寫大數據分析,機器學習等相關係列文章,還有一些新發布科技產品的思考,歡迎關注。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章