【深度學習】感受野(receptive fields)概念計算及如何增加感受野總結

在深度學習論文裏,經常會看到感受野(receptive fields), 根據自己看到的和網上資料稍微整理總結一下。

感受野的定義

感受野是卷積神經網絡(CNN)每一層輸出的特徵圖(feature map)上的像素點在原始輸入圖像上映射的區域大小[1]
這裏寫圖片描述

感受野的計算

感受野的計算從最深層開始向淺層計算,逐步計算到第一層(即上圖的藍色層開始向紅色層傳遞計算),所以計算前要知道網絡的整體結構和參數。
計算公式:

'''
RF: 待計算的feature map上的感受野大小
stride: 卷積的步長(之前所有層stride的乘積)
fsize: 卷積層濾波器的大小
'''
RF = 1
for layer in (high layer To low layer):
  RF = ((RF -1)* stride) + fsize

[python代碼實現感受野的計算]

如何增加感受野

在深度學習中,對具體的任務有時需要增加感受野來提高性能,比如在人體姿態估計中,大的感受野對學習長距離的空間位置關係(long-range spatial relationship),建立內隱空間模型(implicit spatial model)有幫助,因此也要知道增大感受野的手段。
根據以上說的感受野的計算,也可以分析出,增加層數、增大strides,增加fsize即卷積濾波器的大小都可以增加感受野的大小。
在看CPM(Convolutional Pose Machines) 時,作者做了一個簡單的總結:

Large receptive fields can be achieved either by pooling at the expense of precision, increasing the kernel size of the convolutional filters at the expense of increasing the number of parameters, or by increasing the number of convolutional layers at the risk often countering vanishing gradients during training.

總結一下共三種方法:

  • 增加pooling層,但是會降低準確性(pooling過程中造成了信息損失)
  • 增大卷積核的kernel size,但是會增加參數(卷積層的參數計算參考[2]
  • 增加捲積層的個數,但是會面臨梯度消失的問題(梯度消失參考[3]

CPM中作者用的增加捲積層個數的方法來增加感受野,但是他用多階段訓練的方式並引入中間層監督的方法來解決梯度消失的問題。

增加pooling層帶來信息損失的解決辦法可以參考[dilated conv帶孔卷積、pooling層提高感受野 反捲積 的理解]

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