深度學習100問-18:如何計算CNN的感受野?

深度學習100問

Author:louwill

Machine Learning Lab

     

     感受野(Receptive Field)是CNN中最重要的基礎概念之一。相信很多朋友是在學習CNN的時候和卷積核、卷積步長、padding、特徵圖等概念一起接受感受野的概念的。卷積核掃過的區域我們稱之爲感受野,相信這是大多數朋友對於感受野的印象。但很多時候,我們對於感受野並未深入理解和特別重視,也很少有教程來專門來介紹感受野。

     什麼是感受野?感受野在CNN中如何計算?這是本文需要釐清的兩個問題,深入理解感受野對於一些任務的網絡結構設計和優化有着重要意義,比如語義分割模型的空洞卷積,其中就涉及到對感受野的深刻理解。

     這裏默認大家都有CNN基本知識儲備,對於卷積核和特徵圖等概念都有基本理解,熟悉CNN的計算原理。所以我們直接來切入正題,先來看如何給感受野一個明確的定義。

     所謂感受野,是指輸出特徵圖上某個像素對應到輸入空間中的區域範圍。所以感受野可以理解爲特徵圖像素到輸入區域的映射。先來回顧一個從輸入到特徵圖的計算過程:


     其中n_in爲輸入size,p爲padding大小,f爲卷積核size,s爲卷積步長。假設輸入大小爲5*5,f=3*3,padding爲1*1,卷積步長爲2*2,那麼輸出特徵圖size根據公式可計算爲3*3。如下圖所示:


     然後我們繼續對3*3的特徵圖執行卷積,卷積參數同第一次卷積一樣,可得輸出特徵圖size爲2*2。我們把輸入、兩次卷積過程和對應特徵圖放到一起看一下:


     可以看到兩次卷積的特徵圖分別對應到輸入空間的感受野大小,第一次卷積對應關係如圖中綠色線條所示,感受野大小爲3*3,第二次卷積對應關係如圖中黃色線條所示,感受野大小爲7*7。所以關鍵問題是特徵圖和輸入空間的對應關係中,感受野的大小是如何計算的?

     下面我們給出感受野大小的計算公式:


     其中RF_l+1爲當前特徵圖對應的感受野大小,也就是我們要計算的目標感受野,RF_l爲上一層特徵圖對應的感受野大小,f_l+1爲當前卷積層卷積核大小,最後一項連乘項則表示之前卷積層的步長乘積。

     根據感受野的計算公式我們來看上圖中兩次卷積的感受野計算過程:

     原始輸入size爲5*5,第一層卷積核爲3*3,輸入步長爲1,輸入層初始化感受野爲1*1,根據公式計算可得第一層卷積後的特徵圖對應的輸入空間的感受野大小爲1+(3-1)*1=3。

     第一層卷積輸出特徵圖的感受野size爲3,第二層卷積核size爲3,卷積步長爲2,則第二層的的感受野size計算爲3+(3-1)*2*1=7。所以我們可以看到當前層特徵圖的感受野大小對應到輸入空間與前層的感受野和卷積步長以及當前層的卷積核大小密切相關。當步長大於1時,感受野的大小會呈現指數級增長。

     上述計算的圖示過程如下:


     感受野還有一點比較重要的是,對於一個卷積特徵圖而言,感受野中每個像素並不是同等重要的,越接近感受野中間的像素相對而言就越重要。

     深刻理解感受野的概念對於CNN結構設計意義重大,語義分割中很多網絡結構的設計都會在感受野上做文章,比如說我們下一問會講到的空洞卷積,以及後續的deeplab系列分割網絡。

參考資料:

https://medium.com/mlreview/a-guide-to-receptive-field-arithmetic-for-convolutional-neural-networks-e0f514068807

往期精彩:

深度學習100問-17:語義分割有哪些常用的評價指標?

深度學習100問-16:爲什麼U-Net在醫學圖像上表現優越?

深度學習100問-15:什麼是深監督(Deep Supervision)?

深度學習100問-14:圖像語義分割有哪些經典的上採樣方法?

深度學習100問-13:深度學習如何製作個人數據集?

深度學習100問-12:深度學習有哪些經典數據集?

深度學習100問-11:什麼是學習率衰減?

深度學習100問-10:如何部署一個輕量級的深度學習項目?

深度學習100問-9:爲什麼EfficientNet號稱是最好的分類網絡?

深度學習100問-8:什麼是Batch Normalization?

深度學習100問-7:dropout有哪些細節問題?

深度學習100問-6:有哪些經典的卷積類型?

深度學習100問-5:如何閱讀一份深度學習項目代碼?

深度學習100問-4:深度學習應遵循怎樣的論文研讀路線?

深度學習100問-3:深度學習應掌握哪些Linux開發技術?

深度學習100問-2:深度學習應掌握哪些Git開發技術?

深度學習100問-1:深度學習環境配置有哪些坑?


一個算法工程師的成長之路

長按二維碼.關注機器學習實驗室