机器学习周报第22周

摘要

边缘检测是计算机视觉中一项基础而重要的任务,其目标是识别图像中的物体边界或显著特征。该技术在图像处理、目标检测和图像分割等领域具有广泛应用。本文着重介绍了计算机视觉中的边缘检测技术,重点探讨了一些经典的方法和算法。

Abstract

Edge detection is a basic and important task in computer vision, whose goal is to recognize object boundaries or salient features in an image. The technique has a wide range of applications in the fields of image processing, target detection and image segmentation. This paper focuses on edge detection techniques in computer vision, focusing on some classical methods and algorithms.

一、计算机视觉

1.1 概念

计算机视觉(computer vision)是一个飞速发展的一个领域,这多亏了深度学习(deep learning)。深度学习与计算机视觉可以帮助汽车,查明周围的行人和汽车,并帮助汽车避开它们。还使得人脸识别技术变得更加效率和精准,你们即将能够体验到或早已体验过仅仅通过刷脸就能解锁手机或者门锁。机器学习甚至还催生了新的艺术类型。深度学习之所以让Andrew兴奋有下面两个原因:
第一,计算机视觉的高速发展标志着新型应用产生的可能,这是几年前,人们所不敢想象的。通过学习使用这些工具,你也许能够创造出新的产品和应用。
第二,人们对于计算机视觉的研究是如此富有想象力和创造力,由此衍生出新的神经网络结构与算法(neural network architectures and algorithms),这实际上启发人们去创造出计算机视觉与其他领域的交叉成果(cross-fertilization)。
在这里插入图片描述
例如,图片分类(image classification),或者图片识别(image recognition)。比如(左上方)给出这张64×64的图片,让计算机去分辨出这是一只猫。还有一个例子(左下方),在计算机视觉中有个问题叫做目标检测(object detection),比如在一个无人驾驶项目中,你不一定非得识别出图片中的物体是车辆,但你需要计算出其他车辆的位置,以确保自己能够避开它们。还有一个更有趣的例子(右上方),就是神经网络实现的图片风格迁移(neural style transfer),比如说你有一张图片,但你想将这张图片转换为另外一种风格。
但在应用计算机视觉时要面临一个挑战,就是数据的输入可能会非常大。
在这里插入图片描述
举个例子,在过去的课程中,一般操作的都是64×64的小图片,实际上,它的数据量是64×64×3,因为每张图片都有3个颜色通道(color channels)。如果计算一下的话,可得知数据量为12288,所以我们的特征向量维度为12288。这其实还好,因为64×64真的是很小的一张图片。如果你要操作更大的图片,比如一张1000×1000的图片,它足有1兆(one megapixel)那么大,但是特征向量的维度达到了1000×1000×3,因为有3个RGB通道,所以数字将会是300万。如果你要输入300万的数据量,这就意味着,特征向量的维度高达300万(three million)。所以在第一隐藏层中,你也许会有1000个隐藏单元,如果你使用了标准的全连接网络(standard fully connected network),权重矩阵W[1]的大小将会是1000×300万,有30亿个参数。

在参数如此大量的情况下,难以获得足够的数据来防止神经网络发生过拟合和竞争需求。为此,你需要进行卷积计算,它是卷积神经网络中非常重要的一块。

1.2 边缘检测示例

卷积运算(convolutional operation)是卷积神经网络最基本的组成部分(fundamental building blocks),使用边缘检测(edge detection)作为入门样例(motivating example)。接下来,你会看到卷积是如何进行运算的。
在这里插入图片描述
在之前的人脸例子中,我们知道神经网络的前几层是如何检测边缘的,然后,后面的层有可能检测到物体的部分区域,更靠后的一些层可能检测到完整的物体。让我们举个例子(下方),给了这样一张图片,让电脑去搞清楚这张照片里有什么物体,你可能做的第一件事是检测图片中的垂直边缘(vertical edges)和水平边缘(horizontal edges)。所以如何在图像中检测这些边缘?
在这里插入图片描述
这是一个6×6的灰度图像(grayscale image)。因为是灰度图像,所以它是6×6×1的矩阵,为了检测图像中的垂直边缘,需要构造一个3×3矩阵。在共用习惯中,在卷积神经网络的术语中,它被称为过滤器(filter),也被称为核(kernel)。对这个6×6的图像进行卷积运算,卷积运算用星号“*”(asterisk)来表示,用3×3的过滤器对其进行卷积。python中,卷积用conv_forward()表示;tensorflow中,卷积用tf.nn.conv2d()表示;keras中,卷积用Conv2D()表示。

在过滤器覆盖的区域执行:每个元素对应相乘再求和,这个卷积运算的输出将会是一个4×4的矩阵,这个就是垂直边缘检测器。为什么这样可以做垂直边缘检测呢?看另外一个例子。

在这里插入图片描述
这是一个简单的6×6图像,左边的一半是10,右边一般是0。如果你把它当成一个图片,左边那部分看起来是白色的,像素值10是比较亮的像素值,右边像素值比较暗,我使用灰色来表示0,尽管它也可以被画成黑的。图片里,有一个特别明显的垂直边缘在图像中间,这条垂直线是从黑到白的过渡线,或者从白色到深色。

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

1.3 更多边缘检测内容

在本视频中,你将学习如何区分正边和负边,这实际就是由亮到暗(light to dark)与由暗到亮(dark to light)的区别,也就是边缘的过渡(edge transitions)。
在这里插入图片描述
还是上一个视频的例子。这张6×6的图片,左边较亮,而右边较暗,将它与垂直边缘检测滤波器进行卷积,检测结果就显示在了右边这幅图的中间部分。现在将图片进行翻转,变成了左边比较暗,右边比较亮。从结果可以看到这个过滤器确实可以区分这两种明暗变化的区别。
在这里插入图片描述
左边的垂直边缘过滤器(vertical edge detection)是一个3×3的区域,左边相对较亮,而右边相对较暗。右边这个水平边缘过滤器(horizontal edge detection)也是一个3×3的区域,上边相对较亮,而下方相对较暗。

还有个更复杂的例子,左上方和右下方都是亮度为10的点。如果你将它绘成图片,右上角是比较暗的地方,这边都是亮度为0的点,把这些比较暗的区域都加上阴影。而左上方和右下方都会相对较亮。如果你用这幅图与水平边缘过滤器卷积,就会得到右边这个矩阵。

再举个例子,这里的30(右边矩阵中绿色方框标记元素)代表了左边这块3×3的区域(左边矩阵绿色方框标记部分),这块区域确实是上边比较亮,而下边比较暗的,所以它在这里发现了一条正边缘(positive edge)。而这里的-30(右边矩阵中紫色方框标记元素)又代表了左边另一块区域(左边矩阵紫色方框标记部分),这块区域确实是底部比较亮,而上边则比较暗,所以在这里它是一条负边。

再次强调,现在使用的都是相对很小的图片,但假如这个一个非常大的1000×1000的类似这样棋盘风格的大图,就不会出现这些亮度为10的过渡带了,因为图片尺寸很大,这些中间值就会变得非常小。
在这里插入图片描述
总而言之,对于这个3×3的过滤器(左边)来说,这是其中的一种数字组合。也可以使用Sobel的过滤器(中间),它的优点在于增加了中间一行元素的权重,这使得结果的鲁棒性会更高一些。或者Scharr过滤器(右边),它有着和之前完全不同的特性,实际上也是一种垂直边缘检测,如果你将其翻转90度,你就能得到对应水平边缘检测。随着深度学习的发展,我们学习的其中一件事就是当你真正想去检测出复杂图像的边缘,你不一定要去使用那些研究者们所选择的这九个数字,但你可以从中获益匪浅。把这矩阵中的9个数字当成9个参数,并且在之后你可以学习使用反向传播算法,其目标就是去理解这9个参数。

所以这种将这9个数字当成参数的思想,已经成为计算机视觉中最为有效的思想(most powerful ideas)之一。在下面两节视频中,将讨论如何去使用padding,以及卷积各种不同的发展,这两节内容将会是卷积神经网络中卷积模块的重要组成部分(important pieces)。

二、文献阅读

摘要:本文提出了一种上下文感知的位置表示方法,用于自注意力网络(SANs)中,以更好地建模输入句子的顺序依赖关系,并提高神经机器翻译模型的性能。
背景信息:
论文背景: 自注意力网络(SANs)在自然语言处理领域引起了广泛关注。SANs利用位置编码来建模输入句子中的顺序依赖关系,而不需要传统的循环神经网络(RNN)。
过去方案: 传统的位置编码只基于单词在输入句子中的位置索引,而不考虑上下文信息。这种方法可能在建模输入句子时存在局限性。
论文的Motivation: 为了解决传统位置编码的局限性,本文提出了一种新的位置表示方法,可以基于n-gram上下文或句子上下文来建模顺序依赖关系。通过将这些上下文感知的位置表示方法应用于神经机器翻译模型,实验证明了该方法可以显著提高翻译性能。
方法:
a. 理论背景:
本文介绍了自注意力网络(SANs)的概念及其使用位置编码来建模输入句子中单词之间的顺序依赖关系。然而,位置编码仅考虑基于单词位置索引的静态顺序依赖关系,而不考虑上下文信息。这种限制可能削弱了SANs有效建模输入句子的能力。
b. 技术路线:
本文提出了一种新颖的位置表示方法,以解决SANs中静态顺序依赖关系的限制。该方法将n-gram上下文或句子上下文信息融入输入表示中,以从输入句子中捕捉更多有用的信息。输入句子被分割成n个单词序列,以学习n-gram上下文感知的位置表示,并引入单向双向循环层来学习句子上下文感知的位置表示。然后,将这两种上下文感知的位置表示输入到多头自注意力模型中,以增强输入句子的表示。
结果:
a. 详细的实验设置:
本文将所提出的方法应用于神经机器翻译(NMT)模型,该模型使用SANs。实验在两个翻译任务上进行:WMT14英德翻译和WMT17中英翻译。作为对比,使用了Transformer基线模型。文中提供了实验设置的详细信息,包括数据集、模型架构、训练参数和评估指标。
b. 详细的实验结果:
实验结果表明,所提出的方法显著提高了翻译性能,与强大的Transformer基线模型相比。文中对所提出方法在翻译任务上的影响进行了定量分析,证明了其提高翻译质量的有效性。

总结

边缘检测在计算机视觉中扮演着至关重要的角色,有助于提取图像中的关键信息。传统的边缘检测方法包括Sobel、Canny等经典算法,它们基于梯度或滤波器的操作,能够有效地识别图像中的边缘。随着深度学习的发展,卷积神经网络(CNN)在边缘检测任务中取得了显著的成果,通过端到端的学习可以更好地捕捉图像中复杂的边缘模式。
总体而言,边缘检测技术在计算机视觉的诸多应用中都发挥着关键作用,不仅为图像处理提供了有力工具,也为后续的高级视觉任务奠定了基础。

  • 14
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值