在機器視覺領域的深度神經網絡中有一個概念叫作感覺野,用來表示網絡內部的不一樣位置的神經元對原圖像的感覺範圍的大小。神經元之因此沒法對原始圖像的全部信息進行感知,是由於在這些網絡結構中廣泛使用卷積層和pooling層,在層與層之間均爲局部相連(經過sliding filter)。神經元感覺野的值越大表示其能接觸到的原始圖像範圍就越大,也意味着他可能蘊含更爲全局、語義層次更高的特徵;而值越小則表示其所包含的特徵越趨向於局部和細節。所以感覺野的值能夠大體用來判斷每一層的抽象層次。網絡
那麼這個感覺野要如何計算呢?咱們先看下面這個例子。ide
能夠看到在Conv1中的每個單元所能看到的原始圖像範圍是3*3,而因爲Conv2的每一個單元都是由 範圍的Conv1構成,所以回溯到原始圖像,實際上是可以看到
的原始圖像範圍的。所以咱們說Conv1的感覺野是3,Conv2的感覺野是5. 輸入圖像的每一個單元的感覺野被定義爲1,這應該很好理解,由於每一個像素只能看到本身。es5
經過上圖這種圖示的方式咱們能夠「目測」出每一層的感覺野是多大,但對於層數過多、過於複雜的網絡結構來講,用這種辦法可能就不夠聰明瞭。所以咱們但願可以概括出這其中的規律,並用公式來描述,這樣就能夠對任意複雜的網絡結構計算其每一層的感覺野了。那麼咱們下面看看這其中的規律爲什麼。3d
因爲圖像是二維的,具備空間信息,所以感覺野的實質其實也是一個二維區域。但業界一般將感覺野定義爲一個正方形區域,所以也就使用邊長來描述其大小了。在接下來的討論中,本文也只考慮寬度一個方向。咱們先按照下圖所示對輸入圖像的像素進行編號。orm
接下來咱們使用一種並不常見的方式來展現CNN的層與層之間的關係(以下圖,請將腦殼向左倒45°觀看>_<),而且配上咱們對原圖像的編號。blog
圖中黑色的數字所構成的層爲原圖像或者是卷積層,數字表示某單元可以看到的原始圖像像素。咱們用 來表示第
個卷積層中,每一個單元的感覺野(即數字序列的長度);藍色的部分表示卷積操做,用
和
分別表示第
個卷積層的kernel_size和stride。get
對Raw Image進行kernel_size=3, stride 2的卷積操做所獲得的fmap1 (fmap爲feature map的簡稱,爲每個conv層所產生的輸出)的結果是顯而易見的。序列[1 2 3]表示fmap1的第一個單元能看見原圖像中的1,2,3這三個像素,而第二個單元則能看見3,4,5。這兩個單元隨後又被kernel_size=2,stride 1的Filter 2進行卷積,於是獲得的fmap2的第一個單元可以看見原圖像中的1,2,3,4,5共5個像素(即取[1 2 3]和[3 4 5]的並集)。form
接下來咱們嘗試一下如何用公式來表述上述過程。能夠看到,[1 2 3]和[3 4 5]之間由於Filter 1的stride 2而錯開(偏移)了兩位,而3是重疊的。對於卷積兩個感覺野爲3的上層單元,下一層最大能得到的感覺野爲 ,但由於有重疊,所以要減去(kernel_size - 1)個重疊部分,而重疊部分的計算方式則爲感覺野減去前面所說的偏移量,這裏是2. 所以咱們就獲得
。繼續往下一層看,咱們會發現[1 2 3 4 5]和[3 4 5 6 7]的偏移量仍爲2,並不簡單地等於上一層的
,這是由於以前的stride對後續層的影響是永久性的,並且是累積相乘的關係(例如,在fmap3中,偏移量已經累積到4了),也就是說
應該這樣求class
。神經網絡
以此類推,
。
因而咱們就能夠獲得關於計算感覺野的抽象公式了:
,
通過簡單的代數變換以後,最終形式爲:
。
這種計算方法來時知乎,原文連接:https://zhuanlan.zhihu.com/p/28492837
原文寫的很好,解釋方法新奇易懂,因此直接粘過來了,方便之後本身查找。
#TODO