1. 摘要
現有的基於深度學習的圖像修補方法在損壞的圖像上使用標准卷積網絡,使用卷積濾波器響應以有效像素以及掩蔽孔中的替代值(通常為平均值)為條件。 這通常會導致諸如顏色差異和模糊等偽影。 后處理通常用於減少這些工件,但代價很高,可能會失敗。 我們提出使用部分卷積,部分卷積指的是卷積只在圖片的有效區域進行(mask部分為0),並且圖片的mask會隨着網絡的層數加深不斷迭代和收縮,也就是說帶有mask的圖片和mask均參與訓練,取得了很好的效果。
圖. 從左到右,從上到下:2(a):帶孔的圖像。 2(b):PatchMatch [3]的修復結果。 2(c):Iizuka等人的修改結果[1]。 2(d):余等人[2]。 2(e)和2(f)使用與3.2節相同的網絡架構,但使用典型的卷積網絡,2(e)使用像素值127.5初始化空洞。 2(f)使用平均ImageNet像素值。 2(g):我們基於部分卷積的結果與孔值無關。
2. 已有方法介紹
2.1 傳統方法:
- PatchMatch:基於圖片統計信息,迭代搜索最適合補全的patch,補全的結果也比較平滑。但是單張圖片的統計信息往往比較受限制,並且這個算法不包括視覺語義。
2.2 基於深度網絡的方法
目前由於圖片中孔的大小不同會帶來不同的補全偽影,所以現在的方法都會在網絡預測之后再加上后處理過程:
- Globally and locally consistent image completion:使用encoder-decoder結構生成圖片(encoder-decoder使用CNN),在訓練階段使用全局判別器(整張圖片)和局部判別器(mask區域)對生成結果進行評價。后處理將補全區域的邊緣與周圍像素混合,采用Fast Marching和Poisson Image Editing。
- Generative image inpainting with contextual attention:基本思路和上一篇的文章相同,只是在生成圖片的時候分為兩個階段,一階段網絡進行粗略預測,采用reconstruction loss;二階段網絡進行精細預測,采用reconstruction loss和GAN losses。直觀地說,精細網絡比缺少區域的原始圖像擁有更完整的場景,所以它的編碼器可以比粗網絡學習更好的特征表示。此外引入attention機制,加入contextual attention layer(加在二階段),因為卷積神經網絡逐層地處理具有局部卷積核的圖像特征,所以對於從遠處空間位置獲取特征沒有效果。后處理階段實際為二階段網絡。
- masked and re-normalization convolution的概念來自於Segmentation-aware convolutional networks using local attention masks,但是這篇文章沒有執行更新mask的操作。
3. 相關工作
傳統方法,基於鄰近像素,只能解決小mask的問題,並且mask區域的像素需要和周圍像素差不多:
- Image inpainting
- Filling-in by joint interpolation of vector fields and gray levels
- Patch based methods,在當前圖像或者其他圖像中搜索相似的patch來進行補全,但是計算量很大:
- Image quilting for texture synthesis and transfer
- Texture optimization for examplebased synthesis
基於深度學習的圖像補全方法:
- Context encoders: Feature learning by inpainting:對於128x128的帶有64x64中心mask的圖片先編碼到低維特征空間,再解碼成64x64大小的圖片。
- High-resolution image inpainting using multi-scale neural patch synthesis:將上一篇文章的結果作為輸入,將紋理信息從非mask區域傳播到mask區域。
- Contextual-based Image Inpainting: Infer, Match, and Translate:將mask區域作模糊填充得到的圖片作為網絡輸入,然后迭代,用特征空間中距離最近的非mask區域的patch逐漸代替模糊填充的mask
- Semantic Image Inpainting with Deep Generative Models:在潛在空間中尋找帶有mask圖片的最接近的編碼,以此來限制mask區域的輸出。
- Deep Image Prior:僅僅依靠生成模型的結構就可以復原原始圖片,但是對於不同的圖片需要不同的參數。這篇文章提出的模型無法使用skip links(U-net),skip links可以用於生成很好的細節信息。
和本文相似的一些做法:
- Conditional Image Generation with PixelCNN Decoders:合成圖片,通過之前合成的像素來限制下一個像素的合成。
- Normalized and Differential Convolution:主要介紹標准化卷積,Partial Convolutions可以認為是Normalized Convolution的一種特殊情況。
本文的主要貢獻在於:使用PConv對於帶有mask的圖像進行操作,因為PConv可以對於mask的周圍區域進行預測,換句話說在一層PConv中,mask的周圍可以產生一些有效值。基於所產生的有效值可以對於mask進行收縮,在進入decoder階段之前,只要網絡深度足夠,mask區域大小可以收縮到0。加入mask update僅僅是為了標記哪些值是有效的(因為輸入的圖片大小和mask大小是一樣的,卷積核大小也是一樣的,唯一不同是:圖片的卷積核會不斷更新,mask的卷積核永遠為1)。
4. 本文提出的方法
我們提出的模型使用堆疊的部分卷積運算和掩膜更新步驟來執行圖像修復。我們首先定義我們的卷積和掩膜更新機制,然后討論模型架構和損失函數。
4.1 部分卷積層
為簡潔起見,我們將部分卷積運算和掩膜更新函數聯合稱為部分卷積層。
設W是卷積濾波器的權重,b是相應的偏差。 X是當前卷積(滑動)窗口的特征值(像素值),M是相應的二進制掩膜。每個位置的部分卷積被表示為:
其中⊙表示單元乘法。 可以看出,輸出值僅取決於非屏蔽輸入。 比例因子1/sum(M)應用適當的縮放比例來調整有效(未屏蔽)輸入的變化量。
在每次部分卷積操作之后,我們將更新我們的掩膜。 我們的屏蔽規則很簡單:如果卷積能夠在至少一個有效輸入值上調整其輸出,則我們移除該位置的掩膜。 這表示為:
並且可以在任何深度學習框架中輕松實施,作為正向傳球的一部分。在部分卷積層有足夠的連續應用的情況下,如果輸入包含任何有效像素,則任何掩膜將最終全部為1。
4.2 網絡結構
網絡結構類似於U-net,encoder階段使用ReLU,decoder階段用LeakyReLU,alpha=0.2。BN用在除了第一層encoder和最后一層decoder之外的所有層。
部分卷積作為填充,當圖像邊界附近時,我們不使用任何現有的填充方案來卷積。相反,部分卷積層直接通過適當的掩膜處理。這將進一步確保圖像邊界上的修復內容不會受到圖像外部無效值的影響,這可以解釋為另一個漏洞。
4.3 損失函數
$I_{in}$: 帶有mask的圖片(需要補全的圖片)
$I_{out}$:網絡預測輸出的圖片
M:二值mask(有洞區域是0)
$I {gt}$:Ground Truth
$I{comp}$:將預測圖片沒有洞區域的像素替換為GT之后的圖片
$Ψ_n$:預訓練模型(VGG16)第n層激活后的特征圖,文章選的是三個pooling層
$K_n$:系數,等於1/(Cn∗Hn∗Wn)1/(C_nH_nW_n)1/(C
Pixel Loss:
Perceptual Loss:
Style Loss:
Total Variation Loss:
這里P是有洞區域。
Style Loss很重要,有助於解決魚鱗紋和棋盤格噪聲,權重不能太小,但是權重太大的話會損失高頻信息。
去除棋盤偽影和魚鱗偽影 已知感知丟失[28]會產生棋盤偽影。 Johnson等人[28]建議通過使用總變差(TV)損失來改善問題。我們發現這不是我們模型的情況。圖3(b)顯示了移除Style Loss而訓練的模型的結果。對於我們的模型,額外的樣式損失項是必要的。然而,並非所有的風格損失的權重計划都會產生合理的結果。圖3(f)顯示了用小的損失權重訓練的模型的結果。與圖3(g)中完整Loss訓練模型的結果相比,它具有許多魚鱗偽影或塊狀棋盤偽影。最終,風格損失的權重太大會導致高頻信息的丟失。我們希望這個討論會對那些有興趣使用基於VGG的高層次損失的讀者有所幫助。
5. 實驗
5.1不規則掩膜數據集
先前的作品通過隨機移除圖像中的矩形區域在其數據集中生成空洞。我們認為這不足以創造我們需要的不同孔洞形狀和大小。因此,我們首先收集隨機條紋和任意形狀的孔的蒙版。我們發現在[29]中描述的視頻的兩個連續幀之間的遮擋/遮擋遮罩估計方法的結果是這樣的圖案的良好來源。我們為訓練產生了55116個掩膜,並為測試產生了24866個掩膜。在訓練期間,我們通過從55116個掩膜中隨機采樣一個掩膜並隨后進行隨機擴張,旋轉和裁剪來增加掩膜數據集。所有用於訓練和測試的掩膜和圖像尺寸為512×512。
我們從24866個掩膜開始並添加隨機擴張,旋轉和裁剪來創建測試集。許多先前的方法如[1]在圖像邊界附近的孔處的性能下降。因此,我們將測試集分為兩個:帶有和不帶有孔的邊界的邊界。具有遠離邊界的孔的分割確保距離邊界至少50個像素的距離。
我們還根據孔的大小進一步分類我們的口罩。具體而言,我們生成了6種不同孔 - 圖面積比的掩膜:(0.01,0.1],(0.1,0.2],(0.2,0.3],(0.3,0.4],(0.4,0.5],(0.5 ,0.6],每個類別包含1000個帶和不帶邊界約束的掩膜,總共創建了6 * 2 * 1000 = 12,000個掩膜,每個類別掩膜的一些例子可以在圖4中找到。
5.2 訓練方法
TODO
5.3 評價指標
TODO
6. 討論和擴展
6.1 討論
我們建議使用具有自動掩膜更新機制的部分卷積層並實現最新的圖像修復結果。我們的模型可以穩健地處理任何形狀,大小的位置或與圖像邊界的距離。此外,如圖10所示,我們的性能不會隨着孔的大小增加而發生災難性的惡化。然而,我們的方法的一個局限性在於,它對於一些結構疏松的圖像(例如圖11中的門上的條)大多數方法,在最大的孔上掙扎。
6.2 圖像超分辨率的擴展
我們還通過偏移像素和插入圖像將我們的框架擴展到圖像超分辨率任務。具體來說,給定具有高度H和寬度W以及放大系數K的低分辨率圖像I,我們使用以下方式構造具有高度K * H和寬度K * W的輸入I':對於I中每個像素(x, y),我們把它放在I'中的(K * x +⌊K/2⌋,K * y +⌊K/2⌋),並將該位置標記為掩膜值為1.一個示例輸入設置和相應的輸出K = 4可以在圖12中找到。我們比較圖13中K = 4的兩種眾所周知的圖像超分辨率方法SRGAN [37]和MDSR + [38]。