真锋
永远保持一颗学习和专注的心
嵌入式视觉笔记

【深度学习】卷积神经网络理解

卷积神经网络简介

卷积神经网络是深度学习中非常重要的一种神经网络模型,目前在图像识别、语音识别和目标检测等领域应用非常广泛。卷积神经网络(Convolutional Neural Network, CNN)是一种前馈神经网络,使用反向传播(Back Propagation,BP)算法进行训练。

卷积神经网络由一个或多个卷积层和顶端的全连通层(对应经典的神经网络)组成,同时也包括关联权重和池化层(pooling layer)。这一结构使得卷积神经网络能够利用输入数据的二维结构。与其他深度学习结构相比,卷积神经网络在图像和语音识别方面能够给出更好的结果。同时相比较其他深度、前馈神经网络,卷积神经网络需要考量的参数更少,使之成为一种颇具吸引力的深度学习结构。

卷积神经网络和全连接神经网络的比较

和全连接神经网络(Fully Connected Network,FCN)一样,卷积神经网络中的每一个节点都是神经元。在全连接神经网络中,每相邻两层节点之间都有边相连,于是一般会将每一层全连接层中的节点组织成一列,这样方便显示连接结构。而对于卷积神经网络,相邻两层之间只有部分节点相连,为了展示每一层神经元的维度,一般会将每一层卷积层的节点组织成一个三维矩阵。

除了结构相似,卷积神经网络的输出输出以及训练流程都与全连接神经网络相似。以图像分类为例,卷积神经网络的输入就是图像的原始像素(一般是三维数字矩阵),而输出层的每一个节点代表了不同类别的置信度。这和全连接神经网络的输入输出是一致的。类似,全连接神经网络的损失函数计算以及w参数的优化过程也适用于卷积神经网络。总之,看到这里,你可以总结为CNN和FCN的唯一区别在于神经网络相邻两层的连接方式。FCN和CNN结构示意图如下所示:

经典卷积神经网络模型

经典的神经网络模型有LeNet-5,AlexNet,ZF,VGG,GoogleLeNet,Inception v3,ResNet,GoogleLeNet-v4,下图是LeNet-5模型的结构:

通过分析总结以上经典CNN结构,我们可以发现CNN的设计符合一些规律,以下正则表达式总结了一些经典的用于图片分类问题的卷积神经网络架构:

输入层—>(卷积层+—>池化层?)+—>全连接层+

以上公式中,“卷积层+”表示一层或多层卷积层,大部分CNN网络中一般最多连续 使用三层卷积层。“池化层?”表示没有或者一层池化层。池化层虽然可以起到减少参数防止过拟合的问题,但是在部分论文中也发现可以直接通过调整卷积层步长来完成。所以有些CNN中没有池化层也是可以的。最后在多轮卷积层和池化层之后,卷积神经网络在输出之前一般会经过1-2个全连接层。比如LeNet-5模型就表示为以下结构:

输入层—>卷积层—>池化层—>卷积层—>池化层—>全连接层—>全连接层—>输出层

什么是卷积层和池化层(数学理解)

对图像(不同的数据窗口数据)和滤波矩阵(一组固定的权重:因为每个神经元的多个权重固定,所以又可以看做一个恒定的滤波器filter)做内积(逐个元素相乘再求和)的操作就是所谓的『卷积』操作,也是卷积神经网络的名字来源。

图像上卷积

在下图对应的计算过程中,输入是一定区域大小(width*height)的数据,和滤波器filter(带着一组固定权重的神经元)做内积后等到新的二维数据。

具体来说,左边是图像输入,中间部分就是滤波器filter(带着一组固定权重的神经元),不同的滤波器filter会得到不同的输出数据,比如颜色深浅、轮廓。相当于如果想提取图像的不同特征,则用不同的滤波器filter,提取想要的关于图像的特定信息:颜色深浅或轮廓。

图像卷积结果示意图:

池化(pool)层

池化,简言之,即取区域平均或最大,如下图所展示的是取区域最大,即下图左边部分中 左上角2×2的矩阵中6最大,右上角2×2的矩阵中8最大,左下角2×2的矩阵中3最大,右下角2×2的矩阵中4最大,所以得到下图右边部分的结果:6 8 3 4。

所以,池化层可以非常有效地缩小矩阵尺寸,从而减少最后全连接层中的参数。

卷积神经网络的组成

输入层

输入层是 整个神经网络的输入,在处理图像的卷积神经网络中,它一般代表了一张图片的像素矩阵(三维矩阵)。其中三维矩阵的长和宽代表了图像的大小,而三维矩阵的深度代表了图像的色彩通道(channel)。黑白图片的深度为1,RGB色彩模式下的图像深度为3。从输入层开始,卷积神经网络通过不同的神经网络结构将上一层的三维矩阵转化为下一层的三维矩阵,直到最后的全连接层。

卷积层(Convolutional layer)

卷积层中每一个节点的输入只是上一层神经网络的一小块,这个小块常用的大小有3*3和5*5。卷积层试图将神经网络中的每一小块进行更加深入的分析从而得到抽象程度更高的特征。一般来说,通过卷积层处理过的节点会变得更深。
卷积层神经网络结构中最重要的部分被称为过滤器(filter)或者内核(kernel),过滤器 可以将当前层神经网络上的一个子节点矩阵转化为下一层神经网络上的一个单位节点矩阵。单位节点矩阵指的是一个长和宽都为1,但深度不限的节点矩阵。

卷积层的参数个数和图片的大小无关,它只和过滤器的尺寸、深度以及当前层节点矩阵的深度有关。

池化层(Pooling)

池化层神经网络不会改变三维矩阵的深度,但是它可以缩小矩阵的大小。池化操作可以认为是将一张分辨率高的图片转化为分辨率低的图片。通过池化层,可以进一步缩小最后全连接层中节点的个数,从而达到减少整个神经网络中参数的目的。

  • 卷积层的参数个数只和过滤器的尺寸、深度及其当前层节点矩阵的深度有关。
  • 池化层可以非常有效地缩小矩阵的尺寸,从而减少最后全连接层中的参数。

总结:

  • padding = “value”,N = [(W-F+2P)/S]+1,这里表示的是向下取整再加1
  • padding = “same”,N = [W/S],这里表示向上取整

全连接层

在经过多轮卷积层和池化层处理之后,在卷积神经网络的最后一般会是由1到2个全连接层来给出最后的分类结果。经过几轮卷积层和池化层的处理之后,可以认为图像中的信息已经被抽象成了信息含量更高的特征。我们可以将卷积层和池化层看成自动提取图像特征的过程。在特征提取完成之后,仍然需要使用全连接层来完成分类任务。

softmax层

Softmatx层主要用于分类问题。通过softmat层,可以得到当前样例属于不同种类的概率分布情况。

参考资料

赞赏

发表评论

textsms
account_circle
email

  • harley博主

    写的不够系统!

    3年前 回复

嵌入式视觉笔记

【深度学习】卷积神经网络理解
卷积神经网络简介 卷积神经网络是深度学习中非常重要的一种神经网络模型,目前在图像识别、语音识别和目标检测等领域应用非常广泛。卷积神经网络(Convolutional Neural Network, CNN)是…
扫描二维码继续阅读
2018-11-18