布安旭 馬 馳 胡 輝 陳月乃 楊 樂
(1.遼寧科技大學計算機與軟件工程學院 鞍山 114051)
(2.惠州學院計算機與工程學院 惠州 516007)
圖像修復[1]主要是先通過對未破損區域的信息進行分析,然后以此來推斷破損區域的內容,從而對破損區域進行還原。它有著很多應用場景,例如文物修復、影視特技制作、老舊照片修復、公安刑偵面部修復等,因此圖像修復有著重要的現實意義。在傳統的圖像修復方法中,主要包括基于結構和基于紋理的兩種方法。前者適用于破損面積較小的情況,而使用最為廣泛的就是BSCB模型,該模型由Betalmio[2]等提出,它主要是通過待修補區域的邊界向待修補區域擴散的方法來實現圖像修復的。基于紋理合成[3]的方法更適用破損面積較大的情況,而使用和討論最廣泛的就是Criminisi 算法,該算法由Criminisi[4]等提出,它通過尋找圖像中的最優像素塊,然后將其填充到圖像中的破損區域來實現修復目標。
然而,傳統的圖像修復效果在內容和層次上缺乏連貫性,以及存在語義缺失等問題,所以修復效果不盡人如意,其主要原因是因為傳統方法缺乏像人一樣的圖像理解力和感知力,而深度學習的出現則解決了這一問題。深度學習主要從眾多數據集上學習并提取圖像中的語義特征和紋理結構信息,從而得到良好的修復結果。上下文編碼器(context-encoders)是一個包含很多層網絡的圖像修復模型,該模型由Pathak 等[5]提出,Pathak 將context-encoders 作為修復模型的主要組成部分,在破損圖像編碼后再經過解碼器生成缺失區域的部分。然而,文獻[5]中的網絡模型會產生破損部分與未缺失部分不連續的現象,從而影響最終的修復結果。生成對抗網絡(GAN)[6](GAN)是一種效果比較好的生成模型,在圖像修復中也很常用,其中最流行的的就是深度卷積生成對抗網絡[7](DCGAN),文獻[7]將GAN 模型和卷積神經網絡[8](CNN)進行了融合,把CNN 的理念應用到生成網絡和判別網絡中,以提高模型在訓練時的性能,從而增強模型的修復能力。
本文在現有的方法上進行改進,以生成對抗模型為基礎架構,在全局判別器的基礎上引入局部判別,以保證局部修復結果與周圍區域的一致性;將encoder-decoder作為生成模型,并在其層中添加跳躍連接[9](skip-connection);使用訓練過程中更為穩 定 的Wasserstein 距 離[10](Wasserstein GAN,WGAN),來加快模型的收斂速度;利用泊松融合[11]獲得更加真實自然的修復效果,這也是本文方法的特別之處。
GAN[6]是由Goodfellow 在2014 年提出的模型,其中判別器D 和生成器G 會通過不斷地進行對抗訓練來得到增強。GAN 的網絡結構如圖1,GAN 包括生成模型G 和判別模型D 兩個子網絡,生成器可以實現對數據分布Pdata的高效擬合,不斷生成與真實圖像相似的圖像。而判別器D 的主要任務是對輸入數據進行判斷,并將輸出的結果反饋給G。

圖1 GAN的網絡結構
GAN 的訓練任務是讓生成器G 生成的圖像與真實圖像的概率分布的差距盡可能小,即讓Pz 盡可能地接近Pdata,并且讓判別器D 鑒別圖像真假的能力最大化,即讓判別器D的輸出D(x)趨近于1,D(G(z))趨近于0。GAN 對抗學習的思想可以表示為
其中,E 表示數學期望值,z為隨機噪聲,x 為真實樣本。判別器和生成器會不斷交替進行訓,在最理想的狀態下,兩者會達到“納什均衡點”[12],而此時生成器生成的圖片已經能騙過判別器了。
WGAN[10]由Arjovsky 等提出,它主要解決了對抗網絡在訓練過程中出現的不穩定問題,它對先前對抗網絡中的損失函數進行了替換,用Wassersteinr 距離替換先前的JS 散度和KL 散度來衡量兩個分布之間的差距。這是因為Wasserstein 距離是一個連續的平滑函數,它更加平滑且無突變,在兩個分布沒有重疊的情況下仍然能反映它們的遠近,這就是Wasserstein 距離的優勢,而JS 和KL 散度則不具備這種特性。所以在訓練的時候WGAN 可以保證梯度的有效性,從而能夠有效解決原始GAN因使用JS/KL 散度出現的訓練不穩定、模式崩潰等情況。
Wasserstein距離的計算方式如式(2):
式(2)中,||t||R≤H 為函數t需要滿足Lipschitz條件限制,以限制函數t 改變的速度。Lipschitz 條件限制在本質上來說,其實就是讓一個連續函數的局部最大變化幅度小于常數H。
WGAN的生成器損失函數為
判別器的損失函數為
本文采用的GAN模型的整體結構圖2所示,由生成器G 和判別器D 構成。本文的大體思路:通過訓練生成模型G 來學習真實樣本的概率分布,采用內容損失和對抗損失相結合的方式來訓練模型。然后,將待修復圖像輸入到經過訓練后的模型中,經過模型修復后得到的生成圖像,在視覺上會非常逼近真實圖像。

圖2 整體網絡結構
GAN 的生成模型具有可以從任意分布中采樣的優勢,而且可采用的網絡模型也有很多,例如自編碼器[13]等。本文采用encoder-decoder 作為生成器G,它是一種基于編碼解碼的生成模型,且本質上也是卷積神經網絡,圖3 為G 的模型結構。生成器在執行時,先將待修復圖像輸入到編碼器進行編碼得到隱層表征,編碼過程可看作是將待修復圖像逐層抽象成隱層表征[14],然后在解碼時把隱層表征輸入到解碼器生成預測圖像。

圖3 生成器結構
為了獲得更高質量的輸出圖像,一般會在輸入和輸出之間共享信息。所以,本文在生成模型中添加了skip-connection,通過skip-connection 可以更好地利用各種解像度下的特征信息,從而把低級特征從低層直接傳送到更高層,通過對編碼器低級特征與相應解碼器層得到的高級特征實現拼接,在拼接完成后,再將其傳入到之后的網絡中,以此盡最大可能地保留圖像的底層結構。
生成模型G 的結構及網絡參數如圖3 所示。其中,Conv 表示卷積層,用來進行下采樣;DeConv表示解卷積層,用來進行上采樣;5*5 表示卷積核的大小。 并且在encoder-decoder 中添加了skip-connection,從而更好地對圖像中的結構信息進行預測。至于激活函數,在下采樣層中,使用的是Leaky-ReLu[10],可以防止出現梯度稀疏的問題;上采樣層中,除了最后一層使用了Tanh[15]外,別的都用ReLu[15]。
判別模型包含兩個子網絡,如圖4,分別為用來審查整張圖像全局信息的全局判別模型和用來審查圖像局部信息的局部判別模型,兩者共同確保了最終的修復結果在全局和局部上保持結構信息的一致連貫性;且兩者網絡結構大致一樣,都使用了CNN,并且兩者也都是通過卷積層來提取圖像中的特征信息;另外兩者的輸入包括真實圖像和生成圖像兩種,最后將兩者的結果匯合得到最終的評價結果。在全局判別模型中,采用了5 層卷積和1 個FC層,而局部判別模型中使用了5層卷積和1個FC層,兩者卷積核大小均為5*5。局部判別模型以局部生成圖像和局部真實圖像作為輸入,局部真實圖像和局部生成圖像是通過真實圖像、生成圖像與二進制掩碼M 分別相乘產生的,此二進制掩碼、真實圖像以及生成圖像三者尺寸相同但且都只包含0和1 兩張數值,1 表示破損的部分,0 表示未破損的部分。由于本文使用了WGAN 來衡量兩個分布之間的差距,所以在把樣本輸入到判別器后,要對其進行獨立的梯度懲罰,而在同一批中的樣本為了防止發生彼此依附的情況,就需要在判別模型的所有層中采用層規范化[16]。

圖4 判別器結構
3.3.1 生成器損失函數
GAN 作為近些年最為優秀的生成模型之一,它生成的樣本要滿足真實性、連續性、多樣性等原則,以增強生成樣本的質量,從而使判別器鑒定其為真實樣本的概率大大提高。為了讓生成圖像與原始圖像盡可能相似,這里不僅使用了WGAN 對抗損失,還添加了內容損失,對抗損失即真實圖像和生成圖像兩者之間的差距,內容損失即待修復圖像中未受損區域在修復后與真實圖像之間的差距,將兩個損失函數聯合起來作為生成器最后的損失。
這里把受損圖像作為條件添加到生成器中,所以,對抗損失函數為
在進行圖像修復任務時,只需要生成破損區域的圖像,而未破損區域的部分與原圖保持一致就行,所以這里利用了L1 距離衡量修復后的圖像中的未破損部分和原始圖像中未破損部分的距離。這里用0 表示未破損的像素點,用1 表示已破損的像素點,則內容損失函數如下:
其中,M 為掩碼,⊙表示矩陣逐元素相乘。把以上兩個損失函數聯合起來形成生成模型最終的損失函數為
其中,λ是權重系數。
3.3.2 判別器損失函數
判別器的目標就是識別出真實樣本,在輸入真實圖像時,判別器會給其更高的評分,即讓Ex~pr(x)D(x)盡可能大;在輸入生成圖像時,判別器會給其較低的評分,讓Ex~pg(x)D(x)盡可能小。而不管什么類型的生成對抗網絡,它們的判別器損失函數大致都一樣,本文也一樣,不過本文沒有使用之前的JS 散度和KL 散度來衡量生成圖像與真實圖像之間的差距,而是使用了Wasserstein 距離來替代二者,此外還添加了梯度懲罰Ex~p∧x[‖ ?xD(x)‖p-1]2來對判別器進行Lipschitz 限制。故判別器的損失函數為
此外,由于把破損圖像作為條件加入到了判別器中,所以判別器最終的損失函數為
其中,α表示權重系數。
4.1.1 數據集
本文使用的是CelebA 數據集,該數據集是一個人臉數據集,包含了1萬多個名人身份的20余萬人臉圖像。本實驗采用CelebA 數據集中已經將人臉位置對齊并裁剪到128×128×3 大小且不戴眼鏡的50k 張圖像,并將該數據集按照2:8 的比例隨機劃分為測試集和訓練集,人臉的中心掩碼大小64×64。
4.1.2 實驗細節
本實驗基于TensorFlow 框架,在CentOS 7.0 下進行,使用內存為16G,顯存為8G 的Nvidia RTX2080 GPU。相關訓練參數的設置為epoch=10,batch_size=8,lr=0.0001,每 一 個epoch 迭 代 訓 練20000次,實驗參數β1和β2分別設置為20和90,優化器采用Adam,其中用來計算梯度和梯度平方的參數設置為0.5和0.9。
4.2.1 算法穩定性分析
在對抗網絡中使用JS/KL 散度度量原始圖像和修復后的圖像兩者分布之間的距離時,由于損失函數會出現忽高忽低的情況,故而導致訓練不穩定的問題,而此問題比較突出的的就是文獻[7]中的DCGAN 模型。所以對于真實樣本和生成樣本二者分布之間的差異,這里使用Wasserstein 距離來衡量。圖5 和圖6 分別為WGAN 和DCGAN 的判別器的損失函數的變化過程,從圖5可以看出WGAN 的訓練過程比較穩定并且收斂的很快,而在圖6 中DCGAN的訓練過程中波動較大且較難收斂。

圖5 WGAN判別器的損失函數

圖6 DCGAN判別器的損失函數
4.2.2 修復結果對比分析
本文的修復效果對比如圖7,從左到右分別是正常人臉、遮擋人臉、文獻[5]、文獻[7]、本文方法的修復結果。在圖7 中,從視覺上可以直觀地看到本文的修復效果相對較好,特別是修復的眉毛末端和眼睛以及嘴巴這些地方,雖然與原始圖像相比還存在著一致性問題,但是相比文獻[7]已經有著很大優勢。而文獻[5]之所以在這些部位的修復效果稍差,這是因為它使用了JS 和KL 散度訓練模型,從而導致模型訓練不穩定且收斂慢。

圖7 修復效果對比圖
圖8 是對不同遮擋部位進行修復的結果,雖然修復后的圖像在一些細節上與原圖還會存在差異,但仍取得了不錯的修復效果,說明對不同的破損區域和遮擋形狀本文都能進行較好的修復。

圖8 不同遮擋部位的修復效果
4.2.3 泊松融合
從圖7 中可看到,本章方法雖然相較于文獻[5]和文獻[7]有著不錯的修復效果,但還是有較為明顯的修復邊界,為了讓修復后的圖像銜接更加自然,要對修復圖像進行泊松融合[11]。泊松融合主要是通過求解泊松方程來對銜接區域進行插值處理,從而能夠讓兩張圖像進行無縫混合,且混合后的圖像會更加自然。添加了泊松融合的修復結果如圖9 所示,從左到右分別是原始圖像、遮擋圖像、未添加泊松融合的結果、添加泊松融合的結果,可以看出,第三列未添加泊松融合的修復結果有較明顯的修復邊界,而第四列添加了泊松融合的修復結果則更加自然。

圖9 泊松融合的結果
4.2.4 定量分析修復效果
在評估圖像修復效果時,除了在直觀上用肉眼辨別外,也可以用相應的評價指標定量地評估修復結果,常用的評價指標包括結構性相似(SSIM)、峰值信噪比(PSNR)等,而SSIM 和PSNR 是目前使用較多的、用來評估圖像質量的指標。PSNR 是基于誤差敏感的圖像質量指標,該指標的值越大修復效果越好,與原始圖像也越相似。SSIM 用來評估兩個圖像在整體上的相似性,它從三個方面衡量了圖像相似性,即結構、亮度、對比度;SSIM 的取值區間是[0,1],值越大,說明修復圖像的相似度越高。基于PSNR和SSIM的評價結果如表1。

表1 評價結果
本文針對遮擋人臉圖像的修復提出了一種基于生成對抗模型的方法,該模型的生成器基于編碼器解碼器結構,并在其中加入了跳躍連接以提高生成模型對結構信息的預測能力,而在判別模型中使用了WGAN,并且添加了梯度懲罰,從而使網絡的訓練更加穩定以獲得更高質量的圖像。通過與文獻[5]以及文獻[7]的修復結果進行比較,可以直觀地發現本文在CelebA 數據集上的修復效果更好;另外用相應的評價指標PSNR 和SSIM 對本文方法和文獻[5]以及文獻[7]進行評估,本文方法也取得了不錯的結果。最后,雖然本文的修復效果取得了不錯的結果,但是在一些細節上仍然不太理想,下一步的研究將重點解決這個問題。