[擴張卷積or空洞卷積] 如何理解Dilated Convolutions(空洞卷積)

文章來源:https://blog.csdn.net/alxe_made/article/details/88594550

 

1. 擴張卷積的提出

  1. Multi-Scale Context Aggregation by Dilated Convolutions
  2. Dilated Residual Networks
  3. 論文筆記——CVPR 2017 Dilated Residual Networks

在圖像分割領域,圖像輸入到CNN(典型的網絡比如FCN)中,FCN先像傳統的CNN那樣對圖像做卷積再pooling,降低圖像尺寸的同時增大感受野,但是由於圖像分割預測是pixel-wise的輸出,所以要將pooling後較小的圖像尺寸upsampling到原始的圖像尺寸進行預測(upsampling一般採用deconv反捲積操作,之前的pooling操作使得每個pixel預測都能看到較大感受野信息。因此圖像分割FCN中有兩個關鍵,一個是pooling減小圖像尺寸增大感受野,另一個是upsampling擴大圖像尺寸。在先減小再增大尺寸的過程中,肯定有一些信息損失掉了,那麼能不能設計一種新的操作,不通過pooling也能有較大的感受野看到更多的信息呢?答案就是dilated conv。

這裏的話我們就主要介紹一下擴張卷積的理解,具體在圖像分割或者語音合成、機器翻譯應用暫時不做考慮。

2. 理解的難點

其實上來就給出這個圖,確實有點不知所云,有幾個問題需要我們回答:

3. 感受野

在理解上面這個公式之前,我們先理解一下感受野這個含義。

參考:

1.A guide to receptive field arithmetic for Convolutional Neural Networks
2.你知道如何計算CNN感受野嗎?這裏有一份詳細指南

然後看完之後我們纔可以進行下面的內容,我們截取其中重要的圖進行說明:

4. 計算空洞卷積感受野

 空洞卷積就是在傳統的卷積中加入了一個dilation rate這個係數。可以從兩個方面理解這個參數,從原圖像層面理解:就是我們對原圖以(dilation rate-1)進行間隔採樣;從卷積核自身的角度來看,我們相當於在未使用空洞卷積的卷積核中,在其內部插入(dilation rate-1)個0,可以理解爲使用空洞卷積之後我們卷積核的尺寸變大了。後面的公式推導中,我們按照後面一種理解進行講述。
下圖是空洞卷積的動態示意圖:

                                             å¨è¿éæå¥å¾çæè¿°

Dilated Convolution with a 3 x 3 kernel and dilation rate 2

4.1 從一個簡單的一維例子出發

爲了更好理解空洞卷積,我們從一維入手:

a: 卷積核大小是3,然後移動的步長是2,padding是1
b: 卷積核大小是3,移動的步長是1,padding是1
c.卷積核大小是3,移動的步長是1,dilation rate是2

然後我們着重對比b和c兩張圖,考慮亮黃色的神經元,我們在b中視野(感受野)只有2-4,也就是隻有3;在c圖中我們的視野變成了1-5,也就是感受野變成了5,增加了感受野了。那麼爲什麼感受野變成了5?
    我們可以這樣理解,從b到c圖,我們僅僅是使用了空洞卷積,按照上面對空洞卷積第二層理解也就是從卷積核的角度出發,我們相當於在kernel size內部每隔一個卷積核插入(dilation rate - 1)個0,共插入(kernel-1)次。再加上原始的卷積核的感受野,可以這樣計算:
kernel_size_after_dilate = (dilate rate -1) * (kernel_size_before_dilate - 1) + kernel_size_before_dilate

這裏是dilation rate是2,kernel_size_before_dilate=3。因此我們的kernel_size_after_dilate感受野爲:(2-1)*(3-1)+3 = 5。 這裏第一個3代表的原始的感受野,也就是kernel size大小,這裏是3。

4.2 一個稍微複雜的例子

5. 最初的四個問題

在第二小節中我們提出了四個問題,現在我們可以嘗試回答一下:

  1. 紅點代表什麼意思?代表的是感受野的中心~
  2. 爲什麼擴張卷積導致圖像尺寸不變?

從4.1那個一維的例子出發我們可以直觀的理解,空洞卷積只是可以以指數形式提高網絡的感受野,但是不改變圖像輸出的特徵圖。特徵圖的計算可以依據:

3.圖中最外層圖像的代表什麼?

代表的就是感受野的大小

其實這個公式自己並不是特別理解,也不是特別好用,感覺不具有一般性。

下面是關於多尺度的一些理解:

  1. 機器學習基礎–多尺度
  2. 多尺度 理解

個人理解,理解多尺度首先理解尺度空間,我們的尺度空間是分辨率是相同的,然後使用不同的高斯核(傳統反向);從直覺上說,這個多尺度是模仿人類的視網膜的特徵,不同的距離看的物體模糊是不同的,離我們越遠,然後越模糊,從而我們看到全局信息;離我們越近的話,我們看的越清楚,然後看到的是局部信息。從cnn網絡來看我們使用不同的conv層,(縮放到同一尺寸下面)。越深的卷積層提取出的特徵圖越抽象,提取到的特徵更高級。所以這個就相當於是一種不同的尺度下的特徵(分辨率一致)這麼理解的。而多和多尺度相對應的是多分辨率,他的分辨率不是不變的,常見的是圖像金字塔,它的分辨率是逐漸縮小的

7. Tensorflow和Pytorch使用空洞卷積

7.1 Tensorflow

tf.nn.atrous_conv2d()

參考:

  1. tensorflow實現空洞卷積(dilated connvolution也叫擴張卷積)

 

7.2 Pytorch

參考文章:

  1. PyTorch 普通卷積和空洞卷積
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章