如何將“複製貼上”嵌入到影象修復中:Shift-Net使用深度特徵重排的影象修復方法

語言: CN / TW / HK

點選上方“AI公園”,關注公眾號,選擇加“星標“或“置頂”


作者:Chu-Tak Li

編譯:ronghuaiyang

導讀

今天,我們將深入到更具體的深度影象修復技術,深度特徵重排這種技術既利用了現代資料驅動的CNN,又利用了傳統的複製-貼上修復方法。

回顧

在前幾期的深度影象修復的文章中,第一篇:用生成模型來做影象恢復的介紹和回顧:上下文編碼器我介紹了影象修復的目的和第一種基於GAN的影象修復方法。第二篇:使用多尺度patch合成來做高解析度的影象復原我們在第一個GAN-based影象修復方法上進行了改進,使用了紋理網路來增強區域性紋理細節。第三篇:影象修復中的一個里程碑:全域性和區域性一致性的影象補全我們介紹了深度影象修復的一個里程碑,該網路體系結構可以被看作是一個設計影象修復的標準的網路。在第四篇文章中:深度影象修復的回顧和改進:使用生成對抗網路基於Patch的影象修復,我們進行了一個改進,並介紹了標準修復網路的一個變體/改進版本。

動機

圖1,不同方法的修復結果的量化比較,(a)輸入,(b)卷積方法(基於複製貼上)(c)第一個基於GAN的方法,上下文編碼器 (d) 提出的方法

正如我在之前的文章中提到的,一種傳統的方法是在一張圖片中尋找最相似的影象patch,然後直接複製貼上這些patch到缺失的部分(即複製貼上方法)。該方法直接在缺失的部分貼上其他影象patch,從而提供了良好的區域性細節。然而,這些patch可能並不完全適合整個影象的上下文,這可能會導致全域性一致性較差。以圖1(b)為例,可以看到填充區域的區域性紋理細節很好,但與未缺失的部分(即有效畫素)不一致。

另一方面,基於深度學習的方法關注的是整個影象的上下文。全連線層或擴充套件的卷積層用於捕捉整個影象的上下文。深度學習模型使用L1損失進行訓練,以確保畫素級重建精度。因此,深度學習方法提供的填充影象具有更好的全域性一致性。然而,L1損失會導致模糊的修復結果,即使對抗損失(GAN損失)可以用來增強填充畫素的清晰度。以圖1(c)為例,可以看到填充的區域與未缺失的區域更加一致,但填充的區域比較模糊。

因此,本文作者希望利用傳統的“複製-貼上”方法(良好的區域性細節)和現代深度學習方法(良好的全域性一致性)的優勢。

介紹

在影象修復中,我們希望得到一幅具有良好視覺質量的完整影象。因此,我們需要正確的全域性語義結構精細的紋理。正確的全域性語義結構意味著生成的畫素和有效畫素應該是一致的。換句話說,我們必須填充一個影象,並且必須保持它的上下文。精細的紋理意味著生成的畫素應該是真實的,並且儘可能的清晰。

在前一節中,我們提到了傳統的“複製-貼上”方法可以提供精細的紋理,而最近的深度學習方法可以提供更好的全域性語義結構校正。因此,本文引入移位連線層,利用複製-貼上的概念在其網路內部實現深度特徵重排。圖1(d)顯示了他們提出的方法提供的修復結果。

方案

提出了一個引導損失,以鼓勵他們的網路(Shift-Net)在解碼過程中學習填補缺失的部分。除此之外,我們還建議使用一個移位連線層,將缺失區域內的解碼特徵與缺失區域外的編碼特徵進行匹配,然後將缺失區域外編碼特徵的每個匹配位置移動到缺失區域內的相應位置。這捕獲了在缺失區域之外發現的最相似的區域性影象塊的資訊,並將該資訊連線到解碼後的特徵,以便進一步重建。

貢獻

如前所述,我們提出了一個移位連線層,將複製-貼上的概念嵌入到現代CNN中,從而使我們提出的模型能夠提供具有正確的全域性語義結構和精細紋理的修復結果。

除了標準的L1和對抗性損失外,他們還建議引導損失以端到端資料驅動的方式訓練他們的移位網路。

方法

圖2,Shift-Net的網路結構,移位連線層加在32x32的解析度上。

圖2顯示了Shift-Net的網路架構。沒有移位連線層,這是一個非常標準的使用了跳躍連線的U-Net結構。注意,編碼的特徵被連線到解碼的特徵的相應層。這種跳躍連線對於低層次的視覺任務是有用的,包括影象修復,可以得到更好的區域性視覺細節和重建精度。

引導損失

提出了引導損失來訓練它們的Shift-Net。簡單地說,這個損失計算的是缺失區域內輸入mask影象的解碼特徵與缺失區域內的ground truth的編碼特徵之間的差。

讓我們先來定義一下問題。設Ω為缺失區域,Ω(bar)為有效區域(即非缺失區域)。對於具有L層的U-Net,我們的最終目標是恢復ground truth。因此,我們希望第L層的編碼特徵和對應的解碼層的特徵包含了幾乎所有的ground truth在該層的特徵。對於編碼特徵,我們將缺失區域置為0,那麼第L層缺失區域的編碼特徵就是0,所以,對應的解碼層的特徵應該包含ground truth的缺失區域在該對應編碼層特徵。這意味著解碼過程應該要可以填補缺失的區域。

式子1顯示了編碼層和對應解碼層的特徵的關係,注意對於x Ω(bar)(非缺失區域),我們假設第L解碼層的特徵和ground truth的對應編碼層的特徵是一樣,因此,引導損失只是定義在缺失區域上。通過將編碼層的特徵拼接到對應的解碼層上,我們可以得到幾乎所有的資訊。

圖3,Shift-Net的特徵視覺化, (a) 輸入(亮的區域表示缺失區域)(b) ground truth的視覺化 (c) 編碼層特徵的視覺化 (d) 移位特徵的視覺化

為了進一步顯示缺失區域編碼層和解碼層特徵之間的關係,作者將通過移位網學習到的特徵視覺化,如圖3所示。比較圖3(b)和(c),可以看出移位網路特徵是ground truth的合理估計,但太模糊。導致模糊的修復結果是沒有精細的紋理細節。他們提出的移位連線層解決了這一問題,結果如圖(d)所示。下面我們來討論移位操作。

Shift連線層

我個人認為這是本文的核心思想。回想一下,我們假設編碼層特徵和解碼層特徵包含了ground truth的所有資訊。從上面我們可以看到,移位後的特徵是ground truth的的合理估計,但它不夠清晰。讓我們看看作者如何利用缺失區域外的特徵來進一步增強缺失區域內的模糊估計。

簡單地說,上面的公式就是尋找缺失區域外與缺失區域內每個解碼特徵最相似的編碼特徵。這是餘弦相似性運算。對於每個編碼特徵,我們找到最相似的解碼特徵,輸出的x*(y)表示匹配的特徵位置的座標,我們可以得到平移向量u_y = x*(y) - y。注意,這個shift操作可以寫成一個卷積層。我將在下一篇文章中詳細討論這個問題。

在得到shift向量後,我們可以重新排列解碼特徵的空間位置然後拼接接到編碼特徵和解碼特徵上,進一步增強我們的估計。空間重排操作如下:

簡單說,對於缺失區域內的每個解碼特徵,在找到缺失區域外最相似的編碼特徵後,我們根據shift向量形成另一組特徵對映。這組特徵對映包含了在缺失區域外到缺失區域內解碼特徵最近的編碼特徵的資訊。然後將所有相關資訊組合在一起,如圖2所示,以便進一步重建。

這裡我想強調一些關於shift連線層的要點。i) 傳統的“複製-貼上”方法操作在畫素或影象的patch域上,而shift連線層操作在深度特徵域。ii)從大量的訓練資料中學習深度特徵,以端到端資料驅動的方式學習所有元件。因此,使用“複製-貼上”和CNN的優點都被繼承了。

損失函式

它們的損失函式是非常標準的。如前所述,除了我們引入的建議的引導損失,他們還使用L1損失標準的對抗損失。總的損失函式為:

λ_g和λ_adv用來控制損失權重的引數,在實驗中,分別設定為 0.01 和 0.002。

如果你熟悉CNN的訓練過程,你可能會注意到Shift操作是一種手動修改特徵圖的操作。因此,我們必須針對特徵第l層的特徵來修改梯度的計算。根據式5,shift特徵和第l層編碼特徵的關係為:

其中P是{0,1}的移位矩陣,P每一行只有一個1的元素。元素1顯示最近鄰居的位置。因此,對於ϕ_l(I)的梯度計算為:

所有這三項都可以直接計算,除了我們必須將shift矩陣的轉置乘以P到最後一項,以確保梯度是正確的反向傳播。

也許,你會發現這部分有點難以理解,因為我們必須修改梯度的計算。如果你不懂這部分,只要能抓住shift操作的核心思想就好了。在這裡,shift操作是一種硬分配。這意味著損失區域中的每個解碼特徵只能有一個在損失區域之外的最近的鄰居。這就是為什麼移位矩陣P是{0,1}的形式,以及為什麼我們必須修改梯度的計算。隨後,提出了類似的shift操作思想,並採用了軟分配。在這種情況下,缺失區域之外的所有鄰居都被賦予權值,以表示與缺失區域內每個解碼特徵的相似度,我們不需要修改梯度的計算,因為這個操作是完全可微的。

實驗

作者在兩個資料集上評估了他們的模型,即Paris StreetViewPlaces365-Standard的六個場景。Paris StreeView包含14900張訓練影象和100張測試影象。對於Places365,有來自365個場景的160萬張訓練影象。選取六個場景進行評價。每個場景有5000張訓練影象,900張測試影象和100張驗證影象。對於這兩個資料集,他們調整每個影象的大小,使最小的維數為350,然後隨機裁剪大小為256×256的子影象作為模型的輸入。

為了進行訓練,他們使用了學習率為0.0002和beta_1 = 0.5的Adam優化器。batch大小設定為1,訓練epochs的總數為30。使用影象翻轉進行資料增強。他們聲稱需要大約一天的時間在Nvidia Titan X Pascal GPU上訓練他們的Shift-Net。

圖4,巴黎街景資料集上修復結果的視覺比較。(a)輸入 (b)內容感知填充(複製貼上法) (c)Context Encoder (d)Multi-scale Neural Patch Synthesis (MNPS) (e) Shift-Net

圖4顯示了Paris StreetView資料集上最先進方法的視覺比較。內容感知填充(圖4(b))是利用複製-貼上概念的傳統方法。你可以看到它提供了很好的區域性紋理細節,但是錯誤的全域性語義結構。圖4 (c)和(d)是Context Encoder和Multi-scale Neural Patch Synthesis的結果。我們前面已經回顧了這兩種方法。你可以看到Context Encoder的結果具有正確的全域性語義結構,但它們是模糊的。MNPS提供了比Context Encoder更好的結果,但我們仍然可以很容易地觀察填充區域的偽影。相比之下,Shift-Net可以提供具有正確的全域性語義結構和精細的區域性紋理細節的修復結果。結果如圖4(e)所示,請放大以便更好地檢視。

圖5,在Places資料集上對比修復結果。(a)輸入 (b)內容感知填充(複製貼上法) (c)Context Encoder (d)Multi-scale Neural Patch Synthesis (MNPS) (e)Shift-Net

圖5顯示了Places資料集上最先進方法的定性比較。請放大以更好地看到區域性的紋理細節。

表1,最先進方法的定量比較

表1列出了Paris StreeView資料集上的一些定量評價指標。顯然,所提出的Shift-Net提供了最好的PSNR, SSIM和平均L2損失。正如我在之前的文章中提到的,這些數字與畫素重建精度有關(客觀評價)。它們不能反映修復結果的視覺質量。

圖6,填充隨機區域的例子。從上到下:輸入、內容感知填充和Shift-Net

圖6顯示了使用內容感知填充和提出的Shift-Net 填充隨機區域的一些例子。Shift-Net能夠以良好的視覺質量處理隨機裁剪的區域。請放大以更好地檢視區域性紋理細節。

消融研究

作者也做了消融研究來證明所提出的導引損失和shift連線層的有效性。

圖7,提出的導引損失在標準U-Net和提出的Shift-Net的影響

圖7顯示了U-Net和Shift-Net在不使用和使用引導損失情況下的修復結果。很明顯,引導損失對於減少視覺artifacts是很有用的。

圖8,不同的λ_g對引導損失的影響

圖8顯示了不同λ_g的Shift-Net的修復結果。可以看出,當λ_g = 0.01時,可以獲得較好的修復效果。因此,他們在實驗中根據經驗設定λ_g = 0.01。

圖9,在不同的L-l層上進行shift操作的效果

圖9顯示了shift操作在不同層上的效果。回想一下,shift操作是在(L-l)層的深度特徵對映上使用第L層的特徵進行的。當l較小時,feature map的尺寸較大,因此在這一層進行shift操作的計算成本較高。當l較大時,feature map的尺寸較小,因此隨著空間大小的減小,時間成本較低,但丟失的空間資訊較多。這也可能導致修復效果不佳。在圖9中,我們可以看到L-3 (c)和L-2 (d)的修復效果都很好(可能L-2要好一點)。請注意,L-2處理一個影象大約需要400毫秒,而L-3處理一個影象大約需要80毫秒。因此,為了平衡時間成本和效能,作者決定在(L-3)層進行shift操作。

圖10,歸零的影響

回想一下圖2中Shift-Net的架構,在shift連線層之後拼接了3個不同的特徵對映,分別是編碼層特徵,解碼層特徵以及移位特徵。作者試圖檢查這些特徵圖對最終重建的重要性,結果如圖10所示。很明顯,解碼層的特徵對於最終的重構是非常重要的。如果我們將這個解碼後的特徵歸零,重構將完全失敗,如圖10 (b)所示。因此,我們可以知道解碼後的特徵包含了缺失區域的主要結構和內容的資訊。

圖10 (c)顯示了刪除編碼特徵的結果。我們可以看到,主體結構仍然可以重建,但視覺質量差比完整的模型,如圖10所示(e)。

最後,如果我們去掉圖10 (d)所示的shift連線特徵,填充的缺失區域有明顯的偽影。因此,我們可以到shift連線特徵對於細化填充的缺失區域非常有用,它提供缺失區域外最近鄰居搜尋的結果作為細化的參考。

圖11,從上到下,基於隨機shift連線和最近鄰搜尋的Shift-Net修復結果

為了進一步展示shift連線特徵有效性,作者比較了隨機移位連線和最近鄰居搜尋,如圖11所示。我們可以看到,與最近鄰搜尋相比,隨機shift連線並不能改善修復結果以獲得更好的全域性語義結構一致性。因此,我們可以說正確的shift操作對於獲得良好的視覺修復效果是很重要的。

結論shift-connection層的使用,我認為最重要的觀點是,我們提供一個缺失區域內的參考生成特徵(假設生成的特徵很好估計缺失區域),作為可以進一步完善這些生成的特徵的基礎,這個參考特徵是來自於非缺失區域的最相似的地方。因此,我們可以借用非缺失區域的特徵結構和紋理來細化缺失區域的特徵。

其他要注意的點

對於有興趣的讀者,這裡還有三點需要進一步研究。首先,你可能對特徵對映中的mask區域的定義感興趣。實際上,我們只有輸入mask影象。因此,特徵對映的mask必須被定義。簡單地說,作者使用一個與編碼器結構相同的簡單CNN來獲取網路內部的mask區域。利用簡單的卷積和閾值技術得到特徵對映中的掩碼區域。我在這裡不做詳細介紹,因為我們將很快介紹一種可學習的方法來獲取網路內的mask!

其次,介紹了生成器和判別器的詳細結構。在之前的文章中已經介紹過,我們有一個標準的影象修復網路設計,本文的網路也是相當標準的。他們使用帶shift的連線層的U-Net作為生成器,他們的判別器就是我們前面討論過的PatchGAN判別器

第三,在文章中可以找到更多關於Paris StreetView和Places資料集的比較。你可以看看,關於今天的深度影象修復演算法的視覺質量,你會有一個大致的概念。

總結

本文主要有兩個重點。首先,所提出的導引損失鼓勵缺失區域的解碼特徵(給定輸入mask影象)接近缺失區域的編碼特徵(給定的ground truth)。因此,解碼過程應該能夠在合理估計ground truth中缺失區域的情況下填補缺失區域。其次,採用shift操作的shift連線層可以有效地借用缺失區域外最相似區域的資訊,進一步增強全域性語義結構和區域性紋理細節。

要點

這篇文章可能對你們有些人來說有點超前。我認為本文最重要的思想是shift操作,它可以看作是一種應用於影象修復任務中的注意力技術。

簡單的說,shift操作允許所生成的缺失區域的特徵借用缺失區域外最相似的特徵的資訊。缺失區域外的特徵具有良好的全域性語義結構和精細的區域性紋理細節,可以作為參考對生成的特徵進行細化。我希望你們能理解這個主要思想。


END

英文原文:https://towardsdatascience.com/how-copy-and-paste-is-embedded-in-cnns-for-image-inpainting-review-shift-net-image-433a2a93c963

請長按或掃描二維碼關注本公眾號


喜歡的話,請給我個在看吧


本文分享自微信公眾號 - AI公園(AI_Paradise)。
如有侵權,請聯絡 [email protected] 刪除。
本文參與“OSC源創計劃”,歡迎正在閱讀的你也加入,一起分享。