一個實用的生成式深度圖像修復方法

作者:Chu-Tak Li 編譯:ronghuaiyang

導讀

使用門控捲積的自由掩碼的圖像修復方法。

源碼:https://github.com/JiahuiYu/generative_inpainting

圖 1,一些自由形式的修復結果,使用 DeepFill v2。注意,用戶草圖輸入是允許交互式編輯的

今天,我們將深入研究一種非常實用的生成式深度圖像修復方法,名爲 DeepFill v2。以前我在文章中提到過,這篇文章可以被視爲一個增強版的 DeepFill v1,Partial Convolution 和 EdgeConnect。簡單地說,DeepFill v1 中提出的上下文注意力 (CA) 層和 EdgeConnect 中引入的用戶引導 (可選用戶草圖輸入) 概念嵌入到了 DeepFill v2 中。此外,部分卷積 (PConv) 被修改爲門控捲積(GConv),其中基於規則的掩碼更新爲一個到下一個卷積層的可學習的門控。有了這些想法,DeepFill v2 實現了高質量的自由形式的修復,比以前的最先進的方法更好。圖 1 顯示了使用 DeepFill v2 的一些自由形式的修復結果。讓我們看看他們是如何結合所有的技術來達到最先進的水平的。

動機

回想一下,部分卷積 (PConv)提出了分離有效和無效的像素,這樣卷積結果只依賴於有效像素和邊緣生成器提出了估計失蹤區域內部的骨架 (s) 作爲用戶指導,爲了進一步提高修復性能,本文的作者想要將這些技術與他們的上下文注意力層結合進一步加強修復的結果。

首先,PConv 使用基於規則的掩碼更新來分離有效和無效像素。基於規則的掩碼更新是手工製作且不可學習的。由於 PConv 是不可學習的,因此提高它的最直接的方法是使它可學習。

其次,以往的方法通常是將掩碼圖像和掩碼圖像輸入到生成網絡進行補全。如果我們也允許用戶草圖輸入作爲任務的附加條件呢?生成器是否知道如何區分用戶草圖輸入和掩碼圖像輸入?門控捲積,PConv 的一個可學習版本可以做到!

介紹

再一次,我假設讀者已經從我以前的文章中對深度圖像修復有了基本的瞭解。實際上,DeepFill v2 使用的網絡架構和損失函數在前面已經介紹過了。在這篇文章中,我將簡要地介紹那些我認爲不太重要的內容,感興趣的讀者可以自己查閱論文了解更多細節。所以,我們可以留更多的時間來介紹最重要的思想,門控捲積

網絡體系結構。本文 (DeepFill v2) 是他們之前工作 (DeepFill v1) 的改進版本。所以,網絡結構非常相似,除了用提出的門控捲積代替了標準卷積。請注意,DeepFill v1 最重要的思想是上下文注意力 (CA) 層,它允許生成器使用由遙遠的空間位置給出的信息來重建局部丟失的像素。因此,DeepFill v2 也遵循了由粗到細兩階段的網絡結構。第一個生成器網絡負責粗重建,第二個生成器網絡負責粗填充圖像的細化。

損失函數。有趣的是,只用了兩個最標準的損失項來訓練網絡,即 L1 損失項和 GAN 損失項。這是這篇論文的主張之一,因爲其他最先進的修復論文使用多達 5-6 個損失項來訓練他們的網絡。我很快就會討論在這篇論文中使用的 GAN 損耗。

方案

爲了進一步改進處理不規則掩模的部分卷積,本文作者提出了部分卷積的一種可學習版本。除了門控捲積外,允許可選用戶草圖輸入,增強了所提模型的交互編輯能力。最後,類似於我在上一篇文章中介紹的 EdgeConnect, Spectral Normalization (SN) 應用於鑑別器以穩定訓練過程。

方法

圖 2,自由圖像修復模型的網絡結構概要

圖 2 顯示了 DeepFill v2 的網絡架構。如你所見,這是一個帶有門控捲積的由粗到細的兩階段網絡。粗生成器以掩碼後的圖像、掩碼圖像和可選的用戶草圖圖像作爲輸入,用於對缺失區域進行粗重建。然後,將粗填充後的圖像傳遞到第二個細化生成網絡進行細化。注意,DeepFill v1 中提出的上下文注意力 (CA) 層被用於該細分網絡。

對於鑑別器,本文作者採用著名的 PatchGAN 結構。我們之前也提到過 PatchGAN 的想法。除了使用 PatchGAN,爲了訓練穩定性,作者還對鑑別器的每個標準卷積層應用 Spectral Normalization (SN)。

門控捲積

圖 3,部分卷積 (左) 和門控捲積 (右) 的圖解

圖 3 顯示了部分卷積和建議的門控捲積之間的區別。簡單地說,使用一個標準的卷積層和一個 sigmoid 激活函數來更新掩碼,而不是使用 PConv 中的基於規則的掩碼更新。需要注意的是,在一個 sigmoid 激活函數之後,所有的值都是 [0,1],這可以表示每個局部區域的重要性 (或有效性)。門控捲積的輸出計算如下:

其中的輸出是兩個標準卷積層的輸出的元素乘法,一個後面跟着任何激活函數,另一個後面跟着一個 sigmoid 激活函數。

一個標準的卷積層後跟一個 sigmoid 函數作爲軟門控,在輸入到下一個卷積層之前對當前卷積層的輸出進行加權。注意,對於硬門控,我們只有 0 或 1 來做權重,但對於軟門控,我們有 0 到 1 的權重,這是更靈活的,這個操作是可以學習的。

所以,你們可以看到門控捲積的思想很簡單,很容易實現。

損失函數

訓練模型的損失函數包括兩個損失項,一個是像素級 L1 重建損失 (L1 loss),另一個是 SN-PatchGAN 損失。注意,用於平衡這兩個損失項的超參數是 1:1。

實驗

自由掩碼生成和邊緣映射作爲用戶草圖輸入

定量比較

表 1,在矩形 mask 和自由形狀 mask 的 Places2 數據集上進行各種方法的定量比較

表 1 列出了讀者信息的兩個客觀評價指標。正如我在之前的文章中提到的,對於深度圖像修復任務,並沒有一個好的定量評價指標。因此,這些數字僅供參考,你應該關注填充圖像的視覺質量。如你所見,該模型提供了最低的 L1 和 L2 誤差。Global&Local,ContextAttention 和 PartialConv 已經在我以前的文章中介紹過了。讀者可以參考之前的文章。

定性比較

圖 4,Places2 和 CelebA-HQ 數據集各種方法的定性比較。

圖 4 爲不同深度圖像修復方法的定性比較。很明顯,本文提出的模型 (GatedConv) 在視覺質量方面優於其他所有方法。你可以看到,提出的方法提供的修復結果沒有明顯的顏色不一致。

圖 5,這個例子展示了使用用戶草圖輸入的優點

從圖 5 可以看出,與不允許用戶草圖輸入的方法相比,本文提出的模型能夠理解並利用用戶草圖輸入,進一步提高了修復結果。再一次,你可以看到,提出的方法提供更好的修復結果,沒有顏色不一致。

圖 6,一個使用不同現有方法刪除目標的例子

圖 6 顯示了一個目標刪除的例子,可以看到,本文提出的方法可以完全刪除目標,具有更好的視覺質量。

圖 7,使用用戶引導修復結果的例子

圖 7 顯示了一些以用戶草圖輸入爲指導的圖像修復示例。你可以看到如何通過提出的方法實現交互式編輯。

與之前的修復論文類似,作者也做了用戶研究,以評估哪種方法能提供更好的視覺質量的結果。

SN-PatchGAN 的消融研究

圖 8,SN-PatchGAN 的消融研究。從左到右:原始圖像,掩膜圖像,使用一個全局 GAN 的結果,使用 SN-PatchGAN 的結果

圖 8 顯示 SN-PatchGAN 的消融研究。與標準的單一全局 GAN 相比,SN-PatchGAN 的使用帶來了更好的修復效果。作者聲稱,簡單 L1 損失和 SN-PatchGAN 損失的簡單組合可以產生真實的修復結果。

總結

本文的主要思想是門控捲積。門控捲積是部分卷積的一個可學習版本。我們可以通過使用一個額外的標準卷積層和一個 sigmoid 函數來實現門控捲積,如圖 3 所示。與現有的修復方法相比,門控捲積和 SN-PatchGAN 的應用顯著提高了修復效果。作者還展示瞭如何通過允許可選的用戶草圖輸入來實現交互式編輯。通過用戶草圖輸入,可以獲得更好的、有意義的修復效果。因此,這在文章中是一種非常實用的深層圖像修復方法。

要點

我希望你們能理解什麼是門控捲積這是本文最重要的思想。

英文原文:https://towardsdatascience.com/a-practical-generative-deep-image-inpainting-approach-1c99fef68bd7

本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源https://mp.weixin.qq.com/s/hlqn3cW1b1DeOOHSzl-_dw