FaceNet pre-trained模型以及FaceNet原始碼使用方法和講解
Pre-trained models
模型下載連結:https://pan.baidu.com/s/1aiSq7wGpdHIe6MUKPnXgrA 密碼:4dcn
20170512-110547(MS-Celeb-1M資料集訓練的模型檔案,微軟人臉識別資料庫,名人榜選擇前100萬名人,搜尋引擎採集每個名人100張人臉圖片。預訓練模型準確率0.993+-0.004)
Ram記憶體要求
Neural Network Model | Task | Ram |
---|---|---|
MTCNN | Facenet#align() | 100MB |
Facenet | Facenet#embedding() | 2GB |
Inception ResNet v1
人臉識別資料庫
資料庫 | 描述 | 用途 | 獲取方法 |
---|---|---|---|
CASIA-WebFace | 10k+人,約500K張圖片 | 非限制場景 | 連結 |
FaceScrub | 530人,約100k張圖片 | 非限制場景 | 連結 |
YouTube Face | 1,595個人 3,425段視訊 | 非限制場景、視訊 | 連結 |
LFW | 5k+人臉,超過10K張圖片 | 標準的人臉識別資料集 | 連結 |
MultiPIE | 337個人的不同姿態、表情、光照的人臉影象,共750k+人臉影象 | 限制場景人臉識別 | 連結 需購買 |
MegaFace |
690k不同的人的1000k人臉影象 | 新的人臉識別評測集合 | 連結 |
IJB-A | 人臉識別,人臉檢測 | 連結 | |
CAS-PEAL | 1040個人的30k+張人臉影象,主要包含姿態、表情、光照變化 | 限制場景下人臉識別 | 連結 |
Pubfig | 200個人的58k+人臉影象 | 非限制場景下的人臉識別 |
VGG2:
-- Total number of images : 3.31 Million.
-- Number of identities : 9131 (train: 8631, test: 500)
-- Number of male identities : 5452
-- Number of images per identity : 87/362.6/843 (min/avg/max)
-- Number of pose templates : list of pose template for 368 subjects (2 front templates, 2 three-quarter templates and 2 profile templates, each template containing 5 images)
-- Number of age templates : list of age template for 100 subjects (2 young templates and 2 mature templates, each template containing 5 images)
人臉檢測
資料庫 | 描述 | 用途 | 獲取方法 |
---|---|---|---|
FDDB | 2845張圖片中的5171張臉 | 標準人臉檢測評測集 | 連結 |
IJB-A | 人臉識別,人臉檢測 | 連結 | |
Caltech10k Web Faces | 10k+人臉,提供雙眼和嘴巴的座標位置 | 人臉點檢測 | 連結 |
人臉表情
資料庫 | 描述 | 用途 | 獲取方法 |
---|---|---|---|
CK+ | 137個人的不同人臉表情視訊幀 | 正面人臉表情識別 | 連結 |
人臉年齡
資料庫 | 描述 | 用途 | 獲取方法 |
---|---|---|---|
IMDB-WIKI | 包含:IMDb中20k+個名人的460k+張圖片 和維基百科62k+張圖片, 總共: 523k+張圖片 | 名人年齡、性別 | 連結 |
Adience | 包含2k+個人的26k+張人臉影象 | 人臉性別,人臉年齡段(8組) | 連結 |
CACD2000 | 2k名人160k張人臉圖片 | 人臉年齡 | 連結 |
人臉性別
資料庫 | 描述 | 用途 | 獲取方法 |
---|---|---|---|
IMDB-WIKI | 包含:IMDb中20k+個名人的460k+張圖片 和維基百科62k+張圖片, 總共: 523k+張圖片 | 名人年齡、性別 | 連結 |
Adience | 包含2k+個人的26k+張人臉影象 | 人臉性別,人臉年齡段(8組) | 連結 |
人臉關鍵點檢測
資料庫 | 描述 | 用途 | 獲取方法 |
---|---|---|---|
資料庫 | 描述 | 用途 | 獲取方法 |
人臉其它
資料庫 | 描述 | 用途 | 獲取方法 |
---|---|---|---|
CeleBrayA | 200k張人臉影象40多種人臉屬性 | 人臉屬性識別 | 獲取方法 |
前提條件:已安裝並配置好Tensorflow的執行環境。
第一步:準備facenet程式:
一、下載FaceNet原始碼。
二、精簡程式碼。作者在程式碼裡實現了很多功能,但是對於初學者來說,很多程式碼是沒有必要的,反倒找不到學習這個程式的入口。建議先精簡一下程式碼,便於讀懂程式碼:新建一個資料夾,取名:facenet,把原始碼中的src資料夾直接拷貝過來。
注:便於大家能夠看懂程式碼,以上兩步我已經完成,同時,自己執行程式之後,還對裡邊的程式碼做了詳細的註釋,如果想先了解facenet的原始碼,強烈建議下載這個,下載地址:facenet精簡版
當然,大家別忘了順手點個星哦~~~
第二步:下載預訓練模型。
模型下載連結:https://pan.baidu.com/s/1aiSq7wGpdHIe6MUKPnXgrA 密碼:4dcn
下載完成後,把預訓練模型的資料夾拷貝在剛才的資料夾裡。用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的訓練仍然可以正常工作。
最後,附上原來的檔案中各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