感受野就是輸出的feature map中的一個像素點對應到輸入圖像的映射;下圖中特征點(綠色和黃色)對應的陰影部分即為感受野。
左邊的圖為正常的普通卷積過程;右邊的為輸入和輸出大小一樣的卷積過程,采用的方法是在得到的feature map中的特征點之間加入0(與帶洞卷積類似,但不是一樣的)
右邊的好處是,可以明顯的觀察到每個特征點所映射的位置;特征點位於感受野面積的中心。
增大下層感受野的方式之一:stride >1 的一個作用就是增大下層的感受野;大卷積核也增大感受野,帶洞卷積也增大。
感受野計算公式:RF = ((RF -1)* stride) + fsize 其中公式里RF為上一層的感受野,第一次一般為1,fsize是kernel size,這個公式是用來計算多層卷積層的感受野的。
感受野計算時有下面的幾個情況需要說明:
(1)第一層卷積層的輸出特征圖像素的感受野的大小等於濾波器的大小
(2)深層卷積層的感受野大小和它之前所有層的濾波器大小和步長有關系
(3)計算感受野大小時,忽略了圖像邊緣的影響,即不考慮padding的大小

帶洞卷積是卷積核帶洞,動畫演示效果圖鏈接:https://www.zhihu.com/question/54149221


帶洞卷積提出的目的,普通的fcn等都是需要卷積之后進行池化,池化的目的一是減少參數,二是增大感受野,但是之后還需要進行unsampling,這時就不可避免的會漏掉某些信息,結果會很
粗糙;人們就想有么有一種方法可以不進行池化達到同樣的目的,就提出了帶洞卷積,增大感受野的同時不損失信息。
Deeplab這里使用了一個非常優雅的做法:將VGG網絡的pool4和pool5層的stride由原來的2改為了1,再加上 1 padding。就是這樣一個改動,使得vgg網絡總的stride由原來的32變成8,進而使得在輸入圖像為514x514時,fc7能得到67x67的score map, 要比FCN確實要dense很多很多。
普通的卷積的卷積核上的相鄰的權重在feature map上的映射是連續的,如果使stride從2變為1,那么就要使用這種帶洞卷積來保持這一步的感受野不變;
如果再增加padding大小,依然不會使結果粗糙,因為是帶洞卷積,連接是skip的,所以2個padding不會同時和一個filter相連。
帶洞卷積能夠保證池化后的感受野不變,從而可以fine tune,同時也能保證輸出的結果更加精細。
帶洞卷積的特點是卷積核的參數個數保持不變,感受野的大小隨着“dilation rate”參數的增加呈指數增長
總結:
帶洞卷積保持不改變卷積核大小,參數不變的同時,也保證了輸出特征映射feature map的大小不變,或者說不縮小feature map 的大小的同時保持感受野大小不變,一個擴張率為2的3×3卷積核,感受野與5×5的卷積核相同,但參數數量僅為9個。
對於標准的k*k卷積操作,stride為s,分三種情況:
(1)s > 1,感受野增大,卷積后圖像尺寸較小;
(2)s = 1,步長為1的卷積,合理設置padding,卷積的圖像輸入與輸出有相同的尺寸大小;
(3)0 < s < 1,fractionally strided convolution,相當於對圖像做upsampling。比如s=0.5時,意味着在圖像每個像素之間padding一個空白像素后,stride改為1做卷積,得到的feature map尺寸增大一倍。
而dilated conv不是在像素之間padding空白的像素,而是在已有的像素的基礎上,skip掉一些像素,或者輸入不變,對conv的kernel參數中插一些0的weight,達到一次卷積看到的空間范圍變大的目的。
參考自:https://blog.csdn.net/u013250416/article/details/81346510
https://blog.csdn.net/junparadox/article/details/52610744
