Deformable Convolutional Network論文解讀

卷積神經網絡由於固定的幾何結構一直受限於對幾何形變的建模,這篇工作引入了兩個新模塊——deformable convolution和deformable RoI pooling。deformable convolution 和deformable RoI pooling都是基於一個平行網絡分支學習offset(偏移),使卷積核在input map的採樣點發生偏移,集中於我們感興趣的區域或目標。同時這個組件可以輕鬆地替代CNN中的普通卷積,並且很容易通過反向傳播進行end-to-end的訓練,而且效果不錯。
在這裏插入圖片描述

1. Introduction

在計算機視覺識別領域,一項重要挑戰就是怎樣對幾何形變和模型幾何變換(目標尺度、姿勢、視點和形變)進行建模。一般來講,有兩種方法:第一種是就是通過仿射變換等手段做數據增廣,擴充數據集,使得訓練集中儘可能包含具有更多形變的樣本;第二種就是使用形變不變性的特徵或者算法(如SIFT和滑窗算法)。但上面的方法有兩個缺點:

  • 幾何形變被假設是固定和已知的,這是一種先驗信息,用這些有限的、已知的形變來進行數據擴增或設計算法,可想而知,對於新的、未知的形變則無法處理。
  • 手工設計的特徵或算法無法應對過度複雜的形變,即便該形變是已知的。

而作者引入的這兩個模塊都是輕量級的,他們添加了很少的參數和計算量來學習額外的offset,然後用這兩個模塊在模型的深層做替換,並且很容易通過反向傳播進行end-to-end的訓練,效果不錯。

2. Deformable Convolutional Networks

CNN中的feature map和卷積都是3D的,deformable conv和ROI pooling都是在一個2D的空間域上做的,所以下面都是以2D的操作來演示的,但這個泛化到3D是完全可以的。

2.1 Deformable Convolution

2D卷積主要由兩個steps組成:1)在輸入feature map x採樣,位置由R定義;2)採樣到的輸入和權重w做卷積。
R的定義爲:
在這裏插入圖片描述
對於輸出feature map y上的每一個點 p0p_{0} ,標準的卷積操作爲:
在這裏插入圖片描述
在deformable convolution中,卷積核在input feature map上的採樣點會發生偏移,定義偏移量爲 Δpnn=1,...,N{\Delta p_{n}|n=1,...,N} ,這裏 N=RN=|R| ,上面的等式(1)變爲:
在這裏插入圖片描述
但這裏有一個問題, p0+pn+Δpnp_{0}+p_{n}+\Delta p_{n} 是一個float類型的值,它在input feature map上的像素值怎麼取?在這裏等式(2)通過雙線性插值法來取:
在這裏插入圖片描述
上面的 p=p0+pn+Δpnp=p_{0}+p_{n}+\Delta p_{n} ,q是p最近鄰的四個點,利用雙線性插值計算時,x§的值是由和p最近鄰的四個點計算得到的,這點可以從 g(a, b)的定義看出來,我們可以將 G(q, p)看作q點對應的加權值。
雙線性插值的介紹可以參見:雙線性插值的兩種實現方法
在這裏插入圖片描述
總結一下,deformable convolution整體上可以分成2部分,第一部分是基於輸入特徵圖生成offset,第二部分是基於輸入特徵圖和offset通過deformable convolution生成輸出特徵圖。

  • 假定輸入的維度爲 [b, h, w, c],經過一次普通卷積,卷積填充爲Same,即輸入輸出大小不變,對應的輸出結果爲 [b, h, w, 2N],這裏N=k_size*k_size,輸出的結果是指原輸入中以每個點爲中心做卷積時窗口內input feature map對應的 k_size * k_size個位置的x、y偏移量;
  • 對原輸入中每個點的C個通道共用一組(x,y)偏移量得到9個新的position,且這些position要限定在圖片大小以內,這些值都是float類型的,爲了前向傳播和反向傳播的進行,必須使用雙線性插值得到每個float座標實際對應的像素值,此時經過offset修正之後的輸入特徵圖的維度應該爲 [b, c, h, w, N];
  • 對上面得到的特徵圖進行reshape得到新的形狀爲 [b, h x k_size, w x k_size, c],使用普通卷積進行卷積運算,不過此時的 stride = k_size;

2.2 Deformable ROI Pooling

ROI pooling最早是在Fast R-CNN中第一次出現,用在RPN之後,對形狀不一的ROI做統一處理得到相同尺度的ROIs。
ROI Pooling
給定輸入feature map爲x,尺寸爲 w×hw\times h ,左上角爲 p0p_{0},ROI pooling將特徵圖劃分爲 k×kk\times k 個bins,輸出是一個 k×kk\times k 的feature map y。
對於普通的ROI Pooling,第(i, j)個bin( 0i,j<k0\leq i,j <k ),有:
在這裏插入圖片描述
和等式(2)相似,在deformable RoI Pooling中,offsets被添加到bins空間位置中,變爲:
在這裏插入圖片描述
第一部分先通過常規的ROI Pooling得到ROI特徵圖,維度爲[b, k, k ,c],展開成維度爲 kkck*k*c 的向量後接 kk2k*k*2的FC層,再reshape成維度爲 [b, k, k, 2]的offset;第二部分也是先基於offset執行雙線性插值操作,然後再執行常規的ROI Pooling。
這裏要注意的有兩點:

  • feature map此處是用fc來學習的,而且也不是直接學習最終偏移量,而是學習 Δp^ij\Delta \hat{p}_{ij} ,這是爲了讓 offset 的學習不依賴於 ROI 的大小,然後通過下面的式子計算得到 Δpij\Delta p_{ij}
    在這裏插入圖片描述
  • 這個變量會和(w, h)做點乘,然後再乘以一個尺度因子,其中w,h是RoI的寬和高,而 γ\gamma 是一個0.1的常數因子……前者是爲了讓deformable能和RoI的尺度結合起來,更好地估計偏移位置;而後者是爲了防止偏移量太大甚至超出RoI和整個圖像……之前也看到有人認爲,DNN網絡最後幾層經常會出現感受野不足的情況,所以空洞卷積纔會效果比一般卷積好,如果不加約束,deformable的RoI可能無限制地擴大。
    在這裏插入圖片描述
    Position-Sensitive (PS) RoI Pooling
    在這裏插入圖片描述

這個概念最早出現在 R-RCN中,RoI Pooling Layer之前和之後都有卷積層,並且RoI Pooling Layer之後的卷積層不是共享計算的,它們是針對每個RoI進行特徵提取的,影響了網絡的速度。而PS RoI Pooling 的提出是爲了在破壞全卷積網絡的平移不變性,因爲檢測是位置敏感的任務,具體詳解可見:詳解R-FCN

Deformable position-sensitive(PS) ROI pooling,也是和前面一樣分爲兩個部分,第一部分先通過卷積核數量爲 2k2(c+1)2k^{2}(c+1)的卷積層得到輸出特徵圖,其中 k2k^{2} 表示bin的數量,c表示目標的類別數,1表示背景,然後基於該特徵圖通過PS RoI pooling操作得到輸出維度爲[batch_size, 2(c+1), k, k]的offset。第二部分先通過卷積核數量爲 k2(c+1)k^{2}(c+1) 的卷積層得到輸出特徵圖,這是R-FCN算法中的常規操作,然後基於該特徵圖和第一部分輸出的offset執行deformable PS RoI pooling操作,deformable PS RoI pooling也可以看作是先執行插值計算,然後執行PS RoI pooling。

2.3 Deformable ConvNets

deformable conv和RoI pooling與普通的卷積和RoI pooling具有相同的輸入和輸出,因此,可以直接用它們進行進行替換。在訓練中,添加的卷積層和全連接層的權重初始化爲0,學習率默認爲1,FC層除外(爲0.01)。然後使用反向傳播進行梯度更新,對於deformable conv和deformable RoI pooling的反向傳播梯度更新公式爲:
在這裏插入圖片描述
在這裏插入圖片描述
論文說在網絡的最後 3 層( kernel >1 的層)加 deformable conv 比較有效果。

3. Understanding Deformable ConvNets

Figure5是常規卷積和deformable convolution的差異示意圖,其實也是這篇文章的出發點。圖中以2個3×3卷積層爲例,可以看出對於常規卷積層,卷積操作的位置都是固定的,而deformable convolution因爲引入offset,所以卷積操作的位置會在監督信息的指導下進行選擇,能夠較好地適應輸入目標的尺度、形狀,因此提取到的特徵更加豐富而且都能集中在目標上。
在這裏插入圖片描述
Figure6是Figure5示意圖在實際圖像上的效果,在Figure6的每張圖像上都有綠色的和紅色點,其中綠色點有1個,這個點表示conv5輸出特徵圖上的1個位置,往前3個卷積層理論上就可以得到9^3=729個紅色點,也就是卷積層計算的區域,當然這729個點有大部分是越界的,所以實際圖中顯示的紅色點會少於729。可以看出當綠色點在目標上時,紅色點所在的區域也集中在目標位置,而且基本能夠覆蓋不同尺寸的目標,因此deformable convolution不僅能夠提取更加有效的特徵,而且感受野也比常規的卷積層大。當綠色點在背景上時,紅色點所在區域比較分散,應該是不斷往外尋找並確認該區域是否是背景區域的過程。
在這裏插入圖片描述
Figure7是deformable PS RoI pooling在實際圖像上的效果(deformable RoI pooling也是同理),每張圖中都有1個RoI(黃色框)和3×3=9個bin(紅色框),也就是k設置成了3,在常規的PS RoI pooling中這9個bin的位置應該是均勻劃分的,但是在deformable PS RoI pooling中是集中在目標區域的,說明deformable結構確實是可以讓網絡的attention更集中於目標區域。
在這裏插入圖片描述

4. Experiments——消融研究

Deformable Convolution:Table 1評估了當使用ResNet-101作爲特徵提取網絡時deformable convolution的影響。可以看出來當更多的deformable conv替換了傳統標準卷積時,精度在穩步提升,尤其是對DeepLab和class-aware RPN,在DeepLab中使用了3個deformable layers,其餘的使用了6個。在剩下的實驗中,作者都是使用了3個deformable layers。

Table1是在PASCAL VOC數據集上做的對比實驗,包括在多種圖像任務和網絡的不同階段添加deformable層的差異。可以看到將res5的3個卷積層替換成deformable convolution就有明顯的效果提升,而且基本飽和了。這部分其實主要是數據集(VOC)的原因導致替換更多的deformable結構沒有明顯提升,在v2中作者將數據集換成COCO做這個對比實驗就實現了效果提升,因此有時候除了思考網絡設計外,也應該多思考數據集是否成爲效果提升的瓶頸。
在這裏插入圖片描述
Table2展示了 effective dilation values的統計特性(mean和std),它說明了:

  • deformable filters的感受野和目標尺寸相關,它是根據實際目標學習而來的;
  • 在背景區域的filter sizes在那些中等和大目標之間,這表明對於識別背景區域來說一個相當大的感受野是必要的;
    在這裏插入圖片描述
    Table3主要是和atrous convolution(也就是dilated convolution)作對比,因爲atrous convolution也是增加了傳統卷積操作的感受野,所以這個對比實驗是在證明都增加感受野的同時,以固定方式擴大感受野和更加靈活地聚焦到目標區域的優劣.
    在這裏插入圖片描述
    模型複雜度和運行時間的對比如Table 4所示:
    在這裏插入圖片描述
    Table5是在COCO數據集上關於添加deformable結構的效果對比,提升還是比較明顯的。
    在這裏插入圖片描述

參考文獻:

起名什麼的最煩啦:《Deformable Convolutional Networks》論文筆記

揚之水:目標檢測論文閱讀:Deformable Convolutional Networks

https://blog.csdn.net/u014380165/article/details/84894089

https://blog.csdn.net/scut_salmon/article/details/97050908

發佈了85 篇原創文章 · 獲贊 55 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章