CNN基础知识(2)

时间:2024-04-04 21:05:37

这里不再重复什么是CNN,参考了两篇博文,总结记录了在学习CNN过程中的几点疑惑。

CNN做的就是下面3件事:

1. 读取图片:

把由一个个像素点组成的图片转换为计算机能读懂的0~255数字组成矩阵图。

2. 提取特征:

这是最关键的一步:此过程是由几个卷积核组成的卷积过程。这里需要解释下,在卷积的过程中,会不止一个过滤器(也叫卷积核),因为每个过滤器的参数不同,提取的特征也不同(而大小和个数由人为指定)。但是有以下几点需要注意:

(1)提取的过程可以简单看成如下的动态图:

绿色矩形框是图片矩阵;橘色矩形框是过滤器;右边的粉色矩形框就是得到的特征图。
CNN基础知识(2)
这里要注意的是:在“卷积”过程中,这种对应数值相乘、再相加的计算,仅仅是“线性”计算;而在现实世界中,很多很多的数据,都是“非线性”的。所以,在“卷积”处理的后面,我们常常引入一个“非线性”的计算,来使得数据更加接近真实世界。具体到图片计算,ReLU相当于将“特征图片”中,像素值小于0的部分,全部变为0,因为图片的像素值是不存在负值的。如下:
CNN基础知识(2)
所以在“卷积”的后面,再加上一步“ReLU计算”,但是如果得到的特征图的数值绝大多数均为正数,所以,经由ReLU处理后的图片可能并没有太大的改变。

(2)在人的眼睛中看到的提取特征后的图像应该是:

图像变小(从矩形图的大小可以看出矩形由原来的5x5,变为了3x3),并且图像变得模糊(但主要特征都被提取出来了)。

(3)同时要注意的是不同的过滤器提取得到的特征图是不同的:

比如提取得到的图:轮廓图、锐化图、浮雕图等

(4)过滤器中的值是怎么确定的?

这里就是算法要学习的其中一部分,不需要人为设定。而需要设定的参数有:
① 过滤器的大小(用字母“F”表示),需要注意的是:过滤器的尺寸越大,得到的图像细节就越少,最终得到的特征图的尺寸也更小。
②过滤器滑动的步幅数(用字母“S”表示)
③过滤器的个数(用字母“K”表示)。如下:
CNN基础知识(2)
从上面的例子我们能够看到,“卷积”输出的结果,是包含“宽、高、深”3个维度的,而这个“深度”,等于过滤器的个数,也就是得到几种特征图。上面我们采用了4种过滤器,所以这里的深度是4。
④设置是否补零(用字母“P”表示),来看看“补零”后的效果:
CNN基础知识(2)
这样得到的特征图大小就和原图一样大了。

如何确定“补零”的圈数,才能保证图片大小一致?这里有一个关系式:

假设原始图片的大小为W,当我们设置了过滤器的大小(F)、滑动的步幅数(S)、以及补零的圈数(P)。实际上,得到的特征图片大小为:

WF+2×PS

(5)如果得到的特征图片的尺寸很大的话,你还可以进一步添加“池化”的操作。所谓“池化”,就是在保留图片主要信息的前提下,将图片的尺寸缩小。
但是池化的操作是在ReLU处理后加入的。
池化的操作与“卷积”类似,需要我们设置2个超参数:过滤器大小(F)和 滑动的步幅数(S) 。
整个的特征提取过程如下:输入图片 → 卷积 → ReLU → 池化(可选)
CNN基础知识(2)
但大部分的时候,我们会进行多次卷积和池化。

关于池化层和卷积层的几点区别:
① “池化”层使用的过滤器,与“卷积”层使用的过滤器有所不同:

“池化”层的过滤器,其内部没有数值,因为“池化”层的过滤器,其功能只是将图片缩小,故其内部没有参数。

CNN基础知识(2)

在“池化”层中,仅有1个过滤器;而在“卷积”层中,可以设置多个过滤器:

CNN基础知识(2)

因为“卷积”层的过滤器,其功能是提取图片的特征,因而,我们使用不同的过滤器,可以提取不同的图片细节。而“池化”层的过滤器,仅仅是为了缩小图片的尺寸,因而,使用一种过滤器,就可以达到这一目标,无需设置多个。

② 经过“卷积”处理后,得到的图片张数(即“图片深度”),应该等于该卷积层的过滤器个数;而经过“池化”处理后,得到的图片张数(即“图片深度”),仍等于上一层的图片张数。
CNN基础知识(2)

当要处理的图片是彩色图片时:
和黑白图像的区别是灰度图的深度仅为1,而彩色图的深度为3(彩色图片包含红R、绿G、蓝B,三种通道)。
CNN基础知识(2)
所以,彩色图片在进行第一层“卷积”时,需要同时处理3张图片(即“红、绿、蓝”)。
前面我们在处理灰白图片时,因为输入的图片其深度为1,所以我们采用的是大小为3*3,但是,深度为1的过滤器。而在处理彩色图片时,我们的过滤器,其深度增加为3。如下:
CNN基础知识(2)
所以如果我们设置过滤器的个数为2个,也就是说提取原图的两种不同特征。此时的两个过滤器的形式为:
CNN基础知识(2)
也就是说每个过滤器的有三种不同的取值矩形框,分别过滤原图每个通道上的特征:
CNN基础知识(2)

当过滤器在图片上滑动时,

过滤器的“红色”层,负责提取原始图片“红色”通道的特征;
过滤器的“绿色”层,负责提取原始图片“绿色”通道的特征;
过滤器的“蓝色”层,负责提取原始图片“蓝色”通道的特征。

之后,将“红、绿、蓝”3层提取出的特征值相加,得到的最终值,就是“卷积”层输出的图片像素。

例如:假设我们有一张宽、高、深为4*4*3的彩色图片。并且,我们在“卷积层”,设置了2个过滤器,如下图:
CNN基础知识(2)
提取过程:
CNN基础知识(2)
注意此时最后得到的特征图仍然是两张,既是和过滤器的个数是一样的。这里的彩色图只是增加了过滤器和计算的复杂度,而得到的特征图个数不会改变。

这里要注意的是:
① 经过“卷积”后,输出的特征图片,其深度等于使用的过滤器个数。
CNN基础知识(2)

② 推广到更一般的情况,无论是灰度图片,还是彩色图片,当我们构建的模型中,有多个“卷积”层时,都要遵循“彩色案例”中的步骤,即“在做‘卷积’处理时,如果上一层图片是多层,那么,本层过滤器在遍历完多层图片后,需要将结果值相加“。

3. 图片分类:

经过上面一系列的处理,此时得到的图片,已经可以被视为一串串简单的数字(即像素值)。然后将这一个个的像素值,带入模型:

y=f(θ0x0+θ1x1+...+θnxn)

就可以得到分类了。

这里要注意的是:
(1)首先需要将特征提取后得到的图片像素值展开
CNN基础知识(2)
(2)在模型的最后,我们需要让计算机努力找到x-y之间的关系。而寻找的办法,就需要依靠“全连接神经网络”。
这里需要注意:
① “全连接神经网络”可以帮助我们学习到参数θ。
② 模型得到的最终结果,表示“图片为某种类别的概率”。注意:这里的概率之和,永远为1。

总结:
在构建模型时,需要我们设置的超参数有:

(1)卷积层: 过滤器的大小(F)、滑动的步幅数(S),以及过滤器的个数(K)
(2)池化层:过滤器的大小(F)
在算法运行时,计算机会自己学习的参数有:
(1)卷积层: 过滤器中的具体数值。
(2)全连接层: 神经元的参数 θ

参考:
http://mp.weixin.qq.com/s/fdBpynmAdcnjUW9DF2DQRg
https://mp.weixin.qq.com/s?__biz=MzI1NjczMjEwNw==&mid=2247483921&idx=1&sn=90250512a4b8d369955672c7b720eca0&scene=21#wechat_redirect