朱 梅,陳易萍,姚 毅,樊中奎,李 渤
(1.江西理工大學a.軟件工程學院,江西 南昌 330013;b.應用科學學院,江西 贛州 341000;2.南昌市農業科學院,江西 南昌 330200)
近年來,卷積神經網絡(CNN)在計算機視覺領域取得了巨大的成功。眾多的視覺任務:圖像分類、物體檢測、人臉驗證及識別都受益于CNN模型的分類能力,性能得到了很大的提高。當前使用基于CNN的模型的人臉識別在LFW數據集上的識別精度達到99%[1],并在商業上得到了應用。
目前,多個CNN方法被用于人臉驗證,Taigman[2]使用CNN模型提取人臉的特征向量,然后將這些特征向量輸入到貝葉斯分類法及高斯分類法進行人臉驗證,但這種方法在樣本分布不均勻的情況下難以正確的分類。Y.Sun[3]采用人臉對齊及對人臉進行多分片的方法進行人臉特征的提取,提高了人臉驗證的魯棒性,但耗時較長。F.Schroff[4]提出了使用triplet loss來驗證兩個樣本是否為同一實體克服了基于多分類網絡只用于分類而不能用于驗證的瓶頸,但是對于訓練集中不存在的新實體無法進行驗證并且需要手工確定分類的閾值。Chen.Jun Cheng[5]使用多任務的深度卷積網絡模型進行識別和驗證,多任務學習為提高人臉表示的泛化能力提供了一種有效的方法,然而基于多任務的神經網絡的收斂性仍然是一個挑戰,識別和驗證的選擇需要手工確定的,并且效果嚴重依賴訓練集。
以往的方法取得了重要的發展,但仍有許多不足之處有待改進。首先,一些方法在CNN測試前需要進行人臉對齊或仿射變換等預處理,這會消耗大量的計算時間。其次,使用復雜的CNN模型和多分片進行人臉驗證,生成了大量的中間數據,需要較大的存儲空間和計算時間[1,5]。第三,從CNN中提取特征向量,然后在其他平臺上進行人臉驗證的不能做到從輸入端到輸出端不間斷連續的過程處理,影響驗證效率及操作體驗。針對目前研究的不足,本文提出了一種基于深度學的非對齊人臉驗證框架(如圖1所示)。在框架中設計具有較少層數和參數的卷積神經網絡,具有良好的人臉驗證的準確度同時減少了計算量提高了處理速度;在驗證過程中抽象出SIFT描述符進行人臉驗證可以有效減小姿態變化的影響,不需要人臉對齊預處理情況下進行驗證,讓人臉驗證過程能夠進行端到端處理,提高了驗證過程的完整性;采用級聯法提高了人臉識別的精度,減少了人臉識別的運行時間。CNN模型在CASIA-Web Face數據集上進行訓練,并在著名的LFW和You Tube(YTF)數據集上進行評估,取得了優異的性能。論文主要貢獻如下:
(1)設計出一個人臉驗證框架。框架分為三個階段:在第一個階段,CNN得到了充分的訓練得到模型;第二階段,在CNN中加入triplet loss對第一階段的模型進行微調適應人臉驗證;第三階段采用級聯法進行人臉驗證。框架不僅提高了人臉識別的精度,而且減少了人臉識別的運行時間。
(2)在卷積網絡的池化過程中提取SIFT描述符,用于人臉驗證。由于SIFT描述符具有良好的尺度不變性和旋轉不變性,可以在非人臉對齊的情況下獲得較好的人臉驗證效果。
(3)設計了兩個CNN被來適應不同的設備。CNN1層數少、參數少,能較好地滿足時間成本和驗證精度的要求,適用于智能手機平臺。CNN2層數多,參數多,性能優良,適合在服務器上使用。
人臉驗證是計算機視覺領域研究的熱點之一。通過許多研究人員的努力,近年來精度得到了顯著提高。人臉驗證研究主要集中在以下方面。
特征提取:識別人臉特征表示的提取是人臉驗證的第一步。它大致可分為兩類:手工生成的特性,以及從數據中學習的特性。在第一類中,Ahonen[6]等人在中提出使用局部二值模式(LBP)來表示人臉。Chen[7]等人在中利用高維多尺度LBP特征提取人臉標記周圍的特征,對人臉進行了驗證,取得了良好的效果。Gabor小波具有良好的方向選擇和尺度選擇特性,Xie[8]和Zhang[9]使用該方法對人臉圖像的多尺度、多方向信息進行編碼。在第二類中,Patel[10]和Chen[11-12]采用基于字典的方法,通過從樣本中學習對姿態和光照變化具有魯棒性的代表性特征來進行人臉識別和驗證。采用Fisher向量[13](FV)編碼生成完備的高維特征表示。Lu等[14]提出了一種字典學習框架來生成高維特征向量。上述方法需要高維特征向量,難以在大型數據集中進行訓練和應用。然而,隨著深度學習的發展,利用深度卷積神經網絡(DCNN)可以從大數據集中學習分類特征。Taigman等[2]從大規模人臉數據集中學習生成人臉特征的深度網絡模型,取得了比傳統人臉驗證方法更好的性能。Sun等[1]在LFW數據集上實現了出色的人臉驗證性能。Schroff等[4]將深度結構從對象識別應用到人臉驗證,并對其進行三重損失訓練,取得了較好的效果。這些工作從本質上證明了DCNN模型對特征學習的有效性。
度量學習:從數據中學習相似性度量是提高人臉驗證系統性能的另一個關鍵部分。在過去的十年中,人們提出了許多度量學習算法,其中一些已經成功地應用于人臉驗證。這些方法的共同目標是學習一種良好的距離度量,使正樣本對之間的距離盡可能地減小,負樣本之間對之間的距離盡可能地增大。例如,Sun等[1]提出了大邊際最近鄰(LMNN)度量,該度量在所有三組標記訓練數據之間強制執行大邊際約束。Taigman等[15]使用信息論度量學習(ITML)方法學習馬氏距離。Chen等[16]中提出了一種用于人臉驗證的聯合貝葉斯方法,該方法對一對人臉圖像的聯合分布而不是它們之間的差異進行建模,用類內概率與類間概率之比作為相似性度量。Hu等[17]研究了深度神經網絡框架下的判別度量。Huang等[18]研究了一組保留底層流形結構的標記圖像上的投影度量。
我們提出的方法設計了兩個參數不同的CNN架構。為了使CNN架構適合人臉驗證,在CNN架構使用三元組樣本,用于對CNN訓練得到的模型進行微調。在測試階段,從池化層中提取SIFT描述符,進行非對齊的級聯人臉驗證,取得良好的效果。圖1給出了方法的流程圖。方法詳細實現在下面介紹。
本文針對不同的應用平臺提供了兩種CNN架構。CNN1的層數和參數比CNN2少(如表1所示),因此CNN1比CNN2需要更少的訓練和測試時間。CNN1包含5個卷積層和4個池化層,FC5a和Conv5b具有相同輸入層為池化層4;FC5b1為Conv5b的頂層;FC6為FC5與FC5b1的和,網絡輸入圖像的分辨率是224*224,輸出為一個160維向量,CNN1的數據量為22M。CNN2包含10個卷積層和5個池化層,輸出為4096維向量,共有2.239億個參數。在CNN1和CNN2中卷積核由高斯函數初始化,使用ReLU作為激活函數,使用Dropout避免過擬合,使用Softmax-loss進行多分類。
為了使CNN適合人臉驗證,使用triplet loss對CNN模型微調(如圖1所示),微調僅改變最后一個全連接層的參數,使正樣本之間的距離變小,正負之間的距離變大(如圖2所示)。在微調階段,CNN需要輸入的三元組包含三個樣本,一幅為錨點,一幅為正樣本,另一幅為負樣本利用triplet loss通過訓練求出最小的區間,當兩幅圖像之間的距離大于最小區間則認為是不同的人,否則圖像描述的是同一個人。
從表1和表2可以看出:CNN1(如表1所示)網絡層數和參數較少,CNN2(如表2所示)網絡層數和參數較多。與CNN2相比,CNN1在訓練和測試中消耗的時間更少,適合在手機等小型設備上運行。

表1 CNN1架構

表2 CNN2架構
根據常識同一個人圖像有更多的相似性,所以同一個人的人臉圖像特征之間的距離應被集中到一個很小的范圍之內。triplet loss試圖在每對人臉之間建立一個從一個人臉圖片到其它人臉圖片的間距(如圖2所示)。
兩張人臉圖片是否為相同的人需要通過驗證的方式來確定的。但是目前的深度學習網絡模型主要應用在圖像的分類,不適合人臉圖片的驗證,因此我們需要設計一種適合人臉驗證的深度學習網絡。本文在CNN的末端添加triplet loss層使之適合人臉圖片的驗證(如圖3所示)。
經過使用triplet loss進行模型微調訓練,得到了一個低維向量,對人臉識別具有較強的識別力。考慮一個三元組{a,p,n},其中a(anchor)和p(positive)來自同一個實體,而n(negative)屬于不同的實體。我們的目標是樣本特征向量的W映射應滿足(1)約束:
(Wa)T·(Wp)>(Wa)T·(Wn)
(1)
在我們的方法中,在CNN1中{a,p,n}∈R160和CNN2{a,p,n}∈R4096,它們通過W被歸一化為單位長度。因此,Wa、Wp、Wn是a、p、n在投影W下的相似性特征向量。(1)中的約束條件要求在低維空間中,錨點與正樣本的相似性應大于錨點與負樣本的相似性。因此,映射矩陣W應能夠將錨點與正樣本距離縮小,錨點與負樣本距離增大,經過驗證選擇Wa、Wp、Wn的維數為d=128。
根據一個三元組標記的樣本的特征向量,我們解決以下優化問題:
(2)
其中T是三元組集,α是根據驗證集來選擇的邊距參數。在實際應用中,采用增大區分度的隨機梯度下降法(SGD)解決了上述問題,解決(2)的更新迭代步驟為:
Wt+1=Wt-η*Wt*(a(n-p)T+(n-p)aT)
(3)
Wt為第t次迭代的估值,Wt+1為更新值,{a,p,n}是一個三元組樣本,η為學習速率。
人臉對齊是人臉驗證的難點,需要大量的運行時間,嚴重影響人臉驗證的性能。SIFT描述符具有旋轉不變性、尺度縮放、亮度變化以及查看變化、仿射變換和噪聲的穩定性等優點。如果我們可以從卷積神經網絡得到信息SIFT描述符,它可以在不需要人臉對齊的情況下幫助人臉驗證。下采樣是卷積神經網絡中一個必不可少的過程,在最大池化過程中可以得到圖像特征點的方向和梯度信息,能夠同步的獲取SIFT描述符。
在池化過程中人臉的SIFT描述符由以下過程獲得。由式(4)得到最大值和式(5)得到平均值,其中vi為樣本塊元素,如圖6所示。梯度g為最大值m減去平均值a(如式(6)所示)。梯度方向由式(7)得到
m=max(v0,v1,v2,v3)
(4)
a=avg(v0,v1,v2,v3)
(5)
g=m-a
(6)
θ=90×i+90×((m-v(i+3)%4)/((m-v(i+5)%4)+(m-v(i+3)%4)))
(7)
其中i為最大值m索引值,θ取值范圍為0~360度,分為8個區域,每個區域有45度,{0°,45°,90°,135°,180°,225°,270°,315°}代表8個方向(如圖4所示)。
在從2×2圖像區域獲得梯度和方向之后(如圖4所示),描述單元通過4×4梯度和方向塊中的8個方向的梯度統計獲得(如圖5a所示)。4×4描述單元構成一個SIFT描述符,由128維向量表示(如圖5b所示)。由圖5b所示一個SIFT描述符需要從32×32圖像區域中提取。
利用兩幅人臉圖像的距離D(xi,xj)確定相同和不同的分類。同一人的所有人臉對(i,j)用Psame表示,而不同人的所有人臉對用Pdiff表示。
我們把所有真正接受的集合定義為
TA(d)={(i,j)∈Psame|D(xi,xj)≤d}
(8)
這些是在閾值d時正確分類為相同的人臉對(i,j)。
FA(d)={(i,j)∈Pdiff|D(xi,xj)≤d}
(9)
FA(d)是錯誤分類為相同(錯誤接受)的所有對的集合。然后將給定人臉距離d的驗證率VAL(d)定義為
(10)
相應地,錯誤接受率FAR(d)是
(11)
從最大池化的結果(如圖6所示)可以看出,它保留了更好的人臉特征,我們在最大池過程中提取最大值時,可以快速地獲得方向信息,從而方便地獲得SIFT描述符。在CNN1和CNN2中,第一池化層可以得到49個描述符,第二池化層可以得到16個描述符。
為了進行快速的人臉驗證,我們設計了基于級聯的驗證方法,該方法包含三個連續驗證步驟(如圖7所示)。利用池化結果中提取的SIFT描述符進行ver1和ver2驗證,保證了不需要人臉對齊情況下的驗證準確性。如表1所示,CNN1中pool1和poo2層有20和40個池化層結果,如表2所示CNN2中pool1和poo2層有32和64個池化結果,采用所有中間卷積結果進行驗證,能夠有效保證驗證精度。在驗證過程中設置一個閥值,當相似度大于閥值時,表示來自同一個人的兩張照片,當相似度小于閥值時,表示來自不同人的兩張照片。在驗證過程中,只有當前一步驗證為同一個人時,才允許它們進入下一步驗證,具體驗證過程如圖7所示。
神經網絡需要使用大數據集進行訓練,選擇合適的訓練數據集非常重要。CASIA-WebFace有足夠的實體,并且每個圖像都有標簽,所以它們更適合CNN的訓練和微調。CASIA-WebFace包含493,456張人臉圖像,包含10,575個實體。
本文使用LFW和YTF兩個常用的數據集進行評估,這兩個數據集是在無約束條件下人臉驗證的事實標準集。LFW數據集包含13233張來自互聯網的5749個實體的人臉圖像。YTF包含了從YouTube上收集的1595人的3425個視頻,是視頻中人臉驗證的標準基準。為了便于比較,算法通常給出LFW和YTF中給定6000對人臉的平均人臉驗證精度和ROC曲線。利用CASIA-WebFace數據集訓練卷積神經網絡。在訓練之前,所有的人臉圖像歸一化為224×224。
CNN訓練分為兩個階段(如圖1所示),第一個階段使用大量的樣本對網絡的分類能力進行訓練,使網絡的趨于穩定。每二個階段主要進行人臉驗證能力的訓練使網絡能夠進行人臉驗證。
第一階段使用softmax loss對CNN進行訓練,得到CNN模型。訓練使用開源的深度學習框架pytorch在ImageNet大型數據集上進行。CNN1和CNN2的訓練參數進行相應設置。CNN1中動量設為0.9,卷積層和全連接層的權值衰減設為5e-3,為了避免全連接層的過擬合,將dropout設為0.5。在CNN2中,動量設為0.9,卷積層和全連接層的權值衰減設為5e-4。fc6全連接層是用于人臉驗證任務的人臉表示。從fc6層到fc7層的參數都非常大,對于學習大的全連通層參數可能會導致過擬合。為了克服它,我們將dropout設置為0.5。Xavier用于卷積層參數初始化,Gaussian用于完全連接層初始化。深度模型在GTX1070上訓練了2周。
第二階段是對網絡的人臉驗證能力進行訓練,主要目標是縮小相同實體之間的距離及增大不同實體之間的距離。輸入數據需要一個圖像組,每個組包含三個圖像(一個錨點樣本,一個正樣本,一個負樣本)。在此階段,我們只訓練triplet loss層,而保持其他層的參數不變。我們從CASIA-Webface數據集中選擇5606個實體,其中每個實體包含至少30張用于訓練的圖片。
我們在LFW和YTB數據集上使用給定的標準的樣本對我們的方法進行評估,該數據集總共定義了3000組正對和3000組負對樣本,并將它們進一步劃分為10個不相交子集進行交叉驗證。每個子集包含300組正對樣本和300組負對。在級聯人臉驗證過程中(如圖7所示),在第一次驗證(ver1)中將低閥值設置為0.4,當相似性在0.4以上時,認為兩幅人臉圖片來自同一實體,將進行第二次驗證(ver2),否則將顯示來自不同實體的兩幅圖像;ver2中閥值設為0.7,驗證過程與ver1相同(如圖7所示),ver3中使用深度學習特征進行最終驗證。
根據表3,表4中的結果,我們得到以下結果:CNN1和CNN2的模型都在LFW和YouTube數據集上實現了良好的性能。該框架在人臉對齊和無對齊兩種情況下均能獲得較好的性能。在沒有人臉對齊的LFW和YouTube人臉數據集中,CNN1的人臉驗證準確率分別為96.53%和93.65%,CNN2在LFW和YouTube人臉數據集中的人臉驗證準確率分別為98.37%和94.49%。

表3 在LFW上進行人臉驗證

表4 在YouTube上進行人臉驗證
在本節中,分析了框架的效果。我們在LFW數據集上對CNN1和CNN2進行測試,表5給出了測試結果。

表5 LFW的性能評估
我們從以下幾個方面分析測試結果,網絡結構:通過表5中第1行與第7行、第2行與第8行、第3行與第9行、第4行與第10行的比較可以看到在同等條件下CNN2比CNN1的性能明顯提高。其中原因為:CNN2具有更多的層和參數,可以獲得良好的表示向量;從表5第1行對第2行,第7行對第8行可以看出由于使用了級聯驗證性能明顯提高;從表5第6、12行結果可以看出方法能夠有效地防止人臉姿態變化的影響;從表5第1行與第3行可以看出,經過級聯驗證,性能提高了4.2%;從表5第2行與第4行對比可以看出使用trilet loss進行微調具有重要的作用,準確率提高了8.83%。
級聯驗證分析:在本節中,我們將評估級聯驗證框架的性能。從表6的結果可以看出,Ver1在沒有對人臉對齊的情況下,具有較高的驗證精度。這里有以下原因:首先,池化層的結果比原始圖像具有更明顯的紋理特征,這使得從池化結果中提取的SIFT描述符具有更好的分類能力。其次,pooling1的多個池化結果用于驗證,這確保了驗證的準確性。從表6第2行與第5比較可以看出ver2明顯的提高了準確性,這是由于ver2是基于ver1的第二次驗證,它使用了更多的池化結果來驗證;Ver3通過人臉的深度特征驗證實現了更好的驗證結果。驗證結果表明,級聯的驗證在非對齊人臉的驗證中能夠有效的提高準確率。

表6 LFW的級聯人臉驗證測試
運行速度分析:從表7中可以看出,我們的方法具有很高的計算速度,原因如下:我們的CNN架構有更少的層和參數;無需人臉對齊且SIFT描述符利用池化過程中同步得到的有效節省了計算時間。
如表7所示,對于一對人臉圖像驗證,CNN1的CPU時間為70ms;結果表明該模型可能適用于智能手機等小型設備上。使用CNN2模型對一對人臉圖片驗證需要CPU時間為560ms,但使用GPU時只需要到67ms,表明CNN2適用于使用GPU在設備上運行。

表7 一對圖像驗證的時間(它在具有GPU GTX1070的單核i7 6700上進行測試)
本文采用LFW和YTF兩個著名的人臉識別和驗證數據集上評估我們的模型。從圖8和圖9 ROC比較來看,CNN2模型在兩個數據集上均優于當前最好的方法;雖然CNN1所包含的層數和參數較少,但其性能也非常顯著。兩種方法在人臉圖片非對齊的情況下同樣能取得較好的準確度。
本文設計了一個基于深度學習的非對齊人臉驗框架。在該框架中首先使用softmax loss對深度網絡進行的充分的分類能力訓練;然后加入triplet loss層進行微調使之適合于人臉驗證。本文提出了在網絡運行過程中間結果中同步提取SIFT描述符進行級聯驗證,減少了人臉姿態變化對人臉驗證的影響,有效提高了人臉驗證速度與精確度。為了使框架能夠具有更廣泛的應用,設計了兩個CNN架構:CNN1具有較少的層和參數需要較小的計算量,可用于智能手機等小型計算設備;CNN2模型具有更多的層數和參數需要較大的運算量,適用于具有GPU的大型運算設備。經過在LFW和YTF數據集上測試結果表明,該框架在人臉非對齊的情況下具有優秀的性能。