目录
6. 解释下卷积神经网络中感受野Receptive field (RF)的概念?
1. 卷积核有什么类型?
- 标准卷积:最常用的卷积核。
- 扩张卷积(带孔卷积或空洞卷积):使同样尺寸的卷积核可以获得更大的感受视野,相应的在相同感受视野的前提下比普通卷积采用更少的参数。
- 转置卷积:转置卷积常见于目标检测领域中对小目标的检测和图像分割领域还原输入图像尺度。
- 可分离卷积:可分离卷积(Seperable Convolution)通常应用在模型压缩或一些轻量的卷积神经网络中
2. 为什么现在倾向于用小尺寸的卷积核?
用多个小卷积核串联可以有大卷积核同样的能力,而且参数更少,另外有更多次的激活函数作用,增强非线性
由于参数个数仅与卷积核大小有关,所以 3×3 级联卷积核占优势,并且用 2 个级联的 3×3 卷积层( stride=1)组成的小网络来代替单个的 5×5 卷积层增加了非线性变换的操作使得模型的泛化能力进一步的提高。
- 1:两个 3×3 的堆叠卷基层的有限感受野是 5×5 ;三个 3×3 的堆叠卷基层的感受野是 7×7 ,故可以通过小尺寸卷积层的堆叠替代大尺寸卷积层,并且感受野大小不变。
- 2:多个小尺寸的卷基层比一个大尺寸卷积层有更多的非线性(更多层的非线性函数),使得判决函数更加具有判决性,并且起到隐式正则化的作用。
- 3:1×1卷积核除了具有降低参数量和增加非线性的作用外,还可以起到对通道数的升降进行控制的作用 (达到特征降维和升维的作用)。
3. 有哪些池化方法?
- 一般池化,包括最大池化和平均池化。
- 重叠池化,
- 空间金字塔池化,个人理解为类似ROIPooling,ROI Align操作
4. 怎样才能减少卷积层参数量?
- 小卷积核代替大卷积核,如用2个3x3代替1个5x5;
- 使用分离卷积操作,将原来的k*k*c卷积分离为k*k*1+1*1*c操作
- 使用1x1卷积核减少通道数C
- 在卷积操作前先池化(降低输入特征维度)
5. CNN做卷积的运算时间复杂度、空间复杂度?
5.1 复杂度对模型的影响
时间复杂度决定了模型的训练/预测时间。如果复杂度过高,会导致模型训练和预测耗费大量时间,既无法快速的验证想法和改善模型,也无法做到快速的预测。
空间复杂度决定了模型的参数数量。由于维度灾难(curse of dimensionality)的限制,模型的参数越多,训练模型所需的数据量就越大,而现实生活中的数据集通常不会太大,这会导致模型的训练更容易过拟合。
5.2 时间复杂度
时间复杂度即模型的运算次数。 单个卷积层的时间复杂度:Time~O(M^2 * K^2 * Cin * Cout)
- 注1:为了简化表达式中的变量个数,这里统一假设输入和卷积核的形状都是正方形。
- 注2:严格来讲每层应该还包含1个Bias参数,这里为了简洁就省略了。
- M:输出特征图(Feature Map)的尺寸。
- K:卷积核(Kernel)的尺寸。
- Cin:输入通道数。
- Cout:输出通道数。
- 输出特征图尺寸又由输入尺寸X、卷积核尺寸K、Padding、 Stride 这四个参数所决定,表示如下: M=(X - K + 2*Padding) / Stride + 1
5.3 空间复杂度
空间复杂度即模型的参数数量,体现为模型本身的体积。 单个卷积层的空间复杂度: Space~O(K^2 * Cin * Cout)
- - 空间复杂度只与卷积核的尺寸K、通道数C相关。而与输入图片尺寸无关。
- - 当我们需要裁剪模型时,由于卷积核的尺寸通常已经很小,而网络的深度又与模型的能力紧密相关,不宜过多削减,因此模型裁剪通常最先下手的地方就是通道数。
6. 解释下卷积神经网络中感受野Receptive field (RF)的概念?
6.1 感受野Receptive field (RF)的概念
在卷积神经网络中,感受野 (receptive field)的定义是 卷积神经网络每一层输出的特征图(feature map)上的像素点在原始图像上映射的区域大小。
在学习计算感受野之前,先可视化一下感受野吧。举一个例子,原始图像为 5x5,卷积核(Kernel Size)为 3x3,padding 为 1x1,stride为 2x2 ,依照此卷积规则,连续做两次卷积。熟悉卷积过程的朋友都知道第一次卷积结果是 3x3大小的feature map,第二次卷积结果是 2x2大小的feature map。整个过程如图所示:
第一次卷积得到3*3的 feature map,RF为3*3
第二次卷积得到2*2的 feature map
黄色feature map对应的感受野是7*7大小
6.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是卷积核大小。
根据上面举得例子来实际计算一下RF。
首先,我们的问题是右一的红叉【一个像素】映射到左一中,应该是什么size?【即感受野】
自然思路就是右一的红叉叉映射到中间是什么size?因为卷积核是3*3,所以右一的红叉叉映射到中间是3*3。
那么接下来我们如果算出来中间3*3的红框框映射到左一是什么size,不就解决了我们的问题嘛?
先再回顾一下一个知识点,在一个卷积层中输出特征图尺寸M由输入尺寸X、卷积核尺寸kernel_size、Padding、 stride 这四个参数所决定,表示如下: M=(X - kernel_size + 2*Padding) / stride + 1。
在这个例子中,M=3,kernel_size=3,Padding=1,stride=2。要求中间3*3的红框框映射到左一是什么size?不就是反推此公式得到X+ 2*Padding吗?即X+2*Padding=kernel_size+stride*(M-1)。
从中间映射到左边的size(即M=3)是kernel_size+stride*(3-1), 抽象一下就是kernel_size +stride*(N_RF-1)。
接下来就很简单了,一层又一层的迭代下去直到迭代到第一层,就求出了RF。Note: kernel_size和stride是左一的,而N_RF是中间的。
7. 卷积神经网络中空洞卷积的作用是什么?
7.1 什么是空洞卷积?
空洞卷积也叫扩张卷积,扩张卷积与普通的卷积相比,除了卷积核的大小以外,还有一个扩张率(dilation rate)参数,主要用来表示扩张的大小。在保持参数个数不变的情况下增大了卷积核的感受野,同时它可以保证输出的特征映射(feature map)的大小保持不变。一个扩张率为2的3×3卷积核,感受野与5×5的卷积核相同,但参数数量仅为9个。
- 图(a)为1-dilated conv,感受野为3×3
- 图(b)为2-dilated conv,跟在1-dilated conv后面,感受野扩大为为7×7
- 图(c)为4-dilated conv,同样跟在1-dilated conv以及1-dilated conv后面,感受野扩大为为15×15
- 相比之下,使用stride为1的普通卷积,三层后的感受野仅为7×7
7.2 空洞卷积的作用?
-
扩大感受野:在deep net中为了增加感受野且降低计算量,总要进行降采样(pooling或s2/conv),这样虽然可以增加感受野,但空间分辨率降低了。为了能不丢失分辨率,且仍然扩大感受野,可以使用空洞卷积。这在检测,分割任务中十分有用。一方面感受野大了可以检测分割大目标,另一方面分辨率高了可以精确定位目标。
-
捕获多尺度上下文信息:空洞卷积有一个参数可以设置dilation rate,具体含义就是在卷积核中填充dilation rate-1个0,因此,当设置不同dilation rate时,感受野就会不一样,也即获取了多尺度信息。
7.3 空洞卷积存在的问题
-
局部信息丢失:由于空洞卷积的计算方式类似于棋盘格式,某一层得到的卷积结果,来自上一层的独立的集合,没有相互依赖,因此该层的卷积结果之间没有相关性,即局部信息丢失。
-
远距离获取的信息没有相关性:由于空洞卷积稀疏的采样输入信号,使得远距离卷积得到的信息之间没有相关性,影响分类结果。设计更像是用于获取long-range information,这样或许对一些大物体有较好的分割效果,而对于小物体来说可能是有弊无利了。如何同时处理好大小物体的关系,则是设计好dilated convolution网络的关键。
7.4 如何解决空洞卷积存在的问题?
暂时略