CNN原理解析
2019-07-17 本文已影响0人
Elijah_cs
- 预备知识
一般来说,分类和识别都需要提取相应的特征来做决策,传统的机器学习在特征提取方面需要比较精细的设计,并且需要在相应的领域有足够的知识以判断特征的有效性,并且在数据输入之前需要进行清洗等预处理,而对于神经网络来说,你只需要把数据输入进去,不用精心设计,他会自动的提取特征,由于其大量的参数,它可以拟合给定的数据,但是由于其黑盒的特性,难以调节,目前还在研究,本次探讨下神经网络的一个具有里程碑意义的结构-CNN。 - CNN VS FCN
在很多年前,全连接网络FCN就出现了,但是一直不温不火,尤其是在图像领域。我们知道,图像是由一个个像素点构成的,一般来说是这样的格式,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进行分类
- 卷积层
卷积实际上再传统的图像处理中用得也蛮多的,例如提取边缘的算子,卷积的作用如下:
- 原始图像经过与特定卷积核的运算,可以提取图像的某些特定特征
- 不同的卷积核,提取的特征不一样
- 提取相同的特征,卷积核不一样,效果也不一样。
对于一个输入的图片,只考虑一个通道的话,为一个二维矩阵,以下图为例,一个5*5的图像,经过一个3*3的filter,得到了一个3*3的结果,运算的过程是这样的:蓝色框中的3*3的矩阵和filter进行运算,得到了结果矩阵中的那个蓝色的4,运算的方式就是每个相同位置的值相乘,然后把九个数加起来即可。然后卷积核右移一个单位,与红框中的九个数进行运算,得到结果中的红色的3,依次这么右移和下移计算即可得到最终的结果,
CNN.PNG
下面是一个动图,可以更直观反映:
CNN.gif
实际上,输入的图片一般为RGB格式,即三通道,那么一次需要三个卷积核,
CNN.PNG
卷积的计算公式:输入一个图片后,结果卷积,输出的结果与原图片和卷积核的大小存在一定的联系,先介绍几个概念:
- padding:在原图像的四周加上0,下图padding = 1
-
stride: 卷积核一次移动的距离,下图stride=2;
stride.PNG
下面给出公式:
其中:
- Q: 运算后结果的尺度
- n:原始图像的尺度
- p: padding的尺度
- f:filter的尺度
- s:卷积步长
- 采样层
经过卷积得到了一个feature map,接下来就是特征选择的采样pooling操作,一般现在都是做maxpooling,也会有特殊的平均池化。maxpooling的操作很简单,在给定的范围选出最大值即可,如下图:
实际上,仅仅是这样的一个简单的操作,可以让我们的效率大大提高,其优点如下:
- 提取出了最有效的特征
- 减小的图片的大小,减少了运算
- 全连接层
最后得到的高度提纯的特征输入到全连接层,进行分类或者回归。
参考:
卷积神经网络(CNN)入门讲解
卷积神经网络(Convolutional Neural Networks,CNN)