文/田宇昊 黃元
對于面部圖像的老化與年輕化,現有研究工作要求測試的人臉圖像也要進行年齡標記。
這種研究方法受限時間跨度大,成本高;有時面部特征形成嚴重偽影,平滑了陰影效果。
本文中,我們將在保留面部特征前提下,獲得不同年齡人臉圖像,提出讓條件對抗自動編碼器(CAAE)網絡學習人臉流形,靈活地實現年齡的“老化”和“年輕化”。
圖1中,藍色區域為假設流形,曲線為流形上對年齡的遍歷,線段點表示所取某幾個年齡段的人臉圖像。
大多數人臉“年輕化”都是基于物理模型的,難以實現逼真“年輕化”預測。
GAN 在圖像生成方面同時訓練兩個模型:生成模型G 和判別模型C。在兩者對抗過程中,模型生成圖像的效果會越來越好。

必須確保輸出面部圖像看起來和輸入像是一個人的。
如圖2,縱坐標表示編碼器生成的表示人臉特征的向量z,橫坐標表示能代表年齡的向量x(one-hot code)。然后控制個性不變,改變年齡,然后把[z,l1],[z,l2],[z,l3]映射到高維流形,完成了在高維流形的遍歷。
先介紹CAAE 的各個部分的原理,再從結構、效果等方面比較與傳統對抗生成模型的差異。
這里我們需要128*128 的RGB 圖像通過自動編碼器轉化包含了圖像高維特征的向量z。先對128*128*3 的圖像數據進行四層卷積,給其加上表達年齡信息的向量l(one-hot code),這樣[z,l]就包括了個性特征信息與年齡信息。
Dz的任務是檢驗生成的編碼z 是否服從均勻分布。如圖2左圖。圖2:圖中從Z1點到Z2點的轉換,使得對應z 喪失了表達特定人臉特征的功能。
如圖2,那么從Z1 到Z2 的轉換就會平滑的多。
圖2:沒有判別器時,從Z1 到Z2 的轉換過程中出現的許多空白區域。
在得到了[z,l]之后,通過四個反卷積層把數據還原為128*128*3 的格式,并轉化為圖像。
圖3展示了這種區別:第一列是真實的人臉與年齡,上面一行是沒有Dimg的,下面一行是有Dimg的。可以明顯看出,有Dimg的更加清晰真實。
與傳統GAN 主要的不同是,對編碼器生成編碼施加了一個判別器。
本文試驗操作系統Windows10 專業版,基于Tensorflow-gpu 框架,版本1.80,編程語言為Python3.6,Numpy 版本1.14,Scipy 為1.10版本。使用的數據集為UTKFace,含23708張大小為200*200 的人臉圖像,年齡跨度從1到116 歲。訓練過程均在GTX1060 顯卡運行,cuda 版本9.2。
我們先從數據集內采集各個年齡段的人臉圖像進行測試,每次生成十張圖片的測試結果,且分別會將人像識別為男性和女性來生成不同的圖片,如圖4-圖7。
大多數CAAE 生成的圖像非常逼真,模型十分成功。
為了驗證CAAE 泛化能力,我們從互聯網上下載了20 張人臉色與背景色區分度較高裁剪為200*200 的大小,作為測試圖像進行測試。
本次訓練所使用數據集中90%是60 歲以前面部圖像,下一步可考慮更大數據集來豐富較高年齡段中的人臉圖像。另外,測試其他圖片發現,網絡對人臉不太敏感,可考慮增強生成圖像上的判別器Dimg對人臉器官識別的敏感度。

圖1

圖2

圖3:有無生成器生成圖像判別器對比圖

圖4:20 歲-識別為女性

圖5:20 歲-識別為男性

圖6:40 歲-識別為女性

圖7:40 歲-識別為男性