1. 程式人生 > >CVPR2018: Generative Image Inpainting with Contextual Attention 論文翻譯、解讀

CVPR2018: Generative Image Inpainting with Contextual Attention 論文翻譯、解讀

注:博主是大四學生,翻譯水平可能比不上研究人員的水平,博主會盡自己的力量為大家翻譯這篇論文。翻譯結果僅供參考,提供思路,翻譯不足的地方博主會標註出來,請大家參照原文,請大家多多關照。

未經允許,嚴禁轉載。

0. 譯者序

  題目翻譯:基於內容感知生成模型的影象修復

  介紹:這篇文章也被稱作deepfill v1,作者的後續工作 "Free-Form Image Inpainting with Gated Convolution" 也被稱為deepfill v2。兩者最主要的區別是,v2支援任意形狀的mask(標記影象待修復區域的罩子),且支援標記黑線來指定修復的大致形狀。

相關資料:

  近期在做有關影象修復的工作,正好看到CVPR2018上這篇Jiahui Yu(餘家輝)大牛的著作deepfill v1,在此基礎上作者與其導師Thomas S.Huang(黃煦濤,計算機視覺之父)等人釋出了deepfill v2 。本博文只關注deepfill v1,今後會更新deepfill v2的翻譯解讀。

引言 Abstract

  近期的基於深度學習的影象修復方法展現了很大的潛力,這些方法都能生成看似合理的影象結構及紋理,但在修復區域的邊界,經常會生成扭曲的結構和模糊的影象,這是因為卷積神經網路無法從影象較遠的區域提取資訊導致的。不過,傳統的紋理和斑塊(patch)的修復能取得比較好的效果(因為他們只需要從周圍區域借鑑影象)。

  作者基於上述這些現象,提出了一種新的基於深度生成模型的方法,不僅可以生成新的影象結構,還能夠很好地利用周圍的影象特徵作為參考,從而做出更好的預測。

  該模型是一個前饋全卷積神經網路,可以處理包含多個缺失區域的影象,且在修復影象的時候,輸入的影象大小沒有限制。作者在人臉影象、自然影象、紋理影象等測試集上,都產生了比現在已有的方法更好的效果。

1. 介紹 Introduction

  影象修復(填補缺失畫素值)在計算機視覺領域是一項很重要的研究工作。其核心挑戰就是能夠綜合現實情況(realistic)和影象的語義(semantic),來修補缺失的影象。

  早期的影象修復原理,都類似於紋理的合成,通過匹配(match)和複製(copy)背景的斑塊來填補缺失的影象。這些方法在背景修復(background inpainting)任務上都有著比較好的結果,但他們無法修復一些比較複雜的,不可重複的影象結構(類似於人臉、物體)。更多地,這些方法不能捕捉到影象的高維特徵(high-level semantics)。

  近期基於深度卷積網路和GAN(生成對抗網路)的影象修復方法,其原理都是通過自編碼器,結合對抗網路訓練的方式,來讓生成的影象和存在的影象保持一致性。

  可惜的是,這些基於CNN的方法,通常都會在邊界生成扭曲的結構和模糊的紋理。作者發現是因為卷積神經網路無法很好地提取遠距離的影象內容(distant contextual information)和不規則區域的影象內容(hole regions)。

  舉例來說,一個畫素點的內容被64個畫素點以外的內容影響,那麼他至少要使用6層3x3的卷積核才能夠有這麼大的感受野(receptive filed)。而且由於這個感受野的形狀是非常標準且對稱的矩形(regular and symmetric grid),所以在不規則的一些影象內容上,無法很好地給對應特徵分配正確的權值。

  近期的一項研究基於生成斑塊和匹配斑塊的相似性優化問題(optimize problem),能夠提高效果,但由於是基於優化問題,需要非常多次的梯度下降迭代,以及處理一張512x512的影象需要很長的時間。

  作者提出了一個帶有內容感知層(contextual attention layer)的前饋生成網路,這個網路的訓練分為兩個階段。第一階段是一個簡單的卷積網路,通過不斷修復缺失區域來產生損失值reconstruction loss,修復出的是一個比較模糊的結果。第二階段是內容感知層的訓練,其核心思想是:使用已知影象斑塊的特徵作為卷積核來加工生成出來的斑塊,來精細化這個模糊的修復結果。它是這樣來設計和實現的:用卷積的方法,來從已知的影象內容中匹配相似的斑塊,通過在全通道上做softmax來找出最像待修補區域的斑塊,然後使用這個區域的資訊做反捲積(deconvolution)從而來重建該修補區域。

(譯者注:這裡的思想應該是,假設我有一個待修補區域x,我要通過卷積的方法,從整個影象出匹配出幾個像x的區域a, b, c, d,然後從a, b, c, d中使用softmax的方法挑選出最像x的那個區域,然後通過反捲積的方式,來生成x區域的影象。)

  這個內容感知模組,還有著空間傳播層(spatial propagation layer)來提高感知的空間一致性。

  為了讓網路能“想象”(hallucinate)出新的影象內容,有著另一條卷積通路(convolutional pathway),這條通路和內容感知卷積通路是平行的。這兩個通路最終聚合並送入一個解碼器來產生最後的輸出。第二階段的網路通過兩個損失值來訓練(重建損失值 reconstruction losses 和兩個WGAN-GP損失(Wasserstein GAN losses),其中一個WGAN來觀察全域性影象,另一個WGAN來觀察區域性生成出的影象。

網路架構如下圖:

 圖1

作者的主要貢獻總結如下:

  • 作者提出了一種全新的內容感知層(contextual attention layer)來從距離遙遠的區域提取近似待修復區域的特徵。
  • 介紹了幾種技術(影象修復網路增強、全域性和區域性的WGANs、空間衰減的重建損失(spatially discounted reconstruction loss, 會在下文中講到)來提高訓練的穩定性和速度,上述這些方法都基於最近的影象修復生成網路。最終,作者能夠在一週內訓練出該網路而不是兩個月。(據譯者在github issue裡看到,作者使用的是一個GTX1080Ti進行訓練)
  • 作者的前饋生成網路在眾多具有挑戰的資料集(例如CelebA、CelebA-HQ、DTD textures、ImageNet、Places2)實現了高質量的影象修復結果

2. 相關研究 Related Work

2.1 影象修復 Image Inpainting

  現有的影象修復技術分為兩個流派,一個是傳統演算法,其基於擴散(diffusion)或斑塊(patch-based),只能提取出低維特徵(low-level features)。另一個是基於學習的演算法,比如訓練深度卷積神經網路來預測畫素值。

  傳統的擴散或斑塊演算法,通常使用變分演算法(variational algorithms)或斑塊相似性來將影象資訊從背景區域傳播到缺失區域內,這些演算法在靜態紋理(stationary textures)比較適用,但在處理一些非靜態紋理(non-stationary textures)比如自然景觀就不行了。

  Simakov等人提出的基於雙向斑塊相似性的方法(bidirectional patch similarity-based scheme)可以更好地模擬非靜態紋理,但計算量十分巨大,無法投入使用。

  最近,深度學習和基於GAN的方法在影象修復領域很有前途,初始的研究是將卷積網路用於影象去噪、小區域的影象修復。內容編碼器(Context Encoder)首先被用於訓練大面積影象修復的深度神經網路。它使用GAN的損失值加上2-範數(MSE)作為重建損失值(reconstruction loss)來作為目標函式。

  更進一步的研究,比如Iizuka等人提出了利用全域性和區域性的判別器(Discriminator)來作為GAN的對抗損失,全域性判別器用於判定整幅影象的語義一致性,區域性判別器專注於小塊生成區域的語義,以此來保證修復出的影象的高度一致性。

  此外,Iizuka等人還使用了擴展卷積(dialated convolutions)的方式來替代內容編碼器的全連線層,這兩種方法的目標都是為了提高輸出神經元(output neurons)的感受野的大小。

  與此同時,還有多項研究專注於人臉的影象生成修復。例如Yeh等人通過在缺失區域的周圍尋找一種編碼,來嘗試解碼來獲得完整的影象。Li等人引入了額外的人臉完整度作為損失值來訓練網路。然而這些方法通常都需要影象的後續處理,來修復缺失區域邊界上的色彩一致性(color coherency)。

2.2 感知模型 Attention Modeling

(譯者注:感知模型在參考資料裡有)

  關於深度卷積網路中的空間感知問題有著很多的研究。在這裡,作者回顧了幾個具有代表性的內容感知模型。

  首先是Jaderberg等人提出的STN(spatial transformer network),用來進行目標分類任務。由於整個網路專注於全域性遷移問題(global transformation),所以在斑塊大小的問題上不合適,不能用於影象修復。

  第二個是Zhou等人的表徵擴散(appearance flow),就是從輸入的影象中查詢哪些畫素點應該被移動到待修復區域,這種方法適合在多個同樣的物體之間進行影象修復。但從背景區域還原前景效果不是很好(譯者注:可能是因為找不到哪些畫素點可以flow到前景)

  第三個是Dai等人提出的空間感知卷積核的學習和啟用。

  這些方法都不能很好地從背景中提取有效的特徵。

3. 改進影象修復的生成網路 Improved Generative Inpainting Network

(譯者注:為了不讓讀者讀懵了,譯者在這裡說明一下接下來的論文結構。作者在第三部分改進了Iizuka等人提出的影象修復網路,在第四部分將內容感知層加入這個修復網路,從而構建出完整的影象修復網路)

  作者通過復現近期的影象修復模型(其實就是上文中提到的用全域性和區域性Discriminator的Iizuka的方案),以及做出多種提升方法來構建生成模型。Iizuka的模型在人臉影象、建築影象、自然影象都能有較好的結果。

1) 粗細網路 Coarse-to-fine network architecture

網路結構如下圖(其實就是上文中網路結構的簡化版):

圖2

  整個網路的輸入和輸出和Iizuka的網路設定是一樣的,也就是說,生成網路的輸入是一張帶有白色mask的影象,以及一個用於表示mask區域的二進位制串,輸出是一張完整的影象。作者配對(pair)了輸入的影象和對應的二進位制mask,這樣就可以處理任意大小、任意位置、任意形狀的mask了。

  網路的輸入是帶有隨機矩形缺失區域的256x256影象,訓練後的模型可以接受包含多個孔洞的任意大小的影象。

  在影象修復任務中,感受野的大小決定了修復的質量,Iizuka等人通過使用擴張卷積(dilated convolution)來增大感受野,為了進一步增大感受野,作者提出了粗細網路的概念。

(譯者注:這裡擴張卷積的意思就是,通過比較小的卷積核,用多層卷積來增大感受野,在下文中會反覆提到。)

  粗網路(Coarse network)僅僅使用使用重構損失進行訓練,而細網路(Refinement network)使用重構損失+兩個GAN損失進行訓練。

  直觀上,細網路比帶有缺失區域的影象看到的場景更完整(譯者注:因為粗網路已經修復了一部分),因此編碼器比粗網路能更好地學習特徵表示。這種二階段(two-stage)的網路架構類似於殘差學習(residual learning)或是深度監督機制(deep supervision)。

  為了提高網路的訓練效率以及減少引數的數量,作者使用了窄而深(thin and deep)的網路,在layer的實現方面,作者對所有layer的邊界使用了映象填充(mirror padding)移除了批歸一化(batch normalization),原因是作者發現批歸一化會降低修復的影象色彩的一致性。此外,作者使用了ELUs來替代ReLU,通過對輸出卷積核的值的裁剪(clip the output filter values)來替代啟用函式tanh或是sigmoid。另外,作者發現將全域性和區域性的特徵表示分開,而不是合併到一起(Iizuka的網絡合併到一起了),能夠更好地對GAN進行訓練。

2) 全域性和區域性的WGAN Global and local Wasserstein GANs

  不同於先前的使用DCGAN進行影象修復,作者提出了WGAN-GP的修改版本。通過在第二階段結合全域性和區域性的WGAN-GP損失來增強全域性和區域性的一致性(這一點是受Iizuka網路的啟發)。WGAN-GP損失是目前已有的用於影象生成的GAN中表現最好的損失值(使用1-範數重建損失,表現的會更好)。

(譯者注:以下是公式證明推導來說明WGAN損失的有效性,譯者的數學水平不夠,請大家見諒,詳細推導請參照原文)

  更精確的說,WGAN使用了Earth-Mover距離來比較生成影象和真實影象的分佈。它的目標函式應用了Kantorovich-Rubinstein duality……

3) 空間衰減重構損失 Spatially discounted reconstruction loss

  對於影象修復問題,一個缺失區域可能會有多種可行的修復結果。一個可行的修復結果可能會和原始影象差距很大,如果使用原始影象作為唯一的參照標準(ground truth),計算重構損失(reconstruction loss)時就會誤導卷積網路的訓練過程

  直觀上來說,在缺失區域的邊界上修復的結果的歧義性(ambiguity),要遠小於中心區域(譯者注:這裡的意思是邊界區域的取值範圍要比中心區域小)。這與強化學習中的問題類似。當長期獎勵(long-term rewards)有著很大的取值範圍時,人們在取樣軌跡(sampled trajectories)上使用隨著時間衰減的獎勵(譯者注:隨著時間的流逝,網路得到的獎勵會越來越小)

  受這一點的啟發,作者提出了空間衰減重構損失。

 (譯者注:隨著畫素點越靠近中心位置,權重越來越小,以此來減小中心區域的權值,使計算損失值時,不會因為中心結果和原始影象差距過大,從而誤導訓練過程)

  具體的做法是使用一個帶有權值的mask M,在M上,每一點的權值由γl來計算,其中γ被設定為0.99,l是該點到最近的已知畫素點的距離(1-範數,即城市街區距離)。

近似的權重衰減方法在其他人的研究中也被提到了(例如Pathak等人的研究),在修復大面積缺失區域的時候,這種帶衰減的損失值在提高修復質量上將更有效。

  通過上述提升的方法,作者的生成修復網路有著比Iizuka的網路更快的收斂速度,結果也更精確。此外也不需要影象的後續處理了。

4. 使用內容感知進行影象修復 Image Inpainting with Contextual Attention

  卷積神經網路通過一層層的卷積核,很難從遠處區域提取影象特徵,為了克服這一限制。作者考慮了感知機制(attention mechanism)以及提出了內容感知層(contextual attention layer)。在這一部分,作者首先討論內容感知層的細節,然後說明如何將它融入生成修復網路中。

4.1 內容感知 Contextual Attention

  內容感知層學習的內容是,從已知影象的何處借鑑特徵資訊,以此來生成缺失的斑塊。

(譯者注:這一部分譯者在第一部分Introduction裡就有簡單的說明,如果沒有概念的讀者可以倒回去看一看)

  由於這個layer是可微的(differentiable),所以可以在深度模型和全卷積網路中進行訓練,允許在任意解析度的影象上進行測試。

圖3

1) 匹配及選取 Match and attend

  作者想解決的問題是:在背景區域中匹配缺失區域的特徵

  作者首先在背景區域提取3x3的斑塊,並作為卷積核。為了匹配前景(即待修復區域)斑塊,使用標準化內積(餘弦相似度)來測量,然後用softmax來為每個背景斑塊計算權值,最後選取出一個最好的斑塊,並反捲積出前景區域。對於反捲積過程中的重疊區域(overlapped pixels)取平均值。

  對於這個匹配出的背景斑塊視覺化:

圖4

2) 感知傳播 Attention propagation

(譯者注:這一部分譯者不是很明白其原理,各位讀者可參照原文)

  為了進一步保持影象的一致性,作者使用了感知傳播。思想是對前景區域做偏移,可能對應和背景區域做相同的偏移,實現方式是使用單位矩陣作為卷積核,從而做到對影象的偏移。作者先做了左右傳播,然後再做上下傳播。從而得到新的感知分數(attention score)

  該方法有效的提高了修復的結果,以及在訓練過程中提供了更豐富的梯度。

3) 視訊記憶體效率 Memory efficiency

  假設在128x128的影象中有個64x64的缺失區域作為輸入,那麼從背景區域提取出的卷積核個數是12288個(3x3大小)。這可能會超過GPU的視訊記憶體限制。

  為了克服這一問題,作者介紹兩種方法:1)在提取背景斑塊時新增步長引數來減少提取的卷積核個數;2)在卷積前降低前景區域(缺失區域)的解析度,然後在感知傳播後提高感知圖(attention map)的大小。

4.2 合併修復網路 Unified Inpainting Network

  為了將感知模組整合到修復模型中,作者提出了兩個平行的編碼器(見圖4).

  下面的那個編碼器通過擴張卷積(dilated convolution)來“想象”缺失區域的內容。

  上面的那個編碼器則專注於提取感興趣的背景區域。

  兩個編碼器的輸出被聚合輸入到一個解碼器中,反捲積生成出最後的影象。

  在圖4中,作者使用了顏色來指出最感興趣的背景區域的相關位置。比如說,白色區域(彩色圖的中心)意味著該區域的畫素依賴於自己、左下角的粉色、右上角的綠色。對於不同的影象,偏移值也會跟著縮放,以此來更好地標記出感興趣的區域(interested background patch)。

(譯者注:這裡用顏色圖(color map)來視覺化感知圖(attention map)的概念譯者不是很明白,讀者可以參考原文)

  對於訓練過程,可以用以下演算法來表示:

當G還沒有收斂時:

  以下步驟迴圈5次:

    從訓練集中提取影象x

    生成隨機的mask m

    使用x和m生成帶有缺失區域的影象z

    將z和m輸入生成網路G中,獲取修復後的缺失區域影象~x

    通過空間衰減重構損失的maskM,對~x做一個權值處理,然後覆蓋原影象的這個區域,得到影象^x(這一步譯者不確定)

    使用x、~x、^x計算全域性、區域性損失值(這一步譯者不確定)

  迴圈結束

  從訓練集中提取影象x

  生成隨機的mask m

  計算空間衰減重構損失、全域性和區域性的WGAN-GP損失,來更新生成網路G的權值。

結束迴圈。

5. 實驗 Experiments

(譯者注:這裡實驗可以直接參照參考資料中的餘家輝官方的demo,譯者後續會給出翻譯)

6. 總結 Conclusion

  作者提出了粗細網路影象生成修復的框架(coarse-to-fine generative image inpainting framework),並介紹了帶有內容感知的模型。作者展示了內容感知模型在提高影象修復結果上,有著很大的意義(通過對背景特徵的匹配、提取這一過程的學習)。在今後的研究中,作者基於GAN的不斷髮展,計劃將該方法擴充套件到更高解析度的影象修復應用中。影象修復框架和內容感知模組也可以用於帶有條件的影象生成、影象編輯、計算攝影任務中(例如影象渲染、超高解析度影象、指導編輯(guided editing),以及其他種種應用。

其他

 D. 網路架構 Network Architectures

  這裡是論文第三部分的附錄,提供了網路的更多細節。

  以下的表示方法:K(卷積核大小,kernel size)、D(卷積核擴張量,dilation)、S(卷積步長,stride size)、C(通道數,channel number)。