前言:关于卷积神经网络,相关的书籍、博客、知乎提问、视频数不胜数,或许是没有理解透,感觉他人写的文章大多讲的不清不楚。所以在浏览了相关的文章、博客和书籍后,自己总结出了这一篇文章,为了让自己熟悉相关知识,也为了方便往后再来复习。其中许多内容来自其他人的博客,如果侵权了,请联系qq1839808908,小生马上删除相关内容。
卷积神经网络(Convolutional Neural Networks,简称CNN),可以说是深度神经网络模型中的“明星”网络架构,在计算机视觉方面贡献颇丰。除了CNN,还有深度卷及网络(DNN)和递归网络(RNN),在图像识别、视频识别、语音识别领域也取得了不错的效果。
卷积神经网络包括一维卷积神经网络,二维卷积神经网络和三维卷积神经网络。一维卷积神经网络主要用于序列类的数据处理,二维卷积神经网络常用于图像类文本的识别,三维卷积神经网络主要应用于医学图像以及视频类数据识别。
一、神经网络识别图像的原理是什么?
人类的大脑是一个非常强大的机器,每秒内能捕捉多张图,并在意识不到的情况下就对这些图片进行了处理,你马上就能识别出一张照片中,有几个人,几张桌子,几只动物,甚至能马上说出这些动物的品种。但是机器并不行,一张张的图片对于机器来说只是一堆文件而已,或者说是有上万个像素点的集合而已。
所以,要想让机器做到识别图像,就是要让机器能够认识到这些像素点代表些什么东西。我们知道一张彩色图片的像素通道有三个,分别是R,G,B三个通道,最小值为0,最大值为255。这些像素点的值,组合方式,排列方式将是机器识别图像的关键。
机器由于其强大的计算力,能够通过对庞大的数据进行学习,对数据中每一个像素点的值的大小、排列顺序进行研究,那么机器就可以识别出一个数据代表的是什么意思。这就好像,一个外星人给了你两个你从未见过的手写文字,你第一次看可能分不清楚这两个文字,但是如果外星人给了你一万张图片,相信,你在看了一万次这两个文字的手写体之后,你也能分辨出这两个手写体的不同。因为你通过训练找到两个文字的不同或规律。
二、什么是神经网络
这里的神经网络,不仅指生物神经网络,也指人工神经网络(Artificial Neural Networks,简称ANNs),是一种模仿生物神经网络行为特征的算法数学模型,由神经元、节点与节点之间的连接(突触)所构成,如下图:
人工神经网络即是模仿了生物神经网络的结构所构造的数学模型。如下就是模仿的结果:
是不是很像?
三、什么是卷积神经网络
卷积神经网络,英文名:Convolutional Neural Networks,简写为 CNN,它是 一种包含了卷积计算并且具有深度结构的前馈神经网络,是深度学习(deep learning)的经典网络架构之一。
而在近些年来,卷积神经网络正在逐步兴起,其中最大的“导火索”——2012 年 ILSVRC 比赛中 AlexNet 卷积神经网络的问世,让全世界都开始关注到卷积神经网络。 因为利用卷积神经网络可以在图像和语音识别等方面得到更加准确的预测 结果,所以这一技术也被广泛的传播和应用。
如下图就是最最经典的卷积神经网络LeNet-5的网络模型图:
卷积神经网络在以前常被应用在计算机的图像识别领域,不过随着更优的 CNN 结构、更优的算法和更快的计算机的推出,它现在也可以被应用在视频分 析(即动态图像)、自然语言处理和自动驾驶等领域,比如近年来大火的“人与 计算机的围棋对抗”中的阿尔法围棋(AlphaGo)就运用到了 CNN。
如上图所示,卷积神经网络通常被分为三层:①输入层(input layer);② 隐藏层(hidden layer);③输出层(output layer)。其中的隐藏层通常包含了三种结构,它们分别是卷积层、池化层和全连接层。 在下文中会对这三层进行详细的分析。
四、参数量计算
1、卷积层
这里我们必须了解到两个公式,用于计算输入图像经过一次卷积层后输出的图像的宽度和高度:
公式中的 W 和 H 分别代表图像的宽度(Weight)和高度(Height),S 代表卷积核窗口的移动步长(stride);P(padding)代表的是图像边缘增加的边 界像素的层数;下标 input 表示输入的图像的相关参数;下标 output 表示输出 图像的相关参数;下标 filter 代表卷积核的相关参数。
每个卷积核都有一个bias参数
(1)当bias为true时,一次卷积的参数数量为:
值得一提的是,inputChannel即输入通道数必须和卷积核的深度相同,卷积核的数量等于feature map的数量,即输出通道的数量,bias参数也等于输出通道的数量。
(2)当bias为false时,一次卷积的参数数量为:
(3)当使用BN(Batch Normalization,批量标准化)时,还有两个可学习的参数α和β,参数量均等于bias
2、全连接层
全连接层其实可以理解为极端条件下的卷积层。在LeNet中的FC1层,就是输入层的长、宽、深度完全等于卷积核的长、宽、深度,输出就是卷积核的个数(bias不一样,继续研究,这里猜测是)。假设 输入神经元数为M,输出神经元数为N,则
(1)当bias为true时,参数量为:
(2)当bias为false时。参数量为:
五、计算量计算
卷积层
(1)一次卷积的计算量
一次kk的卷积,执行一次卷积操作,需要kk次乘法操作(卷积核中每个参数都要和特征图上的相应元素想相乘一次),k k - 1次加法操作(加卷积结果k k个数加起来)。所以一次卷积操作需要的乘加次数为:
(2)在一个特征图上需要执行卷积的次数
在一个特征图上需要执行的卷积次数其实就等于输出特征图feature map的像素个数,因为输出特征图的每一个像素都是由输入特征图经过一次卷积运算得来的。
(3)N个特征图上进行卷积的次数
乘以N
(4)输出一个特征图