卷积神经网络三类主体层的理解(重点在全连接层(已加入一些与传统图像处理的联系))


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

更新:这学期又恰好要学冈萨雷斯的数字图像处理,就加入了一些和传统数字图像处理的联系

三个部分以及CNN与传统图像处理的联系

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

事实上,卷积层对应传统数字图像处理里的局部增强和空间滤波,即对一个像素点的邻域(如3x3的kernel_size就是处理一个像素点的3x3邻域)

特别地,1x1卷积是一种特殊的卷积,他是用来更改通道数目的,事实上,1x1 卷积一般用来替代全连接层,这样就免除了全连接层对输入图像尺寸的限制(这也是FCN的基本思想)

下面列举一些我知道的1x1卷积的用途:1.瓶颈层 2.channel-wise fully-connected(这个出现在Context Encoder论文里,其实和全连接层差不多,也是排除了位置信息的差异做全局统筹考虑) 3.更改feature map的channels数目

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

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

事实上,在CNN中,激活函数所作的就是一种灰度变换(若针对灰度图像,RGB同理),例如,sigmoid激活函数就是让灰度值在一个范围内差异很大,在另一个范围内差异很小

如果是sgn符号函数做激活函数,就实现了灰度图像到二值图像的转换

每个部分的作用

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

  • 8
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值