天天看點

【論文閱讀筆記】Partial Convolution based Padding論文小結論文介紹實作和實驗

論文位址:https://arxiv.org/abs/1811.11718

代碼位址:https://github.com/NVIDIA/partialconv

論文小結

  本文提出一種有效地解決因padding造成的無效資訊增加的方案。

  本文提出的解決方案借鑒于partial convolution的思想,以此一起解決padding造成的問題,可以在邊界處得到更有效的檢測,可以得到比zero-padding要好的結果(在分類和語義分割問題上有驗證)。

  直覺上來說,partial convolution是通過mask,得到一個有效區域的權重,進而隻使用“有效”區域的資訊進行推理,再以此權重進行調整。在padding上的問題上,具體而言,依據padded區域和卷積滑動視窗區域的比率,來給卷積結果在圖像邊界附近重新權重。

  該方法是一種即插即用的方法,可以在任何網絡中使用。

論文介紹

  在本文中,将padding之類的無效區域稱為"holes"(孔洞),而将有效的原始區域成為"holes"(孔洞)。

  在作者的試驗中,反射填充(reflection padding)和複制填充(replication padding)一般和零填充(zero padding)相似,有些情況下甚至更差。零填充是向輸入添加了額外不相關的資料,而reflection和replication是複用邊界附近的資訊。這三種方式都是給原始輸入添加或複制了同樣是“同等”的輸入特征(即網絡分不清是否是不同的特征),這使得網絡有可能是以被混淆。

  與零填充相比,基于部分卷積的padding,自适應地給輸出權重,以調整缺失部分的比例。相對地,零填充使用零作為缺失的輸入。是以,作者将pad區域視為孔洞(holes),然後利用部分卷積(partial convolution)層進行卷積操作的重權重。

  通過實驗,作者發現,使用零填充訓練的網絡,對推理過程中使用的填充方式十分敏感,若使用不同的填充将會有很大的性能下降。相應的,基于部分卷積的padding訓練的模型具有魯棒性,無論在推理過程使用哪種填充方式,模型性能都相似。

  同時,使用基于部分卷積的padding方式,可以改善邊緣附近區域的語義分割。

部分卷積

  Partial Convolution一開始提出是為了處理不完全的輸入資料,比如有孔洞的圖像。 X ( i , j ) X_{(i,j)} X(i,j)​表示滑動視窗内的特征值,而 M ( i , j ) M_{(i,j)} M(i,j)​是對應的二進制mask,其中mask中的0表示孔洞區域,mask中的1表示非孔洞區域。部分卷積在每個位置的定義如下: x ( i , j ) ′ = { W T ( X ( i , j ) ⊙ M ( i , j ) ) r ( i , j ) , ∥ 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), & \|M_{(i,j)}\|_1 > 0 \\ &0, &othersise \end{aligned} \right. x(i,j)′​={​WT(X(i,j)​⊙M(i,j)​)r(i,j),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​​

  Paritial Convolution和普通置零的差別就在于多了一個重權值因子 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​

  這部分卷積的操作,作為前向傳播的一部分,可以很容易在任何深度學習架構中實作。

基于部分卷積的padding

  特征 X ( i , j ) X_{(i,j)} X(i,j)​是圖像邊界處的輸入,讓 1 ( i , j ) 1_{(i,j)} 1(i,j)​是和 X ( i , j ) X_{(i,j)} X(i,j)​有一樣長寬,但隻有一個通道的的2D矩陣, X ( i , j ) p 0 X_{(i,j)}^{p0} X(i,j)p0​表示為 X ( i , j ) X_{(i,j)} X(i,j)​的零填充, 1 ( i , j ) p 0 1_{(i,j)}^{p0} 1(i,j)p0​表示 1 ( i , j ) 1_{(i,j)} 1(i,j)​的零填充, 1 ( i , j ) p 1 1_{(i,j)}^{p1} 1(i,j)p1​表示 1 ( i , j ) 1_{(i,j)} 1(i,j)​的 1 1 1填充。下圖是以上表示的可視化。

【論文閱讀筆記】Partial Convolution based Padding論文小結論文介紹實作和實驗

  将部分卷積擴充到處理padding,則定義原始輸入區域為非孔洞,而padding區域為孔洞。卷積的結果如下所示: X ( i , j ) p 0 X_{(i,j)}^{p0} X(i,j)p0​和 1 ( i , j ) p 0 1_{(i,j)}^{p0} 1(i,j)p0​的零填充區域一緻,故實際上這和平常的零填充不一樣的地方還是加了一個重權重因子 r ( i , j ) r(i,j) r(i,j)。

x ′ ( i , j ) = W T ( X ( i , j ) p 0 ⊙ 1 ( i , j ) p 0 ) r ( i , j ) + b = W T X ( i , j ) p 0 r ( i , j ) + b \begin{aligned}x'(i,j)&=W^T(X_{(i,j)}^{p0}\odot1_{(i,j)}^{p0})r(i,j)+b \\ &= W^TX_{(i,j)}^{p0}r(i,j)+b \end{aligned} x′(i,j)​=WT(X(i,j)p0​⊙1(i,j)p0​)r(i,j)+b=WTX(i,j)p0​r(i,j)+b​其中,r(i,j)的表示如下: r ( i , j ) = ∥ 1 ( i , j ) p 1 ∥ 1 ∥ 1 ( i , j ) p 0 ∥ 1 r(i,j)=\frac{\|1_{(i,j)}^{p1}\|_1}{\|1_{(i,j)}^{p0}\|_1} r(i,j)=∥1(i,j)p0​∥1​∥1(i,j)p1​∥1​​

  如上公式所示,零填充的方式就是該方案的一種特例,其中 r ( i , j ) r(i,j) r(i,j)是設為了常量 1 1 1。 x ′ = W T X ( i , j ) p 0 + b x'=W^TX_{(i,j)}^{p0}+b x′=WTX(i,j)p0​+b

Case of Big Padding Size

  為了讓網絡模型的輸入大小一緻,一般都會在圖像層面上加padding。在這樣的邊界上應用卷積,可能沒有有效的原始資料,因為可能視窗大小要小于填充元素的大小。在這種情況下,應用第一層卷積前,要将mask進行填充,即對Mask進行padding。卷積的應用也如上面更新Mask一樣進行更替。

實作和實驗

  本文的實作方式是純pytorch實作,将mask作為和輸入tensor X有相同batchsize、相同寬高的單通道特征。目前的實作是基于現有的pytorch接口,允許使用者無需編譯新的CUDA核心即可使用。若這個padding方案直接使用CUDA實作,則額外的時間耗費可耗費不計,因為我們隻需要在邊界重新權重卷積結果。

  同時, ∥ 1 ( p 1 ) ∥ 1 ∥ 1 ( p 0 ) ∥ 1 \frac{\|1_{(p1)}\|_1}{\|1_{(p0)}\|_1} ∥1(p0)​∥1​∥1(p1)​∥1​​隻需要在每個輸入分辨率大小改變的時候計算一次,之後就可以緩存結果,以備以後的疊代使用。故第二次疊代的執行時間短于第一次疊代。對比的時間如下圖所示:

【論文閱讀筆記】Partial Convolution based Padding論文小結論文介紹實作和實驗

分類網絡任務

  在分類網絡任務上,訓練了VGG和ResNet的幾個網絡,而VGG使用了帶BN層的版本。每個網絡訓練5次,以此來減少由于初始化和随機小批量抽樣造成的方差問題。結果如下面兩個表所示:帶有部分卷積的padding的模型擁有的标準差要比zero-padding要小,即基于部分卷積的padding模型性能要更穩定,對随機性具有魯棒性。

而且幾個不同容量網絡的分析,可看出更小的網絡有更大的潛力和改進空間。
【論文閱讀筆記】Partial Convolution based Padding論文小結論文介紹實作和實驗

  使用部分卷積的padding訓練模型和使用zero-padding訓練模型的收斂速度對比如下圖所示:使用部分卷積的padding訓練模型的收斂速度更快,其訓練漂移更少,即訓練更穩定。

【論文閱讀筆記】Partial Convolution based Padding論文小結論文介紹實作和實驗

  下圖展示了10張在zero-padding訓練模型的5次疊代中都失敗的,但是在部分卷積的padding訓練的5次疊代都成功的例子。

【論文閱讀筆記】Partial Convolution based Padding論文小結論文介紹實作和實驗

  下圖展示了最後一列的兩個圖像的相同激活圖。可看出,基于零填充的網絡,産生的邊緣的特征圖有最強的激活響應,這表示很容易混淆網絡的預測。由于這些邊界特征很大程度上依賴于前一層的填充零值,這在一定程度上也可能意味着零值有可能誤導網絡。

【論文閱讀筆記】Partial Convolution based Padding論文小結論文介紹實作和實驗

  下表展示了零填充訓練的網絡對其他填充方案進行推斷,可看出零填充對于不同的填充方案十分敏感。partial Convolution的padding方案要魯棒得多,損失較少

【論文閱讀筆記】Partial Convolution based Padding論文小結論文介紹實作和實驗

語義分割任務網絡

  語義分割任務為避免減少分辨率,常使用擴張卷積,但擴張卷積通常需要更大的padding。使用部分卷積的padding方案有更好的結果,如下表所示。

【論文閱讀筆記】Partial Convolution based Padding論文小結論文介紹實作和實驗

  Tile-based的評估一般有更好的結果,如下圖所示:

【論文閱讀筆記】Partial Convolution based Padding論文小結論文介紹實作和實驗

  tile-based的方法,一張圖分開,可能導緻不完整的上下文,且顯著地增加了邊緣資訊。我們

可以重疊上下文區域進行采樣來改進這一點

。雖然重疊的tiles可以降低邊界問題的重要性。但上表展示了基于部分卷積的padding模型比zero-padding有更大的改進。這是因為部分卷積對邊界問題更健壯,是以受邊界附近像素增加的影響更小。

  下圖展示了 1 3 \frac13 31​的tile重疊的分割結果。可看出部分卷積對邊界區域的分割效果更好。

【論文閱讀筆記】Partial Convolution based Padding論文小結論文介紹實作和實驗

  下面展示了沒有重疊的tile分割結果。

【論文閱讀筆記】Partial Convolution based Padding論文小結論文介紹實作和實驗

  僅評估邊界區域的mIoUs,而不關心中心區域。本文做了很多消除中心區域的比例,下表展示了消除中心區域資訊的mIoUs評估結果。可以看出:當剔除中心區域面積越大,則零填充和部分卷積的填充之間的評估差距越大。這進一步證明了部分卷積的填充方案巨大地改善了近圖像邊緣的預測準确度。

【論文閱讀筆記】Partial Convolution based Padding論文小結論文介紹實作和實驗

繼續閱讀