冀儉儉,楊 剛
(北京林業大學信息學院,北京 100083)
圖像補全技術旨在合成圖像中缺失或損壞的區域,是低級視覺中的基本問題。由于該技術具有廣泛的應用,因此也是計算機視覺和圖形圖像領域的一個活躍的研究課題。圖像補全技術可用于補全被遮擋的圖像區域或修復受損的照片。此外,還可以用于調整圖像中對象的位置或者刪除不期望存在的物體。各種應用都需要合成圖像具有精細的紋理和結構信息,但是由于自然圖像的復雜性和該問題的固有模糊性,使得圖像補全技術仍然是一項具有挑戰性的任務。圖像補全任務面臨的難題是以視覺上合理的方式填補圖像中的空白。
目前,已經有很多方法被提出用于圖像補全,主要包括基于數字修補[1-2]、基于樣本[3-6]和基于深度學習[7-9]的圖像補全3個方面。基于擴散的圖像補全是第一個數字修補方法[10],該方法通過將來自于已知區域的圖像信息擴散到像素級的缺失區域來填充缺失的像素。基于擴散的圖像補全方法基本上都基于變分方法和偏微分方程(partial differential equation,PDE)理論[11-13]。PDE算法是迭代算法,由KR?HENBüHL和KOLTUN等[12]提出,其重要目標是將圖像的梯度方向和灰度值都傳播到要填充的區域內部,并解決圖像處理中對高階偏微分方程的需求。如果缺失區域很小,PDE算法將產生良好結果。但是當缺失的區域很大時,該算法則需要很長時間,并且不會產生好的結果,而是產生一些模糊的區域,使得填充區域變得不自然。基于數字修補的另外一個較為常見的補全方法是以數據驅動的方式進行圖像補全[14],該方法假設圖像中相似的內容具有相同的上下文信息,通過從外部數據庫中尋找匹配度較高的圖像塊進行圖像補全。其在查找與示例圖像具有足夠的視覺相似性的圖像塊時非常有效,但當外部數據庫中缺乏相關圖像時,該方法就會受到很大的限制。此外,這種方法在運行時間和存儲空間上也具有一定的缺陷。
相較于基于數據驅動的補全方法,基于樣本的補全方法可以進行更復雜的圖像填充,可以填充自然圖像中較大面積的缺失區域。基于樣本的圖像補全方法最初被用于紋理合成[15-16],其中紋理塊從源圖像中采樣并粘貼到目標圖像中,隨后被擴展到通過基于能量優化的圖形分割和紋理生成[17-18]的圖像拼接[19]中。在圖像補全的應用中,該方法得到了一些改進[20-21],例如最佳補丁搜索。特別是,WEXLER等[22]和SIMAKOV等[23]提出了一種基于全局優化的方法,可以獲得更一致的填充。這些技術后來經過隨機塊搜索算法(PatchMatch)[24]進行加速,并允許對圖像進行實時的高級圖像編輯。但是,基于樣本的補全方法只有在缺失區域由簡單的結構和紋理構成時才能很好地工作。
基于數據驅動和樣本的補全方法在合成面積較小或具有相似性結構紋理的圖像時具有較好的結果,但是圖像具有復雜的紋理和結構信息時,補全效果很不理想。近幾年,深度學習的發展在圖像修復方面也展現出了突出的成果。深度學習能夠在保留語義和情境細節的基礎上填充自然圖像中大量缺失區域,同時能夠更加有效地捕獲圖像的高級特征,從而推進了基本的圖像處理任務,如對象移除等的發展。PHATAK等[25]結合L2損失和對抗損失訓練了一個編碼器-解碼器卷積神經網絡(上下文編碼器),直接預測丟失的圖像區域,能夠預測合理的圖像結構,并且只需要一次正向傳播,速度非常快。雖然結果令人鼓舞,但該方法的修復結果有時缺乏精細的紋理細節,從而在缺失區域的邊界周圍產生可見的偽影。此外,該方法也不適用于處理高分辨率的圖像,對抗網絡需要根據生成圖像和真實圖像像素之間的損失反向調整網絡參數,網絡難以收斂。針對以上方法的不足,文獻[8]提出了用編碼器-解碼器卷積神經網絡作為全局內容約束,同時利用缺失區域與已知區域之間的局部神經塊的相似性作為紋理約束,兩者結合進行圖像補全。文獻[8]將高分辨率圖像分為若干步進行補全,增加了紋理信息的真實性,但是難以保證補全圖像的全局一致性。IIZUKA等[26]提出了全局和局部一致性圖像補全方法,通過使用經過訓練的全局和局部上下文判別器來區分真實圖像和補全圖像。全局判別器查看整個圖像以評估整個圖像是否一致,而局部判別器僅查看以補全區域為中心的小區域,以確保生成的圖像塊的局部一致性。但是當缺失區域面積較大或位于圖像邊緣位置時,由于上下文信息的缺失和生成對抗網絡結構的不穩定性,補全結果會有空白和偽彩色區域生成。
文獻[26]提出的全局和局部一致性圖像補全方法補全大面積和邊緣缺失區域的不足問題和 GAN本身難以訓練的問題,本文提出了針對于大面積和邊緣缺失區域的分級聯合圖像補全方法,并對文獻[26]方法中的網絡結構做了改進。
文獻[26]采用了全局和局部一致性的方法對圖像進行補全,即首先在原圖上隨機生成缺失區域,并生成對應的二值圖像(0表示完整區域,1表示缺失區域)。將原圖和對應的二值圖像輸入到補全網絡中,利用原圖中缺失區域和生成圖像中補全區域的均方誤差損失(mean-squared loss,MSE Loss)對補全網絡進行訓練;然后固定補全網絡,分別將生成圖像和生成圖像中以補全區域為中心的區域輸入到全局判別器和局部判別器中,并利用對抗損失對2個網絡進行訓練;最后將對抗損失和均方誤差損失聯合起來一起訓練3個網絡。文獻[26]方法較已有的圖像補全方法效果更好,但依然存在問題:①當缺失區域面積較大時,最終的補全結果較為模糊;②當缺失區域位于邊緣區域時,由于上下文信息的缺失和補全網絡與判別器訓練速度的不一致性,導致補全的結果會出現模糊及色彩失真的問題。本文針對這2個問題做出了改進。
此外,文獻[26]方法中采用的網絡結構為原始生成對抗網絡(generative adversarial network,GAN)模型。原始 GAN最明顯的一個不足是訓練過程難以收斂且具有很大的不穩定性。原因在于:①不同于一般的深度學習問題具有明確的目標函數,通過梯度下降法進行訓練,GAN的訓練是一個尋找納什均衡點的過程。生成器和判別器在訓練過程中任意一方的誤差的下降可能導致另一方的誤差上升,GAN很難達到相對均衡的狀態,總是在生成樣本的各種模式之間振蕩,最常見的是GAN將不同的樣本輸入映射到相同的生成樣本上,即重復生成相同的數據,該現象也被稱為模式坍塌(model collapse)。②由于一般判別器的迭代速度高于生成器,兩者的迭代速度不一致問題會導致GAN模型的不穩定性問題,難以得到最優模型。③反向傳播過程中容易出現梯度消失等現象,導致模型訓練較為困難。針對于GAN的缺點,研究者在GAN基本模型的基礎上衍化出一系列新的模型,如條件生成對抗網絡(conditional GAN,cGAN)[27]、深度卷積神經網絡(deep convolutional GAN,DCGAN)[28]、基于散度的生成對抗網絡(Wasserstein GAN,WGAN)[29]等。其中,WGAN的主要貢獻是提高了原始GAN網絡結構訓練的穩定性。生成問題可近似理解為回歸問題,原始GAN網絡結構中判別器的最后一層使用的是sigmoid激活函數,將生成問題近似為0-1二分類問題,容易造成生成器和判別器難以達到平衡狀態,引起模式坍塌及難以收斂等問題,WGAN通過將判別器的最后一層sigmoid函數去掉,提高了網絡訓練的穩定性。
結合WGAN的方法,本文在文獻[26]方法的基礎上對圖像補全方法和網絡結構 2個方面做了改進:①通過將補全區域的中心區域作為本文添加的局部判別器 2的輸入,使訓練過程在中心區域和真實圖像相應區域的損失函數上反向傳播,合成結果更加真實;②文獻[26]方法中網絡結構的訓練存在不穩定、難以收斂等問題,本文通過“加寬”網絡,即添加了局部判別器 2,并將原始網絡結構中判別器的最后一層sigmoid激活函數去掉,將每一個relu層替換為BN層和leaky_relu層的結合,避免了梯度消失、模式坍塌及網絡難以收斂等問題,使得網絡結構更加穩定,從而補全效果更加真實、清晰。
在文獻[26]方法的基礎上,本文首先在原圖orig上隨機生成具有任意形狀的空白區域,作為輸入圖像x,并生成輸入圖像對應的Mask二值圖像(圖1)。訓練過程中首先利用補全區域c與原圖orig中對應區域之間的均方誤差損失L(orig,Mc)(式(1))訓練補全網絡,經過反復迭代之后得到補全網絡的初步補全圖像;然后從初步補全圖像中裁剪出一個以補全區域為中心的圖像塊d,并將其與生成的整張圖像分別輸入到局部判別器和全局判別器中,以對抗損失Lodvd(式(2))同時訓練2個網絡。初步補全結果中保留了圖像的結構信息,全局網絡判別器用以保證圖像的全局一致性,局部網絡判別器用于保持補全區域與其他區域的局部一致性。

其中,Mc為輸入的二進制Mask圖像;Md為二進制圖像中以缺失區域為中心的局部區域d。
但是,當缺失區域面積較大或位于圖像邊緣位置時,由于上下文信息的缺失和訓練的不穩定性,以上3個網絡得到的補全結果會出現失真、偽彩色等現象。因此,本文還生成了位于補全區域中心位置的圖像塊d′,如圖1(b)所示。其中,x為輸入圖像;d為輸入圖像中以缺失區域為中心的圖像塊;c為缺失區域;d′為位于缺失區域中心且大小為缺失區域面積1/4大小的圖像塊。

圖1 圖像區域劃分示意圖
通過將d′輸入到局部判別器網絡2中并計算其與真實圖像對應區域的對抗損失Ladvd′,與全局判別器和局部判別器一起訓練反向調整網絡參數,使得最終補全的紋理信息更加具有真實性,且保持了與周圍區域的局部一致性,即

最后,以聯合損失L訓練整個網絡結構,即

其中,α為對抗損失所占的比重的系數。
本文基于生成對抗網絡的分級聯合圖像補全方法流程圖如圖2所示。

圖2 分級聯合圖像補全流程圖
本文方法采用的網絡結構如圖3所示。包括補全網絡(completion network)、全局判別器(globally discriminator)、局部判別器(locally discriminator)和局部判別器2(locally discriminator 2)4個網絡。其中,補全網絡用于生成缺失區域的內容,全局判別器查看整個生成圖像與原圖之間的真實性,以評估整個圖像是否一致;而局部判別器僅查看以補全區域為中心的小區域,以確保生成的圖像塊的局部一致性。本文方法添加的局部網絡判別器2,用于判定缺失區域的中心區域的生成圖像與原圖相應區域的圖像內容的真實性,并平衡補全網絡和判別器的迭代速度,使得生成圖像中補全區域的邊緣更加真實自然。

圖3 網絡結構圖
補全網絡的輸入是含有缺失區域的整張圖像和對應的二進制通道圖片(0代表完整區域,1代表缺失區域),輸出為補全區域和輸入圖像中的完整區域組合成的圖像;然后將整張生成圖像輸入到全局判別器中,判斷生成內容的真實性,并保持圖像的全局一致性;局部判別器的輸入為生成圖像中以補全區域為中心的局部區域,用于保持生成區域與其他區域的局部一致性。本文添加的局部判別器2的輸入為生成圖像中補全區域的中心區域,用于判定大面積缺失區域的中心區域生成內容的真實性和邊緣區域與其他區域的局部一致性。
其中,補全網絡采用的是編碼器-解碼器結構,包含 10個卷積層、4個空洞卷積層、2個反卷積層和1個輸出層。除了第1個卷積層使用5×5的卷積核之外,其余所有的卷積層和空洞卷積層均使用3×3的卷積核,反卷積層使用4×4的卷積核。文獻[26]方法中補全網絡中除最后一層外,其余每個卷積層后面都有一個relu層。由于relu激活函數會忽略掉負值的作用,將輸入為負值的神經元的梯度置為0,造成“神經元死亡”的現象。針對relu的缺陷,本文將relu層替換為BN層和leaky_relu層的結合。網絡反向傳播過程是通過對網絡前向傳播過程中得到的實際輸出與期望輸出之間的誤差求偏導,進而調整每一層網絡的參數進行的。當網絡層數較深,反向傳播靠近輸入層時,偏導數趨近于零,容易陷入局部最優。批歸一化操作使得網絡訓練過程中每一層的輸入保持相同的分布,避免了以上問題。leaky_relu解決了relu激活函數中當輸入為負值時,輸出為 0的現象,避免了梯度消失等問題。
本文方法的網絡結構中包含 3個上下文判別器:全局判別器、局部判別器和局部判別器2。其中,局部判別器是本文在文獻[26]方法的基礎上增加的網絡。
原始網絡結構中判別器的訓練速度比生成器快得多,導致判別器可以輕易的分辨出哪張是自然圖像,哪張是生成圖像,但是反向傳播時傳遞給補全網絡的梯度只能使其生成奇怪的紋路,由此容易產生色彩失真問題。本文通過“加寬”網絡結構,即多加一個局部判別器,可以平衡兩者的訓練速度,使生成的紋理更加真實,不會生成偽彩色。此外,文獻[26]方法中判別器的最后一層采用的是sigmoid激活函數,得到一個在[0,1]區間內的連續值,以表示圖像來自真實樣本的概率。由于sigmoid函數將圖像生成問題近似為一個二分類問題,容易造成梯度消失、模式坍塌、生成器和判別器難以達到平衡狀態等問題,本文借鑒了WGAN的方法思想,將原始網絡結構中判別器最后一層的sigmoid激活函數移除,使得網絡訓練更加穩定,更加容易收斂,生成器和判別器可以很好地對抗并且達到平衡狀態,從而生成結果更加真實、清晰。
本文實驗中用到的數據集是從百度和谷歌等瀏覽器下載的草地相關圖片。實驗中將圖片的大小初始化 324×324,將“大面積缺失區域”定義為長和寬均為原圖的1/2的空白區域。此外,為了增加模型的泛化能力,本文在訓練過程中,將缺失區域的大小隨機設置為100×100~128×128大小。訓練過程中還生成了輸入圖片(帶有缺失區域的圖片)的二值圖像Mask(0代表完整區域,1代表要補全的區域)。本文將數據集分為訓練集和測試集2部分,其中訓練集1 000張,用于訓練模型以得到最優的網絡參數;測試集120張,用于檢驗模型的泛化能力,衡量模型的補全能力,對模型性能進行評價。本文的訓練集僅采用了1 000張圖片,數量并不多,但對于草地這種具有局部相似性的紋理而言,已可以獲得較好的實驗結果,能夠體現本文方法的優勢了。
根據實驗設備 GPU的性能和輸入圖片的大小,本實驗將batch_size的大小設為16,以便更加合理地利用訓練空間和時間。訓練過程首先將補全網絡迭代訓練Tc次,然后單獨訓練3個判別器網絡Td次,最后將整個網絡一起迭代訓練Ttrain次直至網絡穩定。補全網絡的輸入是一張 324×324大小的含有缺失區域的圖片和對應的Mask圖片;全局判別器的輸入為補全網絡初步生成 256×256大小的圖片,保持了合成結果的全局一致性;局部判別器的輸入為補全網絡初步合成結果中心128×128的區域,保持了缺失區域與上下文的局部一致性;局部判別器 2的輸入為初步合成結果中位于缺失區域中心的 64×64的區域;最后將補全網絡和判別器一起迭代訓練。實驗發現,當補全網絡的迭代次數為 6 000,判別器的迭代次數為1 500,最后網絡整體訓練次數達到20 000次時網絡可以較好的收斂,補全效果更加真實。當網絡的迭代次數過少時,最終的補全結果出現失真、模糊和空白現象;當網絡迭代次數過多時,容易出現過擬合,從而影響補全效果。
實驗參數見表1。

表1 實驗參數
實驗環境見表2。

表2 實驗環境
為了方便對實驗結果進行對比,本文對文獻[26]方法在同樣的參數設置下進行了實驗,實驗結果如圖4所示。

圖4 本文方法與文獻[26]方法結果對比
結果表明,當缺失區域面積很大(本文中長和寬均超過50%)或位于圖像的邊界時,文獻[26]方法的補全結果是模糊的,且有偽彩色生成。圖中圖像1~3輸入圖像的大小是256×256像素,其中缺失區域為位于圖像中心 128×128大小的區域,即為輸入圖像的 1/4大小。從圖中可以看到文獻[26]方法的補全結果會出現模糊、失真等現象,尤其是缺失區域邊界差異較為明顯。由于本文采取了分級聯合補全的方法,既考慮了合成結果全局與局部一致性,同時,通過添加初步補全結果中缺失區域的中心區域作為輸入的局部判別器2進行對抗訓練,保證了補全結果紋理信息的真實性,因此本文的結果更為清晰、真實;圖中圖像4的輸入圖像包含多個缺失區域,其中缺失區域隨機分布于圖像的不同位置。由于缺乏上下文信息,文獻[26]方法的補全結果會出現很明顯的空白區域。
當缺失區域面積較大且位于圖像邊緣位置時,如圖4中圖像5~8,文獻[26]方法的補全結果中除了含有大面積空白外還出現了偽彩色。這是由于生成對抗網絡中判別器的迭代速度大于生成器的迭代速度,從而導致了訓練的不穩定。benwne統計了文獻[26]方法中判別器和生成器每迭代100次的平均運行時間(圖),其中,Tc_per100為生成器每迭代100次的運行時間(s);Td_per100為判別器每迭代 100次的運行時間(s)。從圖中可以看出判別器每迭代100次的時間約為0.327 s,生成器每迭代100次平均約為0.645 s,即判別器每次迭代的運行時間約是生成器的 50%,導致判別器可以輕易地分辨出哪張是自然圖像,哪張是生成圖像,但是反向傳播時傳遞給補全網絡的梯度只能使其生成奇怪的紋路,由此容易產生色彩失真問題。而本文方法添加了局部判別器2,相當于“加寬”了網絡,平衡了生成器和判別器的訓練速度。此外,本文還通過將每個卷積層后面的 relu層替換為BN層和leaky_relu層的結合,并去掉判別器最后一層的sigmoid激活函數,避免了網絡訓練過程中的梯度消失和模式坍塌等問題,使得網絡訓練更加穩定。實驗表明,本文網絡的運行速度和文獻[26]方法網絡的運行速度差別僅為10%。本文的網絡訓練更加容易收斂,克服了文獻[26]方法中生成偽彩色的缺陷,使得結果更加真實。在圖的圖像5,7,8中,本文合成結果雖然較文獻[26]方法更優,但由于上下文信息缺失面積很大,且處于邊緣位置,仍出現了部分空白區域。問題尚需進一步研究克服。

圖5 生成器和判別器每迭代100次的運行時間圖
除了對圖像質量進行主觀視覺評價方法以外,本文還使用了 MSE Loss和結構化相似性(structural similarity,SSIM)等客觀評估方法對生成結果和原圖orig之間的相似性進行量化評價。其中,MSE Loss用來比較圖像之間的絕對誤差,即圖像像素之間的差距;SSIM用來評估圖像像素之間的依賴性,即人眼對圖像的接受程度。MSE Loss越小、SSIM越大,代表2張圖像越相似。表3為文獻[26]方法和本文方法在圖4中測試圖像的生成結果與原圖orig的比較結果。

表3 圖4中本文方法與文獻[26]方法的MSE和SSIM值
當缺失面積較大時,文獻[26]方法的MSE Loss值比本文方法高 20%~40%,表明缺失區域面積較大時,本文方法更能保證圖像紋理信息的真實性,見表3中的圖像1~3;當缺失區域位于圖像邊緣位置時,文獻[26]方法的補全結果和原圖之間的MSE Loss值和 SSIM 值均與本文補全結果有較大的差距,表明本文方法相較于文獻[26]方法在圖像上下文信息和全局、局部一致性方面均與原圖更加相似,見表3中圖像4~8。
圖(a)為文獻[26]方法采用的網絡結構在訓練過程中各個損失的運行圖,即網絡結構中卷積層采用relu激活函數,判別器的最后一層通過sigmoid激活函數進行二分類判斷;圖6(b)為本文方法采用的網絡結構在訓練過程中各個損失的運行圖。本文方法對網絡結構做出的改進包括:用 BN層和leak_relu層結合的方式替代relu層,并且去掉原始判別器結構中最后一層的sigmoid激活函數,以及添加了局部判別器2“加寬”網絡。

圖6 文獻[26]與本文方法網絡結構的Loss曲線圖
由圖6可以看出,文獻[26]方法的網絡結構訓練過程中容易出現梯度消失現象,訓練過程很不穩定。本文方法采用的網絡結構訓練過程則相對穩定,且生成損失下降時,對抗損失呈上升趨勢,二者始終保持對抗狀態,直至達到平衡。
除了針對具有重復性紋理的圖像進行補全外,本文還對具有一定結構特征的鐵絲網的照片進行了驗證,如圖7所示。
此外,為了驗證本文方法的泛化能力,從Places2數據集中隨機抽取了15 000張圖片進行訓練,測試結果如圖8所示。
由圖8可以看出,文獻[26]方法生成的圖片的補全區域很模糊,且邊界區域較為明顯,不能很好地保持圖像的真實性和一致性。本文方法由于對網絡結構做出了改進,使得網絡在訓練過程中避免了梯度消失、減小了生成器和判別器迭代速度的不一致性,對具有較強結構性的圖案也可以具有更好的補全效果。能夠生成更加清晰、真實的圖片,且保持圖像的全局和局部一致性。

圖7 鐵絲網圖片補全結果對比

圖8 Places2數據集圖片補全結果對比
本文提出一種分級聯合圖像補全方法,將圖像分為以缺失區域為中心的區域和缺失區域中心的區域,添加了局部判別器2對圖像進行補全,并對文獻[26]方法中使用的GAN模型結構進行了改進。本文的方法克服了文獻[26]方法訓練過程中大面積缺失區域的補全結果較為模糊、失真的問題,又使得網絡迭代過程中補全網絡和判別器的迭代速度更加一致,網絡訓練更加穩定,從而避免了偽彩色的生成,使得補全的結果更加真實清晰。
但是,本文的方法仍然存在局限性:①當大面積缺失區域位于圖像邊界時,補全結果仍然具有較小的空白區域。這是由于缺少上下文信息所致。是否可以在圖像庫中匹配出合適的上下文信息將是一個有趣的探討方向;②本文方法主要針對有重復性紋理結構的圖形補全,當圖像具有非規則結構時,由于訓練過程中難以捕獲紋理的細節特征本文方法將無法適用,還有待進一步研究解決。
本文方法可應用于圖像修復,當圖像具有大面積的缺損或磨痕時,可以使得修復后的圖像更加逼真;此外,當用戶希望去除電子圖像中的某目標物體時,擦除該目標物體后,可以實現根據周圍信息對擦除區域進行補全。由于在具體的應用中只需要用到本文網絡結構中的補全網絡,結構相對輕型,所以本文方法還可以應用于視頻操作等場景中,且克服了已有圖像補全技術的弊端,具有較好的應用前景。