王海涌,梁紅珠
蘭州交通大學 電子與信息工程學院,蘭州730070
人類感情多數通過面部的表情進行傳遞[1],利用圖像處理技術對人臉面部表情進行表情識別意義重大。人臉表情識別在人機交互、公共安全監(jiān)控、日常監(jiān)護、心理分析、娛樂產業(yè)等都有更加廣泛的應用。目前大多數研究者對人臉表情識別基本上采用背景簡單、無遮擋的正面人臉圖像進行識別工作。但在實際生活中,由于各種原因造成面部存在遮擋物的情況,比如戴眼鏡、圍巾或者頭發(fā)等其他遮擋都是很常見的,這些遮擋會影響表情特征的提取,從而造成表情識別率有所降低。
目前針對局部遮擋人臉表情識別,通常采用傳統方法(即非深度學習的方法),其思路總體上分為舍棄法和填補法兩種。舍棄法是通過一些算法將遮擋部分的信息簡化或者丟棄,然后根據未遮擋部位進行表情識別。有研究者提出基于稀疏表[2]的方法來實現遮擋人臉表情識別。但是由于人面部的一些重要部件包含有大量的表情信息,比如嘴巴、眼睛、鼻子等,所以這些部位被遮擋的情況下,直接舍棄明顯不合理。填補法則是先對遮擋部分進行修復,然后再對其進行識別。薛雨麗等人[3]采用魯棒主成分分析法和顯著性檢測法重構被遮擋像素,然后由權值更新的AdaBoost 分類器對去除遮擋的人臉圖像進行表情識別。但是該方法的修復結果并不理想,所以識別率也不理想。有研究者利用卷積神經網絡[4-5]進行有遮擋的人臉表情識別,提高識別算法的魯棒性,但是對于大面積遮擋,準確率則會迅速下降。
將GAN 和卷積神經網絡(CNN)結合起來得到深度卷積生成對抗網絡[6](DCGAN),其特征表達能力強,使用得到的特征表示進行圖像分類,效果較好。Yeh R等人[7]直接使用該模型在人臉數據集上進行了圖像填補實驗,但是該方法得到的圖像整體連貫性較差,適用性受限。Denton 等人提出了將GAN 的鑒別器由原來的二分類改為一個多分類器[8-9],該模型可以實現半監(jiān)督分類,但是由于前期修復模型是基于簡單的GAN,所以修復效果不是很好,容易造成識別階段識別率不高,甚至誤判。
針對上述方法的局限性,本文提出一種基于雙鑒別網絡的深度生成對抗網絡模型,對遮擋人臉進行表情識別。模型前期通過生成器和兩個鑒別器進行對抗學習,對遮擋圖像進行修復,由于加入了局部鑒別器和全局鑒別器兩個鑒別器,所以該模型在修復圖像時能夠在細節(jié)和全局上更好地恢復遮擋圖像,使得修復的人臉圖像更加真實逼真。對人臉進行修復之后再對其進行表情識別,識別部分在全局鑒別器的基礎上,使用其部分卷積和池化層,再添加多分類層來構成表情分類器。生成器的輸出樣本也發(fā)揮了擴充樣本數量的作用,從而提高分類模型的泛化能力。
生成對抗網絡(Generative Adversarial Networks,GAN)是當前人工智能領域的一大研究熱點,GAN中包含兩個部分,生成器(Generator)和鑒別器(Discriminator)。生成器主要用來學習真實圖像分布使得自身生成的圖像更加真實,以騙過判別器[10]。而判別器則需要對接收的圖片進行真假判別。經典GAN 模型的結構圖如圖1所示。
GAN 模型主要有兩部分組成:第一部分是生成圖像的生成器G,它接收一個隨機噪聲Z ,通過這個隨機噪聲生成圖片;第二部分是鑒別圖像真?zhèn)蔚蔫b別器D,判別一張圖片是不是“真實的”。在整個過程中,生成器盡可能地生成更加真實的圖像,而判別器則努力地去識別出圖像的真假。隨著時間的推移,生成器和判別器在不斷地進行對抗博弈,直到兩個網絡達到最終的動態(tài)均衡狀態(tài),即鑒別器無法識別生成器生成的圖像的真假。
GAN 的目標函數很好地體現了對抗的思想,目標函數如下:
整個式子由兩項構成。 x 表示真實圖片,z 表示輸入G網絡的噪聲,而G( z )表示G 網絡生成的圖片。 D( x)表示D 網絡判斷真實圖片是否真實的概率,而D(G ( z))是D 網絡判斷G 生成的圖片是否真實的概率。然后把生成圖像G( )
z 和真實圖像x 輸入鑒別器D 中,訓練鑒別器D 的鑒別能力,使得鑒別網絡D 輸出的概率D(G ( z ))趨于0,而D( x )趨于1。將這個誤差反饋給生成器,生成器根據這個誤差來調整參數,從而調整自己生成更加接近真實圖像的圖像,去欺騙鑒別器,使得D(G ( z ))接近于1。隨著不斷的訓練,生成器與鑒別器在對抗迭代中達到了一種平衡,即D( G ( z ))趨于0.5。這時候,在固定生成器的情況下,目標函數式在式(2)得到鑒別器的最優(yōu)解:
在這種情況下,鑒別器不能判斷出生成圖像是真實的還是訓練生成的,因為生成對抗網絡通過大量的特征學習和訓練,很好地學習到同類圖像數據集中的圖像特征,因此生成了更加逼真的圖像。
本文基于生成對抗網絡提出一種遮擋表情識別模型,模型分為兩個模塊,即遮擋人臉圖像修復部分和表情識別部分,如圖2 所示。該模型與傳統GAN 不同之處在于,修復網絡的輸入是遮擋圖像,而不是一組隨機噪聲。同時在該模型中特別采用了雙鑒別器,即局部鑒別器和全局鑒別器,引入局部鑒別器可以更好地修復遮擋部分的細節(jié),全局鑒別器則用來負責鑒別破損區(qū)域修復后的整幅圖像是否真實且具有連貫性。通過這兩個鑒別器和生成器對抗訓練,可以產生比較好的修復效果。而識別部分是在全局鑒別器的基礎上使用了其部分卷積層和池化層,將其作為特征提取器,額外增加兩層全連接層和Softmax層,構成了一個表情分類器。
生成器G 被設計為一個自動編碼器,以生成新的內容給輸入的缺失圖像,首先通過編碼器將模型輸入映射到一個隱含層,其中包含了原遮擋圖像中已知區(qū)域和缺失區(qū)域兩者之間的隱藏關系,解碼器利用這些隱含信息生成填補內容,不同于原始GAN,本文生成器G 的輸入不再是隨機噪聲,而是被遮擋的人臉圖像。生成器的網絡結構將基于VGG19網絡“conv1”到“pool3”架構[11],在此基礎上再疊加兩個卷積層和一個池化層,再添加一個全連接層將其作為編碼器。編碼器的輸入維度是128×128,每個卷積層都采用3×3的卷積核,且在每個卷積層后都緊接一個Leaky ReLU激活層。在池化層中進行最大池化,窗口大小為2×2。解碼器則是與解碼器對稱的結構,通過卷積層Conv()和上采樣層Upsampling()逐步恢復人臉圖像,在編碼器和解碼器之間采用了兩層神經元個數1 024的全連接層作為中間層。
僅用生成器生成的圖像,只能捕捉到缺失人臉組件的粗糙形狀或生成錯誤的像素。為了得到更加清楚真實的圖像,本文將采用兩個鑒別器D,即局部鑒別器和全局鑒別器。如果只采用一個局部鑒別器,它有一定的局限性,首先不能規(guī)范人臉的全局結構,不能保證遮擋區(qū)域和非遮擋區(qū)域內外的一致性和全局畫面的連貫性。其次當新生成的像素受到周圍環(huán)境的制約時,由于解碼器的“逆池化”結構。在反向傳播的過程中,局部鑒別器很難對遮擋區(qū)域以外的區(qū)域產生直接的影響,沿邊界區(qū)域的像素值的不一致性十分明顯。因此,采用了兩個判別器來對生成圖片的細節(jié)進行完善,使得生成的圖片更加真實。
局部鑒別網絡的輸入維度是64×64,整個網絡結構為卷積核大小為3×3和4×4交叉使用的全卷積網絡,共有11 個卷積層,且前10 個卷積層每一層后面都緊接著一個Leaky ReLU激活層,最后一個卷積層后面則使用tanh激活層,這樣可以更好地訓練網絡。多個卷積層與非線性的激活層交替的結構使得其特征提取能力較強,模型深度、性能等方面也較適合,因此本文基于此構建了局部鑒別器。
全局鑒別網絡的輸入維度是128×128,該網絡則借鑒vgg16 網絡結構,共有16 層,13 層卷積和3 層全連接層。且前每個層后面都緊接著一個Leaky ReLU 激活層,最后一個全連接層后面則使用tanh激活層。為了讓鑒別器和分類器的特征提取部分整合起來,所以采取了結構較深的網絡結構。
圖2 基于雙鑒別網絡的遮擋表情識別模型
為了完成表情識別的訓練,需要大量的帶表情標簽的訓練數據,但是已有的表情數據集的數據有限,特別是本文引入深度神經網絡后則需要更大量的數據去支持,因為數據過少會造成模型在訓練過程中容易達到過擬合,不能展現模型本身的能力。CK+數據集[12](The Extended Cohn-Kanade AU-Coded Database)僅含有327個帶標簽的峰值表情圖像,即使將部分非峰值表情圖像也加入訓練仍然不夠。但是在人臉填補部分,模型的訓練數據并不需要標簽,因此可以利用現有的大量的人臉圖像數據進行訓練,鑒別器在訓練過程不斷加強人臉特征提取能力,利用鑒別器得到的特征表示可進行表情分類。因此分類器共享了鑒別器的部分卷積層和池化層來提取特征,總體上由特征提取層、兩層全連接層和Softmax分類層構成,本質上是一個卷積神經網絡。
首先在生成器中引入了重構損失Lr,即生成器的輸出圖像和原始圖像之間的Lr距離。只有Lr時,生成的內容往往是模糊和平滑的。其原因是Lr損失過度懲罰了異常值,并且該網絡可以避免過度懲罰。通過使用兩個鑒別器,本文采用了對抗損失函數,這反映了生成器如何最大限度地欺騙了鑒別器,以及鑒別器如何區(qū)分真?zhèn)?。它被定義為:
其中pdata( x )和pz( z )分別表示噪聲變量z 和真實數據的分布。這兩個判別網絡{a1,a2}對損失函數的定義相同。唯一的不同是,局部鑒別器僅為缺失區(qū)域提供損失梯度,而全局鑒別器則是在整個圖像中反向傳播損失梯度。
在分類器中,采用交叉熵損失Lc來訓練表情多分類,交叉熵描述了預測的概率分布q( )x 和真實概率分布p( )x 之間的距離。Lc定義為:
綜上所述,整個模型的損失函數定義如下:
其中λ1,λ2,λ3為平衡不同損失影響的權重因子。
為了驗證本文修復方法的效果,本文對圖像修復進行了多輪的實例驗證。實驗的平臺是Windows 10,Python3.6 和TensorFlow 結合的編程環(huán)境,Intel 4.20 GHz CPU時鐘頻率,內存16.0 GB。
本模型中用到兩個數據集,分別是CeleA人臉數據集[13]和CK+人臉數據集。
(1)在修復過中,CelebA 人臉數據集作為本文基礎訓練數據集,其來源于香港中文大學,包含10 177 個名人的202 599 張人臉圖像。但是為了得到更好的實驗效果,需要裁剪出人臉部分的圖像,盡量選取正面人臉圖像,用于修復圖像的訓練。因此得到162 700 張圖像,隨機選擇其中的7/10 作為訓練集,剩余的3/10 數據用于測試模型生成器的填補能力以及鑒別器的真假判別能力。
(2)在表情識別的過程中選擇使用CK+人臉數據集,它包括123 個人共595 例的表情序列,該樣本共3 559 張表情樣本,其中876 張中性表情,260 張悲傷表情,627 張快樂表情,482 張憤怒表情,417 張厭惡表情,640張驚訝表情,257張恐懼表情。
為了進一步擴大樣本量,并解決各類表情樣本數量不均衡的問題,對數據集中的數據進行鏡像翻轉、旋轉等操作,擴展后共有10 000 張表情圖像,各類表情圖像的數量在1 300 張左右。隨機選擇其中的1/5 作為測試集,其余4/5為訓練集,同時滿足測試集和訓練集的人物信息不交叉。
(3)雖然盡量選取了正面圖像,但是為了樣本數量不減少,還是有部分圖像的人臉有所偏轉,所以為了避免其不同姿勢對實驗結果的影響,使用基于Open Face[14]的人臉對齊算法,對齊人臉圖像,校準后統一將圖像的大小調整為128×128。
(4)現實中的遮擋由各種各樣的原因造成,所以目前沒有一個通用的、成熟的、標準的遮擋人臉表情數據集。因此在本模型訓練過程中,對于圖像填補部分,將對訓練數據采用模擬系統進行遮擋,遮擋部分的圖像大小為64×64,遮擋位置隨機。
在測試過程中將選取不同遮擋面積的圖像,為了測試不同遮擋面積下的表情識別率和修復效果。隨機遮擋10%、20%、30%、40%、50%用于模擬位置不固定的臨時遮擋,遮擋后的圖像如圖3 所示,本文認為遮擋面積超過50%時,表情識別意義不大,故不做分析。
本文的訓練將分為兩個部分,分別是人臉修復和表情識別的訓練。
模型首先在CelebA 數據集上訓練人臉修復網絡,人臉修復網絡的訓練的過程分為三個階段。第一階段:利用重構損失訓練生成網絡,來獲模糊的內容。第二階段:加入局部鑒別器損失來微調生成模型。第三階段:用全局鑒別器損失來調整生成模型參數。這樣可以避免訓練開始階段判別器的作用過強。當GAN模型接近納什均衡,二分類準確率大約0.5時,鑒別器幾乎不能判斷輸入樣本的真假,完成修復階段,此時不再使用CelebA數據集。
此時開始識別階段,在CK+數據集上進行微調,同時加入了表情分類器的訓練,起初通過設置樣本權重,讓模型使用填補圖像和無遮擋圖像各一半訓練二分類器,而僅使用無遮擋圖像訓練多分類器,經過100 次迭代后,將填補圖像也加入到多分類器的訓練。
圖3 圖像預處理和遮擋模擬
模型使用Adam 優(yōu)化器,初始學習率為0.000 1,剩余的Adam 超參數設置為默認值,100 次迭代后學習率下降一個量級。
4.3.1 本文模型修復結果分析
本文模型的填補效果如圖4 所示。遮擋面積是隨機遮擋,其中第一行是遮擋前的原始圖像,第二行是遮擋后的人臉圖像,第三行是人臉填補修復后的結果。
圖4 本文模型修復結果
由圖4 可以看出,經過人臉填補修復,整個人臉圖像看上去真實連貫,未遮擋區(qū)域可能發(fā)生細微變化,但一般不會影響人臉圖像的表情類別。由于PCA+SVM方法和SRC 以及CNN 方法直接對遮擋圖像進行識別,因此將只對比DCGAN+CNN方法和本文方法的修復效果,如圖5所示。
圖5 本文模型與DCGAN+CNN方法修復結果對比圖
圖5 中對比了不同遮擋面積下兩種方法的修復結果,本文方法的修復效果更加真實流暢,而DCGAN+CNN 方法的修復效果使得人臉看起來不合常理,很奇怪,不夠真實,這樣就使得識別效果不佳,識別率下降。通過這個對比也可以從側面證明本文方法的有效性和優(yōu)勢。
4.3.2 填補前后人臉圖像識別率對比
將填補后的人臉圖像輸入到表情分類網絡中,對表情進行判別,實驗結果如圖6所示。為了對比填補前后人臉表情識別效果,在填補前直接采用分類器對遮擋人臉圖像進行了表情識別??梢钥闯?,人臉填補模型整體上提升了遮擋表情識別的準確率,當遮擋面積小于50%時,模型整體識別率還在80%以上,較直接使用卷積神經網絡提升了接近20%,而在遮擋面積較小的情況下,模型的識別準確率提升幅度較小??紤]模型的處理時間、系統資源等方面因素,在遮擋面積小于面部面積10%時,可不進行填補,直接使用卷積神經網絡進行簡單分類識別。
圖6 遮擋前后識別率的對比實驗
4.3.3 與其他方法對比
本文選取了文獻[15]的PCA+SVM方法、文獻[2]的稀疏表示方法(Sparse Representation based Classification,SRC)以及CNN、DCGAN+CNN 方法來進行對比,DCGAN+CNN方法中DCGAN用于填補遮擋人臉圖像,CNN 同為微調的VGG 模型,用于人臉表情分類所有方法都在CK+數據集上進行了實驗,結果如表1所示。從表中可以看出,無論人臉圖像是否存在遮擋,本文方法的人臉表情識別率都較高,雖然基于DCGAN+CNN 的方法也對人臉圖像進行了填補,但是修復之后的圖像連貫性較差,因此影響了表情識別的準確率,尤其是遮擋面積小于40%,該方法的表情識別準確率甚至小于僅用CNN 的準確率。而本文方法生成的圖像真實連貫,對表情識別的影響很小,所以在人臉遮擋面積50%時,仍能達到80%以上的識別準確率。
表1 與其他算法的對比實驗(識別準確率)%
實際應用中局部遮擋問題導致表情識別的準確率不夠理想,與在標準人臉表情數據集上取得的高識別率差距明顯。本文提出了一種基于雙鑒別網絡的GAN模型來實現遮擋表情識別,雙鑒別網絡結構能夠在人臉修復階段生成真實連貫的高質量圖像,這樣在識別階段能夠達到很高的識別率。在修復階段利用人臉圖像數據集Celeb A對其權重參數進行預訓練,最后在CK+數據集上進行微調得到了很好的分類結果。經實驗證明,本文方法在修復的人臉圖像更加真實連貫,修復后再對其進行表情識別,識別率較其他方法都更高。但是本文方法也存在一定的缺陷,對于大面積遮擋特別是超過50%遮擋的圖像修復效不是特別理想,修復結果的誤差率較大,還有GAN 網絡的訓練比較自由,訓練比較難以控制,這主要是由于其對抗函數造成,所以下一步的工作計劃主要是研究改進本文方法存在的缺陷。