深度学习之对象检测的概念、现状与挑战

从简单的图像分类到3D姿势估计,计算机视觉中不乏有趣的问题。 我们最感兴趣并投入大量研究的问题就是对象检测。

像许多其他计算机视觉问题一样,仍然没有明确或“最佳”的方法来处理对象检测问题,这个领域仍有很大的改进空间。

在这篇文章中,我们将快速了解对象检测中最常见的问题,深入了解应用实践的细节,并理解在过去的几年里如何通过深入学习 解决它的方法。

 

对象检测与其它计算机视觉问题

图像分类

图像分类可能是计算机视觉中最著名的问题。 它包括将图像分类为许多不同类别中的一个。 学术界最常用的数据集之一是ImageNet,由数百万个分类图像组成,(部分地)用于ImageNet大规模视觉识别挑战赛(ILSVRC)年度竞赛。 近年来,分类模型已经超越了人类的表现,并且已经被认为是实际解决的问题。 虽然图像分类存在很多挑战,但也有很多问题得到解决,以及剩下的挑战。

Image of a dinosaur, illustrating a classification example.

分类的例子

 

定位

与分类类似,定位是查找图像内单个对象的位置。

Image of a dinosaur, illustrating a localization example.

定位的例子

 

定位可应用到许多有用的现实问题中。 例如,智能裁剪(基于对象所在位置来裁剪图像),或者提取常规的对象,再使用不同技术进一步处理。 它可以与分类相结合,不仅可以定位对象,还可以将其分类为许多可能的类别之一。

 

实例分割

从对象检测更进一步,我们不仅要查找图像内的对象,还要找到每个检测到的对象的逐像素掩码。 我们将此问题称为实例或对象分割。

 

对象检测

通过迭代处理定位和分类的问题,我们最终的目标是同时检测和分类多个对象。 对象检测是在图像上查找和分类可变数量的对象。 重要的区别是“变量”部分。 与分类等问题相反,对象检测的输出长度可变,因为检测到的物体数量可能会因图像而异。

Image of a dinosaur, illustrating an object detection example.

对象检测的例子

 

对象检测的实际用途

在Tryolabs,我们专注于应用最先进的机器学习来解决业务问题,所以尽管我们喜欢所有疯狂的机器学习研究问题,但我们最终担心的还是应用方面的问题。

尽管对象检测在某种程度上仍然是业界的新工具,但现在已经有了很多有用的且令人兴奋的应用。

 

人脸识别

自2000年代中期以来,一些傻瓜相机开始提供检测面部的功能,以实现更高效的自动对焦。 虽然它是一种较窄的对象检测类型,但所使用的方法适用于其他类型的对象,我们稍后将对其进行描述。

 

计数

对象检测的一个简单但经常被忽略的用法是计数。 使用图像计算人,汽车,花朵甚至微生物数量的能力在现实世界的各种系统中有着广泛的需求。 最近随着视频监控设备的不断涌现,使用计算机视觉将原始信息转化为结构化数据的需求程度比以往任何时候都大。

 

可视化搜索引擎

最后,我们喜欢的一个用例是Pinterest的视觉搜索引擎。 他们使用对象检测作为管道的一部分来索引图像的不同部分。 这样,当搜索特定钱包时,您可以在不同的场景中找到类似于您想要的钱包。 这比仅仅找到类似的图像要强大得多,就像Google Image的反向搜索引擎一样。

Screenshot taken from Pinterest, showing different kind of bags, used to illustrate object detection to localize products.

 

航拍图像分析

在廉价无人机和(接近)经济实惠的卫星发射时代,我们的世界从未有过如此多的数据。 已经有公司使用来自Planet和Descartes Labs等公司的卫星图像,应用对象检测来计算汽车,树木和船只。 这产生了高质量的数据,这是以前不可能(或非常昂贵)获取的,现在已经覆盖了更广泛的受众。

一些公司正在使用无人机镜头对难以到达的地方(例如BetterView)进行自动检查,或使用对象检测进行通用分析(例如TensorFlight)。 除此之外,一些公司还增加了自动检测和问题定位,而无需人工干预。

Screenshot taken from TensorFlight, showing car, tree and pedestrian detection.

使用TensorFlight进行汽车,树木和行人检测

 

对象检测存在的问题和挑战

让我们开始深入了解对象检测的主要问题。

可变数量的对象

我们刚才已经提到了关于对象是可变数量的这一点,但我们省略了为什么它确实是一个问题。 在训练机器学习模型时,通常需要将数据表示为固定大小的向量。 由于事先不知道图像中的对象数量,因此我们不知道准确的输出数量。 因此,需要进行一些后处理,这增加了模型的复杂性。

历史上,使用基于滑动窗口的方法处理可变数量的输出,为其所有不同位置生成该窗口的固定大小的特征。 获得所有预测后,一些被丢弃,一些被合并以获得最终结果。

滑动窗口的演示https://thumbs.gfycat.com/PalatableSoulfulBarnacle-mobile.mp4

 

尺度

另一个重大挑战是可想象的不同尺寸的物体。 在进行简单分类时,您希望要分类的对象的尺寸能覆盖大部分图像。 另一方面,您可能想要找到的一些对象可能只有十几个像素(或原始图像的一小部分)。 传统上,这已经通过使用不同尺寸的滑动窗口来解决,这是简单但非常低效的。

 

建模

第三个挑战是同时解决两个问题。 我们如何将这两种不同类型的需求:定位和分类,合并到(理想情况下)单个模型中?

在深入学习以及如何应对这些挑战之前,让我们快速了解一下经典方法。

 

经典方法

虽然这些年来出现了许多不同类型的方法,但我们希望关注两个最受欢迎的方法(它们仍然广泛使用)。

第一个是Paul Viola和Michael Jones在2001年中提出的Viola-Jones框架。这种方法快速且相对简单,因此它在傻瓜相机中大量使用,它允许以很小的处理能力进行实时面部检测。

我们不会详细介绍它是如何工作的以及如何训练它,但在高层上,它通过使用Haar特征生成不同的(可能是数千个)简单二元分类器来工作。这些分类器使用级联的多尺度滑动窗口进行评估,并在负分类的情况下提前下降。

另一种传统和类似的方法是使用方向梯度直方图(HOG)特征和支持向量机(SVM)进行分类。它仍然需要一个多尺度的滑动窗口,即使它优于Viola-Jones,但它要慢得多。

 

深度学习方法

深度学习是机器学习中游戏规则的真正改变者,这已经不是什么新闻,尤其是在计算机视觉领域。 类似于深度学习模型在图像分类任务中粉碎了其他经典模型,深度学习在对象检测中也是最先进的技术。

现在您可能对挑战是什么以及如何解决它们有了更好的直觉,我们将概述深度学习方法在过去几年中如何演变。

 

OverFeat

使用深度学习进行物体检测的最先进的一个方法是2013年出版的纽约大学OverFeat。他们提出了一种使用卷积神经网络(CNN)的多尺度滑动窗口算法。

 

R-CNN

在OverFeat之后不久,R-CNN方法由Ross Girshick等人在加州大学伯克利分校发布,其对物探测挑战的改进率提高了近50%。 他们提出的是一个三阶段的方法:

  • 使用区域提议方法(最常用的方法是选择性搜索)提取可能的对象。
  • 使用CNN从每个区域提取特征。
  • 使用SVM对每个区域进行分类。

Illustration explaining the R-CNN architecture.

R-CNN 架构.

 

虽然它取得了很好的成果,但训练有很多问题。 要训练它,首先必须为训练数据集生成区域提议,将CNN特征提取应用于每一个提议(对于Pascal 2012train数据集通常需要超过200GB),然后最终训练SVM分类器。

Fast R-CNN

这种方法很快演变成一种更纯粹的深度学习方法,一年之后,Ross Girshick(现在在微软研究院)发布了Fast R-CNN。 与R-CNN类似,它使用选择性搜索生成对象提议,但不是独立地提取所有这些提议并使用SVM分类器,而是在完整图像上应用CNN,然后在特征图上使用感兴趣区域(RoI)池化与最终前馈网络进行分类和回归。

这种方法不仅更快,而且拥有RoI Pooling层和完全连接的层,允许模型端到端可区分且更容易训练。 最大的缺点是该模型仍然依赖于选择性搜索(或任何其他区域提议算法),这在使用它进行推理时成为瓶颈。

Illustration explaining the Fast R-CNN architecture.

Fast R-CNN 架构.

 

YOLO

不久之后,由约瑟夫·雷蒙(Joseph Redmon)出版的"统一的实时对象检测(YOLO)"论文(Girshick作为合作者之一出版)。 YOLO提出了一种简单的卷积神经网络方法,它具有很好的结果和高速度,第一次实现实时对象检测。

Illustration explaining the YOLO architecture.

YOLO 架构.

 

Faster R-CNN

随后,由Shaoqing Ren撰写的Faster R-CNN(也由Girshick合着,现在在Facebook Research),是R-CNN系列的第三次迭代。 Faster R-CNN添加了他们所谓的区域提议网络(RPN),试图摆脱选择性搜索算法并使模型完全可以端到端训练。 我们不会详细介绍RPN的功能,但在摘要中,它的任务是根据“对象”分数输出对象。 这些对象由RoI Pooling和完全连接的层使用以进行分类。

 

Illustration explaining the Faster R-CNN architecture.

Faster R-CNN 架构.

 

SSD and R-FCN

最后,有两篇值得注意的论文,单镜头检测器(SSD)通过使用多尺寸卷积特征图来实现YOLO,实现更好的结果和速度,以及基于区域的全卷积网络(R-FCN),它采用了Faster R-CNN的架构但只有卷积网络。

 

数据集的重要性

数据集在研究中扮演着非常重要(有时被低估)的角色。 每次发布新数据集时,都会发布论文,并对新模型进行比较并经常进行改进,从而推动可能的局限。

不幸的是,没有足够的数据集用于对象检测。 数据生成起来更难(也更昂贵),公司可能不愿意无偿的放弃投资,大学也没有那么多资源。

还有一些很棒的,下面是主要可用数据集的列表。

Name# Images (trainval)# ClassesLast updated
ImageNet450k2002015
COCO120K802014
Pascal VOC12k202012
Oxford-IIIT Pet7K372012
KITTI Vision7K32014

结论

总之,在对象检测方面存在许多机会,无论是在看不见的应用中还是在用于推动现有技术结果的新方法中。 尽管这只是对象检测的一般概述,但我们希望它能为您提供基本的理解和基础,以获得更深入的知识(没有双关的意思)。

 

(查看原文:https://tryolabs.com/blog/2017/08/30/object-detection-an-overview-in-the-age-of-deep-learning/)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值