CNN基础学习

自用~~笔记~~~

1. 卷积神经网络CNN

从全连接层到卷积,我们得知适合于CV的神经网络框架:

  1. 平移不变性:即不管监测对象出现在图像的什么位置,nn的前几层都对相同的区域有相似的反应。
  2. 局部性:神经网络的前几层只探索输入图像中的局部区域,而不在意图像中像个较远区域的关系。

(1)图像卷积

在卷积层中,输入张量和核张量通过互相关运算产生输出张量。

卷积核:图中就是让核与输入两个平面平行对齐,每对应点进行相乘后就和,得到的只作为输出。

卷积层中的两个被训练的参数是卷积核权重标量偏置。随机初始化卷积核权重。

(2)通道

      图像是一个由高度、宽度和颜色组成的三维张量,比如包含1024*1024*3个像素。如果只有一个卷积核,卷积后会将颜色通道进行融合。

(3)感受野

    如下图所示,当第二层节点的输入来自3*3的卷积核时,其感受野为原始图像上的9个像素点。

    而第三层节点的输入来自3*3卷积核对第二次的扫描,即第三层的每个节点都可以看见第二层的9个节点,而第二层的每个节点又可以看见原始图像上的9各节点。因此,对于第三层的节点,感受野增大

2. 卷积实现过程

整个流程:

原始数据——>卷积层(conv)——>池化层(pooling)——>展平(flatten)——>全连接层

在红色框中,是通过不断堆叠卷积层和池化层组成的(虽然图中只画了一层卷积和池化,实际的模型中会有多层),其中,卷积的目的是做特征提取;池化的目的是做特征汇聚。

在绿色框中,是通过不断堆叠全连接神经网络层组成的,其目的是对红色框传过来的特征进行学习,判断这些特征最有可能属于哪个类别。

(1)填充和步幅(padding&stride)

经过对卷积处理图像的方式和核概念的认识,我们可以将卷积神经网络理解为一个kernel在输入图片上遍历的过程,遍历过程中kernel与输入信息之间的对应点的乘积求和即为卷积输出。而且输出结果的尺寸是要小于输入信息的,除非卷积核的大小的1x1的,具体如下图所示

                  

此时可以在输入信息的四周填充一圈新像素(一般填充0值像素),使卷积核遍历图片后得到的卷积输出大小不变。填充的像素多少与卷积核的尺寸大小成正相关。如下图所示,当卷积核尺寸为3,步长大小为1时,需要填充一行一列像素可以使得输出大小与输入信息一致:

 

 步幅就是卷积核咋遍历,如下图为垂直步幅为4,水平步幅为2的二维互相关运算。

最后,卷积计算结果的尺寸与卷积核,步长,填充和输入信息尺寸这四个因素相关。
我们先定义几个参数:

  • 输入图片大小 W×W
  • 卷积核大小 F×F
  • 步长 S
  • padding的像素数 P

于是我们可以得出卷积结果的尺寸计算公式为:

N = (W − F + 2P )/S+1

即,卷积输出结果的尺寸为 N×N

 (2)池化和采样(pooling&sample)

某种程度上,池化(pooling)可以看做特殊的卷积,主要与卷及操作配合,做卷积后的特征汇聚

池化的工作:

  • 降维,在保证原有特征的基础上,尽量减少参数
  • 使网络对一些晓得局部形态改变保证不变形,并拥有更大的感受野
  • 池化层可以看做一种特殊的卷积,卷积核为max或mean函数

上图中,池化的核是绿色的框,大小为2x2;原始输入数据的填充为0,因为在原始数据的四周并没有像素填充;池化操作的步长为2 ,即初始位置为黄色部分,滑动后到了红色的部分,滑动了两个像素位置。

(3)展平(flatten)

 卷积的计算结果是一组特征图,这些数据是有空间维度的(即高度和宽度),但是全连接神经网络层能接受的数据格式要求是向量(即维度等于1的数据),因此,Flatten操作的目的是把多维的特征图压缩成长度为 height × width × channel 的一维数组,然后再与全连接层连接,通过全连接层处理卷积操作提取到的特征并输出结果。

所以整个过程平面图如下:

 (这里softmax根据任务来,在做图像识别时,一般习惯输出结果后加一个简单的分类器如softmax分类器)

卷积模型的标准结构:

3. LeNet

后续整理一些经典的CNN论文

参考文献:

1. 深度学习之图像分类基础:卷积神经网络 - 魔法学院小学弟

2. 李沐《动手学深度学习》

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
THE END
分享
二维码
< <上一篇
下一篇>>