Paper link: openaccess.thecvf.com/c Code link: github.com/msracver/Def

Key Words: Deformable,CNNS

  • Abstract

如何有效地對幾何圖形的變化進行建模一直是一個挑戰,大體上有兩種處理方法:(1)構建一個包含各種變化的數據集,其本質是數據擴增(2)使用具有形變不變性的特徵和演算法(如SIFT)。這兩種方法都有很大的侷限性:幾何形變被假設是固定和已知的,這是一種先驗信息,用這些已知的形變去處理未知的形變是不合理的;手工設計的特徵或演算法無法應對過度複雜的形變,即使該形變是已知的。近年來,CNNs在計算機視覺領域取得了飛速的發展和進步,在圖像分類,語義分割,目標檢測領域都有很好的應用。然後鑒於CNNs固定的幾何結構,導致對幾何形變的建模受到限制。本文提出了兩個新模塊來提升CNNs的形變建模能力,稱為「deformable convolution」和「deformable ROI pooling」,這兩個方法都是基於在模塊中增加額外偏移量的空間採樣位置和從目標任務中學習到偏移量且不需要額外的監督。這些新的模塊可以很容易的取代現有CNNs的普通模塊並且利用反向傳播進行端到端的訓練,產生可變形的卷積神經網路。該方法在語義分割和目標檢測上有很好的表現。

  • Introduction

CNNs對大型,未知形狀變換的建模存在固有的缺陷,這種缺陷來源於CNNs模塊固有的幾何結構:卷積單元對輸入特徵圖的固定位置進行採樣;池化層以固定的比例進行池化;即使是ROI pooling也是將ROI分割到固定的bin中去。這些特性是有影響的,例如,在同一層Conv中,所有的激活單元的感受野是一樣的,但由於不同位置可能對應著不同尺度或變形的物體,因此對尺度或者感受野大小進行自適應是進行精確定位所需要的。為瞭解決或者減輕這個問題,本文提出了兩種新的模塊,可變形卷積(deformable conv)和可變形感興趣區域池化(deformable ROI Pooling),來提高對形變的建模能力。這兩個模塊都是基於一個平行網路學習offset(偏移),使得卷積核在input feature map的採樣點發生偏移,集中於我們感興趣的區域或者目標。通過研究發現,標準卷積中的規則格點採樣是導致網路難以適應幾何形變的「罪魁禍首」,為了削弱這個限制,對卷積核中每個採樣點的位置都增加了一個偏移變數,可以實現在當前位置附近隨意採樣而不侷限於之前的規則格點。如下圖所示,是常見的採樣點和可變形卷積採樣的對比

(a)是常見的3x3卷積核的採樣方式,(b)是採樣可變形卷積,加上偏移量之後的採樣點的變化,其中(c)(d)是可變形卷積的特殊形式

  • Networks
    • Deformable Convolution

(1)首先聲明一點,在可變形卷積中,可變形卷積操作和池化操作都是2維的,都是在同一channel上進行的,常規的卷積操作主要可以分為兩部分:(1)在輸入的feature map上使用規則網格R進行採樣;(2)進行加權運算,R定義了感受野的大小和擴張

對於在輸出的feature map上的每個位置P0,通過下列式子進行計算:

其中,Pn是對R中所列位置的枚舉

(2)可變形卷積的操作是不同的,在可變形網路的操作中,常規的規則網格R通過增加一個偏移量進行擴張,同樣的位置P0變為:

現在,採樣的位置變成了不規則位置,由於偏移量△Pn通常是小數,因此我們通過雙線性插值法進行實現,公式為:

(3)拓展:關於雙線性插值 首先看,雙線性插值的作用,對圖像進行縮放。假設原圖像大小為m*n,目標圖像的大小為a*b,那麼兩幅圖像的邊長比為m/a,n/b。注意,通常這個比例不是整數,而非整數的坐標是無法在圖像這種離散數據上使用的。雙線性插值通過尋找距離這個對應坐標最近的四個像素點,來計算該點的值。比如,對應的坐標為(2.5,4.5),那麼最近的像素是(2,4)(2,5)(3,4)(3,5)

若圖像為灰度圖像,那麼(I,j)的灰度值可以通過以下公式計算:

其中,pi(i=1,2,3,4)為最近的四個像素點,wi(i=1,2,3,4)為各點相應權值 來看一下可變形卷積的網路結構:如下圖所示,大體流程為,在輸入的feature map中,原始的通過sliding window得到的是綠框,引入可變形卷積後,我們把原來的卷積網路分為兩路,共享input feature map,其中上面的一路用一個額外的conv層來學習offset,得到H*W*2N的輸出offset,其中,2N的意思是有x,y兩個方向的偏移,得到這個之後,我們對原始卷積的每一個窗口,都不再是原來規整的sliding window(input feature map中的綠框)而是經過平移後的window(input feature map中的籃框),取得數據後計算過程和常規卷積一樣,即input feature map和offset共同作為deformable conv層的輸入。

注意:這裡有一個非常非常非常容易混淆的點,所謂的deformable,到底deformable在哪?很多人可能以為deformable conv學習的是可變形的kernel,其實不是不是不是!本文並不是對kernel學習offset而是對feature的每個位置學習一個offset。

舉個例子來看:可變形卷積的流程為:

  • Deformable ROI Pooling

ROI Pooling模塊是two-stage中常見的池化方法,基於目標檢測方法中所有的region proposal。將任意輸入大小的矩形調整為固定尺寸大小的feature。給定input feature map x 和一個大小為w*h,位於左上角的區域P0,ROI Pooling將會把這個ROI劃分為k*k個bins,同時輸出一個size為k*k的feature map y,可以用如下公式表示:

其中,nij是bin中像素的數量 有了這個基礎,我們再來看可變形池化,公式如下:

相比普通ROI Pooling,同樣增加了一個offset,下圖為網路結構:具體操作為,首先,通過普通的ROI Pooling得到一個feature map,如下圖中的綠色塊,通過得到的這個feature map,加上一個全連接層,生成每一個位置的offset,然後按照上面的公式得到△Pij,為了讓offset的數據和ROI 的尺寸匹配,需要對offset進行微調,此處不是重點。全連接層的參數可以通過反向傳播進行學習。

  • How to use

首先回顧一下SOTA的CNN結構,可以概括為兩方面,首先,一個深度全卷積網路用於對整張圖片產生feature map。其次,一個淺層的目標明確的網路,從feature map產生我們需要的結果。下圖展示了標準的卷積和可變形卷積之間的對比,可以看到,在標準卷積中,圖中的區域表示在普通卷積和可變形卷積中的感受野。這張圖怎麼看呢,首先看頂層的feature map,我們取兩個激活點(分別在大羊和小羊身上),代表的是不同尺度和形狀。中間層:top層的feature map經過3*3的卷積後,需要抽樣的一些點。最底層:再經過一個3*3的卷積,需要採樣的點。通過對比可以明顯的看出,可變形卷積的採樣位置更符合物體本身的形狀和尺寸,而標準卷積的形式卻不能做到這一點。

下圖是一些實例對比:

推薦閱讀:

相關文章