論文|一文讀懂《Deformable Convolutional Networks》可變神經(jīng)網(wǎng)絡(luò)的精髓

未經(jīng)允許,不得轉(zhuǎn)載,謝謝~~

《Deformable Convolutional Networks》是微軟亞洲研究院發(fā)在ICCV2017上的論文。

原文鏈接: Deformable Convolutional Networks

這是一篇我琢磨了很久才看懂的論文,也是每看一次都覺得idea很驚艷的一篇論文。

那主要從以下幾個(gè)問題進(jìn)行介紹吧:

  • 為什么要提出可變的神經(jīng)網(wǎng)絡(luò)?
  • 論文的主要貢獻(xiàn)在哪里?
  • 可變卷積層是怎么樣實(shí)現(xiàn)的?

為什么要提出可變的神經(jīng)網(wǎng)絡(luò)?

怎么樣在計(jì)算機(jī)視覺識(shí)別上更好的適應(yīng)物體在大小,姿態(tài),角度上的幾何變換?

通俗地說就是一個(gè)物體比如杯子,由于拍攝的遠(yuǎn)近,視角等因素最后呈現(xiàn)的樣子在大小,角度上都會(huì)有差別,那怎么樣更好的在這些差別存在的情況下識(shí)別這個(gè)杯子呢?

一般來說,有2種方法可以解決這個(gè)問題:

  1. 用充分多的變種構(gòu)建訓(xùn)練數(shù)據(jù)庫;
    還是以杯子為例,即采集不同大小,姿勢的杯子作為訓(xùn)練數(shù)據(jù)。
  2. 用變換不變特征;
    例如尺度不變特征轉(zhuǎn)換的SIFT就屬于這一類方法。

這兩種方法都具有一些共同的局限性:

  • 都假定幾何變換是固定的且可以預(yù)知的,對(duì)于新出現(xiàn)的任務(wù)處理效果不好;
  • 手動(dòng)去采集或者設(shè)計(jì)不同的特征非常的困難。

廣泛應(yīng)用于深度學(xué)習(xí)的CNN網(wǎng)絡(luò)也由于其卷積核是固定的形狀,所以很難處理這種變換的情況。
以上就是現(xiàn)有方法對(duì)于解決幾何變換問題的不足,哪里有需求,哪里就會(huì)有創(chuàng)新,這也正是該論文的閃光之處。

論文的主要貢獻(xiàn)在哪里?

論文提出了兩種用于提高CNN應(yīng)對(duì)幾何變換的建模能力:

  1. deformable convolution;
  2. deformable ROI pooling;
  3. 第一次發(fā)現(xiàn)在深度網(wǎng)絡(luò)總學(xué)習(xí)稠密的空間變化對(duì)復(fù)雜的任務(wù)有幫助。

兩個(gè)方法都是基于用額外的偏置來增強(qiáng)空間采樣位置的想法,其基本原理都是類似的,因此本文只講解可變卷積的實(shí)現(xiàn),具體的可以詳細(xì)去看論文。

可變卷積層是怎么樣實(shí)現(xiàn)的?

核心思想

以2D卷積,3×3的卷積核為例,先上圖:


圖1
  • 圖(a)是我們最熟悉的標(biāo)準(zhǔn)卷積網(wǎng)絡(luò)。
  • 圖(b)是變換之后的卷積采樣點(diǎn)分布,輕綠色的表示原來的采樣點(diǎn),藍(lán)色的表示變換后的采樣點(diǎn)。
  • 圖(c)是圖(b)的一種特例:采樣尺寸放大的情況。
  • 圖(d)是圖(b)的一種特例:采樣尺寸放大+旋轉(zhuǎn)的情況。

普通2D卷積的實(shí)質(zhì)其實(shí)是用卷積核在輸入特征上滑動(dòng),各個(gè)采樣點(diǎn)乘上模板的權(quán)重之和得到一個(gè)新的值。
以圖(a)為例,最中間的綠色點(diǎn)卷積后的值就等于9個(gè)采樣點(diǎn)對(duì)應(yīng)的x值乘上對(duì)應(yīng)卷積核的權(quán)重之和。

這里注意一個(gè)思維的轉(zhuǎn)換:采樣點(diǎn)指的是原輸入特征上對(duì)應(yīng)點(diǎn),權(quán)重指的是卷積核對(duì)應(yīng)的值。

用數(shù)學(xué)方法來表示:
以坐標(biāo)化的方式來表示接受域:

那么原輸入特征中的點(diǎn)P0卷積后的值就等于:

其實(shí)就是就是采樣點(diǎn)的值×卷積核權(quán)重之和。

那么可變卷積的實(shí)現(xiàn)是不是只需要改變采樣點(diǎn)的位置即可。而這個(gè)改變就可以根據(jù)給每一個(gè)采樣點(diǎn)+一個(gè)偏置deta-p(x方向的偏置,y方向的偏置)得到,偏置具體值仍然是通過神經(jīng)網(wǎng)絡(luò)學(xué)習(xí)的。。
以圖b為例,每個(gè)輕綠色的點(diǎn)表示原來常規(guī)卷積下的采樣點(diǎn),現(xiàn)在每一個(gè)點(diǎn)都移到了新的位置(藍(lán)色處),而且每個(gè)點(diǎn)的移動(dòng)方向和長度都可以是不一樣的。

這里先不管是偏置怎么樣得到的,假設(shè)我們已經(jīng)知道每個(gè)采樣點(diǎn)對(duì)應(yīng)的偏置值。那么點(diǎn)P0卷積之后的值就等于:

這樣呢就完成了可變卷積的的部分,也就是我們看到的圖(b)。

圖(c)和圖(d)都是圖(b)的特殊情況。
圖(c)中的采樣區(qū)域變大了,很自然的可以想到這對(duì)于物體尺寸變化的處理效果是會(huì)比較好的,能比較完整地抽象到物體的特征。
圖(d)也是同樣的道理,可以很好的理解這種變換后的接受域?qū)τ谖矬w尺寸變化+旋轉(zhuǎn)之后的特征學(xué)習(xí)是有益的。

細(xì)節(jié)補(bǔ)充

由于學(xué)到的偏置一般都很小,新的坐標(biāo)并不能落在整數(shù)的坐標(biāo)點(diǎn)上,所以需要用到雙線性插值來實(shí)現(xiàn)。
這里簡單介紹一下是什么意思,對(duì)于我們的新采樣點(diǎn)p_new, 大概率不會(huì)剛好落在整數(shù)的坐標(biāo)點(diǎn)上,但它一定能找到與它最近的4個(gè)點(diǎn),并且落在這4個(gè)點(diǎn)的內(nèi)部。

那么就利用這四個(gè)點(diǎn)進(jìn)行雙線性插值即可,在scipy的包中提供了這個(gè)函數(shù):
from scipy.ndimage.interpolation import map_coordinates

我們來看一下運(yùn)行效果就知道了

import numpy as np
from scipy.ndimage.interpolation import map_coordinates as sp_map_coordinates

input=np.arange(12,dtype=float).reshape(3,4)
print input
coords=[[0.5,1.5,1.8],[0.5,1.2,2.0]]
output_array=sp_map_coordinates(input,coords,order=1)
print output_array

運(yùn)行結(jié)果如下所示:

如上圖,input為輸入的數(shù)組,order=1 表示為線性插值。
coords里面存的是列表,為(npoints,2)大小的,左邊的數(shù)組代表要插入的x坐標(biāo),右邊的數(shù)組表示要插入的y坐標(biāo)。即在此處要在原來的inputs中插入三個(gè)點(diǎn),這是三個(gè)點(diǎn)的坐標(biāo)分別為(0.5,0.5) (1.5,1.2) (1.8,2.0),以(0.5,0.5)為例,下標(biāo)落在(0,0) , (0,1), (1,0), (1,1)這四個(gè)點(diǎn)之間,即要在在值0,1,4,5之間差值,所以這里用了雙線性插值,最后得到的值為2.5

具體實(shí)現(xiàn)

這里論文中讓我很驚艷的一點(diǎn)是:
上面的圖1我們看到的好像是對(duì)卷積核的坐標(biāo)做了偏置。
但其實(shí)還是上文提到的思維轉(zhuǎn)換的問題:可變卷積是由改變采樣點(diǎn)的位置決定的,而采樣點(diǎn)是對(duì)于輸入特征而言的。更宏觀一點(diǎn)來看,它是對(duì)采樣點(diǎn)對(duì)了偏置,就是對(duì)輸入feature的每個(gè)位置學(xué)習(xí)一個(gè)offset。

這里給出論文中的結(jié)構(gòu)圖:

圖2

這里的offset filed就是通過卷積層conv學(xué)到的偏置。
因?yàn)檩斎胩卣鱥nput feature map 上的每個(gè)點(diǎn)都需要一個(gè)偏置offset(x上的偏置,y上的偏置), 所以得到的offest field的平面大小的input feature map是一樣的,但深度方向是input feature map的2倍(x,y兩個(gè)方向的偏置)。
這樣就得到每個(gè)點(diǎn)p的偏置窗口了,也就是得到了上文圖1中的圖(b)。
得到偏置窗口之后就可以用上文中的方式去得到最后的output feature map了。

寫在最后

文中圖片來自原文: Deformable Convolutional Networks

這真的是一篇?jiǎng)?chuàng)新點(diǎn)新奇的文章,超級(jí)推薦閱讀。
有理解不到位的地方歡迎簡信交流~~

轉(zhuǎn)載記得注明出處,感激不盡。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容