論文:https://arxiv.org/abs/2007.06929
代碼:https://github.com/KumapowerLIU/Rethinking-Inpainting-MEDFE
論文的解讀選自劉虹雨的在極市平台的文章,值得注意的是,這個工作在今年2月份也宣傳過,論文的題目及內容有相應調整。
當前的雙階段image inpainting需要在第一階段得到一個 coarse 的圖像,在這個圖像上結構已經修復的不錯,在此基礎上再修復圖像的紋理細節。但是, 這些方法的結果中 structure 和 texture 往往不一致。如下圖所示:
Visual comparison on the Paris StreetView dataset. GT is the ground truth image. The proposed inpainting method is effffective to reduce blur and artifacts within and around the hole regions, which are brought by inconsistent structure and texture features.
為了解決這一問題,作者提出了一個 mutual encoder-decoder,同時從CNN中學習結構 和 紋理 特征。網絡結構如下圖所示:
作者認為:越深的卷積層代表着結構信息(高級語義信息),越淺的卷積層代表紋理以及細節信息(低層級信息)。因此,將編碼器的特征分成兩個部分,前3層代表紋理信息,后3層代表結構信息,前三層和后三層分別 integrate 起來變成32×32×256大小的卷積。其中 \(F_{te}\) 代表前三層的 integrated features 也就是充滿紋理的特征, \(F_{st}\) 代表后三層的 integrated features 也就是充滿結構信息的特征。
-
如何去修復這些 feature 的孔洞區域? 將 \(F_{st}\) 和 \(F_{te}\) 分別通過多尺度修復模塊來修復孔洞區域,具體來說多尺度修復由三個不同卷積大小的partial conv 組成,他們的kernel size分別是3,5,7。 \(F_{st}\) 和 \(F_{te}\) 經過多尺度修復模塊后就是\(F_{fst}\) 和 \(F_{fte}\) .
-
那么如何能夠保證這些 feature 能夠真正關注紋理或者結構呢? 這里用了最簡單的constrain,將 \(F_{fst}\) 和 \(F_{fte}\) 用1×1的卷積映射到RGB( \(F_{fst}\) 映射后的圖為 \(I_{ost}\) , \(F_{fte}\) 映射后的圖為 \(I_{ote}\))並跟 ground truth 計算 L1 loss,其中 \(I_{ost}\) 的 ground truth 是結構圖 \(I_{st}\) ,這張結構圖是將原圖通過edge-perserving filter 處理后抹去紋理生成的,而 \(I_{ost}\) 的ground truth就是原圖( \(I_{gt}\), 有紋理和細節的圖)。這種constrain如下所示:
\[L_{rst}= || I_{ost}-I_{st}|| \]\[L_{rte}=||I_{ote}-I_{gt}|| \]
這樣,解碼器包括兩個流:結構流 和 紋理流,分別通過多尺度修復進行inpainting,同時分別有自己的 constrain 保證填充效果,並促進每個流關注紋理或者結構。
這時又產生一個新的問題,如何將\(F_{fst}\) 和 \(F_{fte}\) 融合成一張完整的圖呢?作者將二者拼接,同時使用 1x1 的卷積處理得到一個簡單融合的 \(F_{st}\),接着通過特征均衡化來實現更好的融合。特稱均衡化包括兩個維度的均衡,一個是channel上的一個是spatial上的,其中channel上的均衡通過SE-block實現,因為其中的attention值是由 \(F_{sf}\) 得到,而 \(F_{sf}\) 已經包含了結構和紋理的特征信息,所以這些attention是由結構和紋理信息一起得來從而保證了均衡化。在spatial上,作者提出了雙邊激活函數 bilateral propagation activation function (BPA).
BPA是從 edge-perserving image smoothing (雙邊濾波) 中得到的啟發,下面回顧下雙邊波濾。在數字圖像處理中我們都學過,高斯濾波的結果可以模糊圖像,但是容易丟失邊緣細節信息。雙邊濾波是在其基礎上,疊加了像素值的考慮,對於保留圖像中的邊緣更有效。
雙邊濾波可以理解為包含兩個部分:一個為空間分支(spatial),即以前的高斯濾濾; 另一個為灰度分支(range),考慮當前點與模板中心點的灰度差的絕對值。
在圖像的平坦區域,像素值變化小,此時空間域權重起主要作用,相當於對圖像進行高斯模糊。
在圖像的邊緣區域,像素值變化較大的點灰度分支權重較大。當前點灰度值如果與模板中心點灰度差值較大,即使離中心點距離遠,仍然權重較大,這樣就保護了邊緣信息。
一個形象的圖如下所示,在邊緣上,使用了像素差權重,所以較好的保留了圖像中的邊緣信息。
現在回到論文中的雙邊注意力機制,如下圖所示。可以從圖中看到,右邊為 spatial 分支,當前特征點是通過全圖所有特征點融合生成,每個特征點的weight是通過高斯分布來計算,近大遠小。左邊為 range 分支,可以理解為局部的注意力機制(3X3鄰域),中心點由周圍3鄰域里的9個點融合得到,特征點的 weight 通過與中心像素的點積得到。
總體來說,在這個雙邊注意力模塊中,當前點的特征由周圍3x3鄰域以及全局的點加權組成,保證了全局與局部信息的一致性,從而保證了填充的內容連貫,同時與背具有較好的一致性。
實驗結果不多說,大家可以參考作者論文。有趣的是,論文的損失函數包括很多個部分組成,需要留意下。作者做了兩個 ablation study,在第一個實驗中,考慮了網絡紋理分支 和 結構分支 的作用。只用結構分支圖像的細節不好,只用紋理分支圖像的結構不好。作者的方法同時結合了 結構 和 紋理 信息,效果最好。
同時,在另一組 ablation study 中,作者分析了特征均衡化的作用。如果把論文最特色的雙邊注意力機制去掉,就是相當於使用了“Non-local aggregation”,但生成的圖像仍有模糊現象。但是作者方法通過特征均衡化,保證了全局與局部信息的一致性,效果是最好的。