当前位置:   article > 正文

【零基础深度学习教程第四课:卷积神经网络 (上)】_深度学习降采样的作用

深度学习降采样的作用


前言:卷积神经网络 (Convolutional Neural Network, CNN) 是一类包含 卷积运算的前馈式神经网络(Feed-forward Neural Networks),CNN一般由 卷积层、ReLu层、批归一化层、池层、全连接层和输出的Softmax层组成, 通过这些层可以让模型具有直接从复杂的结构图像中计算特征的能力。如今,大量著名的预训练CNN模型,例如 VGG、Alexnet、GoogleNet、ResNet、Inception等,都是开源的。CNN的三大优势分别为: 局部感受野,权值共享和降采样。CNN 通过局部感受野和权值共享的方式降低参数数目。一般认为,人对外界事物的认知是从局部到全局。图像的空间联系与局部像素的相关性较强,与距离较远的像素相关性相对较弱。因而,全局图像的感知只需要对局部神经元进行感知,在更高层将局部信息进行整合,即可得到全局信息。局部感受野是指卷积层的神经元只与上一层的部分神经元连接,感受局部的视觉特征,在更高层生成图像的特征描述。权值共享机制的原理是图像的部分统计特性与其他部分相似,此局部学习的特征适用于其他局部区域学习。通过这两种方式,减少了模型的训练参数,提高了模型的性能。降采样的作用是压缩数据和减少参数数量,尽量避免过拟合问题的出现。降采样即图像尺寸调整,保持特征不变性的同时降低特征维数。降采样可以减少特征的分辨率,实现对位移,缩放和其他形式扭曲的不变性。

一、边缘检测与卷积运算

在前言中,我们了解到神经网络的前几层是检测图像边缘的,后几层是检测到物体部分的,更靠后的一些层能检测到完整的物体,如下图所示:

在这里插入图片描述
本节将学习如何在一张图片中检测边缘,也就是上图中的第一个步骤。
注:所谓图像的边缘(垂直边缘、水平边缘、倾斜45°边缘…)就是图像特征,而边缘检测的过程其实就是图像特征提取。所以神经网络与传统机器学习的区别就在于特征提取步骤是发生在模型内部的!

1.1 案例分析

在这里插入图片描述
目标:识别上图中的物体。
第一步:检测图片中的垂直边缘(例如图片中的栏杆、行人的轮廓线),由垂直边缘检测器输出,由下图所示。
在这里插入图片描述
第二步:检测图片中的水平边缘,如下图。
在这里插入图片描述
注:一张图像不一定只包含水平和垂直边缘,所有角度的边缘都可以有(例如40°边缘、60°边缘),计算机可以通过计算检测这些所有边缘情况。问题是如何在图像中检测出这些边缘呢?——卷积计算!

1.2 卷积运算

1.2.1 概述

在这里插入图片描述

上图是一个 6×6 的灰度图像,因为它是灰度图像,所以维度为 6×6×1(因为只有一个颜色通道)。为了检测图像中的垂直边缘,需要构造一个 3×3 的矩阵(这个矩阵在卷积神经网络中一般被称为过滤器),这个 3×3 矩阵的第一列元素为 1、第二列元素为 0、第三列元素为 -1,如下图所示:

在这里插入图片描述
上图中的 * 符号指的是通过过滤器(或滤波器)对这个 6×6 的图像进行卷积运算,这个间距运算的输出将会是一个 4×4 的矩阵(其实是一张 4×4 的图片),如下图:
在这里插入图片描述

1.2.2 具体说明

下面将详细阐述 1.2.1 小节中的卷积过程

  • 第一步:计算这个4×4矩阵中的第一个元素。为了计算4×4矩阵中的第一个元素,需要用3×3矩阵覆盖到输入图像之上,然后进行元素乘法运算,如下图所示:

在这里插入图片描述
元素乘法:3×1 + 0×0 + 1×(-1) + 1×1 + 5×0 + 8×(-1) + 2×1 + 7×0 + 2×(-1) = -5。现将 -5 填在这个 4×4矩阵中的第一个元素,如下图所示:
在这里插入图片描述

  • 第二步:计算这个4×4矩阵中的第二个元素。此时只需要将过滤器矩阵向右平移一个像素单位,如下图所示:
    在这里插入图片描述
    按照第一步中的方法进行元素乘法:0×1+1×0+2×(-1)+5×1+8×0+9×(-1)+7×1+2×0+5×(-1) = -4。所以4×4矩阵的第二个元素为-4:
    在这里插入图片描述
  • 以此类推,直到将这个4×4矩阵中的每一个元素计算出来:

在这里插入图片描述
以上就是一个 6×6 的矩阵通过过滤器的卷积计算得到 4×4 矩阵的过程,需要注意的是 6×6 矩阵与 4×4 矩阵都是图片,而中间的 3×3 矩阵不是图片。
注:如果通过过滤器卷积后得到的灰度值超出了 0-255,那么大于 255 的灰度值统一当作 255,小于 0 的灰度值统一当作 0。

1.3 原理解读

为什么通过上述的步骤可以达到垂直边缘检测的目的呢?现通过下列的例子说明。下图为一个 6×6 的二值图像矩阵(因为只有两个灰度值)。如果将其进行可视化,那么图片的左侧是亮色区域(因为像素10是亮的像素值),右边则比较暗(假设用灰色来表示0),如下图所示:

在这里插入图片描述
在这张图片里面有一条很明显的垂直边缘——区分两块区域的分割线。现用一个 3×3 过滤器对上图进行卷积运算,这个过滤器同样可以可视化为一张图片,如下图所示:

在这里插入图片描述
通过卷积计算后得到如下的这个 4×4 的矩阵,将这个矩阵可视化的效果如下所示:

在这里插入图片描述
可以发现这张 4×4 的图片将原本 6×6 图片中的垂直边缘转化成了一段亮的区域(这里转换后的垂直边缘太粗的原因是,这个例子中的图片太小了)。以上就是卷积计算对图片的处理过程和原理解读!

二、卷积运算参数

2.1 几个边缘检测的例子

以下的三个例子中过滤器所使用的参数全是:-1、0、1

2.1.1 由暗到亮的卷积

在这里插入图片描述

2.1.2 水平边缘检测过滤器

在这里插入图片描述

2.1.3 更复杂的例子

在这里插入图片描述

2.2 过滤器参数

通过使用不同的过滤器,可以找出垂直的或是水平的边缘。但事实上,对于这个 3×3 的过滤器来说,目前我们只使用了其中的一种数字组合,也就是(-1、0、1):

在这里插入图片描述
但在过去大多数的计算机视觉文献中,曾争论过怎样的数字组合才是最好的,所以还可以有以下几种:
在这里插入图片描述
随着深度学习的发展,当你想去检测出复杂图像的边缘时,不一定要去使用上述研究者们所选择的这九个数字,可以把这矩阵中的9个数字当成9个参数,并且在使用反向传播算法时,其目标就是去理解这9个参数。

在这里插入图片描述
将过滤器矩阵的所有数字都设置为参数,通过数据反馈,让神经网络自动去学习它们。

2.3 padding(填充)

2.3.1 卷积计算的两个问题

用一个 3×3 的过滤器对一个 6×6 的图片进行卷积,会得到一个 4×4 的图片(因为使用3*3的过滤器对 6×6 的图片进行卷积只有 4×4 种可能的位置),其实推广来说:对于一个 n×n 的图片,如果使用 f×f 的过滤器对其进行卷积,会得到一个 (n-f+1) × (n-f+1) 的图片
在这里插入图片描述

用这种方式对图片进行卷积会有两个缺点:

  • 每一次卷积操作会使图片变小从而造成最终的 “输出缩小” 问题(例如 6×6 变成 4×4),假如有一个深层神经网络,那么在多次卷积之后,图片最终可能变成 1×1。
  • 对于这个 6×6 的图片在进行卷积操作时,图片角落边的像素(例如四个顶角格)只会被过滤器触碰一次,而与此同时图片中心的某些像素会被过滤器多次触碰。所以这些角落或边缘区域的像素点在输出中采用较少,会造成图片边缘位置信息丢失

2.3.2 解决方法:padding

所谓padding,指的是在对图片进行卷积操作之前对图片进行边缘填像素充,如下图所示(一般用像素0进行填充):
在这里插入图片描述
注:填充的层数由超参数p手动设置,这里的p=1,即填充一层。
此时6*6的图片被填充为 8×8 的图片,此时如果使用3×3的过滤器对这个 8×8 的图片进行卷积操作的话,那么得到的输出图片由公式 “(n + 2p - f + 1)” 计算,将得到 6×6 的图片。
这样一来即避免了角落或图像边缘信息发挥作用较小这一缺点,又避免了卷积造成的输出图片缩小的缺点。

2.3.3 填充方式:Valid和Same

以上是填充一层的情况,其实 p 可以设为不同的值使得图片填充更多的层数,常见的填充方法有两种:Valid 和 Same

  • Valid:这种方式为不填充(p=0),该情况下 n×n 的图片,用 f×f 的过滤器进行卷积,会得到一个 (n-f+1)×(n-f+1)的图片。
  • Same:顾名思义,该填充方式的目的是使输出图片的大小等于输入图片大小。即:
    n + 2p - f + 1 = n,由此推得:p=(f - 1) / 2 。所以p遵循此公式进行设置就能保证输出图片的大小等于输入图片大小,这也就是之前使用3*3的过滤器对图片进行卷积时,将 p 设置为 1 的原因。
    注:由公式p=(f - 1) / 2可知,过滤器的维度 f 一般为奇数

2.4 卷积步长

在进行卷积计算时,另一个可以设置的超参数为卷积步长。通过一个例子来引入卷积步长的概念:现用 3×3 的过滤器对一个 7×7 的图像进行卷积计算,而结果却得到的是 3×3 的图像,这是怎么做到的呢?

在这里插入图片描述
可以通过设置卷积步长达到上述效果!现将卷积步长设置为2,那么:

  • 第一步:依然是从图片的左上角开始进行卷积计算

在这里插入图片描述

  • 第二步:之前的例子中没有设置卷积步长,系统默认步长为1(过滤器每次只移动一个像素距离)),现将卷积步长设置为2之后,过滤器每次移动两个像素距离:

  • 第三步:以此类推
    在这里插入图片描述

  • 第四步:注意第四步向下移动时是跳两格
    在这里插入图片描述

  • 剩下的过程以此类推,直到卷积成3×3的图像
    在这里插入图片描述

2.5 输出矩阵维度计算

在上面的这个例子中,7×7 的图像通过 3×3 过滤器的卷积得到了 3×3 的输出图像。推广来说,假设用一个 f×f 的过滤器对 n×n 的图像进行卷积,padding为p,卷积步长为s。那么得到的输出图像的维度将会是:

在这里插入图片描述
注:包裹在公式外面的一层符号为“向下取整”,目的是为了避免结果为小数。

小结

本课介绍了卷积神经网络涉及到的一些基本概念与参数选择,下一节将继续介绍几种特殊的卷积运算,以及帮助大家构建完整的卷积神经网络。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小小林熬夜学编程/article/detail/75114
推荐阅读
相关标签
  

闽ICP备14008679号