写在前面
卷积神经网络多用于计算机视觉领域。最近因为在学习NJU王利民老师的学术研究,所以先去学习了卷积神经网络。最后会贴上自己学过王老师一部分学术研究后的笔记。
一些概念
卷积核
将图像拆分成对应的特点,被称为卷积核。然后查看被识别图像有无对应的卷积核来确认是否为目标物体。
feature map:
用卷积核扫描目标图得出的一个二维图为特征图。
pooling池化:
若用卷积核扫描目标图,岂不是有多少个卷积核就要扫描多少遍?对于一个有大量细节,或者说相当数量分层级的细节来说,这样算法的复杂度是很高的。所以有池化(pooling),以缩小特征图。
池化(Pooling)是卷积神经网络中的一个重要的概念,它实际上是一种形式的降采样。有多种不同形式的非线性池化函数,池化层会不断地减小数据的空间大小,因此参数的数量和计算量也会下降,这在一定程度上也控制了过拟合。通常来说,CNN的卷积层之间都会周期性地插入池化层
池化层大大降低了网络模型参数和计算成本,也在一定程度上降低了网络过拟合的风险。概括来说,池化层主要有以下五点作用:
- 增大网络感受野
- 抑制噪声,降低信息冗余
- 降低模型计算量,降低网络优化难度
- 防止网络过拟合
- 使模型对输入的特征位置变化更加鲁棒
有最大池化:选择被扫描区域内的最大值
和平均池化:取被扫描区域内的平均值 等池化方式
池化要求一定要保留原特征图的特征
Padding:
在处理边缘时的操作称为(Padding)
如果对图像采用最大池化,则在边缘补零来提取边缘特征
感受野:
卷积神经网络中每个网络层输出的特征图中的单个元素映射回原始输入特征中的区域大小,网络层越深,其输出特征的元素对应感受野越大。可以这么去描述感受野:网络层输出特征图上的一个元素点,由原始输入中多大区域映射而来,其感受野就是多大。
-
对于全连接网络而言,其输出中的每一个元素都受到输入特征中所有元素的影响;
-
而对于卷积神经网络而言,利用卷积核与输入特征之间的互相关操作提取特征,输出特征中的每一个元素由卷积核在输入特征上的一次移动得到,而卷积核的每次移动均是与输入中与之对应的局部区域进行运算,既输出中的每个元素只由输入中的局部区域影响,此处所说的局部区域的大小也就是网络层输出特征中元素的感受野。
所以对于当前层的输出结果,要看其感受野多大可通过以下方式:从当前层的输出结果反向映射,直到映射回原始输入特征,此时即可得到对应的感受野大小。
上采样与下采样
-
上采样:
语义分割/实例分割等任务,由于需要提取输入图像的高层语义信息,网络的特征图尺寸一般会先缩小,进行聚合;这类任务一般需要输出于原始图像大小一致的像素级分割结果,因而需要扩张较小的特征图这就用到了上采样 -
下采样:
下采样通常来讲也叫做抽取,比如从多数集中抽取少部分。
下采样在图像领域实际上就是缩小图像,主要目的是为了使得图像符合显示区域的大小,生成对应图像的缩略图。比如说在CNN中的池化层或卷积层就是下采样。不过卷积过程导致的图像变小是为了提取特征,而池化下采样是为了降低特征的维度。下采样层有两个作用:
一是减少计算量,防止过拟合;
二是增大感受野,使得后面的卷积核能够学到更加全局的信息。下采样的步骤:池化、卷积等
卷积计算中的一个基本流程:
- 卷积
- 激活函数:将数值规范化到[0,1]区间当中,避免数值在网络中被不断放大。同时引入非线性激活函数,避免最后都是线性计算
- 池化(下采样)
- 全连接:然后把得到的最简单的特征图们展开得到一条特征数组,对数组按目标图的数组权值操作得到一个判断是否为目标的概率数
- 然后用反向传播(backpropagation)的算法不断修正用来处理特征数组的全链接,得到越来越令人满意的网络,所以甚至一开始的卷积核和全连接是随机的,只要给出的数据和反馈足够多,仍然可以得到正确的算法网络
LIP和LIP++:
王利民老师的一项研究成果,具体参考:
LIP++ paper
LIP 解读
在下采样过程中,邻近像素的贡献一般是不同的,有些特征比邻域内的其他特征更具鉴别性
提出一个通用的下采样框架,基于局部重要性建模的采样层。
通过学习基于输入的自适应重要度权重,LIP可以在采样过程中自动增强识别特征。
通过引入显式边距项和高效的 logit 模块,提出了 LIP 的改进版本,称为 LIP++。 LIP++ 可以比原始 LIP 产生一致的精度改进,但计算成本更小。