讀古今文學網 > 刷臉背後:人臉檢測 人臉識別 人臉檢索 > 6.2 VGG Face Descriptor算法 >

6.2 VGG Face Descriptor算法

VGG Face Descriptor算法[6]基於卷積神經網絡,其源代碼鏈接為http://www.robots.ox.ac.uk/~vgg/software/vgg_face/,本書直接使用作者提供的訓練模型提取圖片特徵。特徵提取的網絡結構保存在VGG_FACE_16_deploy.prototxt文件中。該算法使用論文中提供的數據集作為訓練特徵模型的數據集,在LFW和YFW[7](Youtube Faces in the Wild)兩個數據集上驗證最終準確率。

6.2.1 VGG Face Descriptor算法的原理

實現VGG Face Descriptor算法的步驟[6]如下。

(1)數據預處理:1首先使用文獻[8]中的軟件/方法對圖像數據集(包括訓練圖像集、驗證圖像集、測試圖像集三部分)中的每張圖像進行人臉檢測;2將檢測到的每張人臉圖像縮放到227×227像素;3計算訓練圖像集的像素均值,將訓練圖像集和驗證圖像集的每張圖像的所有像素值同時減去該均值;4在使用訓練圖像集、驗證圖像集訓練深度特徵模型之前,以224×224像素的尺寸隨機剪切(Crop)訓練圖像集中的每張圖片;5隨機選取訓練圖像集中50%的圖片進行水平翻轉。

(2)設置深度學習的網絡結構參數:網絡中權重初始化為均值為0,標準差為0.01,權重衰減設置為0.0005,學習率設置為0.01;然後以10的倍數減小學習率以訓練模型。最終,選擇在驗證圖像集上預測損失(Loss)最低的一組網絡結構參數,作為深度學習模型的最終參數。

(3)特徵提取:1對於測試圖像集中的每張圖像,以224×224像素的尺寸,分別從該圖像的中心和四個邊角進行圖像剪切,並對這些切片進行水平翻轉,最終每張圖像可以得到10個224×224像素尺寸的切片;2使用(2)中最終訓練得到的深度特徵模型,對該圖像的10個切片分別提取特徵(每個切片能得到4096維的特徵向量);3對這10個切片上的4096維的特徵向量求均值,就得到了該圖像對應的4096維的特徵向量;4為了實現多尺度提取特徵,可以首先將圖片縮放到256×256像素、384×384像素和512×512像素三個尺寸,對這三個尺寸的圖像分別按照1、2、3中的步驟提取到4096維的特徵向量,最後得到3個4096維的特徵向量,再對這3個4096維的特徵向量求均值,作為該圖像最終的特徵向量,維度為4096。

(4)人臉驗證:提取LFW數據集中每對人臉的深度特徵向量,使用歐氏距離進行人臉驗證。

6.2.2 VGG Face Descriptor算法的實現

文獻[6]的作者公開了VGG Face Descriptor的源代碼,網址為http://www.robots.ox.ac.uk/~vgg/software/vgg_face/。源代碼中包括特徵提取的配置文件VGG_FACE_16_deploy.prototxt、文獻[6]中訓練得到的深度學習模型VGG_FACE.caffemodel、示例圖片ak.jpg和運行示例文件matcaffe_demo_vgg_face.m,該文件用於對測試數據集中的圖像進行分類。

修改、運行matcaffe_demo_vgg_face.m文件,假設要測試ak.jpg(對應人名為Aamir_Khan)圖像對應的人的標籤,運行該文件後即可預測該圖像對應的人的標籤。該示例ak.jpg的預測結果為3,從源碼中提供的name.txt文件中找到第3行名稱是Aamir_Khan,則可知該預測是正確的。

matcaffe_demo_vgg_face.m文件由文獻[6]提供,其主要內容如下:

如果僅僅要提取該圖像的深度特徵(而不需要預測該圖像的標籤),則只需要去掉VGG_FACE_16_deploy.prototxt文件中輸出為2622的全連接層,即可提取到輸入圖片img的4096維的特徵向量。

去掉VGG_FACE_16_deploy.prototxt文件中輸出為2622的全連接層之後,再修改matcaffe_demo_vgg_face.m文件,去掉它的最後一行,即可得到一個4096維的特徵向量。

需要強調的是,如果保留文件VGG_FACE_16_deploy.prototxt中輸出為2622的全連接層,如在上面的代碼示例中,scores = caffe(\'forward\', {img})得到的是該圖像屬於各類(標籤)的概率;而去掉文件VGG_FACE_16_deploy.prototxt中輸出為2622的全連接層之後,如下面的代碼所示,scores = caffe(\'forward\', {img})得到的就是該圖像的深度特徵向量。

6.2.3 VGG Face Descriptor算法的結果

不同人臉識別算法在LFW數據集上的測試結果對比如表6-1所示,對應的ROC曲線如圖6-7所示。

表6-1 不同人臉識別算法在LFW數據集上的測試結果

圖6-7 在LFW數據集上測試的結果[11]

可以看出,VGG Face Descriptor算法表現出了較高的性能。其中DeepID3算法獲得了最高的準確率,但主要是由於該方法對錯誤標記的測試集進行了糾正,而其他方法並沒有做這項工作。

註:(1)6.1節中使用文獻[1]中的網絡結構和CASIA-WebFace數據庫,從初始化參數開始訓練,訓練得到本書中用來提取深度特徵的模型。

(2)6.2節中作者公開了使用自己的數據集訓練得到的模型,本書只講解了如何使用作者提供的模型提取深度特徵,進而進行人臉驗證。