隨海亮 馬軍山 李麗瑩



摘要:為實現從單張圖片合成連續變化的目標表情,提出一種基于生成對抗網絡(GAN)和面部表情編碼系統FACS(Facial Action Coding System)的表情合成方法。通過提取面部表情AU(Action Unit)作為生成表情的一種約束,利用生成對抗算法合成目標表情,這種結合表情編碼的合成更具合理性。同時在網絡中引入注意力機制,使網絡在特征提取階段更關注表情變化。實驗表明,該方法能夠克服圖像中的光照和背景影響,合成表情具備連續性和真實性。該合成表情方法可應用于數字娛樂、影視制作等領域。
關鍵詞:面部表情合成;GAN;FACS;動作單元;注意力
DOI:10.11907/rjdk.192325 開放科學(資源服務)標識碼(OSID):
中圖分類號:TP317.4文獻標識碼:A 文章編號:1672-7800(2020)006-0235-05
0 引言
關于面部合成表情的研究很多。傳統的人臉建模主要通過3D人臉建模,還有一些通過在模型上綁定骨骼模型塑造變化的人臉表情,但這種建模方式成本高、周期長。生成對抗網絡可生成不存在的數據,應用更廣。如Pix2Pix,只需要成對的數據就可從簡筆畫生成一幅真實的圖片;CycleGAN則可擺脫成對數據的訓練,應用更廣,例如可以把馬變成斑馬,改變人臉的屬性如性別、年齡、表情等。但是類似的生成對抗網絡架構都只能合成離散的表情變換。圖1為離散的表情變換,從左到右依次是:自然表情、生氣表情、害怕表情、開心表情、驚訝表情,如果要從一種表情連續變化到另外一種表情還有難度。
基于現有方法的短板,本文將生成對抗網絡和面部動作編碼系統(FACS)結合,合成連續變化的表情,合成的表情對于光照和背景具有更強的魯棒性。
本文建立了一種具FACS表達能力的表情合成系統,能夠生成連續的表情動畫,并且符合人體解剖學在連續域的感知表達。這種方法不需要獲取人臉的任何landmark點信息。實驗數據從YouTube上爬取,提取出視頻序列中的人臉,最后得到的數據集由20多萬張面部表情組成,同時利用OpenFace工具對數據集中的人臉進行AU標注。構建一個新的GAN網絡架構,以一維向量為條件提取面部動作單元值,只要是帶有激活的AU圖像就可通過無監督方式訓練這個架構。將合成表情問題分成兩個階段:①期望表達式生成目標表情,合成新的表情圖像;②把合成的表情渲染回原始的輸入表情。因此,渲染回的圖像可以和輸入的表情圖像進行比較,最后通過損失值評估生成圖像的真實感。
基于生成對抗網絡和FACS構建的表情合成系統,彌補了其它GAN只能合成離散表情的短板,通過建立注意力掩膜機制,很好地克服了圖像中變化的背景和光照因素,合成的表情在視覺質量上也有很大提升。圖2是結果示例,輸入一張圖像,通過改變AU的激活程度,生成連續變化的微笑表情。
1 相關工作
1.1 生成對抗網絡
生成對抗網絡GAN(Generative Adversarial Networks)是一種基于博弈論的生成模型。一個典型的GAN優化包括生成網絡和判別網絡兩個部分。生成網絡輸入的是一組隨機數z,輸出的是一幅圖像,生成網絡就是生成假樣本。假樣本要盡可能地逼近真實樣本的數據分布,讓判別網絡不能區分是真樣本還是假樣本。判別網絡輸人的是一幅圖像,輸出的是一個概率值(概率值大于0.5就是真樣本,小于0.5就是假樣本),用于判別輸入的樣本是真樣本還是假樣本。GAN網絡結構已經證明可以用于生成逼真的高細節圖像,成功應用于圖像轉換、圖像超分辨、室內場景見建模等,圖2是一個用GAN網絡生成的人臉圖像。
生成網絡和判別網絡是交替訓練的。在交替訓練過程中,生成網絡生成的假樣本越來越逼近真實數據的分布。生成網絡生成的假樣本輸入到判別網絡后,判別網絡給出的判別結果是一個接近0.5的值,判別真假的閾值就是0.5,此時判別網絡已經難辨樣本真假,這就是納什平衡。
人臉圖像處理是計算機視覺和生成模型研究的熱點,大多數人臉研究都是人臉屬性的編輯任務,修改屬性類別,如添加眼鏡、改變頭發顏色、性別交換和生成老化處理的人臉等。在面部表情合成方面,早期的方法比較依賴三維建模,這種方法在邊緣附近容易產生偽影,無法對光照變化進行建模。本文提出的方法是通過把面部肌肉的運動單元嵌入到GAN模型中,合成連續自然變化的面部表情。
1.2 面部動作編碼系統FACS
國際著名心理學家Paul Ekman&Friesen開發了Facial Action Coding System(FACS),它描述了人臉不同肌肉和表情之間的對應關系。面部動作編碼系統根據人臉肌肉的解剖學結構將其劃分成若干相互獨立又互相聯系的運動單元AU(Action Unit),不同AU控制的面部肌肉運動區域不同,并將不同的表情與對應的AU建立起聯系。雖然動作單元數量較少(發現30個AU在解剖學上與特定的面部肌肉收縮有關),但已經觀察到的AU組合已經超過7000種。如圖3所示,AUl控制內眉提升,AU4控制上眼瞼提升,AU7控制上眼瞼收緊。
不同表情由不同的AU組合而成,只要控制AU是否存在于面部和AU的激活強度,就可對應不同的面部表情。例如恐懼的面部表情通常是通過內眉提升(AUl)、外眉提升(AU2)、上眼瞼提升(AU4)、下眼瞼收緊(AU5)、上眼瞼收緊(AU7)、唇拉伸(AU20)和下頜下垂(AU26)產生的。根據AU激活程度,表情會或多或少地傳遞出恐懼情緒,如果AU激活的強度不同也可能會組成另外一種表情。
2 算法概述
該網絡結構能合成目標表情,或者說建立原始表情和目標表情的一種映射關系。每張輸入圖像是RGB圖像,表情是任意的,可以定義為Iyr∈R;每一表情都是由N個動作單元組成的,動作單元值大小對應該動作單元激活的強度。N個動作單元編碼成少yr=(y1,y2,…yN)T,以目標動作單元y.作為輸入條件,輸出目標圖片Iyg。建立輸入到輸出的映射關系。目標動作單元向量yg隨機生成,訓練數據不需要同一個人的多張不同面部表情圖片,也不需要目標表情圖片Iyg,因此是無監督訓練方式。
3 算法設計
3.1 注意力掩膜機制
TLGAN等表情合成都存在一個共同問題,即很容易受背景和光照等因素影響,導致合成的表情出現模糊、扭曲、偽影等不可控元素。為消除這種影響,本文在網絡架構中引入注意力掩膜機制。注意力掩膜相當于提取人臉動作單元特征(包括動作單元強度),這樣生成網絡就可更多關注人臉的表情特征而忽略復雜的背景和光照變化帶來的影響。GA生成網絡就是生成注意力掩膜GA(Iyr|yg),生成器的另一條支路GI用于生成變化后表情的顏色信息。注意力掩膜、顏色掩膜和輸入圖像結合之后得到合成的目標表情,合成表達式如下:
2 網絡架構
判別器以第一個生成器的輸出Iyg和yr作為輸入。判別器分成DI和Dy兩部分,DI用于判斷真實圖片Iyr,和新的表情圖片Iyg,也就是判斷生成圖片的真實性;Dy用來回歸輸出圖像Iyg的目標動作單元,使合成新的表情和目標表情的動作單元越來越接近。網絡基于WGAN評估合成的表情圖片質量和動作單元接近程度。圖7生成網絡和判別網絡構造如圖5、圖6所示。
3.3 損失函數設計
網絡架構中共設計4項損失:①對抗損失使生成圖像的分布和訓練圖像的分布不斷逼近;②注意力損失促進掩膜平滑,防止其飽和;③條件損失是計算圖像的動作單元和目標動作單元的形式性,或者說是二者表情的相似性;④一致性損失有利于保持人物表情紋理的同一性。
對抗損失的作用是使生成圖像的分布不斷逼近訓練圖像的分布,這樣生成的圖像更具有真實性。這個損失設計是在WGAN基礎上所做的修改,而沒有采用原始GAN損失,因為原始GAN用JS(Jensen-Shannon)散度作為損失函數,會導致網絡很難訓練,而且容易出現梯度消失或梯度爆炸現象。現在定義的對抗損失能夠很好地應對這些問題。另外對抗損失中還加入了梯度懲罰項,使梯度控制在一定范圍內。
(1)對抗損失定義為:
其中,Iyr是輸入圖像,yg是輸入條件,也就是目標動作單元向量,Pdata為輸入圖像的數據分布,Pg為隨機的數據插值分布。
(2)表情損失。分別把原始輸入圖像和生成器生成的圖像輸入到判別器中,分別計算得到生成圖像和表情向量的groundtrue值。這部分損失很重要,在AU條件作用下使生成的圖像更具有AU表現力,其整體思路是優化生成器和判別器,使目標表情動作的單元與輸入動作單元條件不斷逼近。
表情損失定義為:
(3)注意力損失。如果注意力機制生成的A飽和到l,即生成器Iyr=G(Iyr|yg),注意力機制就會失去作用。為防止這種狀況發生,對A作L2權值懲罰,得到注意力損失為:
最后,通過不斷交替迭代訓練生成器和判別器網絡,使目標函數不斷優化,得到最優模型。
4 實現細節
網絡架構中的生成器建立在Johnson等網絡基礎之上,對其作了一定的修改,生成器最后用兩個平行的卷積層替換,一個用于回歸顏色mask C,另外一個用于生成注意力mask A。通過實例代替生成器中的批歸一化處理,以提高訓練的穩定性。
該模型的訓練數據集通過YouTube收集視頻,視頻內容主要是一個人的獨白畫面,一共200多個視頻,每個視頻長度30s-60s,幀率為25fps。分離出所有視頻幀,通過人臉識別提取人臉圖片,然后對所有人臉圖片裁剪對齊,最后得到的人臉數據集大概有20萬個。由于公開數據集中每張圖片人臉都是獨立的,相互之間沒有關聯,也沒有時間軸上的變化,因此訓練出的模型在時間軸上不具有連續性,合成表情容易出現偽影;而視頻具有時間上的連續性,訓練的表情數據集同樣具有時間軸上的連續變化,最終訓練模型合成表情更穩定,同時減少了偽影的出現。
模型訓練的參數設置:學習率lr=0.000l,betal=0.5,beta2=0.999,batch_size為16。整個模型訓練周期為30epoch。在訓練期間,先固定生成器,判別網絡訓練5step,然后固定判別器,生成網絡訓練1step。損失函數的權重設置為:λg=10,λA=0.1,λy=4000。實驗訓練平臺在Ubuntu系統服務器上,服務器搭載兩塊GeForceGTX1080Ti GPU,訓練時間大概2天。
5 實驗評估
對合成不同的表情進行測試,或者說對不同AU進行測試。測試分成對單AU的測試和對不同AU組合的測試。單個AU的變化只改變目標表情動作單元向量中的某一個AU的強度變化,其余AU值保持不變。目標表情只有一個區域發生變化,可以通過調整AU激活強度,控制AU對應區域表情變化的幅度。
多個AU同時變化,就是控制一組AU同時變化。例如微笑的表情是面部表情的多個AU組合,當對應的多個AU同時激活時就會呈現微笑表情。修改表情向量中的多個AU值以及變化程度參數(AU激活強度),就可得到一組線性插值的連續變化表情。
模型存在一定的限制,圖7是一些失敗的案例。左邊是輸入的原始測試圖片,右邊是輸出的表情變化圖片,可以看到失敗案例中的表情會出現一定的偽影和變形,這可能是測試圖片中的人臉有遮擋所導致,如頭發遮擋。有些特別夸張的表情測試效果也不是很好,可能是由于訓練數據集不足引起的。
6 結語
基于GAN和FACS的面部表情合成是一個新的網絡結構,可用于連續變化表情的生成。傳統的面部表情合成系統,例如Face2Face,非常依賴3D面部重建模型,建模成本高、建模時間長,限制了它的應用時間與范圍。本文提出的模型以解剖結構意義上的肌肉運動為條件,模型通過AU參數化,與解剖學面部變形達成一致。此外可以通過改變AU值激活強度實現連續表情變換,為表情合成變換帶來更多應用。通過在GAN網絡中引入動作單元,對面部表情合成進行改進,提升表情合成效果。本文方法也存在一定的缺陷,如有些合成的表情會出現偽影,很難達到實時的表情合成等。未來還需要不斷提高模型魯棒性和合成表情的時效性,正確引入一些先驗知識以提升表情合成性能。