卷积神经网络——卷积操作
在上一篇《卷积神经网络简介》里我们介绍了卷积神经网络包含四个主要的操作,其中最重要的就是本文要讲述的“卷积”操作。
对于CNN,卷积操作的主要目的是从输入图像中提取特征。卷积通过使用输入数据的小方块学习图像特征来保留像素之间的空间关系。
![](https://i-blog.csdnimg.cn/blog_migrate/9281f47e4ee1c971b7ea3f6b06a19a6d.png)
卷积操作就是卷积核(过滤器 / Filter)在原始图片中进行滑动得到特征图(Feature Map)的过程。假设我们现在有一个单通道的原始图片和一个卷积核,卷积的过程如图2所示:
![](https://i-blog.csdnimg.cn/blog_migrate/b3617a24948a835f18d482efdaa70053.gif)
卷积得到的特征图的每一个像素值,是由对应位置的卷积核所覆盖的原始图像的对应像素值相乘,然后再相加获得的。卷积核每滑动一次,就进行一次卷积运算,直至得到最后的特征图。
大家可以观察出,原始图片一定的情况下,得到的特征图和卷积核的矩阵的像素值有很大的关系,卷积核矩阵的不同值将为同一输入图像生成不同的特征图。例如,考虑面3这张输入图像:
![](https://i-blog.csdnimg.cn/blog_migrate/a96e7d53e1baa9f1aa6a43d23e54cea0.png)
我们可以通过在卷积运算之前更改卷积核矩阵的数值来执行诸如边缘检测,锐化和模糊之类的操作——这意味着不同的卷积核可以从图像中检测不同的特征,例如边缘, 曲线等。
![](https://i-blog.csdnimg.cn/blog_migrate/b83c2b2f08f4e4a08eb3c6e6490bebef.png)
图5展示的是不同的卷积核(红色小框和绿色小框),在同一张灰度图上进行卷积操作后得到的了不同的特征图。
![](https://i-blog.csdnimg.cn/blog_migrate/0ce31187775bae13dfb10468d8e42dd3.gif)
实际上,CNN在训练过程中会自行学习这些过滤器的值。 我们拥有的过滤器数量越多,提取的图像特征就越多,并且我们的网络在识别看不见的图像中的图案方面会变得越好。但是在训练过程之前,我们仍然需要指定一些超参数,例如卷积核的数量,卷积核大小,网络的体系结构等。特征图的大小和三个参数有关系:
- 深度:特征图的深度等于卷积核的个数。
- 步长:步长是将卷积核滑过输入矩阵的像素数。 当步长为1时,我们将卷积核一次移动一个像素。步长较大将产生较小的特征图。
- 零填充:用于控制特征图的大小;有利于卷积核学习到输入图像周边的信息。
前方高能!!
前面我们都是针对单通道的灰度图进行卷积操作,过程并不复杂。下面我们来看看卷积核在三通道的彩色图像上是如何进行卷积操作的,并逐一详细介绍上面说到的三个参数(深度,步长和零填充)。
1、深度
![](https://i-blog.csdnimg.cn/blog_migrate/10a4d1418e69ca6dda05b1db75a176aa.png)
首先,一个卷积核的通道数是和被卷积的图像的通道数一致,例如,对于三通道的图像,那么一个卷积核也是由三个通道组成(三个叠加而成的二维矩阵)。而每个通道的大小是可以自定义的超参数,图6一个卷积核的大小为(3,3,3),前两个3分别表示长宽,最后一个3表示通道数。
其次,卷积核的个数可以是多个,每一个卷积核得到特征图的“一层”,N个卷积核得到的特征图就有N层,即特征图的深度为N。图6所示,一共有4个卷积核,那么最终得到的特征图的深度就为4。
最后,提问:如果现在针对上图的特征图进行卷积操作,那么每一个卷积核的通道数是多少呢?(思考一下,答案放文章末尾)
2、步长
步长就是卷积核在滑动过程中间隔的“格子”数,例如,图1的步长设置为1,因为卷积核每次滑动1格。
3、零填充
![](https://i-blog.csdnimg.cn/blog_migrate/959ccbe6fb29364b5380f1ecdb51347f.png)
零填充就是在原始图像的周围添加0像素,如图7所示,原始图像大小为32x32,零填充后,图像大小变为36x36。零填充的作用有:1、控制卷积后的特征图的大小。2、加强了对图像周边像素信息的利用。
答案:4。因为卷积核的通道数要与被卷积的图像的通道数相同。此时特征图的通道数为4,所以卷积核的通道数也是4。