教你如何卷积操作进行边缘检测,基础必备

https://www.toutiao.com/a6630571206204473859/

 

2018-12-03 09:22:41

 

 

作者:忆臻

0. 前言

打算对吴恩达老师的Deeplearning课程做一个笔记回顾,大体整理思路为吴老师课堂内容和个人理解,非常基础无难点,重在备忘分享,大神勿喷!

1. 前边缘检测示例

卷积运算是卷积神经网络最基本的组成部分,我们用边缘检测作为入门样例。在这个视频中,你会看到卷积是如何进行运算的。

首先举个例子,给了下面这样一张图片,让电脑去搞清楚这张照片里有什么物体。

我们首先会想到是检测图片中的垂直边缘。比如说,在这张图片中的栏杆就对应垂直线,与此同时,这些行人的轮廓线其实也能算是垂线,我们可以用垂直边缘检测器检测出这些边界线。

如下图(检测出垂直边缘):

 

同样,你可能也想检测水平边缘,比如说这些栏杆就是很明显的水平线,它们也能被检测到,如下图:

教你如何卷积操作进行边缘检测,基础必备_第1张图片

 

图片中的大部分物体都能用垂直和水平边缘线来刻画,看起来是能够满足我们的需求了,但是如何在图像中检测这些边缘呢?下面来举一个简单例子说明。

2. 简单例子

这是一个说明如何检测垂直边缘的简单例子,一个6×6的灰度图像。因为是灰度图像,没有RGB三通道,所以它是6×6×1的矩阵,而不是6×6×3。它如下图所示

 

 

左边数字10代表比较亮,右边0代表暗,我们想要将中间的垂直边缘检测出来。

为了检测图像中的垂直边缘,我们可以构造一个3×3矩阵。在卷积神经网络的术语中,它被称为过滤器。我要构造一个3×3的过滤器,论文中它有时候会被称为核,而不是过滤器,但在这个视频中,我将使用过滤器这个术语。如下图:

 

我们的做法是用3×3的过滤器对这个6×6的图像进行卷积运算,卷积运算用*来表示。对它进行卷积操作之后就能检测边缘出来了。嗯,我们先认可这个结论,先看一下整体图:

 

下面要解决的就是

(1)如何用过滤器对原图片进行卷积操作

(2)卷积操作后的结果为什么能够检测垂直边缘,是否有一个可视化的结果呢?

对于问题一,卷积操作其实是过滤器在原图像上进行元素乘法(element-wise products)运算,然后累加得到一个值,举例如下,我们要得到卷积操作输出矩阵的第一个值,我们可以这样做、3+1+2+0+0 +0+(-1)+(-8) +(-2)=-5

 

当然我觉得一图胜前言,图来自机器之心回答:

教你如何卷积操作进行边缘检测,基础必备_第2张图片

 

于是我们可以通过卷积操作得到最后的4*4矩阵结果:

 

 

对于问题二:卷积操作后的结果为什么能够检测垂直边缘,是否有一个可视化的结果呢?我们将卷积后的结果对应的图像可视化后如下:

 

 

如果把最右边的矩阵当成图像,它是这个样子。在中间有段亮一点的区域,对应检查到这个6×6图像中间的垂直边缘。

这里检测到的边缘太粗了。因为在这个例子中,图片太小了。如果你用一个1000×1000的图像,而不是6×6的图片,你会发现其会很好地检测出图像中的垂直边缘。

在这个例子中,在输出图像中间的亮处,表示在图像中间有一个特别明显的垂直边缘。从垂直边缘检测中可以得到的启发是,因为我们使用3×3的矩阵(过滤器),所以垂直边缘是一个3×3的区域,左边是明亮的像素,中间的并不需要考虑,右边是深色像素。在这个6×6图像的中间部分,明亮的像素在左边,深色的像素在右边,就被视为一个垂直边缘,卷积运算提供了一个方便的方法来发现图像中的垂直边缘。

本节中我们已经了解卷积是怎么工作的,在下一个视频中,我们将会看到如何使用卷积运算作为卷积神经网络的基本模块的。

参考:

https://github.com/fengdu78/deeplearning_ai_books/blob/master/markdown/lesson4-week1.md

 

你可能感兴趣的:(人工智能,卷积操作,边缘检测)