謝卓然 寸怡鵬 姜德航 王 菲
隨著計算機硬件的飛速發(fā)展,深度學(xué)習(xí)的出現(xiàn)使得計算機視覺課題中的許多難題迎刃而解。但即便在這種情形下,要想讓計算機學(xué)習(xí)并擁有修復(fù)一張圖片中的缺失部分的能力依然是一件很有挑戰(zhàn)性的事。而本文討論的圖像修復(fù)方法正是結(jié)合深度學(xué)習(xí)中的生成對抗網(wǎng)絡(luò)(Generative Adversarial Network,后稱GAN),并以最小二乘作為GAN 損失函數(shù)的一種圖像修復(fù)方法。我們稱這種網(wǎng)絡(luò)結(jié)構(gòu)為:最小二乘生成對抗網(wǎng)絡(luò)(LeatSquare GenerativeAdversarial Network,后稱 LSGAN)。
Criminis 算法[1]的本質(zhì)是將圖像本身的紋理“復(fù)制粘貼”到破損區(qū)進行修復(fù)。
圖 1 Criminisi 修復(fù)算法原理
如圖1 所示為Criminis 算法修復(fù)殘缺圖片的過程:Ω是圖像中待修補的部分,則可以用?Ω 表示其邊界;Φ 為圖像剩余區(qū)域;算法在邊界先選一以p 點為中心的區(qū)域Ψp 作為當(dāng)前修復(fù)目標(biāo) ,再到已知的Φ 中搜索一與其紋理最為相似的Ψq,如圖1(b)所示。最后復(fù)制粘貼到破損部分進行修復(fù)形成圖1(c)的結(jié)果,以此類推。
數(shù)據(jù)驅(qū)動修復(fù)圖像[2]的方法不將圖像修補的素材局限在破損圖像本身,而是利用互聯(lián)網(wǎng)上豐富的圖片來解決Criminisi 算法中,不能在剩余圖像中找到與待修復(fù)區(qū)相匹配的紋理的問題。
該方法首先從互聯(lián)網(wǎng)中挑選數(shù)百個與待修復(fù)圖像最為相似的圖片,并用Oliva A 等人[3]計算圖像匹配特征向量。接著根據(jù)上下文的匹配誤差,選擇最佳的補全位置。最后返回20 個最佳補全結(jié)果供用戶挑選。
這種方法拋棄了Criminisi 算法中修補材料只能來源于破損圖片的局限性,為如何修復(fù)圖像提出了新思路。
繼數(shù)據(jù)驅(qū)動修復(fù)之后,Pathak D 等人[4]在2017 年CVPR(IEEE Conference on Computer Vision and Pattern Recognition,IEEE 國際計算機視覺與模式識別會議)上提出,利用卷積神經(jīng)網(wǎng)絡(luò)來學(xué)習(xí)圖像中的高級特征,再用這些特征來指導(dǎo)圖像破損區(qū)域的重新生成。其網(wǎng)絡(luò)結(jié)構(gòu)如圖2 所示。
圖2 Pathak.D 等人提出的用修補圖像網(wǎng)絡(luò)
Context-Encoder(后稱 CE)將 Encoder-Decoder 網(wǎng)絡(luò)和GAN(生成式對抗網(wǎng)絡(luò))相結(jié)合:兩個網(wǎng)絡(luò)各司其職:Encoder-Decoder 負責(zé)實現(xiàn)同時學(xué)習(xí)圖像特征以及生成修補素材的兩大功能,而GAN 部分則用來判斷修復(fù)結(jié)果的真實性。當(dāng)Encoder-Decoder 生成的素材與破損圖像無縫銜接,且GAN 也判斷不出圖像是否為人工合成時,認為該方法達到最佳效果。
與數(shù)據(jù)驅(qū)動法相比,這種方法不需要連接圖片庫,當(dāng)網(wǎng)絡(luò)訓(xùn)練好以后,它可以省去大量用于圖片搜索的時間。
Criminisi 的算法只能很好的修復(fù)含大量重復(fù)性紋理的圖像,算法效率較低,且對其他大部分圖片都不適用。
數(shù)據(jù)驅(qū)動算法允許引入更多的外部內(nèi)容對圖像進行修復(fù),但在修復(fù)過程中使用的特征仍然是較低級的特征,在測試場景與數(shù)據(jù)庫映像有顯著差異時很容易失敗。
CE 算法利用深度卷積神經(jīng)網(wǎng)絡(luò),克服了前兩種算法中存在的問題。但由于其訓(xùn)練網(wǎng)絡(luò)時,直接將含有固定破損形狀的圖像作為神經(jīng)網(wǎng)絡(luò)的輸入,導(dǎo)致其只能很好的修復(fù)某特定類型的破損圖片。當(dāng)圖像破損部分與用來訓(xùn)練網(wǎng)絡(luò)的圖片的破損形狀不一致時,修復(fù)出的結(jié)果就很難令人滿意了。
相比之下,本文所使用的方法在這一方面具有顯著優(yōu)勢:它與CE 同樣用到了GAN 網(wǎng)絡(luò)作為模型核心,但它在訓(xùn)練網(wǎng)絡(luò)時不需要加入帶掩碼的圖片,因此對于任意形狀的破損區(qū)域,也能獲得較好的修復(fù)結(jié)果。
生成式對抗網(wǎng)絡(luò)的理念起初是在 Ian Goodfellow 等人的開創(chuàng)性論文“Generative Adversarial Nets”[5]中提出的。GAN 網(wǎng)絡(luò)原理結(jié)構(gòu)如圖3 所示。其中,G 是圖像生成網(wǎng)絡(luò),向他輸入一單位隨機向量z 以生成圖片G(z)。D 是判別網(wǎng)絡(luò),用于判斷圖片來源的真實性。其輸?shù)膱D像x 可以來源于現(xiàn)實環(huán)境或生成器G 偽造而成,最終輸出一結(jié)果D(x)表示圖像來源為真實圖像的概率。
圖 3 GANs 結(jié)構(gòu)模型
在訓(xùn)練過程中,D 和G 網(wǎng)絡(luò)之間形成動態(tài)博弈。生成網(wǎng)絡(luò)在一次次訓(xùn)練中逐漸增加偽造圖像在判別網(wǎng)絡(luò)處的得分。而判別網(wǎng)絡(luò)則希望將生成網(wǎng)絡(luò)合成的圖片和真實的自然圖像準(zhǔn)確區(qū)分開。我們將上述過程循環(huán)執(zhí)行足夠多的次數(shù),D(G(z))的值將趨近于50%,此時生成網(wǎng)絡(luò)合成的圖像已經(jīng)足夠自然,網(wǎng)絡(luò)訓(xùn)練完成。
文獻[12-13]指出,原始GAN 訓(xùn)練過程很不穩(wěn)定,這很大程度上是GAN 使用交叉熵函數(shù)(Sigmoid cross entropy)作為判別器損失函數(shù)導(dǎo)致的。這將導(dǎo)致那些仍然遠離真實數(shù)據(jù)的、但又在決策邊界被分類為真的假樣本停止繼續(xù)迭代,而這些樣本的梯度是梯度下降的決定方向。于是當(dāng)我們再用這些樣本反過來更新生成器的時候,訓(xùn)練過程就變得不穩(wěn)定了,容易發(fā)生梯度消失的現(xiàn)象,導(dǎo)致生成器生成的圖片質(zhì)量很差。
Mao Xudong 等人[8]提出,用最小二乘函數(shù)替換交叉熵做判別器損的失函數(shù)可以很好解決這個問題。因為使用最小二乘函數(shù)的LSGAN 會對處于判別成真的那些遠離決策邊界的樣本進行懲罰,把遠離決策邊界的假樣本拖進決策邊界,有效避免梯度消失,從而提高生成圖片的質(zhì)量。
圖4 展示了交叉熵和最小二乘損失函數(shù)的區(qū)別,可以看出GAN 采用的交叉熵函數(shù)右側(cè)存在大片梯度為0 的飽和區(qū)域,當(dāng)樣本落入這個范圍時,對生成器不再起到任何更新作用。反觀最小二乘函數(shù),只在1 個點發(fā)生飽和,這使LSGAN 的訓(xùn)練過程可以一直進行下去,生成比GAN 更清晰的結(jié)果。
設(shè)原GAN 的目標(biāo)函數(shù)如下:
其中,x~pdata表示圖像來源于真實數(shù)據(jù),z~pz來表示圖片是偽造生成。對生成器 G,希望 D(G(z))最大,或(1-D(G(z)))最小。而對于判別器D,則希望當(dāng)數(shù)據(jù)來源于真實圖像式 D(x)最大。
改進后的損失函數(shù)如下:
對上式 a,b,c 有:b-c=1 且 b-a=2。本文選取 a=0,b=1,c=1。
與CE 修復(fù)圖像的方法不同,該網(wǎng)絡(luò)并不是直接將破損的圖片直接作為輸入來修復(fù),而是先用生成器生成一人臉圖像,將其對應(yīng)的破損區(qū)域剪裁下來并粘貼到破損圖上,用泊松編輯[9]做邊界融合,這使得本文的修復(fù)方法將不受到圖像破損形狀的約束,修復(fù)效果優(yōu)于CE。
本文用到的LSGAN 圖像修復(fù)網(wǎng)絡(luò)結(jié)構(gòu)如圖5 所示。生成網(wǎng)絡(luò)G 的輸入是一個從[-1,1]之間的均勻分布繪制的隨機100維矢量,經(jīng)過數(shù)次微步幅卷積運算,最終生成64*64*3 的圖像。鑒別模型D 與生成模型G 呈現(xiàn)鏡像:輸入層是尺寸為64*64*3的圖像,隨后是一系列卷積運算,最后經(jīng)最小二乘函數(shù)輸出一個0 到1 之間的單值作為概率。
此外,我們還在卷積神經(jīng)網(wǎng)絡(luò)的結(jié)構(gòu)上做了一些調(diào)整,以提高樣本的質(zhì)量和收斂的速度,包括:
圖4 交叉熵損失與最小二乘損失對比
圖5 LSGAN 圖像修復(fù)網(wǎng)絡(luò)結(jié)構(gòu)
(1)將所有池化層都改為帶步長卷積運算。這能讓網(wǎng)絡(luò)學(xué)習(xí)到自己去學(xué)習(xí)一種采樣方式。
(2)用全局平均池化(global average pooling)替換全連接層,這雖然會影響收斂速度但是能增加模型的穩(wěn)定性。
(3)使用批歸一化,使輸入到每一個節(jié)點的數(shù)據(jù)的平均值都為0,方差都為1,從而穩(wěn)定訓(xùn)練。這個方法能防止模型只輸出相同的樣本,又稱為Helvetica Scenario 現(xiàn)象,而這個現(xiàn)象是GAN 在實際使用中遇到的最大的問題。
(4) 生成模型中除了輸出層的激活函數(shù)使用tanh 以外,其余激活函數(shù)都用ReLU。這能夠讓模型在訓(xùn)練中更快地達到飽和并且能對彩色圖片有更好的處理效果。
(5)用Adam 優(yōu)化算法[7]代替梯度下降法。原始的隨機梯度下降算法在更新參數(shù)的過程中學(xué)習(xí)率始終保持不變,當(dāng)研究非穩(wěn)態(tài)或非線性問題時性能差。而Adam 算法結(jié)合了AdaGrad 和RMSProp 算法最優(yōu)的性能,能為不同的參數(shù)設(shè)計獨立的自適應(yīng)性學(xué)習(xí)率,調(diào)參過程簡單,默認參數(shù)就可以處理絕大部分的問題。
假定現(xiàn)在網(wǎng)絡(luò)生成了一個G(z)'能與破損圖像完美拼合。設(shè)圖片待修復(fù)區(qū)域為y,并用一個與y 相同大小二進制掩碼M來標(biāo)注破損區(qū)域,破損區(qū)域的值均為0,其余部分為1,則我們可以用下列算式來表示修補后的圖像。
為使G(z)'生成的圖像與y 有高度相似性,我們定義兩個損失函數(shù)Lc與Lp,其中,環(huán)境損失Lc表示破損圖與生成器偽造圖像素材的匹配程度,先驗損失Lp表示生成人像的真實程度,有:
損失越小,G 生成的圖像與殘缺圖像剩余的部分越相似,圖像越真實。但在實驗過程中,我們發(fā)現(xiàn)公式(5)的設(shè)定并不合理,因為它對破損圖像中的所有像素均做等同處理。實際上我們應(yīng)該使靠近破損區(qū)域的像素獲得更高的權(quán)重。因此,添加參數(shù)W 衡量待修復(fù)人像中像素對環(huán)境損失的影響大?。?/p>
其中N(i)代表的是像素i 周圍的一個鄰組,它的絕對值則表示該鄰組的像素基數(shù)。經(jīng)試驗發(fā)現(xiàn),范數(shù)1 的效果比范數(shù)2更佳,因此我們重新定義環(huán)境損失為。
現(xiàn)在整個修復(fù)圖像過程的損失函數(shù)L(z)可以表示。
其中λ 為超參數(shù),當(dāng)λ 值大于1,說明先驗損失在圖像修補過程中更受重視;當(dāng)λ 的值小于1 時,則環(huán)境損失更受重視。本文選取λ=0.003。
實驗環(huán)境為基于Linux 內(nèi)核的Ubuntu 14 操作系統(tǒng),采用python3.5 下的Tensorflow 深度學(xué)習(xí)框架。我們把從CelebA(CelebFaces Attributes Dataset)上下載的202 599 張數(shù)據(jù)集放入一個單獨命名好的文件夾中,表明這個數(shù)據(jù)集是未經(jīng)加工的圖片。利用OpenFace 的排列工具,將所有圖像統(tǒng)一處理成64×64像素的大小。再將這些圖片打包分為訓(xùn)練集、測試集和驗證集。用這些素材訓(xùn)練LSGAN 生成人臉以及修復(fù)圖像,運行50 個周期,每個周期2 000 次,監(jiān)控圖像修復(fù)過程中的參數(shù)變化,并將結(jié)果與現(xiàn)有的深度學(xué)習(xí)修復(fù)方法相比較,分析不同的網(wǎng)絡(luò)的性能差異。
經(jīng)過5 個周期后,修復(fù)效果如圖6 所示。
圖6 LSGAN 修復(fù)破損人臉圖像的效果
其生成模型生成人臉的過程,以及對應(yīng)損失值的變化分別如圖7 和圖8 所示??梢钥闯?,在最初250 次損失下降最快,200 個周期以內(nèi)損失值降為最初損失的一半(紅色虛線標(biāo)記)。1 個周期之后,損失就已經(jīng)足夠小了。
表1 質(zhì)量評價表
將本文對中心區(qū)域破損圖像的修復(fù)效果與同樣運用了GAN 結(jié)構(gòu)的DCGAN 和CE 方法相比,結(jié)果如圖9 所示。表1 展示了每1 000 次修復(fù)結(jié)果中的平均峰值信噪比PSNR[10]和結(jié)構(gòu)相似性SSIM[11]來定量評價各模型的修復(fù)效果。PSNR 是最普遍和使用最為廣泛的一種圖像客觀評價指標(biāo),然而它是基于對應(yīng)像素點間的誤差,即基于誤差敏感的圖像質(zhì)量評價。SSIM 可以分別從亮度、對比度、結(jié)構(gòu)三方面度量圖像相似性。這兩種指標(biāo)的數(shù)值越大,表示效果越好。
為保證結(jié)果客觀,除中心區(qū)域破損的圖像修復(fù)外,我們也展示了LSGAN 模型對一些特殊圖像的修復(fù),包括戴眼鏡的人像,黑白人像,半張人臉圖像,以及局部破損人像等,并在圖10中展示了一些較理想的修復(fù)結(jié)果。可以看出在應(yīng)對不同類型的修復(fù)任務(wù)時,本文方法也能提供讓人滿意的效果。
本文提出了一種基于最小二乘生成對抗網(wǎng)絡(luò)的圖像修補方法。與傳統(tǒng)的基于紋理的修復(fù)方法相比,這種方法彌補了大面積缺失的圖像的復(fù)原中找不到匹配紋理的問題;與數(shù)據(jù)驅(qū)動的方法相比,該方法不需要儲存數(shù)據(jù)庫,且運算速度快;與同樣結(jié)合生成對抗網(wǎng)絡(luò)的CE 算法和DCGAN 相比,由于采用最小二乘損失,這種方法的訓(xùn)練過程穩(wěn)定,判別器分類更加嚴格,因此生成的圖片質(zhì)量更好。本文在訓(xùn)練生成網(wǎng)絡(luò)時,無需連同遮擋圖像的掩碼一起訓(xùn)練,能夠很好的解決任意破損區(qū)域的修復(fù),這是CE 做不到的。從對中心區(qū)域破損的人臉修復(fù)實驗的結(jié)果來看,本文方法具有更高的峰值信噪比和結(jié)構(gòu)相似度,修復(fù)效果更自然。
圖7 LSGAN 生成圖像的過程
圖8 損失值變化曲線(左右分別對應(yīng)圖6 女性人臉和男性人臉)
圖9 不同模型修復(fù)效果比較
圖10 圖片類型或破損區(qū)域不同的圖像修復(fù)結(jié)果