全局一致讓圖像補(bǔ)全的內(nèi)容契合上下文,局部一致性讓紋理更加真實(shí)。
這里只是對我們之前所學(xué)內(nèi)容的一個簡單回顧。
對于圖像修復(fù),填充像素的紋理細(xì)節(jié)是很重要的。有效的像素和填充的像素應(yīng)該是一致的,填充的圖像應(yīng)該看起來真實(shí)。
粗略的說,研究者采用逐像素的重建損失(即L2損失)來確保我們可以用“正確”的結(jié)構(gòu)來填補(bǔ)缺失的部分。另一方面,GAN損失(即對抗損失)和/或[紋理損失]應(yīng)用于獲得具有更清晰的生成像素紋理細(xì)節(jié)的填充圖像。
圖1,一個例子來說明為圖像修復(fù)任務(wù)生成新的片段的需求。
對于基于patch的方法,一個很大的假設(shè)是我們相信我們可以在缺失區(qū)域之外找到相似的patch,這些相似的補(bǔ)丁將有助于填充缺失區(qū)域。這個假設(shè)對于自然場景可能是正確的,因?yàn)樘炜蘸筒萜涸谝粋€圖像中可能有許多相似的patch。如果缺失區(qū)域之外沒有任何類似的patch,就像圖1中所示的人臉圖像修復(fù)的情況。在這種情況下,我們找不到眼睛的patch來填補(bǔ)相應(yīng)的缺失部分。因此,魯棒的修復(fù)算法應(yīng)該能夠生成新的片段。
現(xiàn)有的基于GAN的修復(fù)方法利用一個鑒別器(對抗損失)來增強(qiáng)填充區(qū)域的銳度,將填充區(qū)域輸入到鑒別器(即欺騙鑒別器)。有些人可能會在預(yù)訓(xùn)練的網(wǎng)絡(luò)中比較缺失區(qū)域內(nèi)部和外部的局部神經(jīng)響應(yīng),以確保缺失區(qū)域內(nèi)部和外部的局部小塊的紋理細(xì)節(jié)相似。如果我們同時考慮圖像的局部和全局信息來加強(qiáng)局部和全局一致性呢?我們會得到更好的完整圖像嗎?讓我們看看。
圖2,上下文編碼器的神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)
如何處理高分辨率圖像?我們之前已經(jīng)討論過第一種基于GAN的修復(fù)方法,上下文編碼器。他們假設(shè)測試圖像總是128×128和一個64×64中心缺失的洞。然后,我們還在上一篇文章中介紹了上下文編碼器的改進(jìn)版本,稱為Multi-Scale Neural Patch Synthesis。他們提出了一種多尺度的方法來處理測試圖像,最大的分辨率為512×512,中心缺失的孔為256×256。簡而言之,他們采用了三種不同尺度的圖像網(wǎng)絡(luò),即128×128、256×256和512×512。因此,速度是他們提出的方法的瓶頸。使用Titan X GPU填充512×512的圖像大約需要1分鐘。這是個有趣的問題!我們?nèi)绾翁幚砀叻直媛蕡D像,只需一個單一的的網(wǎng)絡(luò)?給你幾秒鐘的思考時間,你可能會從圖2所示的架構(gòu)中發(fā)現(xiàn)一些提示(注意中間層)。一個快速的解決方案是去掉中間的全連接層,并采用全卷積網(wǎng)絡(luò)!你很快就會知道怎么做,為什么要這樣做!
介紹
現(xiàn)有的方法大多假設(shè)可以找到相似的圖像patch來填補(bǔ)同一幅圖像中缺失的部分。這種情況并不總是適用于圖像修復(fù),見圖1。更準(zhǔn)確地說,我們應(yīng)該看整個圖像,了解它的上下文,然后根據(jù)它的上下文來填補(bǔ)缺失的部分。
如果使用全連接層,輸入圖像的大小必須是固定的。因此,網(wǎng)絡(luò)不能處理不同分辨率的測試圖像?;叵胍幌?,完全連接的層完全連接了兩層之間的所有神經(jīng)元,因此它對前一層輸出大小的變化很敏感,測試圖像的大小必須固定。另一方面,對于卷積層,神經(jīng)元之間沒有全連接。更小的輸入特征映射將導(dǎo)致更小的輸出特征映射。所以,如果一個網(wǎng)絡(luò)只由卷積層組成,它就可以處理不同大小的輸入圖像。我們稱這種網(wǎng)絡(luò)為全卷積網(wǎng)絡(luò)(FCNs)。
方案
采用膨脹卷積代替全連接層,這樣我們?nèi)匀豢梢岳斫鈭D像的上下文,構(gòu)建一個全卷積網(wǎng)絡(luò)(Fully Convolutional Network, FCN)來處理不同大小的圖像。
使用兩個鑒別器來保證完成(填充)圖像的局部和全局一致性。一個鑒別器在全局意義上看整個圖像,而一個在局部意義上看被填充區(qū)域周圍的子圖像。
使用簡單的后處理。有時很明顯可以看出生成的像素和有效像素之間的區(qū)別。為了進(jìn)一步提高圖像的視覺質(zhì)量,本文采用了兩種傳統(tǒng)的方法,即Fast Marching method和Poisson image blend。這兩種技術(shù)超出了本文的范圍。之后,在一定程度上將后處理步驟以細(xì)化網(wǎng)絡(luò)的形式嵌入到網(wǎng)絡(luò)中。我們將在后面的文章中討論它。
貢獻(xiàn)
提出一種全卷積的網(wǎng)絡(luò)擴(kuò)展卷積圖像修復(fù)。它允許我們在不使用全連接的層的情況下理解圖像的上下文,因此訓(xùn)練過的網(wǎng)絡(luò)可以用于不同大小的圖像。這個架構(gòu)實(shí)際上是后來基于深度學(xué)習(xí)的圖像修復(fù)方法的基礎(chǔ)。這就是為什么我認(rèn)為這篇文章是圖像修復(fù)的一個里程碑。
建議使用兩個判別器(一個局部的和一個全局的)。多尺度鑒別器似乎可以在不同尺度上提供較好的完整圖像紋理細(xì)節(jié)。
強(qiáng)調(diào)圖像修復(fù)任務(wù)中產(chǎn)生新片段的重要性。實(shí)際上,訓(xùn)練數(shù)據(jù)是非常重要的。簡單地說,你不能生成你以前沒見過的東西。
方法
圖3,提出方法的結(jié)構(gòu)
圖3顯示了提出的方法的網(wǎng)絡(luò)架構(gòu)。它由三個網(wǎng)絡(luò)組成,分別是Completion網(wǎng)絡(luò)(即生成器,既用于訓(xùn)練又用于測試)、局部鑒別器和全局鑒別器(用于剛訓(xùn)練時作為輔助網(wǎng)絡(luò)用于學(xué)習(xí))??焖倩仡櫼幌逻@個GAN框架。Generator負(fù)責(zé)補(bǔ)全圖像以欺騙discriminator,而discriminator負(fù)責(zé)將完整圖像與真實(shí)圖像區(qū)分開來。
CNNs中的膨脹卷積
膨脹卷積的概念對于讀者理解本文的網(wǎng)絡(luò)設(shè)計是很重要的。所以,我想盡力為那些不熟悉膨脹卷積的讀者解釋一下。對于非常了解它的讀者,也請快速回顧一下。
圖4,標(biāo)準(zhǔn)卷積和膨脹卷積的圖解
在論文中,作者用了半頁的篇幅來描述cnn、標(biāo)準(zhǔn)卷積和擴(kuò)張卷積。并給出了相應(yīng)的卷積方程供參考。我需要澄清一點(diǎn),膨脹卷積并不是本文作者提出的,他們是將其用于圖像修復(fù)。
這里,我想用一個簡單的圖來說明標(biāo)準(zhǔn)卷積和膨脹卷積的區(qū)別。
圖4(a)是帶有3×3 kernel, stride=1, padding=1,膨脹率=1的標(biāo)準(zhǔn)卷積層。這種情況的設(shè)置中,8×8輸入給出8×8的輸出,每個相鄰的9個位置在輸出中貢獻(xiàn)一個元素。
圖4(b)也是一個標(biāo)準(zhǔn)的卷積層。這次我們使用5×5 kernel,stride=1, padding=2(為了保持相同的輸入和輸出大?。┖团蛎浡?1。在這種情況下,每個相鄰的25個位置對輸出的每個元素都有貢獻(xiàn)。這意味著對于輸出的每個值,我們必須更多地考慮(查看)輸入。我們通常指更大的感受野。對于一個大的感受野,更多的來自遙遠(yuǎn)空間位置的特征將被考慮進(jìn)去,在輸出時給出每個值。
然而,對于圖4(b)中的情況,我們使用一個更大的kernel (5×5)來獲得更大的感受野。這意味著需要學(xué)習(xí)更多的參數(shù)(3×3=9,而5×5=25)。有沒有辦法在不增加更多參數(shù)的情況下增加感受野?答案是膨脹卷積。
圖4(c)是一個膨脹卷積層,使用3×3 kernel, stride=1, padding=2,膨脹率=2。當(dāng)比較圖4(b)和(c)中的kernel的覆蓋時,我們可以看到它們都覆蓋了輸入處的5×5局部空間區(qū)域。3×3的kernel可以通過跳過連續(xù)的空間位置來獲得5×5 kernel的感受野。跳躍的step是由膨脹率決定的。例如,一個3×3內(nèi)核的膨脹率=2給出5×5感受野,一個3×3核的膨脹率=3給出一個7×7的感受野,以此類推。顯然,膨脹卷積通過跳過連續(xù)的空間位置來增加感受野,而不需要添加額外的參數(shù)。這樣做的優(yōu)點(diǎn)是,我們有更大的感受野,同時有相同數(shù)量的參數(shù)。缺點(diǎn)是我們會跳過一些位置(我們可能會因此丟失一些信息)。
為什么要用膨脹卷積?
在回顧了膨脹卷積的概念之后,我將討論為什么作者在他們的模型中使用膨脹卷積。你們中的一些人可能已經(jīng)猜到原因了。
如前所述,了解整個圖像的上下文對于圖像修復(fù)的任務(wù)是重要的。以前的方法使用全連接層作為中間層,以便理解上下文。記住,標(biāo)準(zhǔn)卷積層在局部區(qū)域執(zhí)行卷積,而全連接層則完全連接所有的神經(jīng)元(即每個輸出值取決于所有的輸入值)。然而,全連接層限制了輸入圖像的大小,并引入了更多的可學(xué)習(xí)參數(shù)。
為了解決這些限制,我們使用膨脹卷積來構(gòu)建一個全卷積的網(wǎng)絡(luò),允許不同大小的輸入。另一方面,通過調(diào)整標(biāo)準(zhǔn)kernel(通常是3×3)的膨脹率,我們可以在不同的層次上擁有更大的感受野,以幫助理解整個圖像的上下文。
圖5,不同大小的感受野的影響。
圖5是一個展示膨脹卷積的有用性的例子。你可能認(rèn)為(a)是帶有3×3核(較小的感受野)的標(biāo)準(zhǔn)卷積,(b)是帶有3×3核且擴(kuò)張率≥2(較大的感受野)的膨脹卷積。位置p1和p2在孔內(nèi)區(qū)域,p1靠近邊界,p2大致在中心點(diǎn)。對于(a),可以看到p1位置的感受野(影響區(qū)域)可以覆蓋有效區(qū)域。這意味著可以使用有效像素來填充位置p1的像素。另一方面,p2位置的感受野不能覆蓋有效區(qū)域,因此不能使用有效區(qū)域的信息進(jìn)行生成。
對于(b),我們使用膨脹卷積來增加感受野。這一次,兩個位置的感受野都可以覆蓋有效區(qū)域。讀者現(xiàn)在可以認(rèn)識到擴(kuò)張卷積的有效性了。
Completion網(wǎng)絡(luò)
讓我們回到Completion 網(wǎng)絡(luò)的結(jié)構(gòu),如圖3所示。
表1,Completion網(wǎng)絡(luò)結(jié)構(gòu)。,每個卷積層后面都是ReLU,除了最后一個后面是Sigmoid
Completion 網(wǎng)絡(luò)是一個全卷積的網(wǎng)絡(luò),接受不同大小的輸入圖像。該網(wǎng)絡(luò)對輸入進(jìn)行2次2倍的下采樣。這意味著,如果輸入是256×256,中間層的輸入大小是64×64。為了充分利用有效像素,保證像素精度,我們用有效像素替換孔區(qū)域以外的像素。
上下文判別器
讓我們來談?wù)劸植亢腿峙袆e器。沒有什么特別的,就像單個判別器的情況一樣。唯一的不同是這次我們有兩個。
表2,局部和全局鑒別器的結(jié)構(gòu),F(xiàn)C代表全連接層,連接層(c)的最終FC后面是Sigmoid
局部和全局判別器的架構(gòu)基本相同。全局判別器的輸入圖像大小為256×256(整個圖像,用于全局一致性),而局部判別器的輸入為128×128,圍繞缺失區(qū)域的中心,用于局部一致性。
需要注意的一點(diǎn)是,在訓(xùn)練過程中,總有一個區(qū)域是缺失的。在測試過程中,圖像中可能存在多個缺失區(qū)域。除此之外,對于local discriminator,由于真實(shí)圖像沒有填充區(qū)域,所以對真實(shí)圖像采用128×128 patch的隨機(jī)選擇。
訓(xùn)練策略和損失函數(shù)
與之前一樣,使用兩個損失函數(shù)來訓(xùn)練網(wǎng)絡(luò),即L2損失和對抗損失(GAN損失)。
C(x, M_c)將completion網(wǎng)絡(luò)表示為函數(shù)。x是輸入圖像,M_c是表示缺失區(qū)域的二進(jìn)制掩碼。缺失區(qū)域?yàn)?,外部區(qū)域?yàn)?。你可以看到L2損失是在缺失區(qū)域內(nèi)計算的。注意,補(bǔ)全的圖像的外部區(qū)域的像素直接被有效像素替換。
D(x, M_d)將兩個鑒別器表示為一個函數(shù)。M_d是一個隨機(jī)掩碼,用于為局部判別器隨機(jī)選擇一個圖像patch。這是一個標(biāo)準(zhǔn)的GAN損失。我們希望該判別器不能區(qū)分完整的圖像和真實(shí)的圖像,從而得到具有真實(shí)紋理細(xì)節(jié)的完整圖像。
這是訓(xùn)練網(wǎng)絡(luò)的聯(lián)合損失函數(shù)。alpha是一個加權(quán)超參數(shù),以平衡L2損失和GAN損失。
作者將他們的訓(xùn)練分為三個階段。i) 訓(xùn)練僅帶L2損失的completion網(wǎng)絡(luò),迭代次數(shù)為T_C。ii) 修正completion網(wǎng)絡(luò),使用GAN損失訓(xùn)練判別器進(jìn)行T_D迭代。iii) 交替訓(xùn)練completion網(wǎng)絡(luò)和判別器,直到訓(xùn)練結(jié)束。
對于穩(wěn)定訓(xùn)練,除completion網(wǎng)絡(luò)的最后一層和判別器外,所有卷積層都采用批處理歸一化(BN)。
為了生成訓(xùn)練數(shù)據(jù),他們隨機(jī)地將圖像的最小邊緣大小調(diào)整到[256,384]像素范圍。然后,他們隨機(jī)截取256×256圖像補(bǔ)丁作為輸入圖像。對于掩模圖像,隨機(jī)生成一個區(qū)域,每個邊的范圍為[96,128]。
簡單的后處理:如前所述,作者還采用了傳統(tǒng)的Fast Marching方法,隨后采用泊松圖像混合,進(jìn)一步提高完成圖像的視覺質(zhì)量。
實(shí)驗(yàn)
作者使用Places2數(shù)據(jù)集中的8097967張訓(xùn)練圖像訓(xùn)練他們的網(wǎng)絡(luò)。聯(lián)合損失函數(shù)中的alpha加權(quán)超參數(shù)設(shè)置為0.0004,batch大小為96。
本文中,completion網(wǎng)絡(luò)訓(xùn)練為T_C = 90000次迭代,訓(xùn)練判別器T_D = 10,000次迭代,最后聯(lián)合訓(xùn)練所有網(wǎng)絡(luò)400,000次迭代。他們聲稱,整個訓(xùn)練過程在一臺4個k80 GPU的電腦上大約需要2個月的時間。
表3,所提出方法的用時
他們使用Intel Core i7-5960X 3.00 GHz 8核CPU和NVIDIA GeForce TITAN X GPU對CPU和GPU進(jìn)行評估。實(shí)際上,速度相當(dāng)快,只需半秒多一點(diǎn)就可以完成1024×1024的一張圖片。
圖6,和已有方法的對比
圖6顯示了與一些現(xiàn)有方法的比較??偟膩碚f,基于patch的方法可以用局部一致的圖像patch來完成,但可能不會是全局一致的。最近的基于GAN的方法,上下文編碼器(第5行),傾向于給出模糊的完整圖像。該方法提供了局部和全局一致的完整圖像。
圖7,和上下文編碼器的對比,在同樣的數(shù)據(jù)集上訓(xùn)練填補(bǔ)中心缺失孔洞
為了與最先進(jìn)的基于GAN的修復(fù)方法進(jìn)行比較,作者進(jìn)行了中心區(qū)域補(bǔ)全,結(jié)果如圖7所示。可以看出,CE對于中心區(qū)域補(bǔ)全的性能優(yōu)于任意區(qū)域補(bǔ)全(圖6)。在我看來,CE與本文方法在圖7中具有相似的性能。讀者可以放大看其中的差異。
圖8,不同判別器的效果
作者對這兩種判別器進(jìn)行了消融研究。從圖8(b)和(c)可以看出,當(dāng)不使用局部判別器時,補(bǔ)全的區(qū)域看起來更加模糊。另一方面,對于(d),如果只使用局部判別器,我們可以得到良好的局部一致紋理細(xì)節(jié),但不能保證全局一致性。對于(e)中的full方法,我們獲得了局部和全局一致的結(jié)果。
圖9,簡單后處理的結(jié)果
圖9顯示了簡單后處理的效果。對于圖9(b),我們可以很容易地觀察到邊界。
圖10,使用不同的數(shù)據(jù)集的修復(fù)結(jié)果
圖10顯示了在不同數(shù)據(jù)集上訓(xùn)練的模型的修復(fù)結(jié)果。注意,Places2包含了大約800萬張不同場景的訓(xùn)練圖像,而ImageNet包含了100萬張用于目標(biāo)分類的訓(xùn)練圖像。我們可以看到,在Places2上訓(xùn)練模型的結(jié)果比在ImageNet上訓(xùn)練的結(jié)果稍好一些。
圖11,用提出的方法來做目標(biāo)移除的例子
圖像修復(fù)的一個潛在應(yīng)用是物體移除。圖11顯示了使用所提方法刪除目標(biāo)的一些例子。
圖12,更多特定數(shù)據(jù)集的結(jié)果
本文的作者還考慮了域特定的圖像修復(fù)。他們在CelebA數(shù)據(jù)集和CMP Facade數(shù)據(jù)集上微調(diào)了他們的預(yù)訓(xùn)練模型,這兩個數(shù)據(jù)集分別由202599和606張圖像組成。他們使用了Places2數(shù)據(jù)集上的預(yù)訓(xùn)練模型。對于新的數(shù)據(jù)集,他們從無到有訓(xùn)練判別器,然后進(jìn)行completion網(wǎng)絡(luò)和判別器交替訓(xùn)練。
圖12顯示了本文方法對特定領(lǐng)域圖像的修復(fù)結(jié)果。對于面部修復(fù),該方法能夠生成眼睛和嘴等新的片段。對于立面的修復(fù),本文提出的方法還能夠生成與整個圖像局部和全局一致的窗口等片段。
作者還對完整的面部圖像進(jìn)行了用戶研究。結(jié)果表明,在10個用戶中,使用該方法得到的77.0%的完整人臉被視為真實(shí)人臉。另一方面,96.5%的真實(shí)面孔可以被這10個用戶正確識別。
限制和討論
以下是作者對其局限性和未來發(fā)展方向的幾點(diǎn)看法。
圖13,失敗的例子 i) mask在圖像的邊緣 ii) 復(fù)雜的場景
對于圖13左側(cè)的情況,我們可以看到缺失的部分位于上方圖像的邊框。作者聲稱,在這種情況下,可以從鄰近位置借用的信息更少,因此基于GAN的方法(第3行和第4行)比傳統(tǒng)的基于patch的方法(第2行)表現(xiàn)更差。另一個原因是這個例子是自然場景,所以基于patch的方法可以很好地工作。
對于圖13右側(cè)的例子,場景要復(fù)雜得多。根據(jù)這個mask,我們想要移除一個人,我們需要填充一些建筑的細(xì)節(jié)來完成這個復(fù)雜的場景。在這種情況下,所有的方法都不能正常工作。因此,在復(fù)雜的場景中填補(bǔ)缺失的部分仍然是的挑戰(zhàn)。
圖14,舉例說明生成新片段的重要性,我們只能生成之前在訓(xùn)練中看到的內(nèi)容。
作者提供了額外的例子來強(qiáng)調(diào)另外兩點(diǎn)。i) 產(chǎn)生諸如眼睛、鼻子、嘴巴等新穎片段的重要性。ii)訓(xùn)練數(shù)據(jù)集的重要性。
對于無法找到相似的圖像patch來填補(bǔ)缺失部分的情況,基于patch的方法(第2行和第3行)無法正常工作,如圖14所示。因此,一個魯棒的修復(fù)算法必須能夠生成新的片段。
為了進(jìn)一步顯示訓(xùn)練數(shù)據(jù)集選擇的重要性,作者比較了在Places2 (General dataset, (d))和CelebA (Face dataset, (e))上訓(xùn)練的兩個模型。顯然,(d)無法用合理的面部細(xì)節(jié)來填補(bǔ)缺失的部分,因?yàn)樗窃跊]有任何對齊的面部圖像的Places2上訓(xùn)練的。另一方面,(e)工作得很好,因?yàn)樗窃贑elebA上訓(xùn)練的,一個有許多對齊的人臉圖像的數(shù)據(jù)集。因此,我們只能生成我們在訓(xùn)練中看到的東西。全面的修復(fù)還有很長的路要走。
總結(jié)
所提議的結(jié)構(gòu)是后來大多數(shù)修復(fù)論文的基礎(chǔ)。膨脹卷積的全卷積網(wǎng)絡(luò)允許我們在不使用全連接的層的情況下理解圖像的上下文,因此網(wǎng)絡(luò)可以獲取不同大小的輸入圖像。
多尺度的鑒別器(在這里我們有兩個鑒別器,實(shí)際上有些可能有三個?。?對于在不同尺度上增強(qiáng)完整圖像的紋理細(xì)節(jié)是很有用的。
當(dāng)場景很復(fù)雜的時候,補(bǔ)上缺失的部分仍然很有挑戰(zhàn)性。另一方面,自然場景是比較容易修復(fù)的。
要點(diǎn)
在這里,我想列出一些對以后的文章有用的觀點(diǎn)。
請記住,膨脹卷積的全卷積網(wǎng)絡(luò)是一種典型的圖像修復(fù)網(wǎng)絡(luò)結(jié)構(gòu)。它允許不同大小的輸入,并提供類似于全連接層的功能(即幫助理解圖像的上下文)。
事實(shí)上,人臉圖像的修復(fù)相對來說比一般的圖像修復(fù)簡單。這是因?yàn)槲覀兛偸窃谌四様?shù)據(jù)集上訓(xùn)練一個模型來進(jìn)行人臉圖像修復(fù),而該數(shù)據(jù)集由許多對齊的人臉圖像組成。對于一般的圖像修復(fù),我們可以訓(xùn)練一個更多樣化的數(shù)據(jù)集,如Places2,它包含來自不同類別(如城市、建筑和許多其他類別)的數(shù)百萬張圖像。對于一個模型來說,學(xué)習(xí)生成所有具有良好視覺質(zhì)量的東西要困難得多。不管怎樣,還有很長的路要走。
編輯:lyn
-
GaN
+關(guān)注
關(guān)注
19文章
1883瀏覽量
71018 -
patch
+關(guān)注
關(guān)注
0文章
14瀏覽量
8312 -
圖像修復(fù)
+關(guān)注
關(guān)注
0文章
11瀏覽量
2257
原文標(biāo)題:圖像修復(fù):全局和局部的一致性補(bǔ)全
文章出處:【微信號:cas-ciomp,微信公眾號:中科院長春光機(jī)所】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論