讀古今文學網 > 刷臉背後:人臉檢測 人臉識別 人臉檢索 > 6.1 DeepID算法[1] >

6.1 DeepID算法[1]

DeepID算法[1]是基於深度卷積神經網絡的人臉識別算法,該算法由Y.Sun等人在2014年提出。在LFW數據集上,DeepID算法具有99%的識別準確度。在本書中,由於CelebFaces和CelebFaces+數據庫並未公開,所以我們在CASIAWebFace[2]數據庫上進行訓練,在LFW[3]數據集上進行實驗驗證。LFW數據集包含10 575個人,共有494 414張圖片,該數據集中每人均有多張圖片。本文只基於Caffe 深度學習平台[4]實現了其中一個DeepID深度神經網絡,並用於提取人臉的特徵。然後,通過計算LFW數據集上6000對圖片特徵向量的夾角餘弦距離,進行人臉識別的驗證,即計算每對人臉(深度特徵之間)的夾角餘弦距離,並求解最優的夾角餘弦距離閾值。

Caffe平台的安裝請參考如下文獻:http://caffe.berkeleyvision.org/installation.html和http://blog.csdn.net/wangpengfei163/article/details/50488079。

6.1.1 DeepID算法的原理

本書實現的DeepID算法流程如下。

(1)首先使用Y.Sun等人[5]提出的面部檢測軟件,檢測出所使用的數據集中每張圖片中的人臉邊框信息,根據人臉邊框信息檢測面部關鍵點,包括2個眼部中點、鼻尖和2個嘴角,共5個面部關鍵點。根據這5個關鍵點首先產生10個切片(包括5個全局區域和5個以關鍵點為中心的局部區域),如圖6-1(上)所示。每張切片有3種尺寸,如圖6-1(下)所示。其又分為灰度圖和RGB圖兩種,因此每張檢測出來的人臉被處理成了對應的60個切片。

圖6-1 人臉切片(上部:左邊五個為全局區域,右邊五個為以檢測到的五個關鍵點產生的局部區域;下部:其中兩個切片的三個不同的尺寸)

分別對這60種切片(共60種切片,數據集中每個圖像上得到的60個切片,分別放到這60種切片中)訓練深度模型,共訓練得到60個深度網絡結構模型(每種切片對應一種深度模型)。然後,對每個圖像的60個切片,就可以分別使用這60個深度模型對對應切片提取深度特徵了。這樣,每個切片上可以得到一個160維的特徵(DeepID特徵向量)。接著,對每個切片進行水平翻轉,然後使用相同的深度模型提取特徵。最後,每張人臉圖片對應的總的DeepID特徵向量維度為19 200(160×2×60)。

(2)LFW數據集包含了5749個人,只有85個人的圖片超過了15張,4069個人只有一張圖片。可以看出,LFW數據集並不適合訓練模型(因為在5749個人中,只有1680個人有兩張及以上的圖片,故不適合訓練機器學習模型)。於是本書採用了CelebFaces數據庫,隨機選取人數的80%(4349個人)來訓練DeepID模型,剩餘的20%用於訓練人臉驗證模型。在深度特徵學習的過程中,使用了切片和該切片對應的水平翻轉切片,隨機選擇每個人10%的圖片來作為訓練DeepID模型的驗證數據。

(3)為了驗證論文中的算法和評估結果,選擇使用了擴展數據庫CelebFaces+,該數據庫包含10 177個人,共有202 599張圖片。隨機選取8700個人訓練DeepID模型,剩下的1477個人用來訓練聯合貝葉斯模型做人臉驗證。通過使用5種不同的尺寸,將每個圖像的切片數量提高到100個,每個圖像的特徵向量維度提高到32 000,然後使用PCA將其降維到150維。實驗結果表明,本書設計的方法在LFW數據集中實現了97.20%的準確率(對LFW數據集中的6000對圖片,分別計算每對人臉圖像的特徵向量的夾角餘弦距離,來進行人臉識別的驗證)。考慮到數據分佈的影響,最終選擇使用一種遷移學習算法和10折交叉驗證,在LFW數據集中實現了97.45%的準確率。

6.1.2 DeepID算法的流程

整體操作步驟如下。

(1)運行源碼中process_data/Face_Detect_Master文件夾下的process_data_master.m文件剪切圖片。

(2)運行源碼中preprocess_data/Face_Detect_Master文件夾下的split_data.m文件,將數據劃分成訓練集和驗證集。

(3)運行源碼中extract_featuredeepID_webFacemodel文件夾下的run_deep IDnet.sh文件,最終會得到後綴名為.caffemodel的模型文件。

(4)在源碼中extract_feature文件夾下,getDeepID.m文件可以實現對指定文件列表中的所有圖片進行提取深度特徵,classify.m可以利用提取到的深度特徵和夾角餘弦距離進行人臉驗證。

DeepID算法的具體實現細節如下。

1.數據預處理

這部分主要是進行數據預處理,代碼保存在源碼文件夾 code/preprocess_data 下。

(1)我們首先使用Y.Sun等人[5]提出的面部檢測方法,檢測出所使用的數據庫中每張圖片中包含的人臉邊框信息,如圖6-2所示。

圖6-2 原始圖片和裁剪出的面部區域

運行所提供的源碼文件process_data/Face_Detect_Master工具,在process_data_master.m文件中指定原始圖片路徑、剪切後圖片保存路徑和圖片剪切後尺寸。運行process_data_master.m文件,process_data/Face_Detect_Master/Output文件夾中會生成檢測到的圖片邊框和關鍵點信息的文件,會在指定的剪切路徑下生成對應剪切尺寸的圖片。process_data_master.m文件內容如下:

(2)運行源碼中preprocess_data/Face_Detect_Master文件夾下的split_data.m文件,隨機選取圖片數的10%作為驗證集,剩餘圖片作為訓練集,需要指定圖片數據的路徑,生成訓練集文件train.txt和測試集文件test.txt,文件中每行包含對應的圖片路徑和標籤。split_data.m文件內容如下:

2.深度網絡結構

我們使用DeepID網絡結構[1],主要包括4個卷積層、3個下採樣層(Pooling層)和2個全連接層、1個線性修正單元(ReLU層)及標記所屬類別的輸出層。網絡最後一個全連接層的輸出需要設置為類別數,輸入圖片尺寸:長方形切片尺寸為39×31×k,正方形切片尺寸為31×31×k,其中k=3表示為彩色圖像,k=1表示為灰度圖像。輸出為屬於每個類別的概率值。我們選擇網絡結構中的倒數第二個全連接層作為要提取的深度特徵層(DeepID層,維度為160),由於該層後跟有線性修正單元(ReLU層),所以提取出的深度特徵向量都是非負值。使用的網絡結構如圖6-3所示。

圖6-3 DeepID網絡結構[1]

DeepID網絡結構說明:該網絡結構包括4個卷積層、3個下採樣層和2個全連接層。每一個立方體的維度分別表示輸入層、卷積層、下採樣層的長度、寬度和高度。內部的小正方形表示卷積核的尺寸。DeepID層連接了第四個卷積層和第三個下採樣層,實現了整體特徵和局部特徵的結合,稱為多尺度網絡結構。

我們使用的圖片尺寸為48×48,訓練模型所需源碼在extract_feature/deep ID_webFace/model文件夾下,所包含的文件如圖6-4所示。

圖6-4 訓練深度學習模型需要使用的文件夾下的文件列表

train_val.prototxt文件定義了DeepID網絡結構、訓練集和驗證集,solver.prototxt文件定義了訓練網絡所需的網絡參數,deploy.prototxt用於提取深度特徵。

在安裝有Caffe環境的Ubuntu系統中,運行run_deepIDnet.sh文件,最終會得到後綴名為.caffemodel的模型文件。run_deepIDnet.sh文件內容如下:

說明:源碼中涉及的路徑問題,請更改為讀者自己的對應路徑。

3.提取深度特徵與人臉驗證

上文已經提到,本實驗進行人臉驗證時,對LFW數據集中的6000對圖片,分別計算每對人臉圖像的特徵向量的夾角餘弦距離,根據該距離的大小判斷兩個圖像是否是同一個人。

本實驗選擇圖6-3 中的DeepID網絡結構中的倒數第二個全連接層作為要提取的深度特徵層。在本實驗中,對LFW數據集中的每張圖片,我們只使用了一個切片(人臉區域),因此每張圖片上最後得到的特徵向量維度為160。

我們窮舉不同的閾值,分別獲得對應的準確率。最後採用最高準確率對應的閾值,作為本實驗的最終結果。

該部分對應的代碼包含在源碼中extract_feature文件夾下,getDeepID.m文件可以實現對指定文件列表中的所有圖片進行提取深度特徵,classify.m可以利用提取到的深度特徵和夾角餘弦距離進行人臉驗證。

getDeepID.m文件內容如下:

classify.m文件內容如下:

6.1.3 DeepID算法的結果

本部分介紹我們的實驗結果。我們在CASIA-WebFace數據庫中訓練DeepID模型,進行特徵學習;在LFW數據集中進行實驗驗證。由於CASIA-WebFace數據庫中每人對應的圖片並不相等,因此在該數據庫中獲得的數據是不均衡的,而且存在圖片錯誤歸類的情況,會對實驗結果造成一定的影響。

1.人臉識別數據

(1)我們在CASIA-WebFace數據庫上訓練DeepID模型,進行特徵學習。該數據庫包含10 575個人,共有494 414張圖片,每人均有多張圖片。圖6-5所示為 CASIA-WebFace數據庫中的一些樣例圖片。

圖6-5 CASIA-WebFace數據庫中的一些樣例圖片

(2)我們主要在LFW數據集上進行人臉驗證,該數據集中一共有5749個人,但4069個人只有一張對應的圖片,而只有85個人的圖片多於15張。圖6-6所示為LFW數據集中的一些樣例圖片。

圖6-6 LFW數據集中的一些樣例圖片

2.實驗細節

在實驗中,數據預處理方法使用6.1.1節中介紹的方法,生成每個原始圖片樣本對應的1個切片圖。使用6.1.2節中介紹的方法提取深度特徵,獲得每個原始圖片樣本對應的160維的特徵向量。

通過數據預處理得到數據集,我們隨機選取每個人10%的圖片作為訓練DeepID模型的驗證數據,然後使用訓練得到的模型提取LFW數據集中6000對數據的深度特徵,計算6000對特徵向量的夾角餘弦距離。通過窮舉不同的閾值,得到不同的準確率,我們選擇最高準確率作為最終的驗證準確率。最終準確率為0.823 167。得到的準確率並不高,主要原因如下:

(1)CASIA-WebFace數據庫中每人對應的圖片並不相等,因此在該數據庫中獲得的數據是不均衡的,而且存在圖片錯誤歸類的情況,會對實驗結果造成一定的影響。

(2)該實驗中沒有使用一些數據增強的方法(增加切片數目的方法)。有興趣的讀者,可以嘗試篩選CASIA-WebFace數據庫,去除錯誤標記的圖片和使用一些數據增強技術(增加切片數目的方法,如每個圖像產生60×2個切片)來提高最終驗證準確率。

我們嘗試了不同的參數組合,如逐漸減小學習率、調整批處理大小、測試不同的迭代次數,最終選擇較好的參數組合來調優深度學習模型,用於提取深度特徵向量。