--- title: Free-Form Image Inpainting with Gated Convolution 論文讀後整理 tags: Deep Learning,Image Inpainting description: 論文讀後整理 --- # Free-Form Image Inpainting with Gated Convolution 論文讀後整理 最剛開始找到這篇是在Paper with Code上的 [Image Inpainting](https://paperswithcode.com/task/image-inpainting) 這欄 因為最多實作中 第一名的Paper Nvidia使用的是PyTorch,所以選了第二名的這篇來看(使用TensorFlow) ## 概述 這篇是在2019年的ICCV(國際計算機視覺大會)發表 做的也如標題所述 透過 **Gated Convolution** **修補**任何形式的**影像**(浮水印、雜物...)  ## 環境 * Python 3.7.9 * cuda 9.2.148 * tensorflow 1.15.4 * keras 2.8.0 * 作者的toolkit tensorflow toolkit neuralgym (run pip install git+https://github.com/JiahuiYu/neuralgym). ## 先決條件 partial conv 有幾項先決條件限制: * 一、模型的架構 1. valid pixels in input image 輸入圖像 有 圖像中的有效像素 2. masked pixels in input image 輸入圖像 有 圖像中的無效像素(mask) 3. neurons with receptive field covering no valid pixel of input image 神經元傳遞後 仍能感知到無效像素 4. neurons with receptive field covering different number of valid pixels of input image 神經元傳遞後 仍能知道各神經元有多少有效像素/特徵 5. synthesized pixels in deep layers. 合成深層的像素 * 二、分離有效與無效像素 * Q : 如何能夠從使用者傳入的圖像中,分離出有效與無效像素,單純以白色來區分會導致許多問題產生 * A : 透過另一個檔案另外寫入MASK * 三、無效像素感知不到 * Q : 在深層模型中,無效像素因為模型的深度 而導致感知越來越薄弱,深層的神經元也需要知道MASK外的像素來合成 * A : 自動學習MASK的值->gated convolution ## Gated convolution 這個卷積 他對每個channel(RGB 或 自定義通道)及 空間位置(mask內外) 學習了動態門控機制 ### 門控機制 1. 輸入特徵先計算gating values  2. output  這個門控實作簡單 且 在下面的幾種情況下表現更好 1. mask有複雜形狀 2. the inputs are no longer simply RGB channels with a mask but also have conditional inputs like sparse sketch(不太懂這個意思) ### 網路架構 1. 堆疊Gated convolution 形成一個 encoder-decoder network 2. 透過 contextual attention module within same refinement network 更容易捕捉依賴關係 ## vanilla convolution 一般的conv在圖片分類、物件偵測上獲得很好的運用 但是在圖像修復上卻有一些缺點 不管有沒有缺漏 都會經過相同的filter(沒有辦法分出其中是有效/無效的pixel) 這樣會導致輸出上產生 視覺偽影(顏色差異、模糊、邊緣效應) :::warning 補圖片說明 ::: ## Partial convolution 這是由 Nvidia團隊於 ECCV 2018 提出, 透過masking 與 e-normalization(mask-update)的方法來逐步修復整張圖片    * 紅框 此時 Kernal 內的 Mask value 都為 1(都為正確的pixel不需填補), 那他會執行 eq1 的 if sum(M) > 0 的式子。 概念為 : 此處並非空洞,可使用一般的 Convolution 正常處理。 * 綠框 雖然 Kernal 右下角的 Mask value 右下角為 0(代表空洞), 但是我們可以透過附近的 1 即爲正常的 pixel 學到點東西, 可能是顏色、紋理。 * 藍框 此時 Kernal 內的 Mask value 全為 0(都為空缺需填補的pixel), 那我們就先不處理, 等傳遞到後面的 Layer 有較多的資訊時再做修補。 持續這樣修補到整張圖片的mask都是1那就修補完成了 ### Partial convolution 的缺點 1. 因為mask-update的方式會導致 不管只有 1個有效pixel 或 9個有效pixel 下一層的mask都被更新成1  2. 沒有辦法額外支援使用者的輸入   3. mask到深層網路會逐漸消失,後面會提到此篇提出的gated conv 4. 每層網路都共用相同的channel 限制的網路的彈性,也是跟gated conv有關係  ### Gated Convolution 就是從前面的Hard Mask改成Soft Mask(by DeepLearning) 具體的公式如下  跟Pconv不同的是他的mask是動態生成的, 相比於Pconv 它不僅學習了特徵擷取,也做到了Semantic Segmentation 在深層網路也能突出mask和sketch的訊息(highlight the masked regions and sketch information),達到更好的修復成果 具體Code的實現如下 [JiahuiYu/generative_inpainting/inpaint_ops.py@Github](https://github.dev/JiahuiYu/generative_inpainting)  特徵擷取的激活函數可以是ReLU, ELU and LeakyReLU(作者提供的Model預設是ELU)  ## SN-PatchGAN 在辨別圖像生成是否正確上,使用了SN-PatchGAN,他是基於Spectral Normalization for Generative Adversarial Networks所修改的GAN網路。 SN-GAN 簡單來說就是Lipschitz constant 對每層的輸出做限縮,讓GAN的穩定度提升。 但此篇論文有26頁的篇幅,所以沒有深入研究。  Dsn : 代表 spectral-normalized discriminator x : 前面網路生成的圖片 z : 代表不完整的圖片 最後的loss 是 pixel-wise l1 reconstruction 和 SN-PatchGAN loss 比例1:1組成  ## mask 與 sketch生成 ### mask 用了一個演算法來生成像是人畫的樣子   ### sketch  引用了 "Holistically-Nested Edge Detection"這邊論文的HED model來生成邊緣 ## 整體網路架構  整體的網路架構是借鑑自"Generative Image Inpainting with Contextual Attention"這篇論文 ## Coarse Network stage 1的部分是Coarse Network 粗網路 其中關鍵使用了 **dilated convolution** 擴張卷積 **增加 Receptive Field,** 其主要原因為 **Receptive Field的大小會大程度的影響修復的品質**。 在恢復圖片大小的部分, 作者有提到原本的Pconv所使用的UNet架構在**skip connections的輸入幾乎為0**,無法傳播顏色和紋理訊息 使用了簡單的鄰近插值法。 ```python= x = resize(x, func=tf.image.resize_nearest_neighbor) ``` 這張圖有點醜 但是蠻容易理解鄰近插值法做的事情  ## Two Branch Refinement Network with Contextual Attention 這邊主要是借鑑自別人的想法,我覺得這邊的修復反而是較關鍵的一環  作者想解決的問題是:在背景區中匹配MASK的特徵。 1. 在背景區提取3*3的特徵 -> kernel 2. 使用標準化內積(餘弦相似度) 3. 透過softmax計算權值 4. 選出最好的方塊 填入mask 再反卷積出Mask的缺失的部分 如果內存爆掉 有兩種解法 1. 增加Conv的stride 2. 降解析度 而下面的是透過 擴張卷積來"想像" 缺失內容 完成後把兩個連接 ```python= x = tf.concat([x_hallu, pm], axis=3) ``` 反卷積出結果後 丟到SN-PatchGan裡面去對抗並修正模型。 [论文解析Generative Image Inpainting with Contextual Attention](https://blog.csdn.net/weixin_42360095/article/details/92699064) ## 比較   {%hackmd theme-dark %}
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up