学习笔记3《吴恩达深度学习》Deep Learning

02-1.2边缘探测示例

卷积运算是卷积神经网络的基础组成单元之一。在这个视频中,我们用边缘检测,作为引发兴趣的例子,你将了解卷积运算是如何进行的。

在之前的一节中,我已经讨论过神经网络的前几层,是怎样检测边缘的。并且后几层可能会检测对象的某些部分。而更后的几层会检测到某些整个的对象。比如在此例中的人脸。

44fcac7a6b0b4d2eab726ba24a83d176.png

在本视频中你将看到,如何在一个图像中进行边缘检测。举个例子来看,我们举个例子说明,给出一张这样的图片,让电脑算出,在这张图片中的物体是什么。你做的第一件事可能是,检测图片中的垂直边缘。例如在这个图像中,垂直的线是栅栏所在的地方。还有比较垂直的线,是这些行人的轮廓。所以在这个垂直边缘检测结果中,它们被检测出来了。你也许也想要检测水平边缘,比如说有一个非常明显的,水平线段在栅栏在的地方。它也被检测到,大概在这里,所以你怎么才能,在像这样的图像中检测边缘呢。

e10eab62aceb4d039c7e0025d413cb77.png

我们来看个例子。这里是一个6×6的灰度图像。因为这是一个灰度图像,所以只是一个6×6×1的矩阵,而不是6×6×3,因为没有分开的RGB通道。为了检测边缘,比如这个图像中的垂直边缘,你能做的是建立一个3×3的矩阵。在池化(pooling)过程中,用卷积神经网络中的专业术语来说,这会被称为一个过滤器(filter)。我将要建立一个3×3的过滤器,或者说是3×3的矩阵,像这样111000-1-1-1的。有时候科研论文中会将它,称为核(kernel)而不是过滤器,但是在这个视频中我将会用过滤器这个术语。你需要做的是获得6×6的图像,并求其卷积。卷积运算用这个星号代替,用这个3×3的过滤器去求它的卷积。稍微有点遗憾的是,这个符号在数学中,星号是卷积的标准符号,但是在Python中这被用来表示乘法,也许元素积乘法。所以这个星号有双重用法,这是个重复的符号,但是当星号表示卷积的时候,我会在这个视频中明确表示。这个卷积运算的输出是,一个4×4的矩阵,你可以将它理解为一个4×4的图像。

2fe292074450442080edafca860521ed.png

下面是计算这个4×4输出的方法,计算第一个元素,也就是这个,4×4矩阵中左上角的这个元素,你要做的是用这个3×3的过滤器,把它粘贴到你的原始图像的这块3×3区域上面。

0582098d7a454a54a3a1e9891314df66.png

 

我在这里写了111000-1-1-1,你需要做的是计算元素积。所以第一个是3×1,然后第二个是1×1,把它放在这里,1×1,然后加上这个2×1,然后把九个结果全部加起来。所以中间的列得到,0×0+5×0+7×0,然后最右边的列得到1×-1,8×-1+2×-1。把这九个数字相加你将得到-5,然后我把-5填在这里。对,你当然可以用任何顺序把这九个数字相加,比如说我先计算第一列,然后第二列,然后第三列。

4ed58c0feb004583a37f5dc44b9f6130.png

接下来,为了计算出第二个元素,你要将蓝色的方形向右平移一步,像这样。让我把这里的绿色标记都去掉。

bfc7b32d96a2413ab29cf79c335cba74.png

你将要求同样的元素积然后相加,所以你有0×1+5×1+7×1+1×0+8×0+2×0+2×-1+9×-1+5×-1,如果你把这九个数加起来,你得到-4,以此类推。

35be656269614716aa7f29e39923978f.png

如果你把这个向右平移得到九个乘积,然后把它们相加得到0。

b412b45067844d559fe04805c13f4f64.png

 然后在这里你应该得到8。

46ff80f4e8554ae68d9f31efec0ad30a.png

只是验证一下,你有2+9+5,得到16。然后中间的列得到0。最右边的列,(4+1+3)×-1,得到-8。然后就是在左边的列是16,-8,然后得8,和我们算好的一样。

接下来,为了得到下一行的元素,你需要做的是把这个蓝色的方形往下移一步,然后它现在在这个位置。

3a7245884e544c5884a7a5d3accacc25.png

然后再次重复元素积然后相加,如果你这么做了,你在这里得到-10。

b31a5699d9f5479b97394d50b27e0783.png

然后你把它向右移一步,应该得到-2。然后是2,然后是3等等。

367a096e97464a8794852e03facf0881.png

6aae9cf23f63425bacad2b1382dce5de.png

5eaf48f4bfe547e182600470f9412e16.png

然后算出矩阵中的所有元素。

bd4751d8593842a9b048caf26a671c40.png

再解释清楚一点,这个-16是从右下端的3×3区域得到的。

537efa3ab591471dbebd1cc5c28284c3.png

所以用3×3矩阵卷积6×6的矩阵,将得到一个4×4的矩阵。这些是图像和过滤器。这些都只是多维的矩阵。不过左边的矩阵可以容易地理解为一个图像,中间这个我们把它理解为一个过滤器,然后右边的这一个,也许可以理解为另一个图像。

这就是一个垂直边缘检测器,你会在下一页知道为什么是这样的。在我们继续之前,我有另一个提醒,那就是如果你将这运用到编程语言中,在实践中,大部分的编程语言,都会有一些不同的方法,而不用一个星号去标记卷积。比如说,在编程练习中,你会实现一个conv_forward函数,如果你用TensorFlow做,有一个函数tf.nn.conv2d。而在其他的深度学习编程框架中,比如Keras,后面会学到,有一个函数Conv2D来实现卷积运算。但是所有支持卷积的深度学习框架都会有一些函数实现这个卷积运算。

3fb05cb4066749bea8333d19ffb3a594.png

为什么这是在进行垂直边缘检测呢?让我们看看另一个例子。为了更好的解释,我们用一个简化了的图像。这有一个简单的6×6的图像,这个图像的左半边是10,右半边是0。如果你以图片形式得到它,它将是这个样子的。左半边的10,得到更亮的像素强度值,右半边得到比较暗的像素强度值。我们用灰色来表示0,虽然可能也能画成黑色。但是在这个图像的正中间,很清晰地有一个明显的垂直边缘。是从白到黑或者说,从白到暗色的过渡。所以当你用这个3×3的过滤器做卷积运算,这个3×3的过滤器可以被可视化成这样。更明亮的像素点在左边,然后有中间调的颜色在中间,然后更暗的在右边。

106374e4d86c4ae9bd5910bc95500b2e.png

你得到的是在右边的这个矩阵。如果你想,可以验证这个数学运算,比如说这个0,是取元素积然后与这个3×3的块相乘得到的。

d76f51e9f728437e8519b93e8ae209a5.png

然后从最左列你得到10+10+10,然后中间是0,然后-10-10-10。这就是为什么你最后在这里得到0。

与之不同,30是从这里得到的。

d3efb4552df146abaab7cebb2dace6ab.png

从10+10+10得到的,然后-0,-0,这是为什么,你最后在那里得到30。如果你把最右边的矩阵画成图像,它将会是这样。更亮的区域在正中间,这与检测出的垂直边缘相对应。在这个6×6的图像的中间,这里的维数看起来不太对,检测出来的边缘看起来很厚。那只是因为我们在这个例子中,用了一个很小的图像。如果你用一个1000×1000的图像,而不是一个6×6的图像,你会发现它能很好地检测出,在你图像中的垂直边缘。

3698c5389f3c451291518848a55d5d5b.png

在这个例子中,在中间这个明亮区域,只是用输出图像的方式,来表示有一个强垂直边缘,正好在图像的中间。垂直边缘检测里也许能得到一个直观的理解,一个垂直边缘是一个3×3的区域,因为我们用的是3×3的过滤器。左边有亮像素,你并不在意中间有什么,然后在右边是暗像素,在这个6×6的图像的中间,可能会有亮色素在左边,暗色素在右边。这就是为什么他认为,那里有一个垂直边缘。

b7fe77e5d86443f0aec21d450261d6ce.png

 卷积运算提供了一个方便的方法去弄清楚,如何在图像中找到这些垂直边缘。所以现在你知道卷积运算是怎么发挥作用的。在下一个视频中,你会看到如何运用它。作为卷积神经网络中的一项基本构成。

 

 

  • 36
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值