说说卷积神经网络(1):CNN结构

由于图像变化的多样性(如光照,形变,遮挡等),传统的图像检测方法,很难处理多种变化的情况,而深度卷积神经网络CNNs可以连续的对图像的细节信息进行建模,并把这个信息和深度网络结合起来。从而提高图像检测的效率。

在CNNs中,第一层网络试着检测图像的边缘并且形成边缘检测的模板,后面一层会把它们与简单形状相结合,并且形成不同物体的位置、光照、大小,等等模板。最后一层会对输入图像和所有的模板进行匹配,最终的预测是所有权重的和。所以,深度卷积神经网络可以对复杂的变化进行建模并且给出高精度的预测。

为了便于解释CNNs和举例说明,这里用到CIFAR-10数据集.,这个数据库有10个类别共计60,000张图,每个类别有6,000张图像。每张图的尺寸是32x32。

一个典型的CNN包括三种层:

1.卷积层(Convolution Layer)

2.池化层(Pooling Layer)

3.全连接层(Fully Connected Layer)

在一些过去的CNNs网络中还可以发现有batch normalization层,但是现在已经不常见了。

卷积层

卷积层是整个网络的关键。每一层都可以形象化为一个模块或者一个长方体。例如,对于上面提到的数据集CIFAR-10,输入层可以形象化为下面的形式:

fig-1.png

这里可以看到原始图片是32x32的宽和高,深度是3对应着RGB三个通道,这是构成图像的基础。在这基础上运行一个filter就构成一个卷积层。Filter是另外一个模块或者长方体,它的宽和高更小一些但深度和输入层一致,这个filter在基础的输入层上滑动,假设filter的尺寸是5x5x3。

我们从左上角开始滑动这个filter,直到到达右下角。这个filter其实只是以一个weights(权重)的集合。举个例子:5x5x3 = 75 + 1 bias = 76 weights。在每个位置,像素的权重的和通过WTX + b得出一个值。单个filter得出的结果可能会得出大小为28x28x1的一个体量。(28是32-5+1得出的)。

注意,每一步可能会运行多个filter,所以,假如用到了10个filter,输出结果可能如下:

fig-3.png

这里,filter的权重参数是我们在反向传播的过程中学习出来的。可能你已经注意到我们的输入块是32x32,而输出块是28x28,为什么会这样?我们来看一个更简单的例子。

假设原始图像的尺寸是6x6xd,而filter的尺寸是3x3xd,这里用d表示深度因为二者的深度是一样的。因为深度是一致的,我们从正面视角看看filter是如何工作的。

fig-4.png

这里我们可以看到结果是4x4x1的块。假如输入的图像是NXNXd,而filter是FXFXd,滑动的步长是S,表示一次滑动跨越的格子数。上面的例子中,步长为1,但是它也可以是一个更大的值,那么输出的模块的大小是:

output size = (N – F)/S + 1

我们再来看一个例子来加深理解。还是这幅32x32的图,我们需要应用2个filter,首先是10个大小为7步长为1的filters,接下来是6个大小为5步长为2的filters。在考虑结果之前,我们先想两个问题:

1.每个filter的深度d值应该是多少?

2.每一步的结果的尺寸大小应该是多少?

下面是答案:

fig-5.png

这里注意,图像的尺寸大小也相应的缩小了,这可能是不想看到的,所以,需要限制使用大尺寸的filter,以防止图像尺寸快速缩小。

为防止这种情况,我们在图像外圈添加一圈0组成的边缘,称之为zero-padding,还是上文那个例子,原图是6x6,filter是3x3,需要的边沿是(3-1)/2= 1,我们可以形象的表示如下;:

fig-6.png

上图可以看到:图片现在变成了8x8因为每天边上都加了宽度为1的边缘。所以现在的输出的尺寸是6x6,和原图一样了。

池化层:

当我们使用padding进行边缘填充的时候,图像的尺寸变得和原图一样了。因此,池化层的作用就是用来减少图像尺寸的。它通过在每一层使用filter进行采样来实现。假设下图是个4x4的层。假设我们使用2x2的步长为2的filter并且最大的池化,我们得到下面的结果:

fig-7.png

这里我们可以看到4个2x2的矩阵变成了1个,并且还求出了每个矩阵的最大值。总的来说,最大值池化(max-pooling)用在了这里,不过其他的池化方法例如平均值池化也可以考虑。

全连接层

在卷积层和池化层的后面。在全连接层中,每个像素都被认为是一个独立的神经元,就像一个真实的神经网络一样。最后的全连接层将包含所有预测物体的种类,例如,在CIFAR-10的例子里,最后的全连接层将有10个神经元。

后续会再写写应用方面的例子:)

参考:https://www.analyticsvidhya.com/blog/2016/04/deep-learning-computer-vision-introduction-convolution-neural-networks/

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容