目录
  1. 1. 什么是卷积?
    1. 1.1. 二维卷积
    2. 1.2. 三维卷积
  2. 2. 为什么卷积能用于视觉领域
  3. 3. 卷积运算的常用参数
    1. 3.1. 卷积核大小
    2. 3.2. Padding和Stride
  4. 4. 卷积的好伙伴——池化(Pooling)
  5. 5. 卷积神经网络(CNN)
    1. 5.1. 卷积层(Conv)
    2. 5.2. 全连接层(FC)
    3. 5.3. 卷积层的优势
深度学习之卷积神经网络

卷积神经网络在计算机视觉领域取得了巨大的成功,甚至在音频处理等其他领域,卷积神经网络也能发挥较好的效果。那么,卷积到底是怎么样的一种运算呢?为什么卷积神经网络在图像处理上会有这么大的优势呢?让我们一起深入研究卷积神经网络的原理,学习卷积神经网络,能让你处理远比MNIST数据集复杂的图片,开启视觉计算的新领域。

什么是卷积?

二维卷积

卷积(convolution),其实就是一种数学运算。让我们来看一下面的这个卷积运算的例子:

事实上,卷积是一种非常简单的运算,与矩阵乘法不同的是,他对矩阵维度要求不是很高,允许不同大小的矩阵进行运算。为了方便说明,我们首先定义一下几个说法。

  • (1)式中卷积符号左侧的6x6矩阵叫被卷积矩阵

  • (1)式中卷积符号右侧的3x3矩阵叫做卷积核

卷积运算的步骤如下:

  1. 把卷积核“覆盖”到被卷积矩阵左上角的位置,将对应元素相乘并相加,作为结果矩阵中的左上角元素。(1)式中的运算过程如下:

  2. 把卷积核右移一格,重复进行1操作。如果到行尾,则换行继续,直到“覆盖”到右下角元素为止(这一步有点像滑动窗口)。

通过GIF可以形象地说明这一运算的过程:

不过,我们这里的卷积和数学上讲的卷积有一些区别。数学上的卷积要多一个把被卷积矩阵旋转180度的操作。

三维卷积

由于图像有可能是彩色的,因此图像组成的矩阵会变成 宽度x高度x通道数量的三阶矩阵。彩色图片的通道数(num of channels)一般为3。然而,三维而计算方法和二维的计算方法是一样的,只是原本的3x3的卷积核变为3x3x3的而已,求和的时候变成27个数相加,最后结果是一个二阶矩阵。

为什么卷积能用于视觉领域

利用卷积运算,计算机可以完成边缘检测的任务。假如有矩阵如下:

如果用(1)式中的卷积核,对这张图片做卷积,结果会是这样的:

如果把他们转化成图片,可以很直观的看到,原图左侧是黑色,右侧为白色;而图像经过卷积以后变成中间一条黑色,两边是白色。这说明了原本黑白交接的边界线被卷积识别出来了。因此,(1)(2)中的卷积核实际上是起到了检测图片垂直边缘的作用。同样地,如果给这个卷积核加上一个90度的旋转变换,可以得到一个水平边缘检测器。不难想象,如果在神经网络中使用卷积运算,网络就可以通过拟合卷积核中的参数来检测不同方向上的边缘。这就是卷积提取图像特征的方式。

事实上,卷积神经网络在一个卷积层中会使用多个卷积核。每一个卷积核进行卷积运算都会得到一个二阶矩阵,这个矩阵我们把他叫做feature map(特征图)。使用n个卷积核就会形成n个feature map。最后我们会把这些feature map“叠”在一起,进入下一层计算,下一层的输入通道数即为n。

卷积运算的常用参数

卷积核大小

卷积核大小,顾名思义,就是卷积核矩阵的维度。通常为奇数,常见的取值有3x3,5x5和7x7。现在一般认为小卷积核的效果比较好。一个7x7的卷积,其实可以用两个3x3卷积来代替。

Padding和Stride

padding(填充的层数): 我们从(1)的例子中可以看到,做完卷积运算以后,图片变小了(从6x6变成了4x4)。这不利于进一步提取图像特征。因此,我们可以使用padding来填充图像外围区域,比如填0,来把原图变大,这样可以保证卷积后图片的大小。

stride(步长):指的是在“滑动窗口”的过程中,每次滑动的步长。你可以对横向和纵向分别设置。

卷积的好伙伴——池化(Pooling)

观察(2)中的卷积结果,可以发现用卷积做边缘检测时,边界线被“弄粗”了。这个时候我们可以用池化来解决这个问题。池化也是一种非常简单的数学运算,我们还是先来看一个例子:

还是那卷积运算中的滑动窗口的眼光来看,这里用了2x2池化,也就是用2x2的窗口去套原矩阵,并且选择2x2窗口中的最大值,组成新的矩阵。你也可以选择2x2窗口中的平均值,这是两种不同的池化方式,一个叫Max pooling(最大池化),另一个叫Average pooling(平均池化)。我们一般用缩写MP和AP来表示。

池化还有一个好处,他可以把feature map缩小,减少运算数量。同时,池化是不需要参数的,也就是不参与训练,不会耗费训练时间。

卷积神经网络(CNN)

卷积神经网络由输入层,卷积层和全连接层构成。

卷积层(Conv)

卷积层就是把图像对多个卷积核进行卷积,然后再对得到的feature map做池化处理。一个卷积层通常由卷积+池化组成(大概是池化没有参数,所有不配单独成池化层233333)。

在卷积层中,出了刚刚提到的卷积参数以外,还有一个超参数需要配置,就是卷积核的个数。这个在上文也已有介绍。

全连接层(FC)

一个CNN网络通常会包含多个卷积层,然后在后面接一个或者多个全连接层。全连接层实际上就是以前接触过的普通的神经网络中的层。负责把conv层提取到的特征进行归纳计算。

卷积层的优势

  1. 卷积运算量不大,可以高效提取特征信息。
  2. 池化层可以大大减少运算量,加快训练速度。
  3. 多个卷积层可以把图片中的参数变少,比如128x128x3的图片,经过数轮卷积层以后变成7x7x128的feature map,图片参数从49152减小到6272。
文章作者: QF
文章链接: http://blog.logan-qiu.cn/posts/17556c44/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 QF的个人博客
打赏
  • 微信
  • 支付宝

评论