天天看點

目标檢測之Deformable Convolutional Networks

本文參考以下連結,如果侵權,聯系删除

參考

Deformable Convolutional Networks-ICCV2017

概要

圖像任務中目标的尺寸、形狀變化不一,雖然現有的深度網絡對此有一定的特征提取能力,但并不是最優的,是以通過在卷積層中引入offset(deformable convolution)和在RoI pooling層中引入offset(deformable RoI pooling)提高網絡的特征提取效果.

這個offset的作用是使網絡在提取特征時更多的注意力能聚焦到和訓練目标相關的位置,能夠更好地覆寫不同尺度和形狀的目标,而且由于offset也是在監督資訊的指導下進行學習的,是以不用像資料增強一樣需要先驗知識才能有好的效果。

deformable convolution

目标檢測之Deformable Convolutional Networks
目标檢測之Deformable Convolutional Networks

整體上可以分成2部分,第一部分是基于輸入特征圖生成offset,第二部分是基于輸入特征圖和offset通過deformable convolution生成輸出特征圖。

假設輸入特征圖高和寬分别是h和w,第二部分的卷積核尺寸是kh和kw。那麼第一部分卷積層的卷積核數量是2×kh×kw,這個2表示x軸和y軸兩個方向上的偏移值,而且輸出特征圖的寬高和輸入特征圖的寬高一樣,這樣offset的次元就是[batch_size, 2×kh×kw, h, w],假如第二部分設定了group參數(預設代碼中設定為4),那麼第一部分的卷積核數量就是2×kh×kw×deformable_group,相當于每一個group用一套offset。

第二部分的deformable convolution可以看作是先基于第一部分生成的offset執行插值計算,然後再執行普通卷積操作的過程。

下圖是正常卷積和deformable convolution的差異示意圖,其實也是這篇文章的出發點。

圖中以2個3×3卷積層為例,可以看出對于正常卷積層,卷積操作的位置都是固定的,而deformable convolution因為引入offset,是以卷積操作的位置會在監督資訊的指導下進行選擇,能夠較好地适應輸入目标的尺度、形狀,是以提取到的特征更加豐富而且都能集中在目标上。

目标檢測之Deformable Convolutional Networks

Figure6是Figure5示意圖在實際圖像上的效果,在Figure6的每張圖像上都有綠色的和紅色點,其中綠色點有1個,這個點表示conv5輸出特征圖上的1個位置,往前3個卷積層理論上就可以得到9^3=729個紅色點,也就是卷積層計算的區域,當然這729個點有大部分是越界的,是以實際圖中顯示的紅色點會少于729。

可以看出當綠色點在目标上時,紅色點所在的區域也集中在目标位置,而且基本能夠覆寫不同尺寸的目标,是以deformable convolution不僅能夠提取更加有效的特征,而且感受野也比正常的卷積層大。當綠色點在背景上時,紅色點所在區域比較分散,應該是不斷往外尋找并确認該區域是否是背景區域的過程。

目标檢測之Deformable Convolutional Networks

deformable RoI pooling

目标檢測之Deformable Convolutional Networks

整體上可以分為2部分,第一部分是基于輸入特征圖生成offset,第二部分是基于輸入特征圖和offset通過deformable RoI pooling生成輸出RoI特征圖。

第一部分先通過正常的RoI pooling得到RoI特征圖(假設将每個RoI劃分成k×k個bin,Figure3中是劃分成3×3個bin的示意圖),然後通過一個輸出節點數為k×k×2的全連接配接層得到offset資訊,最後再reshape成次元為[batch_size, 2, k, k]的offset。

第二部分也是先基于offset執行插值操作,然後再執行正常的RoI pooling,這樣就完成了deformable RoI pooling。

是以deformabl RoI pooling和傳統的RoI pooling的差異在于每個RoI中bin的位置是根據監督資訊進行學習的,而不是固定劃分的。

deformable position-sensitive(PS)RoI pooling

目标檢測之Deformable Convolutional Networks

第一部分先通過卷積核數量為2×k×k×(C+1)的卷積層得到輸出特征圖,其中k×k表示bin的數量,C表示目标的類别數,1表示背景,然後基于該特征圖通過PS RoI pooling操作得到輸出次元為[batch_size, 2×(C+1), k, k]的offset。

第二部分先通過卷積核數量為kxk(C+1)的卷積層得到輸出特征圖,這是R-FCN算法中的正常操作,然後基于該特征圖和第一部分輸出的offset執行deformable PS RoI pooling操作,deformable PS RoI pooling也可以看作是先執行插值計算,然後執行PS RoI pooling。

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更集中于目标區域。

目标檢測之Deformable Convolutional Networks

實驗細節

在代碼實作上,主網絡采用ResNet101,但是原本stride=32的res5部分修改為stride=16,同時deformable convolution也隻在res5部分的3×3卷積層添加(後續的Deformable ConveNet v2對這部分做了改進),另外為了彌補修改stride帶來的感受野減小,在res5的deformable convolution部分将dilate參數設定為2。

實驗結果

Table1是在PASCAL VOC資料集上做的對比實驗,包括在多種圖像任務和網絡的不同階段添加deformable層的差異。可以看到将res5的3個卷積層替換成deformable convolution就有明顯的效果提升,而且基本飽和了。這部分其實主要是資料集(VOC)的原因導緻替換更多的deformable結構沒有明顯提升,在v2中作者将資料集換成COCO做這個對比實驗就實作了效果提升,是以有時候除了思考網絡設計外,也應該多思考資料集是否成為效果提升的瓶頸。

目标檢測之Deformable Convolutional Networks

Table3主要是和atrous convolution(也就是dilated convolution)作對比,因為atrous convolution也是增加了傳統卷積操作的感受野,是以這個對比實驗是在證明都增加感受野的同時,以固定方式擴大感受野和更加靈活地聚焦到目标區域的優劣。

目标檢測之Deformable Convolutional Networks

Table4是模型大小和速度的對比,整體而言并不會引入太多的存儲和計算量。

目标檢測之Deformable Convolutional Networks

Table5是在COCO資料集上關于添加deformable結構的效果對比,提升還是比較明顯的。

目标檢測之Deformable Convolutional Networks

繼續閱讀