曹 琨, 吳 飛, 駱立志, 楊照坤, 鄔 倩
(上海工程技術(shù)大學(xué) 電子電氣工程學(xué)院,上海 201600)
實(shí)際中的人臉識(shí)別過(guò)程中,人臉識(shí)別率會(huì)因?yàn)槊娌空趽跷?如墨鏡、口罩、圍巾等)的原因而大大降低。因此,對(duì)于遮擋人臉的識(shí)別一直是近年來(lái)人臉識(shí)別領(lǐng)域的研究熱點(diǎn)之一。圖像補(bǔ)全作為一種常見(jiàn)的圖像編輯操作,是指以合理的合成內(nèi)容來(lái)填補(bǔ)圖像中缺失或被遮掩的區(qū)域。生成的內(nèi)容既可以與原圖內(nèi)容一樣,也可以完全符合上下文,從而使得完成的圖像具有視覺(jué)逼真性。大多數(shù)現(xiàn)有的圖像補(bǔ)全算法[1,2]依賴于低層結(jié)構(gòu)線索,從同一圖像的已知區(qū)域中搜索并合成與匹配塊相似的局部?jī)?nèi)容。“復(fù)制粘貼”的方法,即通過(guò)移除前景對(duì)象以及用類似圖案與背景填充未知區(qū)域,用來(lái)補(bǔ)全風(fēng)景圖片(例如,草地,天空和山脈)效果特別好。
但是,在同一圖像中找到相似圖像塊的方法,對(duì)于人臉這類圖像是不適用的。很多圖像都包含獨(dú)特的特征,這些特征不能與輸入圖像中的其他部分相匹配,例如,一張戴口罩的人臉,傳統(tǒng)的圖像修補(bǔ)方法無(wú)法重建出嘴巴,所得結(jié)果是一張沒(méi)有嘴巴的畸形圖片。另一種方法是使用外部數(shù)據(jù)庫(kù)作為參考[3]。雖然可能會(huì)發(fā)現(xiàn)相似的圖像特征塊,但涉及語(yǔ)義表示的對(duì)象的獨(dú)特模式,結(jié)果并不能很好地建模,因?yàn)橐阎獏^(qū)域的低層[1]和中層[2]視覺(jué)線索都不足夠去推斷缺失區(qū)域中語(yǔ)義上有效的內(nèi)容。
Telea A等人[4]提出一種基于快速行進(jìn)算法的圖像修補(bǔ)。選取帶修補(bǔ)像素周圍的一個(gè)小的領(lǐng)域,使用這個(gè)鄰域內(nèi)的歸一化加權(quán)和更新待修復(fù)的像素值。但對(duì)于全局的把握有欠缺,不適合大面積且紋理結(jié)構(gòu)復(fù)雜的遮擋。Bertalmio M等人[5]提出的圖像修補(bǔ)方法利用擴(kuò)散方程迭代地將低層特征沿掩模邊界從已知區(qū)域傳播到未知區(qū)域。雖然修復(fù)效果很好,但僅限于處理較小且同類的區(qū)域。此外,還有方法是通過(guò)引入紋理合成來(lái)進(jìn)一步提高修復(fù)效果。Zoran D 和 Weiss Y[6]提出了學(xué)習(xí)具有高度相似性的圖像補(bǔ)丁作為先驗(yàn)知識(shí),再進(jìn)行圖像修補(bǔ),能夠有效恢復(fù)缺少像素的圖像。Ren J S等人[7]提出了一種基于卷積網(wǎng)絡(luò)的圖像修補(bǔ)方法。Wright J等人[8]將圖像修補(bǔ)作為從輸入中恢復(fù)稀疏信號(hào)的任務(wù)。通過(guò)求解稀疏線性系統(tǒng),可以從一些損壞的輸入中恢復(fù)圖像。然而,該算法要求圖像是高度結(jié)構(gòu)化的(即假設(shè)數(shù)據(jù)點(diǎn)位于低維子空間),例如,良好對(duì)齊的人臉圖像。相反,本文算法能夠在沒(méi)有嚴(yán)格約束的情況下完成目標(biāo)。
針對(duì)補(bǔ)全后的人臉與原始人臉的相似度問(wèn)題,本文提出一種基于CGAN的人臉補(bǔ)全算法,首先將遮掩原圖輸入到卷積神經(jīng)網(wǎng)絡(luò)[9]中提取未遮掩部分的特征作為監(jiān)督信號(hào)輸入生成器和判別器中,指導(dǎo)GAN網(wǎng)絡(luò)進(jìn)行人臉修補(bǔ)。同時(shí)將遮掩照片遮掩處填充噪聲后,輸入到生成器中將人臉補(bǔ)全,生成器G被設(shè)計(jì)為一個(gè)自編碼器[10],在對(duì)缺失部分進(jìn)行重構(gòu)輸出。為了能夠得到相似的人臉復(fù)原,本文中引入兩種對(duì)抗性損失[11]來(lái)調(diào)整生成模型的訓(xùn)練過(guò)程,局部損失是針對(duì)缺失區(qū)域補(bǔ)全的內(nèi)容在語(yǔ)義上一致,全局損失是針對(duì)人臉整體能夠有更加逼真和直觀的結(jié)果。
基于CGAN人臉補(bǔ)全算法的模型,給出了一個(gè)人臉遮擋圖像,目標(biāo)是合成與原始人臉相似的和視覺(jué)上真實(shí)的缺失的內(nèi)容。圖1是本文方法的總體結(jié)構(gòu)圖,由CNN特征提取網(wǎng)絡(luò)、一個(gè)生成網(wǎng)絡(luò)、兩個(gè)判別網(wǎng)絡(luò)組成。

圖1 算法結(jié)構(gòu)
卷積神經(jīng)網(wǎng)絡(luò)[9]是一個(gè)前饋式神經(jīng)網(wǎng)絡(luò),可以用于提取圖像特征。該網(wǎng)絡(luò)采用反向傳播算法來(lái)優(yōu)化網(wǎng)絡(luò)中的參數(shù)。本文引入該網(wǎng)絡(luò)用于人臉特征提取,如圖2所示。不包括輸入層,該網(wǎng)絡(luò)由7層組成,其中包括3層卷積層(C1,C2和C3) 、2 層池化層(S1和S2) 、1 層全連接層。輸入層是128×128的人臉像素矩陣。卷積層和池化(pooling) 層有若干個(gè)特征圖(feature map) ,每個(gè)特征圖都與其前一層特征圖以局部連接的方式相連接。卷積層C1,C2,C3分別使用32,64,128個(gè)過(guò)濾器進(jìn)行操作,每個(gè)卷積層使用的卷積核的大小都為5×5;池化層S1,S2,S3使用的采樣窗口的大小為2×2;全連接層的神經(jīng)元,與池化層S3進(jìn)行全連接;全連接層提取特征向量y,將其作為監(jiān)督信號(hào)輸入生成器和判別器中。

圖2 卷積神經(jīng)網(wǎng)絡(luò)特征提取框架
生成器以遮掩圖像作為輸入并輸出重構(gòu)后的圖像。本文中生成器G為一個(gè)自動(dòng)編碼器,用于構(gòu)造新的內(nèi)容給定的輸入圖像和缺失區(qū)域。屏蔽(或損壞)輸入以及填充噪聲通過(guò)編碼器映射到隱藏表示。與原始的GAN模型[12]不同,它直接從噪聲向量開(kāi)始,從編碼器獲得的隱含表示捕獲更多的變量和未知和已知的關(guān)系之間的關(guān)系,然后饋送到解碼器以生成內(nèi)容。在文中使用VGG—19[13]網(wǎng)絡(luò)的“conv1”到“pool3”的體系結(jié)構(gòu),在此基礎(chǔ)上再疊加2個(gè)卷積層和一個(gè)池化層,并在其之后添加一個(gè)全連接層作為編碼器。解碼器與編碼器的每一層結(jié)構(gòu)相對(duì)應(yīng)。
生成器被訓(xùn)練用來(lái)填補(bǔ)被遮掩的區(qū)域的內(nèi)容,但填充內(nèi)容卻并不能確保整體在視覺(jué)上是真實(shí)的和連貫的。重構(gòu)后的生成像素非常模糊,只生成人臉部分的粗糙形狀。為了能夠讓圖像有更逼真的結(jié)果,需要引入判別器D來(lái)幫助提高合成結(jié)果的真實(shí)性,重復(fù)訓(xùn)練并將訓(xùn)練參數(shù)及結(jié)果反饋到生成器中,直至最后生成器生成出來(lái)的圖像讓判別器無(wú)法分辨真?zhèn)巍?/p>
本文首先針對(duì)缺失區(qū)域提出局部判別器D1,目的是確定缺損區(qū)域中的重構(gòu)內(nèi)容是否是真實(shí)的。局部判別器有助于生成具有更嚴(yán)格約束條件的缺損區(qū)域內(nèi)容的詳細(xì)信息。但它存在局限性,首先,局部判別器并不能規(guī)范全局圖像的紋理結(jié)構(gòu),也不能保證填充區(qū)域填充內(nèi)容與全局的一致性。其次,當(dāng)生成的新像素取決于其周圍的語(yǔ)義信息時(shí),由于解碼器的非池結(jié)構(gòu),在反向傳播過(guò)程中,局部判別器很難在掩蔽區(qū)域之外產(chǎn)生直接影響。因此,像素值沿區(qū)域邊界具有明顯的不一致性。
因此,本文中引入另一個(gè)全局判別器D2來(lái)確定整個(gè)圖像的真實(shí)度。保證了生成的新內(nèi)容是真實(shí)的,且與周圍的結(jié)構(gòu)保持一致。具有更多全局D的網(wǎng)絡(luò)能夠極大地緩解不一致的問(wèn)題,并進(jìn)一步增強(qiáng)了生成內(nèi)容的真實(shí)性。兩個(gè)鑒別器的結(jié)構(gòu)類似于DCGANs[14]。

圖3 在本文網(wǎng)絡(luò)下的人臉修補(bǔ)結(jié)果
首先在生成器上引入了一個(gè)重建損失Lr,即網(wǎng)絡(luò)輸出和原始圖像之間的L2距離。只有Lr,生成的內(nèi)容往往是模糊和平滑的,L2范數(shù)可以防止模型的過(guò)擬合
(1)
式中f(x)為原始圖像,f(xi)為生成圖像,超參數(shù)α是為了拉大f(xi)和f(x)的距離。
通過(guò)使用兩種鑒別器,本文采用對(duì)抗性損失,這反映了生成器如何最大限度地欺騙判別器,以及判別器如何區(qū)分真?zhèn)巍GAN網(wǎng)絡(luò)的損失函數(shù)如式
Ez~pz(z)[log(1-D(G(z|y)))]
(2)
式中pdata(x)和pz(z)為噪聲變量z和實(shí)際數(shù)據(jù)x的分布。D(x|y)為帶有監(jiān)督信號(hào)y條件下真實(shí)樣本x通過(guò)判別器D后的輸出。D(G(z|y))表示生成圖像G(z|y)通過(guò)判別器D后的輸出,一般要求越接近0越好。兩個(gè)判別網(wǎng)絡(luò){D1,D2}具有相同的損失函數(shù)定義。唯一的區(qū)別是局部判別器只為缺失區(qū)域提供訓(xùn)練信號(hào)(損失梯度),而全局判別器則在整個(gè)圖像中反向傳播損失梯度。
最終的綜合損失函數(shù),是以上各種損失函數(shù)的加權(quán)和,定義如下
L=Lr+λ1LD1+λ2LD2
(3)
式中λ1,λ2為平衡不同損失影響的權(quán)重。
為了有效地訓(xùn)練網(wǎng)絡(luò),本文采用了文獻(xiàn)[15]策略,逐步增加了難度和網(wǎng)絡(luò)規(guī)模。培訓(xùn)過(guò)程分3個(gè)階段進(jìn)行。首先,對(duì)卷積神經(jīng)網(wǎng)絡(luò)進(jìn)行訓(xùn)練,用于特征提取;其次是利用重構(gòu)損失對(duì)網(wǎng)絡(luò)進(jìn)行訓(xùn)練,得到模糊內(nèi)容;最后對(duì)網(wǎng)絡(luò)進(jìn)行微調(diào),以彌補(bǔ)本地對(duì)抗性的損失。每個(gè)階段都為下一個(gè)階段的改進(jìn)做好準(zhǔn)備,從而大大提高了網(wǎng)絡(luò)培訓(xùn)的有效性和效率。在對(duì)抗性損失的訓(xùn)練中,文中使用類似于[14]的方法,特別是避免了在訓(xùn)練過(guò)程開(kāi)始時(shí)判別器太強(qiáng)的情況。
通過(guò)大量實(shí)驗(yàn)證明本文模型能夠生成人臉圖像中缺失的內(nèi)容。網(wǎng)絡(luò)訓(xùn)練的超參數(shù)(例如,學(xué)習(xí)率)參考文獻(xiàn)[15]中所建議的。為了平衡不同損耗的影響,在實(shí)驗(yàn)中采用了λ1=300,λ2=300。
本文是使用Celeb[15]數(shù)據(jù)集來(lái)學(xué)習(xí)和評(píng)估本文的模型,它由202 599張人臉圖像組成,每幅人臉圖像被裁剪,按2只眼睛的位置大致對(duì)齊,重新標(biāo)度為128像素×128像素×3像素。遵循標(biāo)準(zhǔn)分割,文中訓(xùn)練用162 770張圖像,驗(yàn)證用19 867張,測(cè)試用19 962張。
本文的實(shí)驗(yàn)環(huán)境是在Ubuntu16.04平臺(tái)上由配有Tensorflow1.20框架的python編程實(shí)現(xiàn),處理器為Intel Core i7—6300HQ,2.9 GHz16核CPU,內(nèi)存為64G,顯卡為GTX1080Ti,顯存為8G。將本文方法生成的人臉,與文獻(xiàn)[4]對(duì)比如下圖所示,并計(jì)算生成圖與原始圖片的相似度。

圖4 人臉修復(fù)結(jié)果
由表1對(duì)比可以看出,本文方法生成的人臉在視覺(jué)上更逼真,相似度結(jié)果表明本文方法得到的人臉和原始人臉相似性更高,置信度更高。

表1 性能指標(biāo)
在本文中提出了一種面向人臉補(bǔ)全的深度生成網(wǎng)絡(luò),以條件生成對(duì)抗網(wǎng)絡(luò)為基礎(chǔ),使用卷積神經(jīng)網(wǎng)絡(luò)進(jìn)行特征提取,再將特征信息作為監(jiān)督信息輸入以一個(gè)自動(dòng)編碼器為生成器,兩個(gè)對(duì)抗性損失函數(shù)(局部和全局)為判別器的網(wǎng)絡(luò)中,該模型能夠成功地對(duì)隨機(jī)噪聲中缺失的人臉關(guān)鍵部分合成與原圖內(nèi)容相似的內(nèi)容,實(shí)驗(yàn)表明了該模型的生成圖像的相似度。在未來(lái)的可以將本方法與人臉識(shí)別進(jìn)行結(jié)合。