論文位址:https://arxiv.org/abs/1804.07723
論文小結
本文提出一種圖像修複的方法,其使用Partial Convolution,可以實作當時最先進的圖像修複效果(1804)。本文的模型可以穩健地處理任何形狀、大小、位置和距離圖像邊界的Holes。而且本文的方法性能不會随着孔洞的增大而急劇惡化。
之前的方法,mask中的holes在圖像中的表示是使用替代值,通常是使用均值。這對于卷積而言是無法區分是否是人工資訊的,且以前的方法通常解決的對象都是mask為矩形的。本文使用的partial conv方式可以解決該問題,在使用mask的情況下,隻以有效像素作為條件。
這篇文章在《Partial Convolution based Padding》之前,也介紹了前向傳播時,自動更新mask的方式。
論文介紹
本文在非正常mask上優于其他方法。先前的方法都集中于圖像的中心區域,且需昂貴的後處理。本文的工作是提出一個用于圖像修複的模型,可在不規則孔洞的模式下穩健運作,并産生語義上有意義的預測。如下圖所示。
此外,本文的方法結果可以平滑地與圖像的其餘部分結合在一起,而不需要任何外的後處理或混合操作。
最近的不适用深度學習的修複方法,使用的是剩餘圖像的統計資訊來填補孔洞。PatchMatch是當時最先進的方法,通過疊代搜尋最合适的不頂來填補孔洞。雖然這種方法通常會産生平滑的結果,但它受到可用圖像統計資料的限制,并且沒有視覺語義的概念,如圖2(b)所示。
其他方法用固定值替代被移除的内容後,使用卷積。結果會受到孔洞的初始化值影響,通常表現為填補的孔洞區域缺乏紋理,有明顯的顔色對比或孔洞周圍存在明顯的人工痕迹。圖2(e)和圖2(f)時候初始化不同造成影響的例子,其測試和訓練都使用同一套初始化值。之前的方法都需要後處理操作,或者使用一個細化網絡。但這些細化不能解決如圖2©和圖2(d)顯示的所有人工痕迹。
本文的目标旨在于不依賴孔洞區域的初始值進行預測,并且不需要任何額外的後處理。目前的很多方法的另一個限制是對矩形孔洞的關注,且經常置于圖像的中心區域,作者發現這種處理會使得圖像修複過拟合與矩形。并且,在本文的分析中,不僅關注孔洞的大小,也關注孔洞是否與圖像邊界有接觸。
本文的部分卷積操作如下:給定一個二進制mask,卷積結果隻依賴于每層的非孔洞區域。本文的主要擴充是自動mask更新的步驟。如果給定足夠多的連續更新層,即使最大的mask,其孔洞最終也會縮小,直到在特征圖上隻留下有效的響應。部分卷積層使我們的模型不受占位符孔洞值的影響。
本文是第一個證明在不規則形狀的孔洞上訓練圖像修複網絡的有效性。同時,作者提出了一個大型的不規則mask資料集,将會在之後向公衆釋出。
方法介紹
部分卷積的定義如下:假設 W W W為卷積核的權重, X X X是目前滑動視窗中的特征值, M M M是對應的二進制mask,運作的定義如下: x ( i , j ) ′ = { W T ( X ( i , j ) ⊙ M ( i , j ) ) r ( i , j ) + b , ∥ M ( i , j ) ∥ 1 > 0 0 , o t h e r s i s e x'_{(i,j)}=\left\{ \begin{aligned} &W^T(X_{(i,j)}\odot M_{(i,j)})r(i,j)+b, & \|M_{(i,j)}\|_1 > 0 \\ &0, &othersise \end{aligned} \right. x(i,j)′={WT(X(i,j)⊙M(i,j))r(i,j)+b,0,∥M(i,j)∥1>0othersise其中, ⊙ \odot ⊙是元素積, 1 ( i , j ) 1_{(i,j)} 1(i,j)是和輸入一樣大小的全1向量,而 r ( i , j ) r_{(i,j)} r(i,j)的定義如下: r ( i , j ) = ∥ 1 ( i , j ) ∥ 1 ∥ M ( i , j ) ∥ 1 r_{(i,j)}=\frac{\|1_{(i,j)}\|_1}{\|M_{(i,j)}\|_1} r(i,j)=∥M(i,j)∥1∥1(i,j)∥1
r ( i , j ) r(i,j) r(i,j)用于調整僅用有效資訊計算的代輸出的權重。
mask在前向傳播時也需要随着更新,如果這個滑動視窗中含有一個有效值,則這個位置的mask就是有效值。 m ( i , j ) ′ = { 1 , i f ∥ M ( i , j ) ∥ 1 > 0 0 , o t h e r w i s e m'_{(i,j)}=\left\{ \begin{aligned} &1,&if\ \ \|M_{(i,j)}\|_1>0 \\ &0,&otherwise \end{aligned} \right. m(i,j)′={1,0,if ∥M(i,j)∥1>0otherwise
定義二進制mask的大小為 C ∗ H ∗ W C*H*W C∗H∗W,與輸入圖像的特征圖大小一樣。在V100的GPU上,整個網絡在 512 ∗ 512 512*512 512∗512的圖像輸入運作 0.029 s 0.029s 0.029s。
網絡的設計像UNet的網絡架構,但用部分卷積層替代了所有的卷積層,并且在解碼器階段使用最近鄰上采樣。在使用skip connection分别結合兩個feature map和兩個masks,充當下一部分卷積層的輸入特征的mask。
最後一個的部分卷積層的輸入應該包括結合的帶孔洞的輸入圖像和原始的mask,以讓模型有機會複制非孔洞像素的資訊。網絡細節在補充材料中可見。
同時,在處理Padding時,就将Padding視作孔洞處理,具體可見Partial Convolution based Padding。
損失函數
損失函數,既針對每個像素的重建精度,也關注合成。比如預測的孔洞值到其周圍環境的平滑程度。
設定帶孔洞的輸入圖檔為 I i n I_{in} Iin,初始的二進制mask為 M M M,其中 0 0 0為孔洞,網絡預測的輸出為 I o u t I_{out} Iout,ground truth圖像為 I g t I_{gt} Igt。定義像素損失為 L h o l e = ∥ ( 1 − M ) ⊙ ( I o u t − I g t ) ∥ 1 L v a l i d = ∥ M ⊙ ( I o u t − I g t ) ∥ 1 \begin{aligned} \mathcal{L}_{hole}&=\|(1-M)\odot(I_{out}-I_{gt})\|_1 \\ \mathcal{L}_{valid}&=\|M\odot(I_{out}-I_{gt})\|_1 \end{aligned} LholeLvalid=∥(1−M)⊙(Iout−Igt)∥1=∥M⊙(Iout−Igt)∥1
1 − M 1-M 1−M表示隻關心孔洞區域, M M M表示隻關心有效像素區域。采用的是 L 1 L1 L1損失。
定義感覺損失為: L p e r c e p t u a l = ∑ n = 0 N − 1 ∥ Ψ n ( I o u t ) − Ψ n ( I g t ) ∥ 1 + ∑ n = 0 N − 1 ∥ Ψ n ( I c o m p ) − Ψ n ( I g t ) ∥ 1 \mathcal{L}_{perceptual}=\sum_{n=0}^{N-1}\|\Psi_n(I_{out})-\Psi_n(I_{gt})\|_1+\sum_{n=0}^{N-1}\|\Psi_n(I_{comp})-\Psi_n(I_{gt})\|_1 Lperceptual=n=0∑N−1∥Ψn(Iout)−Ψn(Igt)∥1+n=0∑N−1∥Ψn(Icomp)−Ψn(Igt)∥1其中 I c o m p I_{comp} Icomp為 I o u t I_{out} Iout的複制品,但其非孔洞像素直接來源于ground truth。
感覺損失是 I o u t , I c o m p I_{out}, I_{comp} Iout,Icomp與 I g t I_{gt} Igt的 L 1 L1 L1距離,但不是直接使用原始圖檔,而是使用ImageNet預訓練的VGG16将 I o u t , I c o m p I_{out}, I_{comp} Iout,Icomp和 I g t I_{gt} Igt映射到進階(high level)特征空間中。 Ψ n \Psi_n Ψn是第 n n n個選擇層的激活層。作者選擇了pool1, pool2, pool3作為損失映射的特征輸出。
定義風格損失為:在每個特征圖上展現自相關後再應用 L 1 L1 L1距離。 L s t y l e o u t = ∥ K n ( ( Ψ n ( I o u t ) ) T ( Ψ n ( I o u t ) ) − ( Ψ n ( I g t ) ) T ( Ψ n ( I g t ) ) ) ∥ 1 L s t y l e c o m p = ∥ K n ( ( Ψ n ( I c o m p ) ) T ( Ψ n ( I c o m p ) ) − ( Ψ n ( I g t ) ) T ( Ψ n ( I g t ) ) ) ∥ 1 \begin{aligned} \mathcal{L}_{style_{out}}&=\| K_n((\Psi_n(I_{out}))^T(\Psi_n(I_{out}))-(\Psi_n(I_{gt}))^T(\Psi_n(I_{gt}))) \|_1 \\ \mathcal{L}_{style_{comp}}&=\| K_n((\Psi_n(I_{comp}))^T(\Psi_n(I_{comp}))-(\Psi_n(I_{gt}))^T(\Psi_n(I_{gt}))) \|_1 \end{aligned} LstyleoutLstylecomp=∥Kn((Ψn(Iout))T(Ψn(Iout))−(Ψn(Igt))T(Ψn(Igt)))∥1=∥Kn((Ψn(Icomp))T(Ψn(Icomp))−(Ψn(Igt))T(Ψn(Igt)))∥1
其中 Ψ ( x ) n \Psi(x)_n Ψ(x)n的大小為 ( H n W n ) ∗ C n (H_nW_n)*C_n (HnWn)∗Cn,自相關矩陣的結果大小為 C n ∗ C n C_n*C_n Cn∗Cn, K n K_n Kn是歸一化因子,文中定義為 1 / C n H n K n 1/C_nH_nK_n 1/CnHnKn,文中應該寫錯了,這歸一化的因子可能為 1 / C n H n W n 1/C_nH_nW_n 1/CnHnWn。
又引入平滑懲罰項,定義總變化損失為: L t v = ∑ ( i , j ) ∈ P , ( i , j + 1 ) ∈ P ∥ I c o m p i , j + 1 − I c o m p i , j ∥ 1 + ∑ ( i , j ) ∈ P , ( i + 1 , j ) ∈ P ∥ I c o m p i + 1 , j − I c o m p i , j ∥ 1 \mathcal{L}_{tv}=\sum_{(i,j)\in P,(i,j+1)\in P}\| I_{comp}^{i,j+1} - I_{comp}^{i,j} \|_1 + \sum_{(i,j)\in P,(i+1,j)\in P}\| I_{comp}^{i+1,j} - I_{comp}^{i,j} \|_1 Ltv=(i,j)∈P,(i,j+1)∈P∑∥Icompi,j+1−Icompi,j∥1+(i,j)∈P,(i+1,j)∈P∑∥Icompi+1,j−Icompi,j∥1
直覺上來看,就是孔洞中每個像素和隔壁像素的像素值平滑。
總的損失定義:不同的損失項權重是通過對100張驗證圖像執行超參數進行搜尋獲得。
L t o t a l = L v a l i d + 6 L h o l e + 0.05 L p e r c e p t u a l + 120 ( L s t y l e o u t + L s t y l e c o m p ) + 0.1 L t v \mathcal{L}_{total}=\mathcal{L}_{valid}+6\mathcal{L}_{hole}+0.05\mathcal{L}_{perceptual}+120(\mathcal{L}_{style_{out}}+\mathcal{L}_{style_{comp}})+0.1\mathcal{L}_{tv} Ltotal=Lvalid+6Lhole+0.05Lperceptual+120(Lstyleout+Lstylecomp)+0.1Ltv
不同損失項的消融學習
感覺損失會産生棋盤假象,故[12]作者建議使用總變化(total variation, TV)損失來改善這個問題。但作者發現對于本文的模型,該措施無法進行泛化。如
圖3(b)所示,從 L t o t a l \mathcal{L}_{total} Ltotal中移除了 L s t y l e \mathcal{L}_{style} Lstyle後訓練模型的結果。這證明了風格損失的重要性,但并不是所有的風格損失的損失權重方案都會産生可信的結果。如
圖3(f)所示,使用了小的分割損失權重訓練模型的結果,與
圖3(g)的全損失項進行對比,可看出圖3(f)有很多的
魚鱗僞影(fish scale artifacts)。但是,感覺損失也很重要,如
圖3(k)和
圖3(j)的對比,沒有感覺損失的網絡回産生更嚴重的
網格狀的僞影(grid-shaped artifacts)。
實驗
之前的工作,随機移除圖像中的矩形區域,在資料集中産生孔洞。作者認為這對于創造各種需要的不同形狀和大小的孔洞是不夠的,是以
作者從收集随機條紋和任意形狀的孔洞的mask開始。
作者發現[29]中描述的視訊在連續兩幀之間進行遮擋/解除遮擋的mask估計方法的結果是這種模式的良好來源。
作者為訓練生成了55116個mask,為測試生成了24866個mask。在訓練時,為mask進行資料增強。然後進行随機放大、旋轉和裁剪。所有用于訓練和測試的mask、圖像大小都為 512 ∗ 512 512*512 512∗512。在測試集上,也進行随機的方法、旋轉和裁剪。
之前很多方法在孔洞靠近邊緣的時候,性能都有下降。是以作者将資料集分成兩個部分:孔洞靠近邊界的mask和孔洞沒有靠近邊界的mask,其臨界點在于孔洞離圖像邊界距離是否在50個像素内。The split that
has holes distant from the border ensures a distance of at least 50 pixels from the border.
然後,作者對mask的孔洞大小進行了分類。具體而言,作者定義了6個比例範圍: ( 0.01 , 0.1 ] , ( 0.1 , 0.2 ] , ( 0.2 , 0.3 ] , ( 0.3 , 0.4 ] , ( 0.4 , 0.5 ] , ( 0.5 , 0.6 ] (0.01,0.1],(0.1,0.2],(0.2,0.3],(0.3,0.4],(0.4,0.5],(0.5,0.6] (0.01,0.1],(0.1,0.2],(0.2,0.3],(0.3,0.4],(0.4,0.5],(0.5,0.6]。每個種類有孔洞靠近邊界的mask和孔洞不靠近邊界的mask各 1000 1000 1000張。是以,一共有 6 ∗ 2 ∗ 1000 = 12000 6*2*1000=12000 6∗2∗1000=12000個mask。各種類的mask例子如下圖所示,其中1,3,5是有邊界限制的,2,4,6是沒有邊界限制的。
訓練資料使用了3個獨立的資料集用于訓練和測試:ImageNet、Places2、CelebA-HQ。使用ImageNet和places2的原始訓練、驗證和測試劃分。而CelebA-HQ則随機劃分 27 K 27K 27K用于訓練,劃分 3 K 3K 3K用于測試。
訓練時,使用[9]的權重初始化,使用Adam作為優化器。在單個16GB的V100 GPU上,使用batchSize為6。
但在訓練的時候,孔洞(Holes)關于對于BN層(Batch Normalization)的使用造成問題。因為孔洞像素會被用于計算均值和方差,但在卷積的時候是用不上孔洞區域的像素的。但是,這個孔洞會逐漸在前向傳播的時候被填滿,通常會在解碼器階段完全消失。
為了在有孔洞時使用BN層,是以作者先使用初始學習率為 0.0002 0.0002 0.0002訓練BN層。然後使用 0.00005 0.00005 0.00005的學習率進行finetune,但此時編碼器中的BN層不再進行學習(freeze the Batch Normalization parameter),而解碼器中的BN層繼續學習。這不僅避免了不正确的均值和方差問題,還幫助我們實作更快的收斂。在ImageNet和Places2模型需要訓練10天,而CelebA-HQ訓練3天,所有的finetune都在一天内完成。
模型對比
與GL、GntIpt的公平比較需要重新在本文的資料集下進行重新訓練。但這兩個算法訓練都是使用了局部鑒定器,其假設孔洞的局部邊界框是可用的,這對本文的mask形狀是沒有意義的。是以比較的時候直接使用它們預訓練的模型直接進行泛化。
定量分析
圖5和圖6展示了分别展示了ImageNet和Places2的比較結果。圖9展示了在CelebA-HQ資料集上與GntIpt的比較結果。
下圖7展示了Conv和Partial Conv的比較結果,可看出Conv有差距的人工痕迹。
定量分析
在圖像修複領域,一直沒有一個好的數值名額可以用來評價圖像修複的結果。盡管如此,這裡還是使用 L 1 L1 L1誤差,PSNR,SSIM和inception score作為評價名額。其中 L 1 L1 L1誤差,PSNR和SSIM用于Places2,而Inception score用于ImageNet上。下表展示了比較結果,可看出在不規則mask的情況下,本文的方法好于其他的所有方法。
人類主管評判
除了定性定量分析,本文還通過人類的主觀研究來評估算法。下圖8(a)展示了不同孔洞-圖檔的面積比的結果。第一行顯示的是孔洞離邊界至少50個像素的結果,而第二行沒有限制。在兩種情況下,本文的方法都優于其他所有的方法,而 50 % 50\% 50%名額的情況下是兩種方法性能相同。
上圖8(b)是在有限的時間前提下,人類對所有方法的結果與GT進行比較,看那張圖檔更加自然。這可以評估圖像之間的差異有多快可以被感覺到。在大多數時間段和孔洞-圖像面積比的大多數情況下都優于其他方法。
分析
下圖展示,在空洞越來越大的情況下,本文的方法也可以良好地适應。
下圖展示,如果圖像中結構是稀疏的,像大多數方法一樣,本文的方法也無法進行修複。