李天成 何 嘉
(成都信息工程大學計算機學院 四川 成都 610225)
圖像修復是介于計算機視覺和計算機圖形學領域中的一個熱點問題,它通過使用圖像已有的信息修復圖像中缺失的部分。圖像修復技術的發展不僅推動了計算機視覺和計算機圖形學領域的研究,也被廣泛應用于數字藝術品修復、公安刑偵面部修復等種種實際場景中。傳統圖像修復算法最具代表性的是基于結構和基于紋理兩種方法。基于結構的修復算法應用于小尺寸的破損區域修復,其中具有代表性的是Bertalmio等[1]提出的BSCB修復模型和Chan等[2]提出的基于曲率擴散的圖像修復模型CDD(Curvature-Driven Diffusion),而基于紋理的修復算法應用于較大區域破損的修復任務中,例如Criminisi等[3]提出的基于樣塊的紋理合成算法。這兩種傳統的圖像修復算法可以修復小塊區域的破損,但是修復效果隨著破損區域的增大而直線下降,并且修復結果存在圖像模糊和缺乏視覺連貫性等問題。
近年來,由于計算機硬件特別是GPU性能的飛速提升,深度學習這種需要巨大計算量的方法在計算機視覺領域和自然語言處理領域被廣泛應用。而在圖像修復方面,基于深度學習的圖像修復算法相對于傳統的基于結構和紋理的修復算法能夠捕獲更多圖像的高級特征。但是基于卷積神經網絡(CNN)[4]的圖像修復算法會出現修復區域與周圍區域圖像語義不相關、邊界偽影、結構扭曲模糊等現象。
生成對抗網絡[5]自2014年由Ian Goodfellow提出以來已廣泛應用于半監督學習和無監督學習領域。其生成的樣本相對于編碼-解碼器[6]質量更好,并且擬合速度更快,在圖像修復方面具有得天獨厚的優勢。文獻[7]提出的Context Encoder是對抗學習在圖像修復領域的開山之作,該算法使用了對抗損失訓練一個上下文編碼器預測圖像的破損區域。文獻[8]的圖像修復條件生成對抗網絡(Image Inpainting Conditional Generative Adversarial Network,IICGAN)使用深度卷積神經網絡(DCNN),直接從數據中學習受損和修復圖像細節層之間的映射關系。文獻[9]提出了一個優秀的人臉修復深度生成模型,結合重構損失、兩個對抗損失和語義分析損失進行訓練,保證了生成像素的準確性和局部-全局內容的一致性。
本文提出的圖像修復算法基于文獻[10]提出的具有全局和局部判別器的生成對抗網絡修復算法,該算法相較于一個生成器、一個判別器的傳統生成對抗網絡,額外增加了一個負責判斷破損區域修復后的全局圖像是否符合視覺連貫性的全局判別器。算法先通過訓練生成網絡來完成初步的圖像修復,然后不斷通過負責鑒別全局圖像視覺連貫性的全局鑒別網絡和負責鑒別生成網絡輸出的修復圖像真實性的局部鑒別網絡與生成網絡進行對抗訓練,在迭代訓練中一步一步產生較好修復效果。
自2017年起,國內外提出的基于生成對抗網絡的圖像修復方法中大部分都采用了具有雙判別器的網絡結構,在大多數情況下可以較好地完成圖像修復任務。但是在修復復雜缺損的情況下會出現例如修補區域與其他區域沒有連貫性、無法修復大面積缺損、圖片邊緣修復效果不好、模型崩潰以及訓練時間過長等問題。文獻[9]的人臉修復深度生成模型需要使用目標檢測技術,而文獻[10]提出的具有全局和局部判別器的生成對抗網絡雖然模型簡單,但在大量訓練中容易出現特征過度學習導致過擬合問題,并且由于判別器中仍然使用原始的生成對抗網絡損失函數,訓練不穩定,會出現模型崩潰的情況,導致修復結果嚴重惡化。
本文的方法針對如何在修補區域生成與周圍圖像更加符合視覺連貫性的圖像,解決生成對抗網絡訓練不穩定導致模型崩潰的問題和如何減少訓練時間三個問題上,提出的主要思想和創新之處體現在以下幾處:
1) 在使用雙判別器的生成對抗網絡的基礎上,改進上下文內容損失,增加L2正則化項,防止過擬合,增強圖片的局部和全局的連續性,提高修復質量。
2) 將WGAN-GP的損失函數引入全局和局部判別器中,大幅提高訓練穩定性,防止模型崩潰。
3) 使用更多的空洞卷積核替代部分標準卷積核,減少參數量,結合WGAN-GP損失函數提高模型收斂速度,減少訓練時間。
生成對抗網絡(Generative Adversarial Networks,GAN)是加拿大蒙特利爾大學的Ian Goodfellow博士于2014年提出的一種生成模型,以“零和博弈”為核心思想,網絡通過對抗訓練讓生成器和判別器同時得到增強。GAN由生成器Generator和判別器Discriminator組成,生成器G通過大量學習訓練集中真實數據的概率分布Pdata,將輸入的隨機噪聲z轉化為可以“以假亂真”的圖片G(z)。判別器D判斷輸入圖片為真實圖片的概率,其目標是將生成器生成的圖片與訓練集中的真實圖片盡可能地區分開,在大量學習真實數據x的特征之后,鑒別能力也會隨之提高。判別器D的輸出圖像是真實圖像的概率。GAN的基本網絡結構如圖1所示。

圖1 GAN基本網絡結構
生成對抗網絡的訓練任務最小化生成器的生成圖像與真實圖像概率分布的差距,即令Pz趨近于Pdata,并且最大化判別器鑒別圖像真偽的能力,即令判別器D的輸出D(G(z))趨近于0,D(x)趨近于1。這種對抗學習的思想可以表示為:
minGmaxDV(D,G)=Ex~Pdata(x)[logD(x)]+
Ez~Pz(z)[log(1-D(G(z)))]
(1)
式中:E代表數學期望值。
在同時訓練生成器和判別器的情況下,訓練的目標是達到生成器和判別器的“納什均衡點”,即生成器生成的圖片已經“以假亂真”,令判別器無法判別圖片的真偽。在最優情況下,判別器輸出結果D(x)應該恒為1/2。
為解決原始GAN訓練不穩定的問題,近年來出現了針對很多生成對抗網絡的改進模型,其中比較有代表性的有以下幾種GAN的衍生類型:條件生成對抗網絡(CGAN)[11]在輸入數據中加入前置條件防止訓練崩潰,并且可以控制生成器的圖片生成任務;深度卷積生成對抗網絡(DCGAN)[12]融合CNN和GAN,通過設計獨特的網絡結構,以帶步長的卷積取代上采樣,使得訓練更加穩定。在損失函數的改進方面,原始GAN的生成器的兩種損失函數如下:
Ez~Pz(z)[log(1-D(G(z)))]
(2)
Ez~Pz(z)[-logD(G(z))]
(3)
大量實驗證明使用這兩種損失函數訓練模型時會出現梯度消失和梯度爆炸而導致模型崩潰等嚴重問題。文獻[8-9]提出的Wasserstein GAN(WGAN)采用Wasserstein距離(或稱EM距離)替代KL和JS散度衡量生成數據分布和真實數據分布之間的距離,Wasserstein距離公式如下:
(4)

-Ez~Pz(z)[D(G(z))]
(5)
Ez~Pz(z)[D(G(z))]-Ex~Pdata(x)[D(x)]
(6)
WGAN從理論上解決了訓練不穩定的問題,但是文獻[15]發現將權重剪切到一定范圍之后,大多數的權重都在-0.01和0.01上,意味著網絡的大部分權重只有兩個可能數。對于深度神經網絡來說不能充分發揮深度神經網絡的擬合能力,是極大的浪費,并且強制剪切權重容易導致梯度消失或者梯度爆炸。之后文獻[16]提出了對于WGAN的改進算法WGAN-GP,使用梯度懲罰(gradient penalty)的方式,限制判別器的梯度不超過K,以滿足lipschitz連續性條件。WGAN-GP判別器的損失函數為:
Ez~Pz(z)[D(G(z))]-Ex~Pdata(x)[D(x)]+
(7)
WGAN-GP從損失函數的角度改進了原始生成對抗網絡,增加了梯度懲罰項之后,神經網絡權重的分布更加平滑,即模型訓練時梯度更平滑,訓練更加穩定,生成的樣本質量更好。
本文采用具有雙判別器的生成對抗網絡進行圖像修復任務,整體網絡架構如圖2所示。生成器網絡的輸入為破損圖像和指示破損位置的二值掩碼,在經過卷積層、空洞卷積層和反卷積層的處理之后輸出修復后的圖像,并綜合局部判別器網絡和全局判別器的判別結果判斷圖像修復效果并反饋調整生成器中的參數。

圖2 本文GAN模型
生成對抗網絡中的生成器的優勢體現在輸入數據可以從任意的分布中采樣,并且網絡模型也不受任何限制,可以采用多層感知機(MLP)、卷積神經網絡、自編碼器等。
在圖像修復任務中,只需要修復圖像破損的區域,而不是由輸入的隨機噪聲經過卷積和反卷積生成一張完整圖像,所以生成器的輸入是由破損圖片和該圖片的二值掩碼(Binary Mask)組成。二值掩碼可以指示圖片中需要修復的區域(1代表需要修復的區域,0代表不需要修復的區域),輸出是修復后的圖像。
生成器網絡采用卷積操作降低輸入圖片的分辨率來減少內存使用和計算時間,然后使用反卷積操作將輸出恢復到原始分辨率。中間有五層采用空洞卷積核代替標準卷積核,由于同樣大小的空洞卷積核比標準卷積核有更大的感受野,并且參數量相同。在圖片的上下文信息的真實性尤為重要的圖像修復任務中,空洞卷積核擁有更大的感受野可以提高輸出像素的真實性,并且減少了參數量,提高計算速度。本文生成器的網絡層結構除最后一層輸出層的激活函數為Tanh以外,其余層的激活函數均使用ReLU。
生成對抗網絡作為一種優秀的生成模型,生成器生成的樣本需要滿足真實性、多樣性等原則以生成更高質量的樣本,提高被判別器判定為真實樣本的概率。本文算法的核心任務是使修復后的破損區域圖像盡量達到與真實圖像同一區域更高的相似度,所以除了WGAN對抗損失以外,還需要增加圖像上下文內容損失。
由于文獻[10]中的模型簡單,在大量訓練中容易出現特征過度學習導致過擬合問題。本文使用的上下文內容損失函數在圖像像素均方誤差函數的基礎上添加L2正則化項,防止過擬合。上下文內容損失衡量生成器生成的破損區域圖像與真實圖像中同一區域的差異,并且由于只需要生成破損區域圖像,其他圖像與原圖保持一致,所以添加了二值掩碼指示破損區域位置:
(8)
式中:M為二值掩碼;⊙代表矩陣逐元素相乘;n為訓練集的樣本數量;θ為生成器網絡中的所有參數;λ1為正則項系數。
本文提出的圖像修復算法基于文獻[10]提出的具有全局和局部判別器的生成對抗網絡的圖像修復算法,該方法在傳統的生成對抗網絡結構上額外增加了一個全局判別器,負責鑒別破損區域修復后的全局圖像是否符合視覺連貫性。相較于文獻[7]提出的Context Encoder直接預測圖像破損區域而言,雙判別器的生成對抗網絡算法可以在很大程度上增加修補區域和其余區域的聯系性。
全局和局部判別器網絡的網絡架構是基于卷積神經網絡,利用卷積層提取圖片的特征。通過全連接層各輸出長度為1 024的向量,并拼接為一個長度為2 048的向量輸入一個全連接層,最終輸出圖像為真實圖像的概率值,即通過綜合兩個判別器對圖像的鑒別結果來判斷圖像的修復效果。由于WGAN-GP使用Wasserstein距離而不是KL或JS散度來衡量兩個分布之間的差距,需要對判別器的每一個輸入樣本進行獨立的Lipschitz限制,所以在判別器的所有層中均不采用批量規范化。本文算法選擇層規范化,這樣可以避免同一個批次中的不同樣本之間存在相互依賴,同時將原算法中局部判別器網絡的第三層中的標準卷積核和全局判別器的第三層、第四層中的標準卷積核替換為空洞卷積核,并去掉原網絡結構中最后一層的Sigmoid激活函數。
生成對抗網絡的判別器需要拉高真實樣本x的評分,降低生成樣本G(z)的評分。本文引入WGAN-GP的損失函數替代文獻[10]中的原始GAN損失函數。WGAN-GP的損失函數使用梯度懲罰的方式滿足lipschitz連續性條件,理論上幾乎徹底解決了訓練梯度消失或爆炸的問題。判別器的損失函數如下:
Lossd=Ez~Pz(z)[D(G(z))]-Ex~Pdata(x)[D(x)]+
(9)
式中:λ2為梯度懲罰項系數。
本文算法經過多次實驗結果比較后,選擇使用ADAM優化器訓練生成器網絡,學習率為0.000 2,使用RMSProp優化器訓練兩個判別器網絡,momentum為0.5。訓練過程共進行200輪迭代,每輪迭代共有s步(s=訓練集樣本總數/每批次樣本數量(batch_size))。根據實驗經驗,前100輪迭代先訓練生成器,100輪迭代之后同時訓練生成器和兩個判別器產生的修復結果較好。算法具體流程如下:
1) ifn<=100 do
2) For (k=1;k<=s;k++)
3) 從訓練集中取出每批次樣本數量個樣本{x1,x2,…,xn}并生成具有隨機破損區域的相對應的二值掩碼,組成數據{(x1,m1),(x2,m2),…,(xn,mn)}作為輸入數據{c1,c2,…,cn}輸入生成器,并生成相應的修復完成后的圖像{G(c1),G(c2),…,G(cn)}
4) 計算輸入與真實圖片的上下文內容損失
5) 使用ADAM優化器更新生成器網絡的參數θ:
6) end
7) else if 100 8) For (k=1;k<=s;k++) 9) 從訓練集中取出每批次樣本數量個樣本{x1,x2,…,xn}并生成具有隨機破損區域的相對應的二值掩碼組成數據{(x1,m1),(x2,m2),…,(xn,mn)}作為輸入數據{c1,c2,…,cn}輸入生成器,并生成相應的修復完成后的圖像{G(c1),G(c2),…,G(cn)} 10) 使用RMSProp優化器更新局部判別器網絡的參數β1和全局判別器網絡的參數β2: 11) 根據兩個判別器的結果反饋,使用ADAM優化器更新生成器網絡的參數θ: 12) end 13) end 本文中的實驗使用CelebA數據集,該數據集由202 599幅178×218×3大小的人臉圖像組成。在本實驗中,采用CelebA數據集中已經將人臉位置對齊并裁剪到128×128×3大小的107 301幅圖像,選取其中101 936幅圖像為訓練集來訓練網絡,5 365幅圖像為測試集來檢測訓練完畢后的修復效果。 本實驗的平臺是系統為Ubuntu 16.04.1,內存大小為32 GB的深度學習服務器,使用其中一塊顯存為12 GB,時鐘頻率為1.112 GHz的Nvidia Telsla M40 GPU。采用編程語言Python 3.6.8,利用深度學習框架Tensorflow-gpu 1.12.0進行實驗。 在本文提出的用于圖像修復的生成對抗網絡訓練方面,訓練中的學習率為0.000 2,上下文內容損失的L2正則項權重λ1為0.000 1,梯度懲罰的系數λ2為10,實驗中會對每張圖片生成大小為24×24~48×48大小的隨機破損和相應的二值掩碼。 為分析本文方法在人臉圖像上的修復效果,在CelebA人臉圖像數據集上選擇隨機的小面積破損進行修復效果評估。并與近年來基于生成對抗網絡并具有代表性的兩種算法(文獻[7]和文獻[10])在中等面積破損情況下以峰值信噪比PSNR和結構相似性SSIM兩個指標為標準使用測試集5 365幅圖片進行實驗對比,計算圖像修復結果的PSNR平均值和SSIM平均值,PSNR與SSIM的數值大小與修復質量成正比。圖3為本文算法在小面積破損情況下的修復結果。圖4為中等面積破損的各算法修復結果。 (a) 原始圖像 (b) 破損圖像 (c) 修復效果圖3 小面積破損修復結果 (a) 原始圖像 (b) 破損圖像 (c) 文獻[7]算法 (d) 文獻[10]算法 (e) 本文算法圖4 各算法修復結果示例 在小面積破損的情況下,本文算法的修復結果良好,與原始圖像沒有明顯的差異,只在一些極小的細節處,例如眉毛末端和眼角處有少許差異。 從視覺感受方面來看,在中等面積破損的情況下本文算法對于人臉圖片的修復效果更好。文獻[7]的算法沒有全局判別器鑒別修補區域和其余區域的視覺連貫性,并且由于使用原始的GAN損失函數會出現訓練不穩定的情況,導致修補區域會產生圖像扭曲,在鼻子和眼睛等重要細節上的修復效果很差。文獻[10]的算法相對于文獻[7]的算法來說生成的圖片質量更好,但同樣是由于損失函數的選擇和網絡模型細節上的一些缺點,導致修補區域的圖像出現模糊的現象。本文算法在面部細節的修復效果上有了比較明顯的提升。以上三種修復方法在測試集上的修復結果的PSNR和SSIM平均數值分別如表1和表2所示。 表2 圖像修復結果的SSIM平均值 可以看出,對于中等面積的人臉圖像破損,本文提出的算法修復質量高于其余兩種算法。 文獻[7]、文獻[10]和本文提出的算法訓練200輪的時間對比如表3所示。 表3 各算法訓練總時間 h 綜上可知,文獻[7]提出的算法雖然訓練時間相對較少,但是圖像修復后的視覺感受和PSNR、SSIM指標所展示的結果均遠低于文獻[10]算法和本文算法。本文算法在訓練時間上相較于文獻[10]算法減少了18%,并得到了更好的修復效果。 本文將WGAN-GP的損失函數引入全局和局部判別器中,對模型的訓練起到了加速和防止崩潰的效果。全局和局部判別器損失總和的變化如圖5所示。 圖5 判別器損失的變化情況 可以看出,文獻[10]使用的原始GAN損失函數在訓練過程中經常會出現較大波動,并且收斂速度較慢。而本文算法中使用的WGAN-GP損失函數從訓練一開始就很少出現大幅波動,訓練穩定性的提高會降低模型崩潰的概率,在大約300 000次迭代后已經趨近于收斂狀態,收斂速度明顯提高。圖6的結果充分顯示了WGAN-GP損失函數在提高訓練穩定性和收斂速度上的優越性。 (a) 原始圖像 (b) 破損圖像 (c) 修復效果圖6 面部表情修復結果 經過大量實驗觀察,可能是由于CelebA數據集的人臉圖像絕大部分的表情是微笑,在某些其他表情的人臉圖像嘴部缺失的情況下,修復后的結果表情仍然是微笑,與實際表情有一定差距。在以后的工作中將繼續改進修復的細節部分,以達到更完善的修復效果。 本文提出了一種用于圖像修復任務的基于生成對抗網絡的算法,在修復小區域和中等區域破損的情況下有良好的效果。通過實驗結果表明了本文算法在基于雙判別器的生成對抗網絡的圖像修復算法上有了明顯的改進,但是在處理復雜細節的修復任務上仍會出現圖像模糊等不足,在今后的研究中將會著重解決這些問題。4 實 驗
4.1 數據集
4.2 實驗環境
4.3 實驗細節
4.4 實驗結果分析






5 結 語