1. CNN的结构
1.1 数据的矩阵格式:
-输入图像:【样本数、高度、宽度、通道数】
-输出图像:【样本数、高度、宽度、通道数】
-卷积核格式:【高度、宽度、输入通道数、输出通道数】:输入通道数是由图像决定的,但是输出通道数是自己设计的,输出通道数也叫卷积核的个数。描述卷积核时,常采用下面的形式:
输出通道@高度*宽度*输入通道数。
一个卷积核对应一个偏置,如果一个卷积核的尺寸是6@3*3*3,那么这个卷积核的参数量=
6*(3*3*3+1)
1.2 卷积的过程:
当输入一张大小为8x8x3的彩色图时,已经提前设计好了卷积核的输出通道为5,即卷积核的个数为5【即五个偏置,一个卷积核一个偏置】(通道数的设计一般是实验后得到的较优结果)。每个卷积核去和输入图像在通道上一一对应进行卷积操作(步长为1,填充为0),得到了3个6x6的feature map。然后再将三个6x6的Feature map按照按元素位置相加进行通道融合得到最终的feature map,大小为6x6(也就是将得到的三个矩阵逐元素相加,之后所有元素再加上该矩阵的偏置值,得到新的6x6矩阵)。每一个6*6特征图再经过全局池化,变成1*1,然后变成一维向量送入全连接层。
1.3 卷积的特点
(1)稀疏连接
从卷积的过程可以看到,3*3的卷积核每次滑动时只能覆盖到输入图像上的9个元素,个数稀疏。
(2)权重共享
卷积核的某个输入通道在对应的图像输入通道上进行滑动时,卷积核的权重是不变的,这意味着对于该图像通道,共享同一组权重值。权重共享意味着当前隐藏层中的所有神经元都在检测图像不同位置处的同一个特征,即检测特征相同。因此也将输入层到隐藏层的这种映射称为特征映射。由上我们可以理解,从某种意义上来说,通道就是某种意义上的特征图。输出的同一张特征图上的所有元素共享一个卷积核,即共享一个权重。通道中某一处(特征图上某一个神经元)数值的大小就是当前位置对当前特征强弱的反应。而为什么在CNN网络中我们会增加通道数目,其实就是在增加通道的过程中区学习图像的多个不同特征。
如果用图像处理上的专业术语,可以将卷积叫做锐化。卷积其实是想要强调某些特征,然后将特征强化后提取出来,不同卷积核关注图片上不同的特征,比如有的更关注边缘而有的更关注中心地带等
1.4 1 * 1卷积
1x1卷积的唯一计算也正是发生在通道上。它通过改变1x1卷积核的数量,实现了多通道的线性叠加,使得不同的feature map进行线性叠加。我们可以将1x1卷积层看做是每个像素位置应用的全连接层。可以对输出通道进行升维或者降维,并且不改变图像尺寸的大小,有利于跨通道的信息交流的内涵。
2. 卷积块
卷积块:通常 = 卷积层 + 激活函数 + 池化层
卷积层:由输出通道个卷积核组成,如256@5*5*3中的256
卷积核:输入通道数与上一级的输出通道数保持一致
卷积层、池化层、全连接层的作用:
卷积层:特征提取;池化层:数据降维;全连接层:分类。
全连接层之前的层的作用是将原始数据映射到隐藏空间来提取特征。即高度提取特征,最后送入分类器。
3. 卷积运算
卷积输出 = 输入 卷积 卷积核,其尺寸的计算公式为
特殊情况:若kernel=3,padding=1,stride=1,则输出图像的尺寸和输入图像的尺寸一样
4. 激活函数
激活函数是个非线性函数,常用于卷积层和全连接层输出的每个神经元,给神经元引入了非线性因素,使网络的表达能力更强,几乎可以逼近任意函数
5. 池化层(下采样、降维、避免数据过拟合)
池化层的三个作用
- 一是降低卷积层对目标位置的敏感度,即实现局部平移不变性,当输入有一定的平移时,经过池化后输出不会发生改变。CNN通过引入池化,使得其特征提取不会因为目标位置变化而受到较大的影响。
- 二是降低对空间降采样表示的敏感性
- 三是能够对其进行降维压缩,以加快运算速度 ,防止过拟合。
设输入图像尺寸为WxHxC,宽x高x深度,卷积核的尺寸为FxF,S:步长,则池化后图像的大小为:
6. 池化后的全连接层
下图中,第一列代表输入图像,第二列代表特征图,两幅特征图中的特征值都是[1,0,0,0],但是1的位置不同(代表猫处于图像中的不同位置),就意味着这两个特征图不一样,直接交给程序判别,就会认为两幅图像不一样。所以,需要在特征图之后添加一个全连接层,将特征图展平成一维向量,忽略掉空间结构特性,不管图像中的猫在哪,都可以正确判别,这叫做平移不变性。
7. 感受野的计算
感受野的定义:输出特征图上的一个像素点对应着原始图像上区域的大小。
计算感受野(由后一层向前一层递推)
相当于是由输入图像经过卷积核得到输出尺寸的逆运算,即求input +2*padding的值
注:文中内容有参考下面的链接: