【扫盲】CNN 卷积神经网络 及图像识别举例

前言

暂无

卷积神经网络-CNN 的基本原理

典型的 CNN 由3个部分构成:

  1. 卷积层:卷积层负责提取图像中的局部特征;
  2. 池化层:池化层用来大幅降低参数量级(降维);
  3. 全连接层:全连接层类似传统神经网络的部分,用来输出想要的结果。

1、卷积层

卷积层的作用:

  1. 提取图像的特征,并且卷积核的权重是可以学习的,卷积操作能突破传统滤波器的限制,根据目标函数提取出想要的特征;
  2. 参数共享(一个卷积核用来滤整个图像,而不是很多个卷积核),降低了网络参数,提升训练效率。

为什么卷积能够提取图像特征?

  • 假设现在有一张图片,我们需要识别老鼠屁股上的这一片区域。【扫盲】CNN 卷积神经网络 及图像识别举例

  • 绿框内的图像值可能是这样的(当然,这并不是真正的灰度值)
    【扫盲】CNN 卷积神经网络 及图像识别举例

  • 而卷积核,本质上其实就是一个滤波器,可以看作是一个滤波器模板。在上图中,老鼠尾巴,就是我们要提取的特征,为了提取它,我们可以设置卷积核为下图:
    【扫盲】CNN 卷积神经网络 及图像识别举例

  • 【注意】真正的卷积核的参数不是手动设置的,它是会自动学习更新的,在这里是为了演示方便所以写死了卷积核的内容。

  • 我们将卷积核作用于图片,直接进行卷积运算,我们发现对于识别的特征计算出来的值非常大;
    【扫盲】CNN 卷积神经网络 及图像识别举例

  • 对于上面的卷积(注意,卷积的结果是一个数):(5030)+(5030)+(5030)+(2030)+(50*30)=6600;

  • 而对于不能识别的特征,计算的值非常小,曲线的卷积核与其卷积得到的值为0,如下:
    【扫盲】CNN 卷积神经网络 及图像识别举例

  • 所以,如果某个图像块与此卷积核卷积出的值大,则认为此图像块十分接近于此卷积核(就是长得像)。

  • 如果我们设计了6个卷积核,可以理解:我们认为这个图像上有6种底层纹理模式,也就是我们用6种卷积核就能描绘出目标物体的完整特征。

2、池化层

【扫盲】CNN 卷积神经网络 及图像识别举例

  • 上图中,我们可以看到,原始图片是20×20的,我们对其进行下采样,采样窗口为10×10,最终将其下采样成为一个2×2大小的特征图。
  • 之所以这么做,是因为即使做完了卷积,图像仍然很大(因为卷积核比较小),所以为了降低数据维度,就进行下采样。
  • 总结:池化层相比卷积层可以更有效的降低数据维度,这么做不但可以大大减少运算量,还可以有效的避免过拟合。

3、全连接层【待修正】

  • 这个部分就是最后一步了,经过卷积层和池化层处理过的数据输入到全连接层,得到最终想要的结果。
  • 经过卷积层和池化层降维过的数据,全连接层才能”跑得动”,不然数据量太大,计算成本高,效率低下。
    【扫盲】CNN 卷积神经网络 及图像识别举例

全连接层运行流程?

  • 假设我们在全连接层中,输入为:特征矩阵是3x3,深度为5的数据,也就是3x3x5,如何把这个数据连接到全链接层的隐层呢(比如这个隐层是1x4096)?【扫盲】CNN 卷积神经网络 及图像识别举例

  • 其实就是把输入的3x3x5xN的特征矩阵,再做卷积。【扫盲】CNN 卷积神经网络 及图像识别举例

  • 从上图我们可以看出,我们用一个3x3x5的filter 去卷积**函数的输出,得到的结果就是一个fully connected layer 的一个神经元的输出,这个输出就是一个值。

  • 因为我们有4096个神经元,我们实际就是用一个3x3x5x4096的卷积层去卷积**函数,之后输出

这一步的卷积的作用:

  • 就是它把特征representation整合到一起,输出为一个值,就是大大减少特征位置对分类带来的影响。【扫盲】CNN 卷积神经网络 及图像识别举例

  • 从上图我们可以看出,猫在不同的位置,输出的feature值相同,但是位置不同,全连接层filter的作用就相当于忽略了空间结构,只要有猫,不论你在图上的那个位置,我都可以找到你。

  • 最终,我们全连接层能够分辨这个特征(比如说猫头)是否出现(是或否)

  • 所以全连接层不适合用于在方位上找Pattern的任务,比如segmentation

但是如果全连接层一般不都是多层(一般是两层)么?如下图:【扫盲】CNN 卷积神经网络 及图像识别举例

  • 这是因为只用一层 全连接层 不能解决非线性问题,所以需要两层或以上 全连接层 来解决非线性问题。

运行流程举例

我们现在的任务是,区分物体是不是猫:

  1. 在全连接层之前,通过卷积层等层,我们已经知道了,猫有如下特征(因为卷积层的作用就是提取特征嘛,当做参数输给后面)【扫盲】CNN 卷积神经网络 及图像识别举例
  2. 红色的神经元表示这个特征被找到了(**了);同一层的其他神经元之所以没有**,要么是因为猫的特征不明显,要么是因为没找到;当我们把这些找到的特征组合在一起,ok,现在我认为这是猫了。【扫盲】CNN 卷积神经网络 及图像识别举例