深度学习时代下的对象检测 (Object Detection)

【写在前面】
之前po了两篇学习笔记吴恩达Coursera Deep Learning学习笔记 1 (上)和吴恩达Coursera Deep Learning学习笔记 1 (下),感谢大家的支持与鼓励。不过也有些非业内人士大哭看不太懂,所以打算弄点圈外人也能看懂的入门小文。最近看到一篇不错的外文博客,找了一大圈发现国内貌似还没有人翻译过。我就当一回搬运工吧~原文地址~

本文仅供学习交流使用,侵权必删,不用于商业目的,转载须注明出处。

从简单的图像分类到三维姿势预测 (3D-pose estimation),计算机视觉 (Computer Vision) 领域一直不缺乏有趣的问题,其中就包括对象/目标检测 (Object Detection)。和许多其他的计算机视觉问题一样,对象检测仍然没有一个显而易见的最优方法,这意味着这个领域还有很多潜力。首先让我们快速了解一下这个领域中最常见的问题。

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

分类 (Classification)

分类问题是计算机视觉中最著名的问题,它是识别出图像的类别,比如人、兔子、猫咪等等。在学术界使用的最流行的数据集之一是ImageNet,由数百万个分类图像组成,并在ImageNet大规模视觉识别挑战 (ILSVRC) 的年度竞赛中使用。近年来,分类模型的精确度已经超过了人类的肉眼,所以这个问题已算是基本解决了的。

深度学习时代下的对象检测 (Object Detection)_第1张图片
图像分类的例子(99%概率恐龙,1%的概率公鸡)

定位 (Localization)

定位是在图像中找到某个对象的位置,和分类有些类似。定位有很多实际应用。例如,智能裁剪 (Smart Cropping) ——基于对象所在的位置裁剪图像,或者常规的对象提取之后再用其他方法做进一步处理。它可以与分类结合定位对象,然后将其分类为多种可能的类别之一。

深度学习时代下的对象检测 (Object Detection)_第2张图片
图像定位的例子

实例/目标分割 (Instance/Object Segmentation)

实例分割不仅要在图像中找到对象,而且要找到每个被检测到的对象的像素掩码。

对象检测 (Object Detection)

定位和分类可以迭代起来,最终在一张图片汇总对多个对象进行检测和分类。对象检测是在图像上发现和分类一个变量的问题。对象检测与定位、分类相比,重要的区别是这个“变量”。对象检测的输出长度是可变的,因为检测到的对象的数量会根据图像的不同而变化。在本文中,我们将深入了解对象检测的实际应用、作为机器学习的对象检测的主要问题是什么、以及深度学习如何在这几年里解决这个问题。

深度学习时代下的对象检测 (Object Detection)_第3张图片
对象检测的例子(检测到四个小恐龙宝宝)

对象检测的实际运用

尽管对象检测仍然是一个新工具,但是它已经有许多有用有趣的应用了——

人脸识别 (Face Detection)

自21世纪初以来,就出现了一些有人脸自动对焦功能的照相机。虽然这是一个较窄的对象检测问题,但它的方法同样适用于其他类型的对象,之后会详述。

计数 (Counting)

计数是一个简单但经常被忽略的对象检测应用。现实中我们需要计算机具有计数人、汽车、花朵甚至是微生物的能力,并应用于不同类型的系统。随着视频监控设备的不断涌现,利用计算机视觉将原始信息转换成结构化数据的机会比以往任何时候都要多。

视觉搜索引擎 (Visual Search Engine)

一个很好的例子是Pinterest的视觉搜索引擎,它使用对象检测构造数据通道从而对图像不同部分建立索引。比如,当你搜索一个特定的钱包时,你可以找到不同情境下使用这个钱包的图片。这比仅仅找到类似的图像(如谷歌图片的反向搜索引擎)要强大得多。

深度学习时代下的对象检测 (Object Detection)_第4张图片
论文(Jing, Yushi, et al. "Visual Search at Pinterest.")中的Pinterest例子

航拍图像分析 (Aerial Image Analysis)

在如今这个有着廉价无人机和(还算)廉价的卫星发射的时代,我们的世界拥有了前所未有之多的数据。现在已经有公司使用Planets和Descartes Labs等公司的卫星图像,应用对象检测来计算汽车、树木和船只的数量。这促使了从前不可能(或者非常昂贵)的高质量数据,现在有了普遍的应用。
一些公司使用无人机,自动探测难以到达的地方(BetterView),或者进行通用的对象检测分析(TensorFlight)。还有一些公司在不需要人工干预的情况下,解决了对象检测和定位的问题。

深度学习时代下的对象检测 (Object Detection)_第5张图片
TensorFlight对汽车、树木和行人检测

对象检测的困难与挑战

这一部分,让我们开始深入了解对象检测的主要问题。

可变数量的对象 (Variable number of objects)

我们之前提到了关于对象数量可变的问题,但我们却没讲它为什么是一个问题。在训练机器学习模型时,通常需要将数据表示为固定大小的向量。但是,由于图片中对象的数量事先不知道,所以我们不知道正确的输出维度。因此需要一些后期处理,这增加了模型的复杂性。
一般使用滑动窗口的方法来处理可变数量的对象,通过滑动固定大小的窗口,在所有的地方生成固定大小的特征。在得到这些被过滤后的特征之后,一些被丢弃,另一些被合并以生成最终的结果。
这里有个滑动窗口的例子:滑动窗口的动图。

调整对象检测窗口大小 (Resizing)

另一个巨大的挑战是各种可能的对象大小,即在进行分类时,既希望占图片大部分的对象进行分类,又想要找到一些可能只有12个像素、或者是原始图像一小部分的小对象。使用不同尺寸的滑动窗口可以解决这个问题,但效率很低。

建模

第三个挑战是同时解决两个问题——如何用一个简单的模型解决两种不同的需求,即定位和分类。


在了解深入学习如何应对这些挑战之前,让我们快速地回顾一下传统的对象检测方法。

传统方法

尽管有很多不同类型的方法,我们关注两个最流行并且仍然被广泛使用的传统方法。
第一个是由Paul Viola和Michael Jones在2001年的Robust Real-time Object Detection中提出的Viola-Jones框架。这种方法速度快且相对简单,可以进行实时但粗略的人脸检测,是在傻瓜相机中实现的一种算法。
我们不会详细讨论它是如何工作的或者其训练过程。总的来说,它使用Haar特征和上千个不同的简单二分分类器。这些分类器采用逐级多尺度滑动窗口,并且极快地弃用不适用的分类器。
另一种类似的传统方法是利用定向梯度 (Histogram of Oriented Gradients, HOG) 特征和支持向量机 (Support Vector Machine, SVM) 进行分类。它仍然采用多尺度滑动窗口,和Viola-Jones框架相比,虽然这个方法表现更佳,但速度要慢得多。


深度学习方法

深度学习真正改变了机器学习的游戏规则,尤其在计算机视觉领域。深度学习模型在图像分类任务中碾压了其他传统方法。
现在大家可能对对象检测的挑战以及解决方法有了更好的直觉,接下来将概述在过去的几年中深度学习方法是如何演变的。

OverFeat

第一个对象检测的深度学习方法是2013年纽约大学发表的OverFeat。他们提出了一种使用卷积神经网络的多尺度滑动窗口算法。

R-CNN (Regions with CNN features) 基于卷积神经网络特征的区域方法

加州大学伯克利分校 (UC Berkeley) 提出的R-CNN提高了对象检测~50%,一个三阶段的方法:
- 不同区域提出不同的提案,然后提取可能的对象(最常用的是选择性搜索算法);
- 用CNN从区域提取特征;
- 用SVM对区域进行分类。

深度学习时代下的对象检测 (Object Detection)_第6张图片
R-CNN架构:Girshick, Ross, et al. "用于准确的目标检测和语义分割的丰富特征层次结构" 2014.

虽然它取得了很大的成绩,但训练R-CNN有很多问题。你必须为训练数据生成提案,再将CNN的特征提取应用到每一个区域,最后训练SVM分类器。

快速R-CNN (Fast R-CNN)

R-CNN很快就彻底升级成深度学习方法。一年后,Ross Girshick(现在在微软)发表了快速R-CNN。和R-CNN相似,它使用选择性搜索生成对象的提案。但是与R-CNN不同的是,R-CNN独立地提取各区域的所有特征,然后使用SVM分类器;Fast R-CNN在整个图片上使用CNN,然后对特征映射使用“兴趣区域” (Region of Interest, RoI) 池化,最后使用前馈网络进行分类和回归。这种方法不仅速度更快,而且具有RoI池化层和全连接层,这使模型具有端到端的可微性并且更容易训练。Fast R-CNN最大的缺点是,模型仍然依赖于选择性搜索(或其他区域方案算法),这使推断成为了它的瓶颈。

深度学习时代下的对象检测 (Object Detection)_第7张图片
Girshick, Ross. "Fast R-CNN" 2015.

YOLO (You Only Look Once: Unified, Real-Time Object Detection) 只看一次:统一实时对象检测

不久之后,Joseph Redmon发布了统一实时对象检测 (YOLO) 的论文。YOLO提出了一种简单的卷积神经网络方法,其结果和速度都很好,并且是第一次允许实时的对象检测。

深度学习时代下的对象检测 (Object Detection)_第8张图片
Redmon, Joseph, et al. "You only look once: Unified, real-time object detection." 2016.

更快的R-CNN (Faster R-CNN)

随后R-CNN系列迎来了第三次迭代:更快的R-CNN。它添加了区域提案网络 (Region Proposal Network, RPN),摆脱了选择性搜索算法,并可以做到端到端的训练。RPNs的任务是基于objectness分数输出对象,然后用RoI池化 (RoI Pooling) 和完全连接层分类。具体细节本文就先不涉及了。

深度学习时代下的对象检测 (Object Detection)_第9张图片
Ren, Shaoqing, et al. "Faster R-CNN: Towards real-time object detection with region proposal networks." 2015.

SSD和R-FCN

最后,有两篇著名的论文:单镜头探测器 (Single Shot Detector, SSD),它使用了YOLO和多尺寸的卷积功能地图,达到了更好的结果和速度;以及基于区域的完全卷积网络(Region-based Fully Convolutional Networks, R-FCN),它采用了Faster R-CNN结构中的卷积网络部分。

数据的重要

正如我在对深度学习的一点看法中所写的那样,深度学习是非常依赖于海量的数据的。在对象检测的研究中,数据同样扮演着非常重要(有时却被低估)的角色。每当一个新的数据集发布后,就会有雨后春笋般的论文发布和新的模型或模型改进。不幸的是,并没有那么多的数据集用于对象检测。公司可能不愿意免费捐赠它们拥有的数据,而大学也没有这么多的资源。

一些用于对象检测的数据集

结论

综上所述,很多对象检测的新方法和新应用推动了深度学习最前沿的科技发展。本文只是对象检测的概述,希望能给大家带来一些新鲜有用的知识。
鄙人不是专业的翻译官,很多地方可能翻译得不够信达雅,希望看官见谅。谢谢支持!



作者:数据女侠
链接:https://www.jianshu.com/p/e6f97a13dc86
來源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

你可能感兴趣的:(Detection,Algorithoms)