卷积神经网络(CNN)个人理解分享

大家好!今天我们来介绍一下卷积神经网络(CNN),文章内容的顺序与B站唐宇迪老师的深度学习课程保持一致,大家如果觉得我写的不好的话可以去B站听课。好了,话不多说,下面开始进入卷积神经网络的世界!

(文中图片均来源于B站唐宇迪老师课程课件,均只用于个人学习用途)

1.卷积神经网络的应用

第一个是检测任务:

图片

第二个是分类和检索:

图片

第三个是超分辨率重构:

图片

第四个是医学任务等:

图片

第五个是无人驾驶:

图片

第六个是人脸识别:

图片

2.卷积的作用

图片

左边的是传统的神经网络也是最简单的神经网络--多层感知机(MLP),右边的是我们今天要说的卷积神经网络。从图中来看,它们最直观的不同就是维度的不同,左边MLP的输入是一个向量,是二维的,而右边输入的是一个立体的图像(带颜色通道的图像),是三维的,不过我们后面可以知道对于一张像素特别高的图片来说,左边的MLP是显然不行的。我们举个例子,我们有一张可爱的小猫图片:

                                

图片

它的像素是1000*1000*3的,如果我们要输入到左边的MLP中,那它就要被拉平成一个数量级高达10^6级别的向量,哪怕隐藏层只有1000个,最后的参数数量也会高达10^9,这是我们训练AI绝对不能接受的。而卷积神经网络就可以大大缩写参数的数量,具体操作我们后面再说。

我们先简单看一下CNN的整体架构:

图片

其中卷积层的作用简单来说是提取特征,池化层简单来说就是压缩特征。

我们先围绕下面这张图看看卷积到底做了什么事:

图片

从左往右看,我们先将这个32*32*3的图片抠出一部分,大小为5*5*3,由于这个小图片有三个颜色通道,为此我们取出其中一个颜色通道(右边那种大蓝图),图中数字代表该位置的像素值。而卷积便是生成最右边那张绿图(该图层的特征图)的操作,完成这个操作我们肯定不是凭空完成的,我们需要一个卷积核(其实这个不能叫卷积核,卷积核是三维的,这个应该叫卷积核的一个卷积平面),这就是图中那个3*3大小的深蓝色核,每个图层所需的卷积核都不一样,为此我们将每一个图层的卷积核合起来便是一个完整的卷积核。现在看图中深蓝色部分,1*0+3*1+1*2+2*2+2*2+3*0+0*0+2*1+2*2=19,这就是绿色图中19的由来,其他数字大家可以自己推推看,应该是一样的(滑动步长为1)。

3.卷积特征值的计算

我们先来看看图像的颜色通道:

图片

颜色通道就是32*32*3里面的3。

我们再看下面这张图:

                          

该图片展示了一个图像所有的颜色通道,在用每一个卷积核计算特征图的时候,我们都会将图像中各个颜色通道计算得到的特征图相加起来,最后还会添加一个偏置项,从而得到一个完整的特征图,有几个卷积核,我们就有几张特征图。具体可见下图(滑动步长为2):

图片

左边是一个三层颜色通道的图像,中间是两个卷积核。对三个颜色通道来说,一个卷积核里面包括的三个矩阵(前面提到的卷积平面)分别与每个颜色通道进行对应位置相乘再相加操作,求完后再把三个图层的特征图相加一下,添加偏置项后即可得到最终的结果特征图(最右边两张)。

注意:有几个卷积核,最终就会得到几张特征图,它们对应不同的特征提取方法

图片

图片

一张图像经过6个卷积核(相当于6个不同的特征提取方法)得到28*28*6这么一个东西,这么做提取到了比较丰富的特征。这个时候如果我们要再把它送到卷积层里面的话,这时候卷积核第一个维度就必须是6了(相当于6个颜色通道),例如6*3*3大小的卷积核。

4.步长与卷积核大小对结果的影响

我们先观察下面这张图:

图片

图片

(ps:其实图里面的卷积核应该表示成3*5*5,举个例子,python中一个三维张量:[ [ 矩阵1] [矩阵2 ] [ 矩阵3] ],第一个维度才是代表矩阵数量的,后面那个也是,应该是10个6*5*5大小的卷积核)。

图片

这张图说明了卷积层所涉及到的参数。它们决定了得到的特征图的大小。

对步长来说:

图片

对卷积平面大小来说,一般我们用的是3*3大小,它越大,就代表特征提取越粗糙,反之越细密。

边缘填充:这个操作就是在输入图像外围添加一圈0(好像也有复制图像周围像素值的做法),最重要的目的就是防止图像边缘信息被边缘化忽视了,因为有时候那些边边角角的信息不一定不重要,简单概括一下有以下几点:

图片

以下是卷积得到特征图大小的计算公式:

图片

实际上也不用记,遇到了稍微看看其实就可以算出来。

5.池化层的作用

图片

(没有池化层的话,特征过于丰富,但特征不是都重要,这时候就需要池化层进行压缩,起到一个瘦身的效果)

图片

图片

这张图代表的是max-pooling操作,把每个区域的最大值提出来,其他的都丢掉。除了这个操作,还有平均pooling,但现在已经见的不多了。现在基本用的都是max pooling

6.整体网络架构

图片

图中每一次卷积后都会用一次RELU函数处理一下,然后每两次卷积都进行了一次池化压缩,最后一次池化后我们还要进行一个全连接层(FC),输出5个概率的大小,而进行FC前,我们还要将最后一次池化得到的特征图进行拉平(flatten),这样我们才能进行全连接计算。

下面这张图展示了CNN的完整结构:

图片

卷积神经网络还有很多经典的网络架构,如AlexNet:

图片

Vgg网络:

图片

残差网络resnet:

图片

这是我总结出来的一些东西,希望能帮助大家更好的理解CNN!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值