赞
踩
在前言中,我们了解到神经网络的前几层是检测图像边缘的,后几层是检测到物体部分的,更靠后的一些层能检测到完整的物体,如下图所示:
本节将学习如何在一张图片中检测边缘,也就是上图中的第一个步骤。
注:所谓图像的边缘(垂直边缘、水平边缘、倾斜45°边缘…)就是图像特征,而边缘检测的过程其实就是图像特征提取。所以神经网络与传统机器学习的区别就在于特征提取步骤是发生在模型内部的!
目标:识别上图中的物体。
第一步:检测图片中的垂直边缘(例如图片中的栏杆、行人的轮廓线),由垂直边缘检测器输出,由下图所示。
第二步:检测图片中的水平边缘,如下图。
注:一张图像不一定只包含水平和垂直边缘,所有角度的边缘都可以有(例如40°边缘、60°边缘),计算机可以通过计算检测这些所有边缘情况。问题是如何在图像中检测出这些边缘呢?——卷积计算!
上图是一个 6×6 的灰度图像,因为它是灰度图像,所以维度为 6×6×1(因为只有一个颜色通道)。为了检测图像中的垂直边缘,需要构造一个 3×3 的矩阵(这个矩阵在卷积神经网络中一般被称为过滤器),这个 3×3 矩阵的第一列元素为 1、第二列元素为 0、第三列元素为 -1,如下图所示:
上图中的 * 符号指的是通过过滤器(或滤波器)对这个 6×6 的图像进行卷积运算,这个间距运算的输出将会是一个 4×4 的矩阵(其实是一张 4×4 的图片),如下图:
下面将详细阐述 1.2.1 小节中的卷积过程
元素乘法:3×1 + 0×0 + 1×(-1) + 1×1 + 5×0 + 8×(-1) + 2×1 + 7×0 + 2×(-1) = -5。现将 -5 填在这个 4×4矩阵中的第一个元素,如下图所示:
以上就是一个 6×6 的矩阵通过过滤器的卷积计算得到 4×4 矩阵的过程,需要注意的是 6×6 矩阵与 4×4 矩阵都是图片,而中间的 3×3 矩阵不是图片。
注:如果通过过滤器卷积后得到的灰度值超出了 0-255,那么大于 255 的灰度值统一当作 255,小于 0 的灰度值统一当作 0。
为什么通过上述的步骤可以达到垂直边缘检测的目的呢?现通过下列的例子说明。下图为一个 6×6 的二值图像矩阵(因为只有两个灰度值)。如果将其进行可视化,那么图片的左侧是亮色区域(因为像素10是亮的像素值),右边则比较暗(假设用灰色来表示0),如下图所示:
在这张图片里面有一条很明显的垂直边缘——区分两块区域的分割线。现用一个 3×3 过滤器对上图进行卷积运算,这个过滤器同样可以可视化为一张图片,如下图所示:
通过卷积计算后得到如下的这个 4×4 的矩阵,将这个矩阵可视化的效果如下所示:
可以发现这张 4×4 的图片将原本 6×6 图片中的垂直边缘转化成了一段亮的区域(这里转换后的垂直边缘太粗的原因是,这个例子中的图片太小了)。以上就是卷积计算对图片的处理过程和原理解读!
以下的三个例子中过滤器所使用的参数全是:-1、0、1
通过使用不同的过滤器,可以找出垂直的或是水平的边缘。但事实上,对于这个 3×3 的过滤器来说,目前我们只使用了其中的一种数字组合,也就是(-1、0、1):
但在过去大多数的计算机视觉文献中,曾争论过怎样的数字组合才是最好的,所以还可以有以下几种:
随着深度学习的发展,当你想去检测出复杂图像的边缘时,不一定要去使用上述研究者们所选择的这九个数字,可以把这矩阵中的9个数字当成9个参数,并且在使用反向传播算法时,其目标就是去理解这9个参数。
将过滤器矩阵的所有数字都设置为参数,通过数据反馈,让神经网络自动去学习它们。
用一个 3×3 的过滤器对一个 6×6 的图片进行卷积,会得到一个 4×4 的图片(因为使用3*3的过滤器对 6×6 的图片进行卷积只有 4×4 种可能的位置),其实推广来说:对于一个 n×n 的图片,如果使用 f×f 的过滤器对其进行卷积,会得到一个 (n-f+1) × (n-f+1) 的图片。
用这种方式对图片进行卷积会有两个缺点:
所谓padding,指的是在对图片进行卷积操作之前对图片进行边缘填像素充,如下图所示(一般用像素0进行填充):
注:填充的层数由超参数p手动设置,这里的p=1,即填充一层。
此时6*6的图片被填充为 8×8 的图片,此时如果使用3×3的过滤器对这个 8×8 的图片进行卷积操作的话,那么得到的输出图片由公式 “(n + 2p - f + 1)” 计算,将得到 6×6 的图片。
这样一来即避免了角落或图像边缘信息发挥作用较小这一缺点,又避免了卷积造成的输出图片缩小的缺点。
以上是填充一层的情况,其实 p 可以设为不同的值使得图片填充更多的层数,常见的填充方法有两种:Valid 和 Same
在进行卷积计算时,另一个可以设置的超参数为卷积步长。通过一个例子来引入卷积步长的概念:现用 3×3 的过滤器对一个 7×7 的图像进行卷积计算,而结果却得到的是 3×3 的图像,这是怎么做到的呢?
可以通过设置卷积步长达到上述效果!现将卷积步长设置为2,那么:
第二步:之前的例子中没有设置卷积步长,系统默认步长为1(过滤器每次只移动一个像素距离)),现将卷积步长设置为2之后,过滤器每次移动两个像素距离:
第三步:以此类推
第四步:注意第四步向下移动时是跳两格
剩下的过程以此类推,直到卷积成3×3的图像
在上面的这个例子中,7×7 的图像通过 3×3 过滤器的卷积得到了 3×3 的输出图像。推广来说,假设用一个 f×f 的过滤器对 n×n 的图像进行卷积,padding为p,卷积步长为s。那么得到的输出图像的维度将会是:
注:包裹在公式外面的一层符号为“向下取整”,目的是为了避免结果为小数。
本课介绍了卷积神经网络涉及到的一些基本概念与参数选择,下一节将继续介绍几种特殊的卷积运算,以及帮助大家构建完整的卷积神经网络。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。