李 健,孫大松,張備偉
南京財經(jīng)大學(xué) 信息工程學(xué)院 教務(wù)處,南京 210023
近年來,圖像修復(fù)技術(shù)逐漸成為計算機圖形學(xué)和計算機視覺領(lǐng)域的研究熱點。它是解決如何使用計算機實現(xiàn)圖像的自動修復(fù),以及如何判斷修復(fù)結(jié)果是否有效的問題,已在文物保護(hù)、影視特技制作、虛擬現(xiàn)實等領(lǐng)域得到廣泛應(yīng)用。傳統(tǒng)圖像修復(fù)算法主要有兩種[1]:一是基于紋理的圖像修復(fù)[2-6]。這種方法主要是從圖像內(nèi)部提取小塊(patch)并利用這些小塊補全圖像的破損部分。這種算法善于傳播高頻細(xì)節(jié),但無法捕獲圖像的語義或全局結(jié)構(gòu)。故其僅適用于圖像破損區(qū)域附近有重復(fù)的內(nèi)容,或者是小而均勻的區(qū)域,而面對復(fù)雜的圖像或者大面積缺失時無法生成合理的輸出。另一種方法是基于外部搜索的圖像修復(fù)。這種方法試圖從大量的同類圖像中提取小塊補全破損部位,但是若沒有很好的相似圖像,修復(fù)會出現(xiàn)錯誤,并且由于需要訪問外部數(shù)據(jù)庫,故該算法的局限性較大因而無法得到廣泛的應(yīng)用。
以上兩種傳統(tǒng)的圖像修復(fù)方法的局限性在于不能很好地理解圖像的語義內(nèi)容,而隨著深度學(xué)習(xí)研究的發(fā)展,卷積神經(jīng)網(wǎng)絡(luò)(Convolutional Neural Network,CNN)[7-8]的出現(xiàn)使提取圖像的高維特征成為了可能,這些特征有助于生成語義上合理的圖像,從而解決了傳統(tǒng)算法的難題。
文獻(xiàn)[9]提出的上下文編碼器(Context Encoder)算法,是首個利用深度學(xué)習(xí)在圖像修復(fù)領(lǐng)域取得成就的算法,其在大面積缺失的圖像修復(fù)問題中有著不錯的效果。它在自動編碼器(Auto Encoder)的基礎(chǔ)上,通過加入生成對抗網(wǎng)絡(luò)(GAN)[10]來使生成的圖像更加真實。但是這種方法的輸出不穩(wěn)定,在修復(fù)過程中存在丟失掩模信息的問題,在直接利用掩模覆蓋破損區(qū)域圖像時,會產(chǎn)生扭曲或者偽影,也會生成不合理圖像。且修復(fù)的區(qū)域邊緣比較明顯,全局一致性較低,導(dǎo)致修復(fù)結(jié)果比較模糊粗糙。Pix2Pix[11]方法通過在生成器中參考U-Net[12]全卷積結(jié)構(gòu),引入跳躍連接(skip connections),提升圖像的細(xì)節(jié)效果,將上下文編碼器擴(kuò)展為具有精細(xì)紋理修補的端到端修復(fù)方法。但其由于使用反卷積,與上下文編碼器一樣會產(chǎn)生棋盤偽影,且對復(fù)雜圖像的修復(fù)效果不佳。另外由于受到神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)的限制,早期的基于神經(jīng)網(wǎng)絡(luò)的圖像修復(fù)算法以修復(fù)圖像中央的矩形區(qū)域為主,且在輸入破損圖像和掩模時采用逐像素相乘的方法,在原圖黑色區(qū)域較多的情況下掩模信息容易丟失,難以生成合理的輸出。
針對上述問題,本文在卷積神經(jīng)網(wǎng)絡(luò)和生成對抗網(wǎng)絡(luò)基礎(chǔ)上,結(jié)合上下文編碼器和Pix2Pix 兩種方法的特點,為了改善破損區(qū)域信息丟失問題和實現(xiàn)對任意破損區(qū)域的重建,設(shè)計了一種結(jié)合雙編碼器與對抗訓(xùn)練的圖像修復(fù)算法:首先,給出雙編碼器模型,設(shè)計了掩模圖像生成管線和圖像生成管線,通過編碼掩模特征解決上下文編碼器丟失掩模信息的問題,并將掩模信息和圖像信息在通道層面合并后傳播到深層的網(wǎng)絡(luò)中,使得神經(jīng)網(wǎng)絡(luò)更容易對破損區(qū)域進(jìn)行優(yōu)化。其次,在圖像生成管線中引入跳躍連接(skip connections),保留不同分辨率下像素級的細(xì)節(jié)信息,并通過恒等映射傳播梯度,從而促進(jìn)生成器對圖像上下文語義內(nèi)容的學(xué)習(xí)并加速網(wǎng)絡(luò)的收斂。接著根據(jù)生成式對抗網(wǎng)絡(luò)的思想,結(jié)合遷移學(xué)習(xí)[13],引入對抗訓(xùn)練設(shè)計鑒別器,使圖像的修復(fù)結(jié)果更加清晰銳利。最后,利用本文算法在數(shù)據(jù)集和不同掩模形式下進(jìn)行實驗和測試,從定性和定量的角度與其他算法進(jìn)行比較,從而驗證該算法的有效性和實用性。
本章介紹雙編碼器模型及其原理。雙編碼器模型包括五個部分:圖像編碼器、圖像解碼器、掩模編碼器、掩模解碼器和鑒別器。其中掩模編碼器和掩模解碼器組成了類似于傳統(tǒng)的自動編碼器結(jié)構(gòu)[14]。圖像編碼器、圖像解碼器和鑒別器構(gòu)成了和上下文編碼器[10]相仿的結(jié)構(gòu);與后者不同的是,圖像解碼器需要同時讀入圖像特征和掩模特征。除此之外,引入了跳躍連接,將編碼器中的特征圖與解碼后對應(yīng)的同樣大小的特征圖在通道上進(jìn)行拼接,且圖像解碼器輸出的是完整圖像而不是僅僅預(yù)測缺失的部分。為了提高解碼器的輸出質(zhì)量,在圖像解碼后添加了鑒別器。綜上所述,雙編碼器模型結(jié)構(gòu)如圖1所示。
圖1 模型網(wǎng)絡(luò)架構(gòu)
掩模生成管線為一個標(biāo)準(zhǔn)的編碼器-解碼器(encoderdecoder)結(jié)構(gòu)。相對于輸入圖像,掩模僅為單通道的1比特陣列,其數(shù)據(jù)量較小且特征提取和重建相對容易,不需要額外的鑒別器輔助。掩模編碼器的輸入為單通道的掩模圖像,像素值為0 代表該點圖像缺失,否則為1。因掩模數(shù)據(jù)量低且沒有高精度需求,故采用3 個步長為2的卷積層和2個池化層對特征圖尺寸進(jìn)行快速縮減。在特征提取完成后,添加一個全連接層以產(chǎn)生一定程度的空間層面的數(shù)據(jù)交換。
在實驗中,發(fā)現(xiàn)基于反卷積的生成網(wǎng)絡(luò)容易形成棋盤偽影。這主要是因為反卷積容易產(chǎn)生不均等重疊,特別是在卷積核不能被步長整除的情況下[15]。為了解決棋盤偽影的問題,掩模解碼器通過堆疊上采樣-卷積[16]結(jié)構(gòu)重建掩模圖像?!吧喜蓸?卷積”方法先對輸出圖像使用插值算法上采樣,再對上采樣后的圖像進(jìn)行卷積,實現(xiàn)了和反卷積類似的效果。通過比較反卷積在解碼器上的實現(xiàn),上采樣-卷積可以有效地解決棋盤偽影的問題,故在圖像生成管線的解碼器中也使用上采樣-卷積代替反卷積。上采樣后的卷積將特征傳播到周圍像素,實現(xiàn)了特征的重構(gòu)。每個上采樣-卷積結(jié)構(gòu)使圖像尺寸變?yōu)樵瓉淼膬杀叮瑫r通道數(shù)量有一定程度的降低。通過5 層這樣的網(wǎng)絡(luò)將編碼器輸出的特征圖還原為單通道的掩模圖像。通過掩模生成管線可以生成單獨的掩模特征信息,在接下來的操作中與圖像特征信息一起輸入到圖像生成管線,從而改善了圖像修復(fù)過程中掩模特征丟失的問題。掩模生成器的體系結(jié)構(gòu)如表1所示,從左至右依次為網(wǎng)絡(luò)層類型(Conv為卷積層,Pooling為最大池化層,UP-Conv 為上采樣-卷積,Interpolate 為上采樣)、輸入(寬×高×通道數(shù))、卷積核、步長和輸出。
表1 掩模生成管線體系結(jié)構(gòu)
原始圖像為3通道的RGB圖像,通過將其逐通道與掩模進(jìn)行乘法操作得到破損圖像,然后輸入圖像編碼器。為了讓神經(jīng)網(wǎng)絡(luò)掌握原始圖像的全貌,從而提取更高層次的特征,需要擴(kuò)大神經(jīng)網(wǎng)絡(luò)的感受野。故本文使用了深層的卷積網(wǎng)絡(luò),且引入了跳躍連接,同時使用膨脹卷積來有效地避免擴(kuò)大卷積核導(dǎo)致的參數(shù)增多。在生成管線中采用了全卷積結(jié)構(gòu),未使用池化層從而簡化模型并減少數(shù)據(jù)的損失。
圖像編碼器通過多層次的卷積網(wǎng)絡(luò)來提取圖像詳細(xì)的語義特征信息。在每個卷積模塊后添加了一個批量標(biāo)準(zhǔn)化層以提高網(wǎng)絡(luò)的穩(wěn)定性并加速收斂。為了實現(xiàn)層間信息的傳播,在通常的網(wǎng)絡(luò)結(jié)構(gòu)中會添加全連接層。與通常的全連接和上下文編碼器中使用的逐通道全連接層不同,本文設(shè)置了一個基于組的全連接層。這種全連接層可以在連接多個特征圖時減少參數(shù)的數(shù)量且避免不必要的空間浪費,實現(xiàn)參數(shù)數(shù)量和靈活性的平衡。
圖像解碼器具有相對較為復(fù)雜的結(jié)構(gòu)。解碼器需要同時輸入圖像的特征圖和掩模的特征圖,并根據(jù)這些特征圖重建完整的圖像。相較于前文提到的圖像修復(fù)算法將掩模和圖像信息同時傳播的方法,本文使用2個上采樣管道同時重建圖像和掩模,其中,掩模的上采樣管道包含3個上采樣模塊,每個上采樣模塊包含一個上采樣-卷積結(jié)構(gòu)和一個批量標(biāo)準(zhǔn)化層。圖像的上采樣管道則包含6 個上采樣模塊。重建的掩模和圖像在通道層面疊加以輔助后續(xù)的修復(fù)工作。
在圖像生成管線中設(shè)計skip connections,將圖像編碼器中的特征圖與經(jīng)過解碼之后相同大小的對應(yīng)特征圖按照通道進(jìn)行拼接,重用通過恒等映射傳遞的特征,從而對因編碼器下采樣而損失的圖像信息特征進(jìn)行補充,強化生成器的結(jié)構(gòu)預(yù)測能力[17],從而進(jìn)一步提升生成圖像的細(xì)節(jié)。由于繞開了模型中間的非線性激活層,skip connections避免了梯度的消失,提高了圖像生成管線的學(xué)習(xí)能力并加速網(wǎng)絡(luò)的收斂。此外,也顯著擴(kuò)大了網(wǎng)絡(luò)的深度[18],增強網(wǎng)絡(luò)的表達(dá)能力。
圖像生成管線的體系結(jié)構(gòu)如表2所示,從左至右依次為網(wǎng)絡(luò)層類型(其中Conv為卷積層,D-conv為膨脹卷積層,UP-conv為上采樣-卷積)、輸入(寬×高×通道數(shù))、卷積核、步長、膨脹系數(shù)和輸出。
表2 圖像生成管線體系結(jié)構(gòu)
為提高重建圖像質(zhì)量,本文根據(jù)生成式對抗網(wǎng)絡(luò)思想,設(shè)計對抗訓(xùn)練鑒別器。由于該鑒別器僅需要完成特征提取和分類任務(wù),為了降低訓(xùn)練成本,這里使用了遷移學(xué)習(xí)。對ResNet18[18]進(jìn)行微調(diào)(Fine-Tuning),實現(xiàn)鑒別器的特征提取。ResNet18的輸出為1 000維的特征向量,使用全連接層將它映射到一個神經(jīng)節(jié)點上并使用sigmoid激活函數(shù)限制輸出值域。鑒別器網(wǎng)絡(luò)體系結(jié)構(gòu)如表3所示,從左到右依次為網(wǎng)絡(luò)層結(jié)構(gòu)、卷積核、步長和輸出。
表3 鑒別器體系結(jié)構(gòu)
在圖像生成管線中,使用重構(gòu)建損失來規(guī)范重建過程中的行為,使重建結(jié)果更具結(jié)構(gòu)性且與周圍的信息一致。這里定義重建損失為真實圖片和生成圖片的L2 損失。記原始圖片為y,經(jīng)過掩模處理后的破損圖片為x,圖像生成管線用G表示,則修復(fù)結(jié)果可以表示為G(x)。那么重構(gòu)建損失Lrec可以表示為:
L2 損失用于修復(fù)缺失低頻信息的圖像,由于其缺乏高頻細(xì)節(jié),會導(dǎo)致修復(fù)結(jié)果不可避免的模糊。因此,為了提高圖像的高頻細(xì)節(jié)的質(zhì)量并使圖像更加清晰,在使用重構(gòu)建損失外,根據(jù)生成式對抗網(wǎng)絡(luò)GAN[10]的思想,在模型中加入了鑒別器,從而引入了對抗損失。對抗損失可以促進(jìn)網(wǎng)絡(luò)生成更加清晰的圖像。公式(2)定義了生成式對抗網(wǎng)絡(luò)的損失函數(shù)。若將圖像生成管線的編碼器-解碼器模型看作GAN 的生成器,則G與D可以組成GAN。GAN 的原理類似于一個博弈(gametheoretic)的過程,在這個過程中,生成器和鑒別器交替的進(jìn)行梯度下降和梯度上升。
其中D(?)代表鑒別器,G(?)代表生成器。
在實際操作中,為了易于實現(xiàn),生成器的損失函數(shù)參考了GAN 的作者提供的第二種方式[10],并用其作為生成器的對抗損失函數(shù):
公式(3)可以理解為要生成輸入鑒別器后輸出一個較大概率的數(shù)據(jù),對于生成器來說ln(D(G(x)))越大越好。
對抗損失可以提高圖片的真實性,重構(gòu)建損失用于判斷生成圖片與真實圖片的語義差異,故生成器采用由重建損失和對抗損失組成的聯(lián)合損失進(jìn)行訓(xùn)練:
鑒別器損失函數(shù)則根據(jù)公式(2),分別采用0和1標(biāo)簽對修復(fù)后的圖片和真實圖片進(jìn)行損失計算:
在本實驗中通過計算LjointG和LjointD,更新編碼器解碼器及鑒別器參數(shù)不斷優(yōu)化直至達(dá)到收斂。
雙編碼器模型由5個模塊組成,各個模塊復(fù)雜度不同收斂速度也不一致。因此,這里分為兩部分進(jìn)行訓(xùn)練。由于圖像重建不依賴掩模重建但需要穩(wěn)定和高效的掩模編碼設(shè)施,故首先訓(xùn)練掩模編碼器和解碼器;訓(xùn)練完成后固定掩模編碼器的參數(shù),利用掩模編碼器為圖像重建管線提供掩模特征。
圖像重建管線由圖像編碼器、圖像解碼器和鑒別器構(gòu)成,前兩者構(gòu)成自動編碼器,自動編碼器又可作為生成器和鑒別器組成GAN。其訓(xùn)練流程如下:
1.讀取圖像y,生成掩模M,破損圖像x=M?y(?為點乘);
2.掩模編碼器對M編碼,得到特征向量Fm;
3.圖像編碼器對x編碼,得到特征向量Fx;
4.圖像解碼器基于Fm和Fx生成重建圖像xr;
5.計算xr和y的重構(gòu)建損失Lrec,優(yōu)化編碼器和解碼器;
6.使用xr和假標(biāo)簽、y和真實標(biāo)簽分別計算鑒別器對生成的修復(fù)圖片和原圖的損失LjointD并更新鑒別器參數(shù);
7.重復(fù)步驟1~4,得到重建圖像x"r;
9.重復(fù)上述步驟至訓(xùn)練結(jié)束
在訓(xùn)練中設(shè)計兩種掩模形式,一是將圖像中心的112×112區(qū)域作為掩模;二是采用動態(tài)生成的掩模,在圖像的192×192區(qū)域內(nèi)隨機生成并填充3個32×32的矩形作為掩模。為了提高破損部分對整體的影響,在計算損失前對原始圖像和重建圖像處于掩模外的區(qū)域進(jìn)行降低亮度的處理(如圖2 所示)。該處理通過將圖像和反轉(zhuǎn)掩模逐像素相乘實現(xiàn),這里反轉(zhuǎn)掩模的定義如下:
其中m為原始掩模,k為系數(shù)。實驗表明,在k=1.5的情況下,破損區(qū)域?qū)φw的影響比例從6%提高到了17.1%。
圖2 反轉(zhuǎn)掩模處理
為了提高訓(xùn)練效率,這里使用Adam 優(yōu)化器[19]對網(wǎng)絡(luò)參數(shù)進(jìn)行調(diào)整。Adam根據(jù)對梯度的一階矩和二階矩估計,動態(tài)地調(diào)整學(xué)習(xí)率,相較于隨機梯度下降(SGD)等優(yōu)化算法,使用Adam優(yōu)化的網(wǎng)絡(luò)收斂更快。由于模型較為復(fù)雜且各模塊有不同的復(fù)雜度,本文采用的訓(xùn)練參數(shù)如表4所示。
表4 訓(xùn)練參數(shù)
本文使用pytorch1.0 深度學(xué)習(xí)模型框架進(jìn)行實驗,運算設(shè)備為GTX 965M,對應(yīng)CUDA版本為9.0,cuDNN版本為7.5。使用places2 數(shù)據(jù)集進(jìn)行訓(xùn)練和測試。places2 是一個場景圖像數(shù)據(jù)集,從中隨機抽取80 000張圖像用于訓(xùn)練,10 000張用于測試。為滿足遷移學(xué)習(xí)中使用的ResNet18輸入要求且在一定程度上降低運算量,測試圖片統(tǒng)一縮放至224×224,圖片中心的112×112的區(qū)域為掩模。整個模型的訓(xùn)練完成時間約4天左右。
如圖3為定性評估,將本文方法分別與自動編碼器(Auto Encoders,AE)方法、深度卷積生成對抗網(wǎng)絡(luò)(Deep Convolutional Generative Adversarial Network,DCGAN)[20]、上下文編碼器(Context Encoder,CE)以及Pix2Pix圖像修復(fù)算法進(jìn)行比較。在相同迭代次數(shù)下訓(xùn)練模型后,不同方法在places2 數(shù)據(jù)集上的修復(fù)結(jié)果如圖3所示。
圖3 不同方法的修復(fù)結(jié)果
第一列圖(a)分別對應(yīng)著未添加掩模的原始圖像。第二列圖(b)為添加了掩模的缺損圖像。第三列圖(c)為自動編碼器的修復(fù)結(jié)果,可以看出這種方法的修復(fù)結(jié)果很粗糙,效果很不好。這是因為自動編碼器并不是在真正地學(xué)習(xí)如何重建圖像,而是僅通過逐像素地比較原圖和重建圖像的重構(gòu)建損失來優(yōu)化修復(fù)結(jié)果,且重構(gòu)建損失并不能保證降到最低。第四列圖(d)為DCGAN的修復(fù)結(jié)果,這種方法相比于自動編碼器添加了對抗訓(xùn)練,因而其圖像修復(fù)質(zhì)量相對有了提高,但是修復(fù)內(nèi)容的細(xì)節(jié)依然比較粗糙。第五列圖(e)為上下文編碼器的修復(fù)結(jié)果,這種方法結(jié)合了前兩者的優(yōu)點,但全局一致性不高,且修復(fù)語義內(nèi)容不夠準(zhǔn)確,同樣缺乏細(xì)節(jié)信息。第六列圖(f)為Pix2Pix圖像修復(fù)算法的修復(fù)結(jié)果,由于借鑒U-Net網(wǎng)絡(luò)引入了skip connections,修復(fù)部分的細(xì)節(jié)相比于上下文編碼器有了明顯提高。該方法與上下文編碼器相似,在實驗中會產(chǎn)生一定的扭曲或者偽影,這是由于使用反卷積而造成的。最后一列圖(g)為本文的方法,由于結(jié)合前面幾種方法的優(yōu)點,并對掩模進(jìn)行單獨的編碼,很好地改善了掩模信息和圖像信息的損失問題,同時將反卷積替換為上采樣-卷積,圖像修復(fù)的結(jié)果更加細(xì)膩平滑,減輕了偽影現(xiàn)象,且圖像的整體更加一致。
理論上,本文算法可以對任意尺寸和任意形狀的掩模進(jìn)行修復(fù)。受局部卷積[21]的啟發(fā),本文采用了動態(tài)掩模并進(jìn)行了實驗,為了降低模型的復(fù)雜度,本文簡化了掩模的形式。在224×224 的圖像中央192×192 的區(qū)域內(nèi),隨機生成并填充3 個32×32 大小的矩形作為掩模。矩形的部分完全重疊被視為合理的情況,因為這種情況下掩模尺寸降低同時復(fù)雜度提高。圖像的修復(fù)結(jié)果如圖4所示,可以看出本文模型在不同動態(tài)掩模的修復(fù)上也有不錯的效果。
圖4 動態(tài)掩模的修復(fù)結(jié)果
以上為視覺方面的定性評估,在定量評估方面,采用了峰值信噪比(PSNR)和結(jié)構(gòu)相似性指數(shù)(SSIM)[22]評估重建后的圖像。二者公式如下:
其中MSE為修復(fù)圖像與原始圖像的均方差,ux和uy為均值,σx和σy為方差,σxy為協(xié)方差;C1=(k1L)2,C2=(k2L)2,L為像素動態(tài)范圍,當(dāng)圖像深度為8 bit 時,L=255,k1和k2通常具有默認(rèn)值0.01和0.03。
PSNR 和圖像間的均方差直接相關(guān),用于評價圖片的高頻細(xì)節(jié),其值越大,表明圖像的失真越小。SSIM的取值在0 到1 之間,其值越大說明修復(fù)后的圖片與真實圖片的差值越小,即修復(fù)的效果越好。
對于掩模生成器,隨機生成了500 張掩模,使用掩模編碼器和解碼器進(jìn)行重建,其平均PNSR為32.15 dB,SSIM為0.913。
不同算法在places2數(shù)據(jù)集上的表現(xiàn),如表5所示。
表5 算法定量比較
從表5中可以看出,本文算法引入對抗訓(xùn)練從而顯著提升圖像細(xì)節(jié),通過雙編碼器結(jié)構(gòu)有效減少了掩模信息的損失,PSNR值相對于前面幾種算法有了明顯提高,同時通過跳躍連接改善圖像信息特征的損失問題,促進(jìn)了模型對圖像的整體結(jié)構(gòu)的預(yù)測,改善了圖像的結(jié)構(gòu)性,故SSIM值也比較大。
本文討論了一種結(jié)合雙編碼器與對抗訓(xùn)練的圖像修復(fù)算法。通過設(shè)計掩模編碼器和圖像編碼器分別對掩模和圖像進(jìn)行編碼,將掩模特征向量和圖像特征向量同時輸入圖像解碼器中,解決了掩模信息丟失問題,實現(xiàn)對任意破損區(qū)域的修復(fù)。在圖像生成管線中使用跳躍連接促進(jìn)圖像語義特征的深層傳播,減少因下采樣造成的圖像信息損失,強化圖像的整體結(jié)構(gòu)性并提升模型的訓(xùn)練速度加快收斂。同時結(jié)合生成式對抗網(wǎng)絡(luò)設(shè)計一個鑒別器,通過對抗訓(xùn)練優(yōu)化模型,進(jìn)一步提高圖像的細(xì)節(jié)和修復(fù)效果。最后在不同的數(shù)據(jù)集上對該算法的網(wǎng)絡(luò)模型進(jìn)行了訓(xùn)練和測試,并與其他算法進(jìn)行了比較。實驗結(jié)果表明,本文算法修復(fù)結(jié)果更為準(zhǔn)確,整體效果更好。下一步的工作是解決圖像修復(fù)過程中由于特征在樣本中出現(xiàn)頻率較低而導(dǎo)致的特征丟失問題,進(jìn)一步完善圖像修復(fù)模型,提高模型的運行效率。