深度學習和傳統模式識別方法的最大不同在於它是從大數據中自動學習特徵,而非採用手工設計的特徵。好的特徵可以在很大程度上提高模式識別系統的性能。深度學習運用於物體識別領域具有重大突破意義的就是人臉識別。無論是傳統的人臉檢測和識別,還是基於深度學習的檢測和識別,面臨的最大挑戰都是如何區分由於光線、姿態和表情等因素引起的類內變化和由於身份不同產生的類間變化。這兩種變化分佈是非線性的且極為複雜,傳統的現行模型無法將它們有效地分開。深度學習的目的是將各種因素成功地分開,例如在深度模型的最後一個隱含層,不同的神經元代表了不同的因素。如果將這個隱含層當作特徵表示,人臉識別、姿態估計、表情識別、年齡估計就會變得十分簡單,因此通過多層的非線性變換得到新的簡單線性特徵表示。這些特徵就盡可能多地去掉類內變化,而保留類間變化。人臉識別有兩類任務,即人臉確認和人臉辨識。人臉確認的任務是判斷兩張照片是否為同一個人,屬二分類問題,隨機猜中的概率為50%。人臉辨識的任務是將一張人臉圖像準確地分到N個類別之一內,類別是由人臉的身份定義的。這是一個多類問題,更具有挑戰性,其難度隨著類別數的增多而增大,隨機猜中的概率為1/N。這兩類任務都可以通過深度模型學習人臉的特徵表達。
7.12.1 深度學習算法的使用
本部分的特徵是使用Ubuntu上的Caffe工具提取的。
算法對應的項目文件名稱為「deepLearningSearch.sln」,位於「../deepLearning Search」路徑下。
打開deepLearningSearch文件夾,使用Visual Studio 2010打開「deepLearning Search.sln」,運行「deepLearningSearch.cpp」即可。
7.12.2 深度學習算法原理
我們使用ImageNet網絡結構,主要包括5個卷積層、3個全連接層、下採樣層(Pooling層)、線性修正單元(ReLU層)以及標誌所屬類別的輸出層[17]。網絡最後一個全連接層的輸出需要設置為類別數,輸入圖片尺寸為227×227像素,輸出為屬於每個類別的概率值。我們選擇網絡結構中的倒數第二個全連接層作為要提取的深度特徵層,由於該層後跟有線性修正單元(ReLU層),所以提取出的深度特徵向量都是非負值。為了防止過擬合現象,網絡中使用了Drop-Out層,過濾學習到的一些冗余信息。
使用ImageNet訓練模型,我們選擇網絡結構中的倒數第二個全連接層作為要提取的深度特徵層,因此對於每張圖片,都能得到一個4096維的特徵向量,所以每張圖片我們可以獲得的特徵向量維度為4096。
7.12.3 深度學習算法實現
算法步驟:該部分對應的代碼包含在源碼中的 extract_feature 文件夾下,geetDeepID.m文件可以實現對指定文件列表中的所有圖片進行提取深度特徵。
7.12.4 深度學習算法的實驗數據、實驗結果及分析
1.實驗數據
圖像庫中為利用深度學習得到的497(行)×128(列)或者497(行)×4096(列)的數據。
查詢圖像的深度特徵為1(行)×128(列)。
2.實驗結果
實驗結果在與「deepLearningSearch.cpp」同一目錄下的「similityDLFeature.txt」文件中。每行中第一列代表圖像的編號,第二列代表查詢圖像與圖像庫中的當前圖像的餘弦相似度。
查詢圖像如圖7-19所示。
圖7-19 查詢圖像(8)
根據餘弦相似度的閾值,檢索出的部分相似圖像如圖7-20所示。
圖7-20 檢索出的部分相似圖像(8)
表7-8所示為基於4096維度的餘弦相似度度量的深度學習算法之圖像檢索的結果。
表7-8 圖像檢索結果
續表
續表
續表
3.實驗分析
128維度時:相似圖像的餘弦相似度閾值為0.74。
4096維度時:相似圖像的餘弦相似度閾值為0.773以上。
最後,使用深度學習算法進行人臉檢索的查准率為41/43×100%=95.35%,查全率為41/42×100%=97.62%。