李昊璇,王 芬
(山西大學 物理電子工程學院,山西 太原 030006)
隨著人工智能技術的進步,生物特征識別技術也在逐漸發展并被人們所熟悉.最為常見的生物識別技術包括指紋識別,人臉識別,虹膜識別,聲音識別等.人臉關鍵點檢測作為人臉識別的子任務之一,可以直接應用于人臉動畫生成、表情分析、人臉姿態分析、2D/3D人臉建模、視頻人臉跟蹤、人臉局部信息抽取等方面.人臉關鍵點檢測方法大致分為3種,分別是基于ASM(Active Shape Model)[1]和AAM (Active Appearnce Model)[2,3]的傳統方法、基于級聯形狀回歸的方法[4]和基于深度學習的方法[5-8].
ASM[1]是由Cootes于1995年提出的經典的人臉關鍵點檢測算法,主動形狀模型即通過形狀模型對目標物體進行抽象,ASM是一種基于點分布模型的算法;1998年,Cootes對ASM進行改進,不僅采用形狀約束,而且又加入整個臉部區域的紋理特征,提出了AAM算法[2];2010年,Dollar提出CPR(Cascaded Pose Regression,級聯姿勢回歸)[4],CPR通過一系列回歸器將一個指定的初始預測值逐步細化,每一個回歸器都依靠前一個回歸器的輸出來執行簡單的圖像操作,整個系統可自動地從訓練樣本中學習;2013年,Sun等人[5]首次將CNN應用到人臉關鍵點檢測,提出一種級聯的CNN——DCNN(Deep Convolutional Network),不僅改善了初始不當導致的局部最優問題,而且借助于CNN強大的特征提取能力,獲得了更為精準的關鍵點檢測.
深度學習網絡廣泛存在的一個問題是梯度爆炸與消失,這個問題主要通過初始歸一化和中間歸一化層來解決.隨著網絡深度的增加,準確度將持續飽和,然后迅速下降.為了解決網絡達到一定程度或準確率會急劇下降的問題,本文提出了基于卷積神經網絡的殘差網絡.
卷積神經網絡(CNN)相對于傳統的深層全連接神經網絡,網絡參數規模較小,因此在優化速度和計算速度上有顯著的提高,能夠在計算資源與最終結果之間達到很好的平衡.卷積神經網絡由卷積層、最大池化層和全連接層等圖層組成.
卷積層包含多個可訓練的卷積核,每個卷積層神經元只與上一層的部分神經元連接,卷積網絡相對于一般的全連接網絡是稀疏的.如圖1 所示.

圖1 卷積層Fig.1 Convolutional layer
假設輸入為一張二維的圖像I,一個二維卷積核表示為K,卷積運算用星號*表示,則卷積結果
S(i,j)=(I*K)(i,j)=
∑m∑nI(i+m,j+n)K(m,n).
池化層是通過采樣函數對數據進行非線性采樣,能夠減小數據維度并降低過擬合.池化方式有平均池化、最大池化和隨機池化,其中最常用的是最大池化.最大池化是對區域內的特征點取最大.如圖2 所示.

圖2 最大池化層Fig.2 Max-pooling layer
卷積與池化操作取到局部特征后,全連接層將輸出的二維特征圖轉化成一維的一個向量.在CNN中,全連接常出現在最后幾層,對前幾層得到的特征結果做加權和,將學到的分布式特征表示映射到樣本標記空間.如圖3 所示.

圖3 全連接層Fig.3 Fully connected layer
在深層網絡能夠收斂的前提下,隨著網絡深度的增加,正確率開始飽和甚至下降,這稱之為網絡的退化問題.在給定的網絡上增加層數會增大訓練誤差,這些退化并不是過擬合造成的,而是優化問題.本文針對這個問題提出了深度殘差網絡,使用殘差塊進行網絡的跨層連接.
殘差塊如圖4 所示.假設網絡輸入為x,期望輸出是H(x).通過捷徑連接的方式,直接把輸入x傳到輸出作為初始結果,輸出結果為H(x)=F(x)+x,當F(x)=0時,則H(x)=x,得到恒等映射[9].原始網絡的學習目標是完整輸出,使用殘差塊的網絡學習目標是目標值H(x)和x的差值,也就是殘差F(x),F(x)=H(x)-x.訓練目標是將殘差結果逼近于0,同時隨著網絡深度增加,準確率不下降.

圖4 殘差塊結構圖Fig.4 Structure of residual block
深度殘差網絡是在傳統神經網絡[10]的基礎上增加了快捷連接,使某一層的輸出可以直接跨過幾層作為后面某一層的輸入,因此深度殘差網絡能夠疊加多層網絡同時降低模型的錯誤率.神經網絡層數的增加為高級語義特征提取和分類提供了可行性.傳統神經網絡與深度殘差網絡結構如圖5 所示.
本文使用的深度殘差網絡共有18層.第一層是卷積層,使用64個維度為(7,7)的卷積核對輸入的人臉圖像進行卷積.后面的16層使用了8個殘差塊,殘差塊中使用的卷積核大小都是3×3,4個為一組,每一組的卷積核數量不同,分別是64,128,256,512.最后一層是全連接層,輸出人臉檢測的結果,即68組人臉關鍵點坐標.

圖5 傳統神經網絡與深度殘差網絡結構圖Fig.5 Structure of traditional neural network and deep residual network
殘差網絡中一部分快捷連接是虛線,一部分是實線.實線部分表示輸入輸出通道相同,所以采用計算方式為H(x)=F(x)+x.虛線部分表示通道不同,需要進行維度調整,采用的計算方式為H(x)=F(x)+Wx.
本文使用PyTorch[11]框架構建神經網絡,使用的數據集來源于YouTube Faces,其中每組數據包含一張人臉圖片與對應的關鍵點坐標.數據集包含5 770張彩色圖片,分為3 463張訓練集與2 308張測試集.面部關鍵點標記了臉部重要區域,面部邊緣、眉毛、眼睛、鼻子和嘴,坐標表示為(x,y),關鍵點編號順序如圖6 所示.
網絡輸入圖片的大小為224×224,因此需要對數據集的圖片做處理.首先調整圖片的最小邊長為224,再將圖片隨機剪裁為224×224,最后進行歸一化.歸一化操作將圖片轉換為灰度值在[0,1]區域的灰度圖片.

圖6 關鍵點編號Fig.6 Number of keypoints
訓練網絡的過程共迭代了數據集50次,迭代一次數據集的過程中每一批次輸入圖片64張.輸入批次過小將導致批標準化不穩定,批次過大將超出計算機內存限制.初始學習率設置為0.001,學習率決定了參數每次更新的幅度,如果幅度過大,那么可能導致參數在極優值的兩側來回移動.學習率衰減系數設置為5×10-4,學習率隨著迭代次數在逐漸下降.
圖7 是訓練過程中殘差網絡與傳統網絡的平均誤差對比圖.圖7 中顯示傳統網絡在最初的幾次迭代過程中平均誤差迅速下降,比殘差網絡的表現要好,但在后續的訓練過程中殘差網絡能夠達到更小的平均誤差.圖8 是測試過程中殘差網絡與傳統網絡的平均誤差的對比圖.圖中顯示經過20次的迭代之后,殘差網絡在測試過程中的平均誤差更低,表現更好.

圖7網絡訓練過程中的平均誤差
Fig.7The average error in network training process

圖8網絡測試過程中的平均誤差
Fig.8The average error in network testing process
圖9,圖10 分別為殘差網絡與傳統網絡人臉關鍵點檢測的結果.圖中的點為數據集的標注點和網絡的預測結果.圖10中,傳統網絡輸出的圖片中有3張的檢測結果與標注的關鍵點存在較大的偏移,分別是圖10中的第1,3,10個人臉,這3張圖片使用深灰色框進行標記區分,而圖9中的數據集標注點與網絡的預測結果能夠很好地匹配,準確地輸出人臉關鍵點的位置.

圖9 殘差網絡檢測結果Fig.9 Detection results of residual network

圖10 傳統網絡檢測結果Fig.10 Detection results of traditional network
訓練與檢測過程中,對深度殘差網絡與傳統網絡的誤差進行比較,并且對輸出結果進行直接觀察,可以看出,深度殘差網絡可以更好地檢測出人臉的68個關鍵點,檢測精度較高.
本文基于卷積神經網絡進行人臉關鍵點識別,在卷積神經網絡中增加了恒等映射的分支形成殘差塊,使網絡深度加深的同時增加關鍵點識別的準確率.實驗結果顯示深度殘差網絡能夠達到更小的平均誤差,與傳統神經網絡相比具有更高的檢測精度.