# Free-Form Image Inpainting with ++Gated Convolution++ (直譯:門捲積)
#### reference:
[Image Inpainting for Irregular Holes Using
Partial Convolutions](https://arxiv.org/pdf/1804.07723.pdf)
[Free-Form Image Inpainting with Gated Convolution](https://arxiv.org/pdf/1806.03589.pdf)
[Generative Image Inpainting with Contextual Attention](https://arxiv.org/pdf/1801.07892.pdf)
[Gated Convolution 圖像修復任務](https://xiaosean5408.medium.com/gated-convolution-%E5%9C%96%E5%83%8F%E4%BF%AE%E5%BE%A9%E4%BB%BB%E5%8B%99-deepfillv2-free-form-image-inpainting-with-gated-convolution-b84a44a3cf5b)
[Partial Convolution 圖像修復任務](https://xiaosean5408.medium.com/partial-convolution-%E5%9C%96%E5%83%8F%E4%BF%AE%E5%BE%A9%E4%BB%BB%E5%8B%99pconv%E7%B0%A1%E4%BB%8B-image-inpainting-for-irregular-holes-using-partial-convolutions-81e6259b8e5f)
- mask 可以是不規則的(Free-form)讓模型進行修補
-
### Convolution network v.s partial Convolution v.s Gated Convolution
##### Convolution network
- 執行過程
將正常的pixels與空洞的pixels視為同樣的方式去處理

黃色為3x3大小的Kernel,kernel會慢慢掃過整張圖片
可能的情況只區分為三種:
1. 都是需要填補的pixel。
2. 都是不需填補的pixel。
3. 有需要填補以及不需填補的pixel。
##### Partial Convolution
- 執行過程
概念上,是一般的CNN搭配上Mask
Mask代表一張圖片哪邊是需要修補的空洞(1表示不需要修補;0表示為空洞需要修補)
讓CNN在傳遞十有Mask,Mask用來區分空洞與否,來做輔助,可以知道目前的pixel是正常還是不正常

框框表示Kernel,在Kernel中有Mask Value(0 or 1)
1. 紅框:Kernel中所有Mask Value皆為1,不需要修補,使用一般的Convolution正常處理
2. 綠框:雖然Kernel中右下角的Mask Value為0,但可以透過附近的1來學習顏色、紋理等,使其修補,整個Kernel的Mask Value變成1
3. 藍框:全部皆為0,先不處理,等傳遞到後面的Layer中有較多的資訊時再修補
直到整張圖片皆為1,修補完成
##### Gated Convolution
- 執行過程
Partial Convolution的進階版本,更改了當出現上圖綠框情況(有1有0)時,Partial Convolution會把整個Kernel轉成全部都是1,然而,如果有一個5x5的kernel,只有最左上角的mask value為1,其餘皆為0,但Partial convolution會把所有的kernel變成1,有點不合理。
因此,Gated Convolution的概念為下:
1. Layer 1:64個空間的原圖
2. Layer 2:Layer 1經過CNN後修補的結果
3. 將兩層Layer 相乘


即使在深層我們還是可以發現有塗鴉的資訊存留在該 layer 的某個 Channel,
比較最下方的 PConv, 其塗鴉資訊會逐漸消失。
比較圖
