一、神经网络的局部连接
1.全局连接VS局部连接
- 全局连接(相邻神经元之间全部激活)
在全连接网络(FCN)中,下一层网络的每一个神经元都与上一个层的神经元完全连接,这样的结构- 增加了整个网络的权重,计算量
- 增加了无用信息(参数多,丢失空间信息)
- 使网络容易过拟合
- 局部连接(提取对应局部位置的特征)
- 只针对目标所在局部区域进行观看、分析
- 减少了计算量
- 权重共享
二、神经网络的局部特征提取-卷积
一个核矩阵
在一个原始矩阵
上从上往下
、从左往右
扫描,每次扫描都得到一个结果,将所有结果组合到一起得到一个新的结果矩阵,就叫做卷积
1.局部连接的卷积神经网络
- 主要特征
- 局部连接(稀疏连接)
- 权值共享(空间上)
- 构思理念
源于动物视觉的皮层结构,即动物视觉神经元在感知外界物体的过程中起作用的一部分神经元 - 局部感知
采用神经元接收图像信息,再通过综合的全部图像信息达到增强图像信息的目的
2.提取局部数据特征
让局部的数据和一个对应大小的权重矩阵做内积运算,这个权重矩阵
在神经网络中称为 卷积
3.卷积核
形状一般是三维的,在各个维度上的数据卷积
- 做卷积运算时,卷积核会进行180°翻转(为什么?见 什么!卷积要旋转180度?!)
- 不做边界扩充,直接对图像进行相应位置乘积和
4.滤波器
各个维度上的卷积核同时卷积,形成滤波器
- 对原始图像的边缘进行某种方式的填充(一半填充为0)
- 将掩膜划过整张图像,计算图像中每个像素点的滤波结果
三、卷积神经网络的构成元素
1.步长
卷积窗口从输入数组的最左上方开始,按从左往右、从上往下的顺序,依次在输入数组上滑动。我们将每次滑动的行数和列数称为步幅或步长(stride)。
2.填充
填充(padding)是指在输入高和宽的两侧填充元素(通常是0元素)。
- 添加填充,弥补边界信息“丢失”
- 加入填充,可以使得卷积层的输出大小和输入大小一致,方便计算特征图尺寸变化
3.池化
对图像进行下采样,降低图像分辨率
池化层的作用:
- 使特征图变小,简化网络计算复杂度;
- 压缩特征,提取主要特征;
常见的池化操作有:最大池化(Max Pool)、平均池化(Avg Pool)
4.感受野
用来表示网络内不同神经元对原图像的感受范围大小,或者说CNN每一层输出的特征图上的像素点在原始图像上映射的区域大小
- 感受野对网络的影响
- 感受野值越大,其能接触到的原始图像范围越大,意味着可能蕴含更为全局、语义层次更高的特征
- 感受野越小,表示其包含的特征趋向于局部和细节
- 感受野值可以用来大致判断每一层的抽象层次
- 感受野计算
R F N − 1 = ( R F N − 1 ) ∗ s t r i d e + k e r n e l RF_{N-1} = (RF_{N}-1)*stride + kernel RFN−1=(RFN−1)∗stride+kernel
R F N RF_{N} RFN为第N层的感受野,stride为步长,kernel为 R F N − 1 RF_{N-1} RFN−1的卷积核大小
四、卷积神经网络的运行过程
1.卷积通道变化
2.卷积过程分解
3.运行步骤
- 每个通道上的滤波器对应每个通道上的数据进行卷积,得到每个通道上的特征图
- 然后将每个通道的特征图上对应位置的特征值相加,得到一个特征图
- 最后对这个特征图加上偏置,得到卷积神经网络在这一输出通道上的净输出
4.卷积图像尺寸计算
F
i
n
F_{in}
Fin是输入图像、k是卷积核的大小、p是图像填充的大小、s是卷积核的步幅、
F
o
F_{o}
Fo是输出、⌊6.6⌋是向下取整的意思,比如结果是 6.6,那么向下取整就是6
F
o
=
⌊
F
i
n
−
k
+
2
p
s
⌋
+
1
F_{o}=\left\lfloor\frac{F_{in}-k+2 p}{s}\right\rfloor+1
Fo=⌊sFin−k+2p⌋+1
5.卷积层权重参数计算
- 和卷积核大小、输入通道数、输出通道数相关
- 和输入大小、输出大小无关
5.卷积层权重参数计算
卷积核在图上每滑动一次,相当于做了一次参数的变化,所以最后特征图大小正是卷积核在图像上的横向和竖向的滑动总和,另外还有批次影响
五、卷积的优势
- 局部感知
- 共享权重
- 参数量少
- 训练时间短
- 模型收敛快
- 精度更高
六、常见的卷积类型
1.维度上的划分
- 一维卷积
- 序列模型
- 信号处理
- 自然语言处理
- 二维卷积
- 计算机视觉
- 图像处理
- 三维卷积
- 医学领域(CT影像)
- 视频处理领域(检测动作及行为)
2.通道上划分
普通卷积和分组卷积
-
普通卷积
图中只有一个卷积核输入feature map尺寸: W × H × C W × H × C W×H×C ,分别对应feature map的宽,高,通道数;
单个卷积核尺寸: k × k × C k × k × C k×k×C ,分别对应单个卷积核的宽,高,通道数;
输出feature map尺寸: W ′ × H ′ W' × H' W′×H′ ,输出通道数等于卷积核数量,输出的宽和高与卷积步长有关参数量: p a r a m s = k ² × C params = k² × C params=k²×C,运算量: F L O P s = k ² × C × W ′ × H ′ FLOPs = k² × C × W' × H' FLOPs=k²×C×W′×H′,这里只考虑浮点乘数量,不考虑浮点加。
-
分组卷积
每个卷积核相应分成组,在对应组内做卷积输入每组feature map尺寸: W × H × C g W × H × \frac{C}{g} W×H×gC,共有 g 组;
单个卷积核每组的尺寸: k × k × C g k × k × \frac{C}{g} k×k×gC,一个卷积核被分成了 g 组;输出feature map尺寸: W ′ × H ′ × g W' × H' × g W′×H′×g,共生成 g 个feature map。
参数量: p a r a m s = k 2 × C g × g = k 2 × C params = k^{2} × \frac{C}{g} × g = k^2 × C params=k2×gC×g=k2×C
运算量: F L O P s = k 2 × C g × W ′ × H ′ × g = k 2 × C × W ′ × H ′ FLOPs = k^2 × \frac{C}{g} × W' × H' × g = k^2 × C × W' × H' FLOPs=k2×gC×W′×H′×g=k2×C×W′×H′
3.扩张卷积(空洞卷积)
向卷积层引入一个称为“扩张率”的新参数,该参数定义了卷积核处理数据时各值的间距扩张卷积增加感受野且降低计算量。
4.全卷积
模型测试时,不用固定输入图像的大小全卷积部分借用了一些经典的CNN网络(如AlexNet,VGG,GoogLeNet等),并把最后的全连接层换成卷积,用于提取特征,形成热点图;
反卷积部分是将小尺寸的热点图上采样得到原尺寸的语义分割图像
5.转置卷积(反卷积)
- 一对多的映射关系
- 向上采样,越来越大,通道越来越浅
- stride=1时,不进行填充,stride>1时,需要在原图输入插入0像素值
七、池化和反池化
1.池化
- 池化的分类
-
平均池化
对领域内特征点求平均值;
保留图像背景信息,更加关注背景,一般用在网络尾部 -
最大池化
对领域内特征点求最大值;
保留图像纹理信息,更加关注前景,一般用在网络层 -
全局池化
池化窗口大小 = 整张特征图的大小;
每个 W × H × C W×H×C W×H×C 的特征图输入就会被转化为 1 × 1 × C 1×1×C 1×1×C的输出,等同于每个位置的权重都为 1 W × H \frac{1}{W×H} W×H1 的全连接层操作 -
图像金字塔池化
原图输入是 224×224,对于conv5出来后的输出,是 13×13×256 的,可以理解成有 256 个这样的filter,每个filter对应一张 13×13 的activation map。如果像上图那样将 activation map pooling 成4×4、2×2、1×1 三张子图,做 max pooling 后,出来的特征就是固定长度的 (16+4+1)×256 那么多的维度了。
如果原图的输入不是 224×224,出来的特征依然是 (16+4+1)×256;直觉地说,可以理解成将原来固定大小为 3×3 窗口的 pool 改成了自适应窗口大小,窗口的大小和 activation map 成比例,保证了经过 pooling 后出来的 feature 的长度是一致的。
-
中值池化
具有学习边缘和纹理结构的特性,抗噪声能力比较强 -
重叠池化
可提升预测精度,一定程度上减缓过拟合相比较于正常池化(步长 s=2,窗口 z=2),重叠池化(步长 s=2,窗口 z=3)可以减少top-1,top-5分别0.4%和0.3% -
随机池化
-
一种简单有效的正则化CNN的方法,可降低Max Pooling的过拟合现象,提高泛化能力
-
训练阶段
前向传播:现将池化窗口中的元素全部除以它们的和,得到概率矩阵;在按照概率随机选中方格的值,作为区域池化的值反向传播:求导时,只需要保留前向传播中已经被选中节点的位置的值,其他值都为0,类似 max-pooling 的反向传播
-
测试阶段
在测试时,使用随机池化会对预测值引入噪声,降低性能,取而代之的是使用概率矩阵加权平均,比使用平均池化好些。平均意义上,与平均池化近似,局部意义上,服从最大值池化准则
-
-
- 池化的目的
保持某种不变性(旋转、平移、伸缩) - 池化的作用
- 减少数据特征
- 减少了参数
- 加快了计算速度
- 池化的意义
- 找出代表性的特征
- 对输入特征图进行压缩,使特征图变小,简化网络计算复杂度;
进行特征压缩,提取主要特征 - 计算图像一个区域的某一个特定的平均值(或最大值)来代表这个区域的特征
2.反池化
- 反最大池化
把池化后的最大数字结果填充到池化前图像上对应的像素格子上,其他格子填充0 - 反平均池化
把池化后的平均数字结果分布到池化前图像上的每一个像素格子上