5 种计算机视觉技术将改变你看待世界的方式

原文标题The 5 Computer Vision Techniques That Will Change How You See The World

5 种计算机视觉技术将改变你看待世界的方式

计算机视觉是目前深度学习中最热门的研究领域之一。它位于许多学科的交叉点,例如计算机科学(图形、算法、理论、系统、建筑)、数学(信息检索、机器学习)、工程(机器人、语音、NLP、图像处理)、物理学(光学)、生物学(神经科学)和心理学(认知科学)。[0]

由于计算机视觉代表了对视觉环境及其上下文的相对理解,许多科学家认为,由于其跨领域的掌握,该领域为通用人工智能铺平了道路。

那么什么是计算机视觉?

以下是一些正式的教科书定义:

  • “从图像中构建对物理对象的明确、有意义的描述”(Ballard & Brown,1982)[0]
  • “从一张或多张数字图像计算 3D 世界的属性”(Trucco & Verri,1998 年)[0]
  • “根据感知到的图像对真实的物理对象和场景做出有用的决定”(Sockman & Shapiro,2001)[0]

为什么要学习计算机视觉?

最明显的答案是,从这个研究领域衍生出的有用应用程序的集合正在快速增长。这里只是其中的一小部分:

  • 人脸识别:Snapchat 和 Facebook 使用人脸检测算法来应用过滤器并在图片中识别您。[0]
  • 图片检索:Google 图片使用基于内容的查询来搜索相关图片。算法分析查询图像中的内容,并根据最匹配的内容返回结果。
  • 游戏和控制:在游戏中使用立体视觉的出色商业产品是 Microsoft Kinect。
  • 监控:监控摄像头在公共场所无处不在,用于检测可疑行为。
  • 生物识别:指纹、虹膜和面部匹配仍然是生物识别中的一些常用方法。[0]
  • 智能汽车:视觉仍然是检测交通标志和灯光以及其他视觉特征的主要信息来源。

我最近完成了斯坦福大学关于使用卷积神经网络进行视觉识别的精彩 CS231n 课程。图像分类、定位和检测等视觉识别任务是计算机视觉的关键组成部分。[0][1][2][3]

神经网络和深度学习方法的最新发展极大地提高了这些最先进的视觉识别系统的性能。该课程是一个非凡的资源,它教会了我在尖端计算机视觉研究中使用的深度学习架构的细节。在本文中,我想分享我学到的 5 种主要计算机视觉技术以及使用它们的主要深度学习模型和应用程序。

1 — Image Classification

图像分类的问题是这样的:给定一组都标记有单个类别的图像,我们被要求为一组新的测试图像预测这些类别并测量预测的准确性。与这项任务相关的挑战有很多,包括视点变化、尺度变化、类内变化、图像变形、图像遮挡、光照条件和背景杂波。[0]

我们如何着手编写可以将图像分类为不同类别的算法?计算机视觉研究人员提出了一种数据驱动的方法来解决这个问题。他们没有尝试直接在代码中指定每个感兴趣的图像类别的外观,而是为计算机提供每个图像类别的许多示例,然后开发学习算法来查看这些示例并了解每个类别的视觉外观.

换句话说,他们首先积累了标记图像的训练数据集,然后将其输入计算机以处理数据。鉴于这一事实,完整的图像分类管道可以形式化如下:

  • 我们的输入是一个训练数据集,由 N 个图像组成,每个图像都标有 K 个不同类别中的一个。
  • 然后,我们使用这个训练集来训练一个分类器来学习每个类的样子。[0]
  • 最后,我们通过要求分类器预测一组从未见过的新图像的标签来评估分类器的质量。然后,我们将这些图像的真实标签与分类器预测的标签进行比较。

用于图像分类的最流行的架构是卷积神经网络 (CNN)。 CNN 的一个典型用例是您提供网络图像并且网络对数据进行分类。 CNN 往往从一个输入“扫描仪”开始,它并不打算一次解析所有的训练数据。例如,要输入 100 x 100 像素的图像,您不会想要具有 10,000 个节点的层。

相反,您创建一个 10 x 10 的扫描输入层,将其馈入图像的前 10 x 10 像素。一旦你通过了那个输入,你通过将扫描仪向右移动一个像素来给它下一个 10 x 10 像素。这种技术被称为滑动窗口。

然后,此输入数据通过卷积层而不是普通层馈送。每个节点只关心自己与邻近的单元格。这些卷积层也随着它们变得更深而趋于缩小,主要是由于输入的容易分割的因素。除了这些卷积层之外,它们还经常具有池化层。池化是一种过滤细节的方法:一种常见的池化技术是最大池化,我们取 2 x 2 像素并传递具有最多特定属性的像素。[0]

现在大多数图像分类技术都是在 ImageNet 上训练的,ImageNet 是一个包含大约 120 万张高分辨率训练图像的数据集。测试图像将显示没有初始注释(没有分割或标签),并且算法必须生成标签,指定图像中存在哪些对象。牛津、INRIA 和 XRCE 的领先计算机视觉小组在该数据集上尝试了一些现有的最佳计算机视觉方法。通常,计算机视觉系统使用复杂的多级流水线,早期阶段通常通过优化一些参数进行手动调整。[0]

第一届 ImageNet 竞赛的获胜者 Alex Krizhevsky(NIPS 2012)开发了一种由 Yann LeCun 开创的非常深的卷积神经网络。它的架构包括 7 个隐藏层,不包括一些最大池化层。前两层是卷积层,而后两层是全局连接的。激活函数是每个隐藏层中的校正线性单元。这些训练比后勤单位更快,更具表现力。除此之外,当附近单位有更强的活动时,它还使用竞争正常化来抑制隐藏的活动。这有助于强度的变化。[0]

在硬件要求方面,Alex 在 2 个 Nvidia GTX 580 GPU(超过 1000 个快速小核心)上使用了非常有效的卷积网络实现。 GPU 非常适合矩阵矩阵乘法,并且还具有非常高的内存带宽。这使他可以在一周内训练网络,并在测试时快速组合 10 个补丁的结果。如果我们能够足够快地传达状态,我们就可以将网络分布在许多核心上。随着核心变得更便宜和数据集变得更大,大型神经网络将比老式的 CV 系统改进得更快。自 AlexNet 以来,已经有多个新模型使用 CNN 作为其主干架构并在 ImageNet 中取得了优异的成绩:ZFNet (2013)、GoogLeNet (2014)、VGGNet (2014)、ResNet (2015)、DenseNet (2016) 等。[0][1][2][3][4]

2 — Object Detection

在图像中定义对象的任务通常涉及为单个对象输出边界框和标签。这与分类/定位任务的不同之处在于将分类和定位应用于许多对象,而不仅仅是单个主要对象。您只有 2 类对象分类,即对象边界框和非对象边界框。例如,在汽车检测中,您必须检测给定图像中的所有汽车及其边界框。[0]

如果我们像分类和定位图像那样使用滑动窗口技术,我们需要将 CNN 应用于图像的许多不同裁剪。因为 CNN 将每个作物分类为对象或背景,我们需要将 CNN 应用于大量的位置和尺度,这在计算上非常昂贵!

为了解决这个问题,神经网络研究人员建议使用区域来代替,我们可以在其中找到可能包含对象的“斑点”图像区域。

这运行起来相对较快。第一个启动的模型是 R-CNN(基于区域的卷积神经网络)。在 R-CNN 中,我们首先使用称为 Selective Search 的算法扫描输入图像以查找可能的对象,生成约 2,000 个区域提议。然后我们在每个区域提案之上运行一个 CNN。最后,我们将每个 CNN 的输出输入到 SVM 以对区域进行分类,并通过线性回归来收紧对象的边界框。[0]

本质上,我们将对象检测变成了图像分类问题。但是,存在一些问题——训练很慢,需要大量磁盘空间,推理也很慢。

R-CNN 的直接后代是 Fast R-CNN,它通过 2 个增强来提高检测速度:1)在提出区域之前执行特征提取,因此只在整个图像上运行一个 CNN,以及 2)用 softmax 层替换 SVM ,从而扩展神经网络进行预测,而不是创建新模型。[0]

Fast R-CNN 在速度方面的表现要好得多,因为它只为整个图像训练一个 CNN。然而,选择性搜索算法仍然需要大量时间来生成区域建议。

因此出现了 Faster R-CNN,它现在是基于深度学习的对象检测的规范模型。它通过插入区域提议网络(RPN)来预测来自特征的提议,从而用快速神经网络取代了慢速选择性搜索算法。 RPN 用于决定寻找“哪里”,以减少整个推理过程的计算需求。 RPN 快速有效地扫描每个位置,以评估是否需要在给定区域进行进一步处理。它通过输出 k 个边界框建议来做到这一点,每个建议都有 2 个分数,代表每个位置是否存在对象的概率。[0][1]

一旦我们有了我们的区域建议,我们就将它们直接输入到本质上是 Fast R-CNN 的过程中。我们添加了一个池化层、一些全连接层,最后是一个 softmax 分类层和边界框回归器。

总而言之,Faster R-CNN 实现了更好的速度和更高的准确度。值得注意的是,尽管未来的模型在提高检测速度方面做了很多工作,但很少有模型能够大幅超越 Faster R-CNN。换句话说,Faster R-CNN 可能不是最简单或最快的目标检测方法,但它仍然是性能最好的方法之一。

近年来的主要目标检测趋势已转向更快、更高效的检测系统。这在 You Only Look Once (YOLO)、Single Shot MultiBox Detector (SSD) 和基于区域的全卷积网络 (R-FCN) 等方法中很明显,这些方法是在整个图像上共享计算。因此,这些方法区别于与 3 R-CNN 技术相关的昂贵子网络。这些趋势背后的主要理由是避免让单独的算法孤立地关注它们各自的子问题,因为这通常会增加训练时间并降低网络准确性。[0][1][2]

加入 14,000 多名机器学习者和数据科学家同行。订阅有关深度学习的所有内容的首要时事通讯。[0]

3 — Object Tracking

对象跟踪是指在给定场景中跟踪特定感兴趣对象或多个对象的过程。传统上,它在视频和现实世界交互中具有应用,其中在初始对象检测之后进行观察。现在,它对自动驾驶系统至关重要,例如来自优步和特斯拉等公司的自动驾驶汽车。[0]

Object Tracking 方法根据观察模型可以分为 2 类:生成方法和判别方法。生成方法使用生成模型来描述表观特征并最小化重建误差来搜索对象,例如 PCA。

判别法可以用来区分物体和背景,其性能更加鲁棒,逐渐成为跟踪中的主要方法。判别法也称为Tracking-by-Detection,深度学习属于这一类。为了实现检测跟踪,我们检测所有帧的候选对象,并使用深度学习从候选对象中识别出想要的对象。有 2 种基本网络模型可以使用:堆叠自动编码器 (SAE) 和卷积神经网络 (CNN)。

最流行的使用 SAE 跟踪任务的深度网络是 Deep Learning Tracker,它提出了离线预训练和在线微调网络。这个过程是这样的:[0]

  • 离线无监督使用大规模自然图像数据集对堆叠去噪自动编码器进行预训练,以获得一般对象表示。堆叠去噪自编码器可以通过在输入图像中加入噪声并重建原始图像来获得更鲁棒的特征表达能力。
  • 将预训练网络的编码部分与分类器结合得到分类网络,然后利用从初始帧得到的正负样本对网络进行微调,可以区分当前物体和背景。 DLT 使用粒子滤波器作为运动模型来产生当前帧的候选块。分类网络输出这些块的概率分数,表示它们分类的置信度,然后选择这些块中最高的作为对象。
  • 在模型更新中,DLT 采用限制阈值的方式。

由于在图像分类和目标检测方面的优越性,CNN 已经成为计算机视觉和视觉跟踪中的主流深度模型。一般来说,大规模的 CNN 既可以作为分类器也可以作为跟踪器进行训练。 2个具有代表性的基于CNN的跟踪算法是全卷积网络跟踪器(FCNT)和多域CNN(MD Net)。[0][1]

FCNT 成功分析并利用了 VGG 模型的特征图,这是一个预训练的 ImageNet,并产生以下观察结果:[0]

  • CNN 特征图可用于定位和跟踪。
  • 许多 CNN 特征图对于从背景中区分特定对象的任务来说是嘈杂的或无关的。
  • 较高层捕获对象类别的语义概念,而较低层编码更具辨别力的特征以捕获类内变化。

由于这些观察,FCNT 设计了特征选择网络以在 VGG 网络的 conv4-3 和 conv5-3 层上选择最相关的特征图。然后为了避免对嘈杂的过度拟合,它还分别为从两层选择的特征图设计了额外的两个通道(称为 SNet 和 GNet)。 GNet 捕获对象的类别信息,而 SNet 将对象与具有相似外观的背景区分开来。

两个网络都在第一帧中使用给定的边界框进行初始化以获得对象的热图,对于新帧,以最后一帧中的对象位置为中心的感兴趣区域 (ROI) 被裁剪和传播。最后通过SNet和GNet,分类器得到两个热图进行预测,跟踪器根据是否有干扰物来决定使用哪个热图生成最终的跟踪结果。 FCNT 的流水线如下图所示。

与 FCNT 的想法不同,MD Net 使用视频的所有序列来跟踪其中的运动。上面提到的网络使用不相关的图像数据来减少跟踪数据的训练需求,这种想法与跟踪有一定的偏差。这个视频中的一个类的对象可以是另一个视频中的背景,因此MD Net提出了多域的思想,将每个域中的对象和背景独立区分出来。域表示包含相同类型对象的一组视频。

如下图所示,MD Net 分为两部分:共享层和特定领域层的 K 个分支。每个分支包含一个带有softmax loss的二分类层,用于区分每个域中的对象和背景,共享层与所有域共享,以确保通用表示。

近年来,深度学习研究人员尝试了不同的方法来适应视觉跟踪任务的特征。探索的方向有很多:应用循环神经网络、深度信念网络等其他网络模型,设计适应视频处理和端到端学习的网络结构,优化流程、结构和参数,或者甚至将深度学习与传统的计算机视觉方法或语言处理和语音识别等其他领域的方法相结合。[0][1][2]

4 — Semantic Segmentation

计算机视觉的核心是分割过程,它将整个图像划分为像素组,然后可以对其进行标记和分类。[0]

特别是,语义分割试图从语义上理解图像中每个像素的作用(例如,它是汽车、摩托车还是其他类型的类?)。比如上图中,除了要识别人、路、车、树等,我们还要划定每个物体的边界。因此,与分类不同,我们需要来自模型的密集像素级预测。[0]

与其他计算机视觉任务一样,CNN 在分割问题上取得了巨大成功。一种流行的初始方法是通过滑动窗口进行补丁分类,其中每个像素使用周围的图像补丁单独分类。然而,这在计算上是非常低效的,因为我们没有重用重叠补丁之间的共享特征。

相反,解决方案是加州大学伯克利分校的全卷积网络 (FCN),它推广了端到端 CNN 架构,用于在没有任何全连接层的情况下进行密集预测。这允许为任何大小的图像生成分割图,并且与补丁分类方法相比也快得多。几乎所有后续的语义分割方法都采用了这种范式。[0]

但是,仍然存在一个问题:原始图像分辨率的卷积将非常昂贵。为了解决这个问题,FCN 在网络内部使用了下采样和上采样。下采样层称为条带卷积,而上采样层称为转置卷积。

尽管有上采样/下采样层,但由于池化过程中的信息丢失,FCN 会产生粗略的分割图。 SegNet 是一种比使用最大池和编码器-解码器框架的 FCN 更节省内存的架构。在 SegNet 中,从更高分辨率的特征图中引入了快捷/跳过连接,以提高上采样/下采样的粗糙度。[0]

最近在语义分割方面的研究都在很大程度上依赖于全卷积网络,例如 Dilated Convolutions、DeepLab 和 RefineNet。[0][1][2]

5 — Instance Segmentation

除了语义分割之外,实例分割还可以分割不同的类实例,例如用 5 种不同颜色标记 5 辆汽车。在分类中,通常有一张以单个对象为焦点的图像,任务是说出该图像是什么。但是为了分割实例,我们需要执行更复杂的任务。我们看到具有多个重叠对象和不同背景的复杂景象,我们不仅对这些不同的对象进行分类,而且识别它们的边界、差异和相互关系!

到目前为止,我们已经看到了如何以许多有趣的方式使用 CNN 特征来有效地定位具有边界框的图像中的不同对象。我们能否扩展这种技术来定位每个对象的精确像素,而不仅仅是边界框? Facebook AI 使用称为 Mask R-CNN 的架构探索了这个实例分割问题。[0]

与 Fast R-CNN 和 Faster R-CNN 非常相似,Mask R-CNN 的基本直觉很简单 鉴于 Faster R-CNN 在目标检测方面表现出色,我们能否将其扩展为也进行像素级分割?

Mask R-CNN 通过向 Faster R-CNN 添加一个分支来实现这一点,该分支输出一个二进制掩码,表示给定像素是否是对象的一部分。该分支是基于 CNN 的特征图之上的全卷积网络。给定 CNN 特征图作为输入,网络在像素属于对象的所有位置输出 1,在其他位置输出 0(这称为二进制掩码)。[0]

此外,在不修改原始 Faster R-CNN 架构的情况下运行时,由 RoIPool(Region of Interests Pool)选择的特征图区域与原始图像的区域略有偏差。由于图像分割需要像素级的特异性,与边界框不同,这自然会导致不准确。 Mask R-CNN 通过使用称为 RoIAlign(Region of Interests Align)的方法调整 RoIPool 以更精确地对齐来解决这个问题。本质上,RoIAlign 使用双线性插值来避免舍入误差,从而导致检测和分割不准确。

一旦生成了这些掩码,Mask R-CNN 会将它们与 Faster R-CNN 的分类和边界框相结合,以生成如此精确的分割:

Conclusion

这 5 种主要的计算机视觉技术可以帮助计算机从单个或一系列图像中提取、分析和理解有用的信息。还有许多其他我没有接触过的高级技术,包括风格迁移、着色、动作识别、3D 对象、人体姿势估计等等。[0][1]

事实上,计算机视觉领域的成本太高,无法深入探讨,我鼓励您进一步探索它,无论是通过在线课程、博客教程还是正式文档。我强烈推荐 CS231n 作为初学者,因为您将学习实现、训练和调试自己的神经网络。作为奖励,您可以从我的 GitHub 存储库中获取所有讲座幻灯片和作业指南。我希望它能指导你改变看待世界的方式![0]

如果您喜欢这件作品,我会很高兴您按下拍手按钮👏,这样其他人可能会偶然发现它。你可以在 GitHub 上找到我自己的代码,在 https://jameskle.com/ 上找到更多我的写作和项目。你也可以在 Twitter 上关注我,直接给我发电子邮件或在 LinkedIn 上找到我。订阅我的时事通讯,在您的收件箱中接收我对数据科学、机器学习和人工智能的最新想法![0][1][2][3][4][5]

在 Hacker News 上讨论这篇文章[0]

编者注:Heartbeat 是一个贡献者驱动的在线出版物和社区,致力于为数据科学、机器学习和深度学习从业者提供一流的教育资源。我们致力于支持和激励各行各业的开发人员和工程师。[0]

编辑独立,Heartbeat 由 Comet 赞助和发布,Comet 是一个 MLOps 平台,使数据科学家和 ML 团队能够跟踪、比较、解释和优化他们的实验。我们付钱给我们的贡献者,我们不卖广告。[0]

如果您想贡献,请继续我们的贡献者征集。您还可以注册接收我们的每周时事通讯(Deep Learning Weekly 和 Comet 时事通讯),在 Slack 上加入我们,并在 Twitter 和 LinkedIn 上关注 Comet,获取资源、活动等,这将帮助您更快地构建更好的 ML 模型.[0][1][2][3][4][5][6]

文章出处登录后可见!

已经登录?立即刷新

共计人评分,平均

到目前为止还没有投票!成为第一位评论此文章。

(0)
扎眼的阳光的头像扎眼的阳光普通用户
上一篇 2022年4月28日
下一篇 2022年4月28日

相关推荐