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

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

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

原文鏈接: Deformable Convolutional Networks

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

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

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

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

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

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

一般來說砾脑,有2種方法可以解決這個問題:

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

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

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

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

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

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

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

兩個方法都是基于用額外的偏置來增強(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í)是用卷積核在輸入特征上滑動喷市,各個采樣點(diǎn)乘上模板的權(quán)重之和得到一個新的值。
以圖(a)為例威恼,最中間的綠色點(diǎn)卷積后的值就等于9個采樣點(diǎn)對應(yīng)的x值乘上對應(yīng)卷積核的權(quán)重之和品姓。

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

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

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

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

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

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

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

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

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

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

那么就利用這四個點(diǎn)進(jìn)行雙線性插值即可妥衣,在scipy的包中提供了這個函數(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中插入三個點(diǎn),這是三個點(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)這四個點(diǎn)之間,即要在在值0器钟,1津坑,4,5之間差值傲霸,所以這里用了雙線性插值疆瑰,最后得到的值為2.5

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

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

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

圖2

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

寫在最后

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

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

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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末靖诗,一起剝皮案震驚了整個濱河市郭怪,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌刊橘,老刑警劉巖鄙才,帶你破解...
    沈念sama閱讀 221,430評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異促绵,居然都是意外死亡攒庵,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,406評論 3 398
  • 文/潘曉璐 我一進(jìn)店門败晴,熙熙樓的掌柜王于貴愁眉苦臉地迎上來浓冒,“玉大人,你說我怎么就攤上這事尖坤∥壤粒” “怎么了?”我有些...
    開封第一講書人閱讀 167,834評論 0 360
  • 文/不壞的土叔 我叫張陵慢味,是天一觀的道長场梆。 經(jīng)常有香客問我,道長纯路,這世上最難降的妖魔是什么辙谜? 我笑而不...
    開封第一講書人閱讀 59,543評論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮感昼,結(jié)果婚禮上装哆,老公的妹妹穿的比我還像新娘。我一直安慰自己定嗓,他們只是感情好蜕琴,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,547評論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著宵溅,像睡著了一般凌简。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上恃逻,一...
    開封第一講書人閱讀 52,196評論 1 308
  • 那天雏搂,我揣著相機(jī)與錄音,去河邊找鬼寇损。 笑死凸郑,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的矛市。 我是一名探鬼主播芙沥,決...
    沈念sama閱讀 40,776評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了而昨?” 一聲冷哼從身側(cè)響起救氯,我...
    開封第一講書人閱讀 39,671評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎歌憨,沒想到半個月后着憨,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,221評論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡务嫡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,303評論 3 340
  • 正文 我和宋清朗相戀三年享扔,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片植袍。...
    茶點(diǎn)故事閱讀 40,444評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡惧眠,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出于个,到底是詐尸還是另有隱情氛魁,我是刑警寧澤,帶...
    沈念sama閱讀 36,134評論 5 350
  • 正文 年R本政府宣布厅篓,位于F島的核電站秀存,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏羽氮。R本人自食惡果不足惜或链,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,810評論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望档押。 院中可真熱鬧澳盐,春花似錦、人聲如沸令宿。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,285評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽粒没。三九已至筛婉,卻和暖如春婿脸,著一層夾襖步出監(jiān)牢的瞬間唾糯,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,399評論 1 272
  • 我被黑心中介騙來泰國打工归敬, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留响蓉,地道東北人硕勿。 一個月前我還...
    沈念sama閱讀 48,837評論 3 376
  • 正文 我出身青樓,卻偏偏與公主長得像厕妖,于是被迫代替她去往敵國和親首尼。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,455評論 2 359

推薦閱讀更多精彩內(nèi)容