pytorch深度学习:CNN卷积神经网络(一)

卷积神经网络(CNN)是在图像、视频识别处理领域应用最多的深度学习方法。这次就来学习下卷积神经网络的基础知识。这里只简单介绍下卷积神经网络的入门知识,想再深入学习可以看下吴恩达李宏毅老师的CNN课程。

1.卷积神经网络的介绍

如果我们采用传统神经网络来处理图像,由于图像分别率很高的原因导致输入数据的维度特别高,所以神经网络中的参数数量会太大。针对这个问题,CNN就被提出了。在卷积神经网络中,第一个卷积层会直接接受图像像素级的输入,每一层卷积都会提取数据中最有效的特征。

我们以人眼识别物体来类比卷积层,人眼识别物体是从点和线开始的,每个视觉神经元只接受一个区域信号。并提取出点和边的特征,然后将点和边的信号传递给后面一层的神经元,再接着组合成高阶特征,比如三角形、正方形、拐角等,再继续抽象组合,得到眼睛、鼻子和嘴等五官,最后再将无关组合成一张脸,完成识别。

只要我们提供的卷积核足够多,就能提取出各种方向的边和各种形态的点,就可以让卷积层抽象出有效而丰富的高阶特征,每一个卷积核滤波得到的图像就是一类特征,也叫Feature Map

卷积的好处: 不管图像尺寸如何,我们需要训练的权重参数只跟卷积核大小、数量有关,因此我们可以使用非常少的参数量处理任意大小的图片。

2.卷积神经网络的结构

常见的卷积神经网络结构包括:卷积层、池化层、全连接层。其中卷积层和池化层可以重复多次,如下图所示:
pytorch深度学习:CNN卷积神经网络(一)_第1张图片

2.1 卷积层(Convolution)

卷积层由多个卷积核构成,每个卷积核都会提取一个特征,也就是形成一个Feature Map,有多少卷积核就会形成多少Feature Map

如:6×6的图像,经过3×3的卷积核内积,步长(stride)为(1,1),最终会形成一个4×4的Feature Map。如下图所示:

pytorch深度学习:CNN卷积神经网络(一)_第2张图片
若图像为彩色图像,就是图像会有一个高度3(R、G、B),这时的卷积核就是一个3×3×3的立方体结构,就不是我们2维里的正方形了。

具体的卷积过程演示,可以方便进行理解。

还有一个操作要注意的是,如果想要保持输入Feature map和输出Feature map的大小一致,需要在周围补0,叫做padding

2.2 池化层(Pooling)

在减少数据量的同时,保留图像中有用的信息,也就是对Feature Map进行降维操作。

池化层也有自己的Filter来对Feature Map矩阵进行扫描,按照计算方式的不同可以分为:

  • Max pooling: 将n×n大小里的值选一个最大的作为输出。
  • Average pooling: 将n×n大小里的值取平均作为输出。

目前最常用的就是Max pooling,如下图所示:
pytorch深度学习:CNN卷积神经网络(一)_第3张图片

2.3 全连接层(Fully Connected)

全连接层就是把所有局部特征结合变成全局特征,用来计算最后每一类的概率。

换句话说全连接层就是把卷积层和池化层的输出展开成一维形式,在后面接上与普通网络结构相同的回归网络或者分类网络,一般接在池化层后面,如图所示:

Flatten就是将Feature Map展成一维向量,作为后面全连接层的输入。
pytorch深度学习:CNN卷积神经网络(一)_第4张图片

3. CNN的主要特点

这里主要讨论CNN相比与传统的神经网络的不同之处,CNN主要有三大特色,分别是局部感知权重共享多卷积核

  • 局部感知

局部感知就是我们上面说的感受野,实际上就是卷积核和图像卷积的时候,每次卷积核所覆盖的像素只是一小部分,是局部特征,所以说是局部感知。CNN是一个从局部到整体的过程(局部到整体的实现是在全连通层),而传统的神经网络是整体的过程。具体如下图所示:
pytorch深度学习:CNN卷积神经网络(一)_第5张图片

  • 权重共享

传统的神经网络的参数量是非常巨大的,比如1000X1000像素的图片,映射到和自己相同的大小,需要(1000X1000)的平方,也就是10的12次方,参数量太大了,而CNN除全连接层外,卷积层的参数完全取决于滤波器的设置大小,比如10x10的滤波器,这样只有100个参数,当然滤波器的个数不止一个,也就是下面要说的多卷积核。但与传统的神经网络相比,参数量小,计算量小。整个图片共享一组滤波器的参数。

  • 多卷积核

一种卷积核代表的是一种特征,为获得更多不同的特征集合,卷积层会有多个卷积核,生成不同的特征,这也是为什么卷积后的图片的高,每一个图片代表不同的特征。

4. 结语

这只是CNN的一点皮毛,要想更进一步还需要更多的理解。本文参考了两篇优秀的博客,博客1和博客2,他们写得更为详细,不太理解的可以认真看一下。

你可能感兴趣的:(深度学习:pytorch框架,神经网络,python,计算机视觉)