交互分割实战知识笔记(1):感受野计算

交互分割实战知识笔记1

对于分割网络而言,CNN是十分核心的部分。
由于以前都是比较零散地去了解一些CNN相关的东西以使用CNN网络,
对于CNN一些基础概念的理解非常浅薄。
最近终于还是下了决心仔细地补一下基础,本文将首先针对CNN,
进行一个知识点的记录。

重要术语

特征图(feature map)

标准卷积过程

一个标准的卷积过程如上,3 \times 3的输入
和一个2 \times 2的卷积核进行卷积运算,
最后得到的是(3-2+1) \times (3-2+1) = 2 \times 2的输出。

将上一级输入进过一个卷积层处理完之后得到的输出,
可以看做是上一级输入内容在空间维度上的某一级别的特征表示,所以被称为特征图

特征图大小的计算公式可简单总结为:

N_{out} = N_{in} - kernal\_size + 1

N_{out}N_{in}分别为输出的特征图大小和上一层的特征图/输入数据大小。

感受野(receptive field)

感受野是指特征图上的一个点在输入空间上所受影响的区域,
用人话说也就是特征图上的点对应的原始数据上的空间大小

以上图的标准卷积过程为例,
输出的19是有输入的一个2 \times 2的区域计算而来的,
也就是它能够感受到这个区域的信息

感受野大小的计算公式可简单总结为:
R_{out} = R_{in} + kernal\_size - 1

R_{out}R_{in}分别为输入输出特征图的感受野,原始图像感受野为1

填充(padding)

显而易见,卷积操作让图像缩水了一圈,影响了图像的分辨率。

为了平衡这种影响,直接在图像周围填充一圈,就可以让图像的feature map尺寸维持不变。

padding示意图

如图所示,padding操作影响了输出的大小,加入padding后的feature map size和 receptive field size计算公式如下:

\begin{array}{l} N_{out} = N_{in} + padding\_sum - kernal\_size + 1 \\ \\ R_{out} = R_{in} + kernal\_size - 1 \end{array}

padding\_sum为两侧padding之和。

步幅(stride)

stride示意图

当输入图像过大的时候,卷积操作是很费时的,
那么是否可以跳着卷积,就像数据抽稀一样呢?

答案显然是肯定的,这同样也是卷积的基础操作之一,按照一定步幅(stride)进行跳步(stride)。

如上图所示,对3 \times 3的图像进行2 \times 2的padding,得到5 \times 5的输入;
如果按照传统卷积方式,2 \times 2的卷积核显而易见会输出4 \times 4的输出。

此处执行跳步卷积,在(0,0)的横向下一个位置为(0+2,0),竖向下一个位置为(0+3,0)
步幅为(2,3),当跳步后的位置不足以进行卷积运算时则跳转到下一行。

考虑到stride后,公式更新为:
\begin{array}{l} N_{out} = \frac{N_{in} + padding\_sum - kernal\_size}{stride} + 1 \\ \\ R_{out} = R_{in} + kernal\_size - 1 \end{array}

空洞卷积(dilation convolution)

空洞卷积/带洞卷积/膨胀卷积,dilation convolution有很多翻译。这种形式的卷积核比传统的卷积核多了一些空洞,因而尺寸就膨胀了。

空洞卷积

相当于一种折中的增大卷积核的方法,卷积核变大了,但是中间很多地方是洞,所以计算量不怎么变。

考虑到dilation后,
使用(kernal\_size-1) \times dilation + 1
替换原公式中的kernal\_size
公式更新为:

\begin{array} N_{out} = \frac{N_{in} + padding\_sum - (kernal\_size-1) \times dilation - 1}{stride} + 1 \\ \\ R_{out} = R_{in} + (kernal\_size-1) \times dilation \end{array}

卷积的不同参数的效果

kernal size

比较常见的卷积核大小为3 \times 35 \times 5
理论上越大的卷积核提取的信息就越全局,学术点说就是感受野随卷积核大小增大

但是理论上两个3 \times 3卷积核的嵌套就可以替代一个5 \times 5的卷积核,
但是计算量上,两个3 \times 3的卷积核为2 \times 3^2 \times (image\_size-2)^2级别,
而一个5 \times 5的卷积核为5^2 \times (image\_size-4)^2级别。

显而易见,计算量随卷积核的大小指数级增长,所以明显使用多个小卷积核的卷积层是更经济的

所以在一般问题中,我们都选用3 \times 3的卷积核。

stride

从原理上说,stride代表对图像特征提取的精度,stride越大则精度越低

作用类似于pooling,可以模糊一些特征,从而降低过拟合。

dilation

dilation来自于[1],由于之前的CNN通常使用conv + pooling的方式先提取并浓缩特征,
然后再将特征upsampling回原始分辨率。

pooling虽然增大了感受野,却丢失了信息;dilation方式可以扩大感受野,减少信息损失
却又不增加计算量。

不过显然,dilation也存在以下问题:

  • 损失了信息的连续性,会引起Gridding Effect
  • 长距离信息相关性不足

据说这两篇文章[2][3]中着重提了这些问题。


  1. F. Yu and V. Koltun, “Multi-Scale Context Aggregation by Dilated Convolutions,” arXiv:1511.07122 [cs], Apr. 2016, Accessed: Oct. 22, 2020. [Online]. Available: http://arxiv.org/abs/1511.07122.

  2. P. Wang et al., “Understanding Convolution for Semantic Segmentation,” arXiv:1702.08502 [cs], May 2018, Accessed: Oct. 22, 2020. [Online]. Available: http://arxiv.org/abs/1702.08502.

  3. L.-C. Chen, G. Papandreou, F. Schroff, and H. Adam, “Rethinking Atrous Convolution for Semantic Image Segmentation,” arXiv:1706.05587 [cs], Dec. 2017, Accessed: Oct. 22, 2020. [Online]. Available: http://arxiv.org/abs/1706.05587.

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。