Receptive field 是啥?看看网上的大佬们怎么说。
个人理解某网络模型有4层,输入为3224224,输出为1*12,输出层中的一个特征点映射到输入数据的范围就是感受野;
参考链接:https://zhuanlan.zhihu.com/p/31004121
原始图像为 [公式] ,卷积核(Kernel Size)为 [公式] ,padding 为 [公式] ,stride为 [公式] ,依照此卷积规则,连续做两次卷积。熟悉卷积过程的朋友都知道第一次卷积结果是 [公式] 大小的feature map,第二次卷积结果是 [公式] 大小的feature map。整个过程如图所示:
第一层卷积结束后,感受野是3* 3。在第二层卷积结束了,感受野是7 *7
公式一:这个算法从top往下层层迭代直到追溯回input image,从而计算出RF。
(N-1)_RF = f(N_RF, stride, kernel) = (N_RF - 1) * stride + kernel
其中,RF是感受野。N_RF和RF有点像,N代表 neighbour,指的是第n层的 a feature在n-1层的RF,记住N_RF只是一个中间变量,不要和RF混淆。 stride是步长,ksize是卷积核大小。
我来解释一下这个公式。(图片有点丑,不过不影响理解。)首先,我们的问题是右一的红叉叉映射到左一中,应该是什么size?自然思路就是右一的红叉叉映射到中间是什么size?因为卷积核是33,所以右一的红叉叉映射到中间是33. 那么接下来我们如果算出来中间33的红框框映射到左一是什么size,不就解决了我们的问题嘛。聪明的我们就发现了从中间映射到左边的size是kernel_size+stride(3-1). 抽象一下就是kernel_size +stride*(N_RF-1)嘛。接下来就很简单了,一层又一层的迭代下去直到迭代到第一层,就求出了RF。Note: kernel_size和stride是左一的,而N_RF是中间的。
举一个小小的例子:
一个输入随意,第一层卷积核参数为ksize = 3, stride = 2,第二层ksize =3,stride=2,第三层ksize=3,stride=1.写一段代码计算RF,matlab代码如下:
ksize = 3;
strides = [1 2 2];
N_RF = 1;
for i = 1:3
N_RF = (N_RF -1)*strides(i) + ksize;
end
fprintf('The RF is: %d \n',N_RF)
结果:15
看到这里的,奖励你认真好学,送福利了。不知道自己RF算得对不对?看下面这个网站。
FOMORO AI :
Deep CNN 有一些致命性的缺陷。较为著名的是 up-sampling 和 pooling layer 的设计。这个在 Hinton 的演讲里也一直提到过。
主要问题有:
在这样问题的存在下,语义分割问题一直处在瓶颈期无法再明显提高精度, 而 dilated convolution 的设计就良好的避免了这些问题。
(1)标准卷积
使用卷积核大小为33、填充为1,步长为2的卷积操作对输入为55的特征图进行卷积生成3*3的特征图,如下图所示。
我们从上图中可以看出,标准的卷积操作中,卷积核的元素之间都是相邻的。但是,在空洞卷积中,卷积核的元素是间隔的,间隔的大小取决于空洞率。
以空洞卷积图为例,红色圆点为卷积核对应的输入“像素”,绿色为其在原输入中的感受野。
(a)图对应3x3的扩张率为1的卷积,和普通的卷积操作一样;
(b)图对应3x3的扩张率为2的卷积,实际的卷积核还是3x3,但是空洞率为2,也就是对于一个7x7的图像块,只有9个红色的点也就是3x3的卷积核发生卷积操作,其余的点略过。也可以理解为卷积核的大小为7x7,但是只有图中的9个点的权重不为0,其余都为0。可以看到虽然卷积核的大小只有3x3,但是这个卷积的感受野已经增大到了7x7。如果考虑到这个2-dilated convolution的前一层有一个1-dilated convolution的话,那么每个红点就是1-dilated的卷积输出,感受野为3x3,所以1-dilated和2-dilated合起来就能达到7x7的卷积;
©图是4-dilated convolution操作,同理跟在1-dilated和2-dilated convolution的后面,能达到15x15的感受野。
对比传统的卷积操作,3层3x3的卷积加起来,stride为1的话,只能达到(kernel-1)*layer+1=7的感受野,也就是和层数layer成线性关系,而dilated conv的感受野是指数级的增长。
补充:dilated的好处是不做pooling损失信息的情况下,加大了感受野,让每个卷积输出都包含较大范围的信息。在图像需要全局信息或者语音文本需要较长的sequence信息依赖的问题中,都能很好的应用dilated conv,比如图像分割、语音合成WaveNet、机器翻译ByteNet中。
ref: https://www.zhihu.com/question/54149221
潜在问题 1: The Gridding Effect假设我们仅仅多次叠加 dilation rate 2 的 3 x 3 kernel 的话,则会出现这个问题:
我们发现我们的 kernel 并不连续,也就是并不是所有的 pixel 都用来计算了,因此这里将信息看做 checker-board 的方式会损失信息的连续性。这对 pixel-level dense prediction 的任务来说是致命的。
潜在问题 2: Long-ranged information might be not relevant.我们从 dilated convolution 的设计背景来看就能推测出这样的设计是用来获取 long-ranged information。然而光采用大 dilation rate 的信息或许只对一些大物体分割有效果,而对小物体来说可能则有弊无利了。如何同时处理不同大小的物体的关系,则是设计好 dilated convolution 网络的关键。
对于上个 section 里提到的几个问题,图森组的文章对其提出了较好的解决的方法。他们设计了一个称之为 HDC 的设计结构。
一个简单的例子: dilation rate [1, 2, 5] with 3 x 3 kernel (可行的方案)而这样的锯齿状本身的性质就比较好的来同时满足小物体大物体的分割要求(小 dilation rate 来关心近距离信息,大 dilation rate 来关心远距离信息)。这样我们的卷积依然是连续的也就依然能满足VGG组观察的结论,大卷积是由小卷积的 regularisation 的 叠加。