概念
目前圖像修補主要有兩種方法:
- 基於統計的,像是 PatchMatch
- 基於深度學習的
基於統計的方法雖然可以產生平滑合理的修補結果,但是其缺乏對圖像語意的理解;而基於深度學習的方法雖然具備對圖像語意的理解,但因為其通常會將圖像缺失部分用固定值填補後才輸入模型,這些填補的值往往影響了輸出結果,造成填補位置缺乏紋理或是與其他區域有明顯顏色對比等。
而在此論文中,透過了 Partial Convolution 來去除填補值產生的影響,避免了這樣的問題。
Partial Convolution 的計算
Partial Convolution 的使用,包含兩個步驟:
- masked and re-normalized convolution operation
- mask-update step
Masked and Re-normalized Convolution Operation
符號解釋:
- W : 卷積核
- X : 即將與卷積進行滑窗運算的圖像部分區域
- M : 由 1/0 構成的遮罩,0 表示需要修補的區域
- l : 與 M 尺寸相同,但每個元素值皆為 1
上面式子指的是,在進行卷積運算時將修補區域的像素值視為 0,並根據卷積運算時修補區域的數量,對卷積結果進行正規化。
Mask-update Step
符號解釋:
- m' : 更新後的遮罩
- M : 由 1/0 構成的遮罩,0 表示需要修補的區域
上面式子指的是,在每次做完 partial convolution 後,如果該次運算包含了非修補區域,則其輸出位置的遮罩會被更新為 1;反之,如果該次運算全部都是修補區域,則其輸出位置的遮罩保持為 0。這表示隨著模型中 partial convolution 層層的運算,圖像的信息會漸漸地往待修補區域擴散,並逐漸的修補好整張圖像。
整個模型設計
- 使用類似 U-Net 的架構設計
- 但是將所有卷積層換成 partial convolution layer
- 在 decoder 使用 nearest neighbor up-sampling
- 在 U-Net 的 short-cut 部分,會將 feature map 與 mask 進行 concate
- 在最後的 partial convolutional layer,輸入會包含原始圖像與原始遮罩,使的模型能夠直接的複製原本具有圖像信息的區域
損失函數
包含了六種損失:
- 待修補區域 (hole) 的 L1 loss
- M : 遮罩
- : 模型輸出
- : ground-true
- 圖像區域 (non-hole) 的 L1 loss
- M : 遮罩
- : 模型輸出
- : ground-true
- 感知損失
- 可參考風格遷移的論文,主要目的是讓輸出圖像的語意與原始輸入接近
- 符號
- : 模型輸出
- : ground-true
- : 模型輸出,但把待修補區域換成 ground-true
- : 預訓練之 VGG16 中,第 n 層 pooling layer 的輸出
- 風格損失
- 可參考風格遷移的論文,主要目的是讓輸出圖像的紋理能與原始輸入接近
- 符號
- : 使用 計算之 Gram matrix 的正規化因子
- Total variation loss
- 一種用於平滑化的懲罰項,用於讓修補區域與周圍的像素數值接近