Dilated Convolution + Receptive Field

1.感受野(Receptive Field)

Receptive field 是啥?看看网上的大佬们怎么说。

  • The receptive field is defined as the region in the input space that a particular CNN’s feature is looking at (i.e. be affected by). ——Dang Ha The Hien
  • 在卷积神经网络中,感受野的定义是 卷积神经网络每一层输出的特征图(feature map)上的像素点在原始图像上映射的区域大小。 ——博客园
  • 在机器视觉领域的深度神经网络中有一个概念叫做感受野,用来表示网络内部的不同位置的神经元对原图像的感受范围的大小。 ——蓝荣祎

个人理解某网络模型有4层,输入为3224224,输出为1*12,输出层中的一个特征点映射到输入数据的范围就是感受野;

1.1 举例子

参考链接:https://zhuanlan.zhihu.com/p/31004121
原始图像为 [公式] ,卷积核(Kernel Size)为 [公式] ,padding 为 [公式] ,stride为 [公式] ,依照此卷积规则,连续做两次卷积。熟悉卷积过程的朋友都知道第一次卷积结果是 [公式] 大小的feature map,第二次卷积结果是 [公式] 大小的feature map。整个过程如图所示:
Dilated Convolution + Receptive Field_第1张图片

第一次卷积得到3*3的 feature map,RF为3*3

Dilated Convolution + Receptive Field_第2张图片

第二次卷积得到2*2的 feature map

Dilated Convolution + Receptive Field_第3张图片
第一层卷积结束后,感受野是3* 3。在第二层卷积结束了,感受野是7 *7

1.2 计算RF

公式一:这个算法从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是中间的。
Dilated Convolution + Receptive Field_第4张图片
举一个小小的例子:

一个输入随意,第一层卷积核参数为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

1.3 检验你的RF

看到这里的,奖励你认真好学,送福利了。不知道自己RF算得对不对?看下面这个网站。

FOMORO AI :

2.Dilated Convolutions

2.1 背景

Deep CNN 有一些致命性的缺陷。较为著名的是 up-sampling 和 pooling layer 的设计。这个在 Hinton 的演讲里也一直提到过。
主要问题有:

  • Up-sampling / pooling layer (e.g. bilinear interpolation) is deterministic. (a.k.a. not learnable)
  • 内部数据结构丢失;空间层级化信息丢失。
  • 小物体信息无法重建 (假设有四个pooling layer 则 任何小于 2^4 = 16 pixel 的物体信息将理论上无法重建。)

在这样问题的存在下,语义分割问题一直处在瓶颈期无法再明显提高精度, 而 dilated convolution 的设计就良好的避免了这些问题。

(1)标准卷积

使用卷积核大小为33、填充为1,步长为2的卷积操作对输入为55的特征图进行卷积生成3*3的特征图,如下图所示。
Dilated Convolution + Receptive Field_第5张图片

Standard Convolution with a 3 x 3 kernel (and padding)
使用卷积核大小为3*3、空洞率(dilated rate)为2、卷积步长为1的空洞卷积操作对输入为7*7的特征图进行卷积生成3*3的特征图,如下图所示。

Dilated Convolution + Receptive Field_第6张图片

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

我们从上图中可以看出,标准的卷积操作中,卷积核的元素之间都是相邻的。但是,在空洞卷积中,卷积核的元素是间隔的,间隔的大小取决于空洞率。

2.2 思考:为什么空洞卷积能够扩大感受野并且保持分辨率呢?

Dilated Convolution + Receptive Field_第7张图片
以空洞卷积图为例,红色圆点为卷积核对应的输入“像素”,绿色为其在原输入中的感受野。

(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中。

2.3 通向标准化设计:Hybrid Dilated Convolution (HDC)

ref: https://www.zhihu.com/question/54149221

潜在问题 1: The Gridding Effect假设我们仅仅多次叠加 dilation rate 2 的 3 x 3 kernel 的话,则会出现这个问题:
Dilated Convolution + Receptive Field_第8张图片

我们发现我们的 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 网络的关键。

Dilated Convolution + Receptive Field_第9张图片

对于上个 section 里提到的几个问题,图森组的文章对其提出了较好的解决的方法。他们设计了一个称之为 HDC 的设计结构。

  • 第一个特性是,叠加卷积的 dilation rate 不能有大于1的公约数。比如 [2, 4, 6] 则不是一个好的三层卷积,依然会出现 gridding effect。
  • 第二个特性是,我们将 dilation rate 设计成 锯齿状结构,例如 [1, 2, 5, 1, 2, 5] 循环结构。
  • 第三个特性是,我们需要满足一下这个式子:
    在这里插入图片描述
    其中 是 i 层的 dilation rate 而 是指在 i 层的最大dilation rate,那么假设总共有n层的话,默认 。假设我们应用于 kernel 为 k x k 的话,我们的目标则是 ,这样我们至少可以用 dilation rate 1 即 standard convolution 的方式来覆盖掉所有洞。

一个简单的例子: dilation rate [1, 2, 5] with 3 x 3 kernel (可行的方案)而这样的锯齿状本身的性质就比较好的来同时满足小物体大物体的分割要求(小 dilation rate 来关心近距离信息,大 dilation rate 来关心远距离信息)。这样我们的卷积依然是连续的也就依然能满足VGG组观察的结论,大卷积是由小卷积的 regularisation 的 叠加。

你可能感兴趣的:(Deep,Learning,CNN)