魏 赟,孫 碩
(上海理工大學(xué) 光電信息與計算機(jī)工程學(xué)院,上海 200093)
隨著深度學(xué)習(xí)的發(fā)展,帶來了許多新的方法,在不斷刷新人臉識別的準(zhǔn)確率.但是這些超高的識別率是建立在特定的條件下,如果人臉圖像由于圍巾、眼鏡、口罩等造成的遮擋而缺失部分信息,則他們的識別性能會大幅度降低.為了解決這一問題,人們嘗試去恢復(fù)遮擋區(qū)域的像素,即人臉修復(fù)[1,2].但是考慮到遮擋的多樣性和人臉細(xì)節(jié)的復(fù)雜性,這項任務(wù)變的非常具有挑戰(zhàn)性.
近些年來,已經(jīng)提出了各種方法來處理人臉圖像的遮擋問題,對于在一定約束下得到的人臉圖像[3-6].在文獻(xiàn)[3]中,Park等人使用PCA來重建眼鏡遮擋住的區(qū)域.Robust-PCA框架[4]用于利用非遮擋的面部圖像集檢測輸入圖像的遮擋遮罩,然后基于先驗信息對遮擋的部分進(jìn)行修復(fù).在文獻(xiàn)[5]中,周等人將馬爾可夫隨機(jī)場模型結(jié)合到被遮擋人臉圖像的稀疏表示的計算中以保證重建誤差的局部空間連續(xù)性.唐等人[6]提出了一個強(qiáng)大的基于Boltzmann機(jī)器的模型來處理遮擋和噪聲.這種無監(jiān)督模型使用乘法門控來誘導(dǎo)兩個高斯的像素混合.這些方法都需要沒有任何遮擋的面部圖像以及與數(shù)據(jù)集相應(yīng)的遮擋圖像.很難收集具有大量圖像和各種遮擋的這種數(shù)據(jù)集.因此,為了訓(xùn)練這樣的方法,通常使用來自常用面部數(shù)據(jù)庫的具有不同遮擋物(例如圍巾、太陽鏡)的人工生成的遮擋圖像.
傳統(tǒng)的圖像修復(fù)方法[7,8]通過依賴于低級視覺特征,從本地信息中搜索可用的補(bǔ)丁來填補(bǔ)缺失區(qū)域,但是當(dāng)在源圖像中找不到匹配的補(bǔ)丁時它們可能會失敗.文獻(xiàn)[9]使用大型外部圖像數(shù)據(jù)庫來緩解這個問題,然而在處理對象圖像(例如人臉圖像)的修復(fù)任務(wù)中,每個部分可能是唯一的,所以它們也不能保證匹配補(bǔ)丁在語義上是有效的.
最近,Generative Adversarial Networks(GANs)[10]在各種機(jī)器學(xué)習(xí)任務(wù)中獲得了可觀的成果.由此衍生出的各種基于GAN的生成模型被用于解決人臉圖像修復(fù)問題.Pathak等人[11]提出了一種編碼器-解碼器架構(gòu),名為Context Encoder,通過訓(xùn)練一個神經(jīng)網(wǎng)絡(luò)對上下文信息進(jìn)行編碼,來預(yù)測缺失區(qū)域的信息,但是當(dāng)缺失區(qū)域具有任意形狀時,它會產(chǎn)生模糊或不真實的信息.在文獻(xiàn)[12]中,作者通過應(yīng)用局部和全局兩個鑒別器來促進(jìn)缺失區(qū)域和整個圖像的損失梯度的反向傳播,并采用一個預(yù)先訓(xùn)練好的語義解析網(wǎng)絡(luò)來整合學(xué)習(xí)視覺表示,以生成語義上合理且視覺上真實的內(nèi)容.Yeh等人[13]提出了一種通過情境和感知損失(實際上是對抗性損失)訓(xùn)練DCGAN的方法,需要在測試時間內(nèi)進(jìn)行對此迭代,來找到潛在空間中損壞圖像的最接近映射,來完成修復(fù).然而,上述方法假設(shè)要修復(fù)的圖像區(qū)域的位置/尺寸是預(yù)先已知的.這種假設(shè)可能不適用于實際的修復(fù)任務(wù)(或者它需要從輸入圖像中手動分割遮擋區(qū)域).
因此,本文提出了一種新的人臉圖像還原算法,考慮到真實場景下的不同的遮擋(如眼鏡、口罩等)大小和位置對圖像還原的影響,它集成了深度生成模型和遮擋區(qū)域自動檢測功能,以滿足在實際場景圖像中高質(zhì)量修復(fù)任務(wù).給定具有遮擋的面部圖像,使用預(yù)先訓(xùn)練好的DCGAN作為遮擋檢測與生成網(wǎng)絡(luò),通過最小化損失來學(xué)習(xí)最接近遮擋圖像的編碼,然后這種編碼通過生成模型推斷缺失的內(nèi)容,考慮到遮擋的大小是未知的,這里加入新的損失函數(shù),通過交替優(yōu)化技術(shù)來定位遮擋.最后,生成的面部以遮擋感知的方式與遮擋面部整合,從而恢復(fù)無遮擋面部.引入語義感知網(wǎng)絡(luò),通過對恢復(fù)的人臉進(jìn)行語義規(guī)范化,并幫助優(yōu)化上面的遮擋檢測與生成模型的訓(xùn)練過程,使生成的內(nèi)容更加真實并且在視覺上保持一致性.
通常GAN框架由生成模型G和判別模型D組成.生成器主要用來學(xué)習(xí)真實圖像分布從而讓自身生成的圖像更加真實,以騙過判別器.判別器則需要對接收的圖片進(jìn)行真假判別.在整個過程中,生成器努力地讓生成的圖像更加真實,而判別器則努力地去識別出圖像的真假,這個過程相當(dāng)于一個二人博弈,隨著時間的推移,生成器和判別器在不斷地進(jìn)行對抗,最終兩個網(wǎng)絡(luò)達(dá)到了一個動態(tài)均衡:生成器生成的圖像接近于真實圖像分布,而判別器識別不出真假圖像.
GAN的目標(biāo)函數(shù)如下:
(1)
這里的G(z)表示G的輸出,即生成的欺詐數(shù)據(jù),z被看作是一個從先驗分布P_Z中隨機(jī)抽取的R_P向量.D(d)表示D的輸出,即輸入d為真實數(shù)據(jù)的概率.由于訓(xùn)練階段的不穩(wěn)定性和生成的圖像的隨機(jī)性,原來的GAN結(jié)構(gòu)已經(jīng)不適合圖像的修復(fù)任務(wù)[13].Radford等人在文獻(xiàn)[14]中改進(jìn)了GAN的網(wǎng)絡(luò)結(jié)構(gòu),以提高原GAN在訓(xùn)練期間的穩(wěn)定性和結(jié)果的質(zhì)量.與原來的GAN相比,DCGANs的改進(jìn)主要有:
不采用任何池化層(Pooling Layer),在判別器D中,用帶有步長(Stride)的卷積來代替池化層.
在G、D中均使用Batch Normalization幫助模型收斂.
在G中,激活函數(shù)除了最后一層都使用ReLU函數(shù),而最后一層使用tanh函數(shù).使用tanh函數(shù)的原因在于最后一層要輸出圖像,而圖像的像素值是有一個取值范圍的,如0~255.ReLU函數(shù)的輸出可能會很大,而tanh函數(shù)的輸出是在-1~1之間的,只要將tanh函數(shù)的輸出加1再乘以127.5可以得到0~255的像素值.
在D中,激活函數(shù)都使用Leaky ReLU作為激活函數(shù).
在本節(jié)中,將描述所提出的感知遮擋人臉還原模型.針對有遮擋人臉圖像IOC∈Rm×n×3,本文提出的方法旨在事先不知道遮擋大小和位置的情況下恢復(fù)IOCC的像素.
本文將重建的圖像輸出表示為Irec∈Rm×n×3,其中包含有遮擋人臉圖像IOCC中無遮擋區(qū)域的像素和遮擋區(qū)域的預(yù)測像素.
IrecM⊙IOCC+(1-M)⊙G(z)
(2)
G(z)是生成器,用于預(yù)測遮擋區(qū)域的像素輸出.M是一個二值掩模圖像,其中值為0的像素表示遮擋區(qū)域,值為1的像素表示無遮擋區(qū)域.
圖1為感知遮擋人臉圖像還原模型的流程圖,主要步驟如下:
1)預(yù)訓(xùn)練DCGAN,通過最小化損失來學(xué)習(xí)最接近遮擋圖像的編碼;
2)引入新的損失函數(shù),通過交替優(yōu)化技術(shù)來定位遮擋;
3)將生成的面部與未遮擋部分進(jìn)行融合.并通過語義感知網(wǎng)絡(luò)來規(guī)范.
圖1 本文方法的流程圖Fig.1 Model flow chart
2.2.1 模型的大小與架構(gòu)
本文的模型基于預(yù)訓(xùn)練的DCGAN,生成器和辨別器的網(wǎng)絡(luò)結(jié)構(gòu)互為逆操作,總共有8個卷積層,圖片尺寸和層深度變化如表1所示,生成器的所有轉(zhuǎn)置卷積運(yùn)算都使用5×5大小的卷積核,步長為2,其層深度從512逐漸降到3,此處的3代表RGB彩色圖像的3個通道,最終生成64×64大小的圖片.
表1 模型的體系結(jié)構(gòu)Table 1 Architecture of the model
2.2.2 遮擋檢測與生成
根據(jù)圖1所示,首先使用預(yù)訓(xùn)練的DCGANs來定位遮擋并生成對應(yīng)的面部圖像,這需要最小化損失來自動學(xué)習(xí)和推導(dǎo)輸入向z∈Rp量和二值掩模M.
學(xué)習(xí)最佳輸入z
引入了[13]中的損失函數(shù):
(3)
該損失函數(shù)有兩部分組成:第一項上下文損失(Contextual Loss)LC和第二項先驗損失(Prior Loss)Lp.
上下文損失表示生成圖像與IOCC圖像中的無遮擋區(qū)域的差異,這里直接設(shè)置W等于M.
先驗損失是指一類基于高層次圖像特征表示而非像素級差異的損失.在GANs中,鑒別器D被訓(xùn)練來區(qū)分生成的圖像和真實的圖像,因此選擇DCGAN中的鑒別器損失來作為先驗損失,這里是平衡兩種損失的參數(shù).z被更新來欺騙D,并使相應(yīng)生成的圖像更加真實.
考慮到遮擋的大小和位置是未知的,加入新的損失函數(shù):
(4)
其中Xi,j表示掩模M的每個像素值,R和C表示行和列中的像素數(shù),通過計算每個像素與它的周圍像素的相似度,來生成平滑的掩膜M.
通過交替優(yōu)化技術(shù)來定位遮擋,并在隨后的迭代訓(xùn)練中將遮擋檢測信息傳播給生成網(wǎng)絡(luò)中,使其專注于生成遮擋區(qū)域而不是整個面部.
整個損失函數(shù)的形式為:
L=Lc+λ1Lp+λ2LO
(5)
(6)
推導(dǎo)遮擋掩模M
為了自動檢測出圖像中的遮擋區(qū)域并生成掩模,引入一個剩余函數(shù)ρ(e)[14]:
(7)
其中M(i,j)表示二值掩模矩陣,矩陣e表示輸入圖像IOCC和重建圖像Irec的像素差.這里如果e較大,則ρ(e)的結(jié)果近似于0,如果e較小,則ρ(e)的結(jié)果近似于1.相應(yīng)的可以得到二值掩模矩陣M.
2.2.3 算法流程
根據(jù)上述推導(dǎo)細(xì)節(jié),遮擋檢測與生成過程總結(jié)如下:
輸入:訓(xùn)練好的DCGANs,IOCC,初始化M,z
輸出:M和G(z)
for迭代次數(shù)do
隨機(jī)抽取一個100維度的輸入向量z;
哪有什么星星,天陰著呢,范青青就是在找借口和他約會,他們出去吃了夜市,范青青那晚特別興奮,眉眼之中寫滿快樂,和之前的范青青有點兒不一樣。田銘的心也跟著陌生地愉悅起來。
計算整個損失項L;
使用Adam梯度下降法更新z;
將z的值限制在[-1,1];
使用隨機(jī)梯度下降法更新M;
對M進(jìn)行標(biāo)準(zhǔn)化到[0,1];
retrunM、z
將學(xué)習(xí)到的最優(yōu)z傳給G,來生成G(z)
2.2.4 人臉圖像還原
盡管能夠很好的從被遮擋的面部恢復(fù)人臉結(jié)構(gòu)信息(例如眼睛、嘴和他們的空間位置),但上面介紹的模型僅考慮無遮擋人臉圖像與恢復(fù)后的人臉圖像之間損失的最小化.假設(shè)輸入人臉圖像的下半部分被遮擋時,僅利用上面的信息,很難確定下面實際是什么樣子,也就是說,對于人臉圖像的遮擋區(qū)域存在多種合理的外觀表現(xiàn),如果強(qiáng)制模型完全適合每個像素的值,則人臉圖像遮擋修復(fù)后的部位更傾向于所有外觀的平均值,從而導(dǎo)致了面部辨別細(xì)節(jié)的丟失,影響人臉識別的準(zhǔn)確率.本文利用Light-CNN[19]網(wǎng)絡(luò)的最后兩層架構(gòu)作為語義感知網(wǎng)絡(luò)S.語義感知網(wǎng)絡(luò)旨在維持還原后的面部和實際面部之間的面部感知相似性,提高恢復(fù)面部的視覺質(zhì)量.感知損失表述為:
(8)
其中Wk,Hk表示Light-CNN網(wǎng)絡(luò)中的空間維度.i∈{1,2}代表Light-CNN的最后兩層.
在DCGANs訓(xùn)練階段,本文使用數(shù)據(jù)集CelebA[20],它包含10177個名人身份的202599張人臉圖片,因為只需要使用無遮擋的圖片訓(xùn)練,這里刪除了帶有太陽鏡、口罩等遮擋圖像.然后使用MS-Celeb-1M[21]來訓(xùn)練語義感知CNN網(wǎng)絡(luò),并對模型進(jìn)行微調(diào),在訓(xùn)練之前,使用OpenFace對每個圖像進(jìn)行對齊,并確保大小為64*64像素.
為了評估所提模型的還原效果,本文使用兩個數(shù)據(jù)集進(jìn)行測試,即AR人臉數(shù)據(jù)庫1和LFW[22],AR包含了足夠數(shù)量的遮擋圖像,對于LFW,本文只選擇帶有太陽鏡或合成掩模遮擋的圖像作為測試輸入.
本文訓(xùn)練所使用機(jī)器配置NVIDIA GeForce 1080Ti顯卡,16GB內(nèi)存,基于TensorFlow深度學(xué)習(xí)框架.
對DCGAN迭代訓(xùn)練25個周期,每個周期迭代訓(xùn)練1000次,在遮擋檢測與生成階段將損失項的參數(shù)λ1設(shè)置為0.001,λ2設(shè)置為0.003.
遮擋檢測與生成的過程的中間輸出,如圖2所示.第一行顯示遮擋人臉生成的預(yù)測輸出,第二行顯示遮擋的檢測結(jié)果.開始階段模型的生成階段產(chǎn)生一個可能的人臉,其中被遮擋部分可能不如非遮擋的部分那么清楚.遮擋檢測網(wǎng)絡(luò)提供遮擋區(qū)域的粗略估計,然后根據(jù)前面步驟的狀態(tài)逐步細(xì)化輸出,也就是說越來越多的結(jié)構(gòu)和紋理添加到臉部輪廓.
圖2 遮擋檢測與生成的演變過程Fig.2 Evolution of occlusion detection and generation
圖3給出了本文提出的方法在檢測遮擋的圖像區(qū)域時的平均收斂速度,其中縱軸表示檢測到的遮擋區(qū)域的像素差,而橫軸表示迭代次數(shù).可以看出,基于本文的實驗,所提算法將在6次迭代中收斂,以通過GAN執(zhí)行面部修復(fù).
圖3 遮擋檢測與生成模型的收斂性Fig.3 Convergence of occlusion detection and generation model
3.3.1 結(jié)果
針對不同類型和大小的遮擋檢測,遮擋檢測與生成的結(jié)
圖4 遮擋檢測與生成效果圖Fig.4 Occlusion detection and generation
果如圖4所示,圖中第1列和第4列為不同類型的遮擋圖片,第2和第5列檢測到的遮擋掩模,第3和第6列為還原后的人臉圖像.最后兩行是在LFW數(shù)據(jù)集上做的測試,可以看出,對具有同一規(guī)律的不同測試集,經(jīng)過訓(xùn)練的模型也能給出合適的輸出,通過對輸出結(jié)果的對比,本文模型的泛化能力得到了較好的展現(xiàn).
3.3.2 視覺比較
本文比較了與Yeh等提出方法[13]的還原效果,如圖5所示.圖5(a)為有遮擋圖像,圖5(b)為文獻(xiàn)[13]中預(yù)定義的掩模,圖5(c)是文獻(xiàn)[13]中方法的還原結(jié)果,圖5(d)是本文方法自動檢測出的遮擋掩模,圖5(e)是本文方法的還原結(jié)果.由于文獻(xiàn)[13]中的方法需要預(yù)定義圖像中遮擋區(qū)域的位置和大小,如果定義的遮擋掩模包含未被遮擋的像素,也會被預(yù)測生成的圖像所覆蓋.相較之下,本文提出的方法能夠自動檢測出遮擋區(qū)域,不會生成多余的像素.因此將優(yōu)于文獻(xiàn)[13]的使用.
圖5 還原結(jié)果對比Fig.5 Comparison of reduction results
3.3.3 定量比較
除了視覺效果的比較,在本文的實驗中,進(jìn)一步驗證了加入語義感知CNN后對遮擋圖像還原的提升,如圖6最后一列所示,加入感知損失后,可以理解人臉的語義結(jié)構(gòu)并很好地保持身份,從而大大提高了還原的面部視覺質(zhì)量.
圖6 不同損失項對結(jié)果的影響Fig.6 Impact of different loss items on the results
表2 AR數(shù)據(jù)集在不同損失項下的SSIM和PSNRTable 2 SSIM and PSNR for AR data sets under different loss terms
本文在AR測試數(shù)據(jù)集上采用兩個度量,即峰值信噪比(PSNR)和結(jié)構(gòu)相似性指數(shù)(SSIM).在不同的損失項所獲得的還原結(jié)果與原始面部圖像之間計算這兩個度量,如表2所示,加上感知損失項后得到了更高的SSIM和SSIM值.表3示出了不同還原方法的SSIM值和PSNR值,與PatchMatch[7]相比,本文的方法能夠推斷出圖像的正確結(jié)構(gòu),與Context Encoder[11]相比能夠保留更多的人臉的精細(xì)細(xì)節(jié).
表3 不同還原方法的SSIM和PSNRTable 3 SSIM and PSNR with different methods
本文提出了一種新的方法來還原有遮擋人臉圖像,與現(xiàn)有的人臉還原方法相比,本文的方法已經(jīng)證實可以在不知道遮擋位置和大小的情況下,進(jìn)行遮擋檢測并還原,還原后的人臉圖像,能夠保留更多的面部細(xì)節(jié).