我正在阅读有关使用CNN(卷积神经网络)进行物体检测的论文.
丰富的要素层次结构,用于准确的对象检测和语义分割
以下是关于接受领域的引用:
The pool5 feature map is 6x6x256 = 9216 dimensional. Ignoring boundary effects, each pool5 unit has a receptive field of 195x195 pixels in the original 227x227 pixel input. A central pool5 unit has a nearly global view, while one near the edge has a smaller, clipped support.
我的问题是:
接受场的定义是什么?
他们如何计算感受野的大小和位置?
我们如何使用caffe/pycaffe计算感受野的边界矩形?
Raff.Edward.. 6
1)像素区域的大小影响最后一个卷积的输出.
2)对于每个卷积和池化操作,计算输出的大小.现在找到导致输出大小为1x1的输入大小.这是感受野的大小
3)您不需要使用库来执行此操作.对于每个2x2池,每个维度的输出大小减少一半.对于跨步卷积,您还可以按步幅划分每个维度的大小.您可能需要削减一些尺寸,具体取决于您是否使用填充进行卷积.最简单的情况是使用padding = floor(内核大小/ 2),因此卷积不会对输出大小产生任何额外的变化.
1)像素区域的大小影响最后一个卷积的输出.
2)对于每个卷积和池化操作,计算输出的大小.现在找到导致输出大小为1x1的输入大小.这是感受野的大小
3)您不需要使用库来执行此操作.对于每个2x2池,每个维度的输出大小减少一半.对于跨步卷积,您还可以按步幅划分每个维度的大小.您可能需要削减一些尺寸,具体取决于您是否使用填充进行卷积.最简单的情况是使用padding = floor(内核大小/ 2),因此卷积不会对输出大小产生任何额外的变化.
这是另一种直接计算感受野的方法.Stackoverflow不支持数学公式,对于更易读的版本,请参阅计算CNN的接收域
层$ k $的感受野(RF)$ l_k $是:
$$ l_k = l_ {k-1} +((f_k - 1)*\prod_ {i = 1} ^ {k-1} s_i)$$
其中$ l_ {k-1} $是图层$ k-1 $的接收字段,$ f_k $是过滤器大小(高度或宽度,但假设它们在这里相同),$ s_i $是大步layer $ i $.
上面的公式从下到上(从第1层)计算感受野.直观地说,$ k $层中的RF相对于$ k-1 $层覆盖$(f_k - 1)*s_ {k-1} $个像素.但是,增量需要转换为第一层,因此增量是一个因子 - 层中的步幅$ k-1 $在较低层中呈指数级增长.
希望这是有帮助的.
Tensorflow现在仅需使用即可支持接收场计算 tf.contrib.receptive_field
有关详细信息,请参见https://github.com/tensorflow/tensorflow/tree/master/tensorflow/contrib/receptive_field。