CNN原理解析

  • 预备知识
    一般来说,分类和识别都需要提取相应的特征来做决策,传统的机器学习在特征提取方面需要比较精细的设计,并且需要在相应的领域有足够的知识以判断特征的有效性,并且在数据输入之前需要进行清洗等预处理,而对于神经网络来说,你只需要把数据输入进去,不用精心设计,他会自动的提取特征,由于其大量的参数,它可以拟合给定的数据,但是由于其黑盒的特性,难以调节,目前还在研究,本次探讨下神经网络的一个具有里程碑意义的结构-CNN。
  • CNN VS FCN
    在很多年前,全连接网络FCN就出现了,但是一直不温不火,尤其是在图像领域。我们知道,图像是由一个个像素点构成的,一般来说是[w,h,c]这样的格式,w,h为长宽,c为channels通道数,RGB图像的channel为3,例如在MNIST中,它是一个灰度图,所以一个图像是28*28*1,但是在FCN中,把它直接展开我i一个28*28= 784的一维向量输入进去,第一丧失了其位置信息,显然像素之间的位置信息是特别重要的,第二使用全连接层需要的参数太多。

CNN

然后通过CNN的可视化可知,CNN识别物体是通过从局部到整体到实现的,CNN识别了局部的特征之后,以及局部特征的相对应的位置,就可以拼凑起来,对整体进行识别。
CNN是由卷积层,采样层和全连接层构成的,大致过程是这样的:

  • 第一个卷积层提取最初的特征,输出特征图(feature map)
  • 第一个采样层在第一卷积层输出的结果进行特征选择,去除多余的特征,重构新的特征图。
  • 第二个卷积层对新的特征图进行特征提取,第二个采样层对第二卷积层输出的结果进行特征选择,卷积层和采样层可以一直循环或者单独使用,最后得到一个最终的feature map,
  • 全连接层根据feature map进行分类
  1. 卷积层
    卷积实际上再传统的图像处理中用得也蛮多的,例如提取边缘的算子,卷积的作用如下:
  • 原始图像经过与特定卷积核的运算,可以提取图像的某些特定特征
  • 不同的卷积核,提取的特征不一样
  • 提取相同的特征,卷积核不一样,效果也不一样。

对于一个输入的图片,只考虑一个通道的话,为一个二维矩阵,以下图为例,一个5*5的图像,经过一个3*3的filter,得到了一个3*3的结果,运算的过程是这样的:蓝色框中的3*3的矩阵和filter进行运算,得到了结果矩阵中的那个蓝色的4,运算的方式就是每个相同位置的值相乘,然后把九个数加起来即可。然后卷积核右移一个单位,与红框中的九个数进行运算,得到结果中的红色的3,依次这么右移和下移计算即可得到最终的结果,


CNN.PNG

下面是一个动图,可以更直观反映:


CNN.gif

实际上,输入的图片一般为RGB格式,即三通道,那么一次需要三个卷积核,


CNN.PNG

卷积的计算公式:输入一个图片后,结果卷积,输出的结果与原图片和卷积核的大小存在一定的联系,先介绍几个概念:

  • padding:在原图像的四周加上0,下图padding = 1
padding.PNG
  • stride: 卷积核一次移动的距离,下图stride=2;


    stride.PNG

下面给出公式:
      Q = (n + 2p - f)/s + 1
其中:

  • Q: 运算后结果的尺度
  • n:原始图像的尺度
  • p: padding的尺度
  • f:filter的尺度
  • s:卷积步长
  1. 采样层
    经过卷积得到了一个feature map,接下来就是特征选择的采样pooling操作,一般现在都是做maxpooling,也会有特殊的平均池化。maxpooling的操作很简单,在给定的范围选出最大值即可,如下图:
maxpool.PNG

实际上,仅仅是这样的一个简单的操作,可以让我们的效率大大提高,其优点如下:

  • 提取出了最有效的特征
  • 减小的图片的大小,减少了运算
  1. 全连接层
    最后得到的高度提纯的特征输入到全连接层,进行分类或者回归。

参考:
卷积神经网络(CNN)入门讲解
卷积神经网络(Convolutional Neural Networks,CNN)

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

友情链接更多精彩内容