卷积神经网络三类主体层的理解(重点在全连接层)

卷积神经网络三类主体层的理解(重点在全连接层)

    • 三个部分
    • 每个部分的作用
      • 1.卷积层(一种特殊的全连接层)
      • 2.池化层(下采样池化层)
      • 3.全连接层(fully connected)(用于分类任务,在分割和检测上不适用)
      • 4.为何CNN的输入大小要一定
      • 5.CNN的输入层与各层间的“操作”
    • 参考:

前段时间一直忙美赛➕过年,太久没碰cv和神经网络了,今天看了看笔记和文献and blog,就想自己用markdownpad做个笔记,随便来这儿献个丑

三个部分

卷积层(conv)——————>用于提取特征

池化层(pooling)——————>用于特征选择(也叫下采样)

全连接层(fc(fully connected)层)———————>用于整合全局信息进行分类

每个部分的作用

1.卷积层(一种特殊的全连接层)

首先谈谈卷积层,事实上,卷积层和全连接层是可以相互转换的,卷积层就是进行①局部连接、②权值共享的进行特征提取的全连接层

是通过卷积核,来提取图片的局部特征

神经网络前部卷积层有小的感受野,可以捕捉图像局部、细节信息。
后面的卷积层感受野逐层加大,用于捕获图像更复杂,更抽象的信息。

无论输入图片多大,卷积层的参数规模都是固定的

但为什么CNN的输入图像大小需要是固定的呢?

——是因为fc层的限制,我们在下面来说

2.池化层(下采样池化层)

常见的操作有Max pooling和Average pooling,二者都是进行下采样,降低了图片的分辨率(同时进行了特征的选择

注意:pooling也会增大感受野

3.全连接层(fully connected)(用于分类任务,在分割和检测上不适用)

即 将经过卷积层和池化层的输出摊平(flatten),局部特征“摊平”之后就变成了全局特征

很多人问为什么要用全连接层?尤其是涉及过一些目标检测(如:YOLOv1骨干网络DetNet)、图像分割(如:FCN、U-Net)更会发问,为什么这些里面没有fc层???

因为,fc层整合了前面卷积层和池化层提取的高维特征信息,将它们整合成了全局信息。

这种整合的代价是什么?

位置!!!

fc层“整合”后,会损失掉许多位置信息(想想,将一些三维度的”正方体“摊平成一维的向量,经过一系列运算,你还能知道它原本在哪吗?

这也是为什么不能在目标检测、图像分割此类不仅对语义信息要求严格,也对定位信息要求严格的任务中采用全连接层

全连接层,是用于分类的,用于分类的,用于分类的

下面介绍fc层的一些理解[^1]

理解1:

卷积取的是局部特征,全连接就是把以前的局部特征重新通过权值矩阵组装成完整的图。

因为用到了所有的局部特征,所以叫全连接。

理解2:

从卷积网络谈起,卷积网络在形式上有一点点像咱们正在召开的“人民代表大会制度”。卷积核的个数相当于候选人,图像中不同的特征会激活不同的“候选人”(卷积核)。

池化层(仅指最大池化)起着类似于“合票”的作用,不同特征在对不同的“候选人”有着各自的喜好。

全连接相当于是“代表普选”。所有被各个区域选出的代表,对最终结果进行“投票”,全连接保证了感受野(receptive field) 是整个图像,既图像中各个部分(所谓所有代表),都有对最终结果影响的权利。

理解3:

假设你是一只小蚂蚁,你的任务是找小面包。你的视野还比较窄,只能看到很小一片区域。当你找到一片小面包之后,你不知道你找到的是不是全部的小面包,所以你们全部的蚂蚁开了个会,把所有的小面包都拿出来分享了。全连接层就是这个蚂蚁大会~

全连接层将特征representation(n. 代表)整合到一起,输出为一个值。

这样做,有一个什么好处?就是大大减少特征位置对分类带来的影响。


(从上图我们可以看出,猫在不同的位置,输出的feature值相同,但是位置不同。

对于电脑来说,特征值相同,但是特征值位置不同,那分类结果也可能不一样。)

** 这时全连接层filter的作用就相当于**

喵在哪我不管,我只要喵,于是我让filter去把这个喵找到,

实际就是把feature map 整合成一个值,这个值大,有喵,这个值小,那就可能没喵

和这个喵在哪关系不大了,鲁棒性有大大增强。

因为空间结构特性被忽略了,所以全连接层不适合用于在方位上找Pattern的任务,比如segmentation。

全连接层中一层的一个神经元就可以看成一个多项式,
我们用许多神经元去拟合数据分布

但是只用一层fully connected layer 有时候没法解决非线性问题,
而如果有两层或以上fully connected layer就可以很好地解决非线性问题了

我们都知道,全连接层之前的作用是提取特征

全连接层的作用是分类


补充一点:全连接层参数很多,一般占网络的60%-80%

4.为何CNN的输入大小要一定

当网络结构确定,参数的规模就定下来了

对于卷积层来说,即卷积核的大小

对于fc层来说,即神经元的数目

如:pytorch代码

nn.Linear(K1,K2),即K1,K2要事先确定

当在此处规定了神经元的数目,则规定了经过卷积、池化后的(Nc,Nh,Nw)摊平后的K维向量的维数一定

而 K = Nc * Nh * Nw

而Nc(通道数)只与卷积层和池化层的参数有关

Nh,Nw与输入图片的参数Ih,Iw之间的比例关系在卷积层和池化层参数给定之后是一定的

故K一定后,Nh与Nw就一定了,即输入图片大小被fc层参数限制

那么如何解决呢?

——用全卷积层代替全连接层(详见FCN论文)

5.CNN的输入层与各层间的“操作”

输入层:

①统一输入图像尺寸

一般为RGB图像:3 * H * W

②进行Initial Normalization归一初始化到【0,1】

③有时还会使用PCA白化

层间:
为防止数据分布在传输过程中发生较大变化,导致参数难以训练、不适应大学习率、梯度消失等问题

可采用批标准化(Batch Normalization)即BN层(详见BN算法论文)

p.s.:
一定了解一下ResNet残差网络,分类任务的绝对backbone!

还可以了解一下VGG、Google Net(Inception Net)等知名网络,都是建立在CNN的基础上

参考:

[1]https://blog.csdn.net/m0_37407756/article/details/80904580

你可能感兴趣的:(CV,神经网络,神经网络,计算机视觉,深度学习)