本文是翻译自Object detection: an overview in the age of Deep Learning - Tryolabs Blog (http://t.cn/RNf1Ap9)。这篇文章主要是对深度学习目标检测进行概览,并不深入,适合那些想了解深度学习目标检测方向的读者。
从简单的图像分类到3D姿势识别,计算机视觉领域从来不缺乏有趣的问题。其中,我们最感兴趣的,也投入精力去研究的领域之一就是目标检测。就像许多其他计算机视觉问题,该领域还缺乏一个显而易见或者“做好的”方法,这意味着目标检测仍然有很大的进步空间。在进入目标检测领域之前,让我们快速的过一遍计算机视觉领域最常见的问题。
这大概是计算机视觉领域最知名的问题了,它是把一张图像分类正确分类到很多种类中去。学术界最流行的数据集是ImageNet,它由百万张分类好的图片构成。它的一部门数据被拿来用作每年的ImageNet大规模图像识别竞赛(ILSVRC)。近些年图像分类模型已经超过了人类的表现,因此该问题算是一个已经解决的问题。然后,还有很多其他图像分类竞赛,有很多文章记录下了这些已经解决的问题以及悬而未决的挑战。
图像分类的例子
与图像分类类似,定位就是找到一张图片中的一个单一物体的位置。
定位的例子
定位在生活中是很实用的。例如,智能裁剪(根据目标的位置来裁剪图像),或者进行目标提取,以供其他技术做进一步的处理。它可以与分类结合起来--不仅定位到物体,还能把物体进行分类。
从这种仅发现图像中的物体的目标定位技术更进一步,我们想对检测到的目标进行每个像素进行精细的分类,我们把这个问题称之为实例或者目标分割。
把定位和分类任务结合起来,我们就需要同时进行一张图片中的多个目标的检测和分类。目标检测问题就是定位和分类一张图像中的多个物体。与定位最重要的差别就是“变量”部分。与分类任务只输出一个类别信息不同的是,目标检测的输出的个数是不定的,因为一张图片中检测到的目标数量是不定的。在本文中我们会深入介绍目标检测的实际应用的细节,以及目标检测,作为一个机器学习问题,存在的主要问题是什么,过去几年使用深度学习方法来解决它的方法有什么变化。
目标检测例子
在我们的Tryolabs实验室,我们专门从事应用最好的机器学习方法来解决商业问题,所以,我们喜欢所有疯狂的机器学习研究问题,但是最后我们会在应用阶段考虑更多实际问题。 虽然目标检测还算是工业界的一个新的工具,但已经有很多使用目标检测技术的实用而有趣的应用了。
目标检测的一个最简单也最容易忽视的应用就是数数。统计人、车、花朵或者微生物的数量是现实生活中各种不同类型的使用图形信息的系统最广泛的需求。最近澎湃发展的监控设备中,里面蕴藏着前所未有的使用计算机视觉方法将原始像素信息转换为结构化信息的巨大机会。
最后,我们喜爱的一个应用实例是Pinterest的图形搜索引擎。他们使用目标检测技术作为索引图像中不同部位的工具。这样的话,当你搜索一个特定的手提袋,你可以找到你想要的手提袋在不同场景下的实例图。这比谷歌图像反搜索引擎仅仅找到相似的图像更有用。
相似图像:我们应用目标检测技术来定位包或者鞋子这种产品。在这个例子中,用户点击自动标注好的物体去查看相似的产品。(Pinterest论文中的例子)
在拥有廉价无人机和可支付的起的卫星服务之前,我们从没有这么多地球的俯视图。可是那时候就已经有公司开始使用目标检测技术来计算卫星图中的车,树和轮船了,就像Planet和Descartes LabS。以前可不可能(它们极为昂贵)获取这些高清晰度的数据,现在很多人已经可以使用它了。(译者:真是“旧时王谢堂前燕,飞入寻常百姓家”!) 一些公司使用无人机来拍摄那些人类难以进入的区域的视频来做自动化检测(就像BetterView公司这样),或者使用目标检测技术来做通用分析(就像TensorFligh)。基于目标检测方法,一些公司在没有人类干预的情况下来做自动检测和定位问题。
TensorFlight
让我们开始深入目标检测的主要问题吧。
我们前面已经提到了图片中多目标的问题,但是我们忽视了为什么目标数据是一个问题。当训练一个机器学习模型的时候,你经常需要将数据弄成固定大小的向量。因为我们事先不知道图片中有多少个目标,我们不知道正确的输出数量。因为这个问题,我们需要一些后处理,不过这增加了模型的复杂度。
以前,这种输出不定数量问题都是使用基于滑动窗口的方法解决的,生成图片中不同位置的所有固定大小的特征。然后丢弃一些不包含目标的窗口,合并一些窗口,从而得到最终输出。
滑动窗口的例子
另外一个大挑战是目标的大小不一致问题。当做图像分类问题的时候,我们只需要将图片中占篇幅最大的目标分类就行了。另一方面,目标检测的时候,可能一些目标仅仅有十来个像素大小(或者说是原始图像中很小的比例)。传统方法一般使用不同大小的滑动窗口来解决它,这很简单但是特别低效。
第三个问题是怎么同时解决定位和分类这两个问题。我们如何组合这两种不同种类的问题:将定位和分类合到一个模型来解决。
在介绍深度学习图像检测方法之前,我们先对传统方法做一个快速回顾。
尽管有很多不同类型的传统目标检测方法,但是我们只关注两个最流行的方法(这两个现在还在广泛应用)。
第一个是2001年Paul Viola和Micahel Jones在论文“鲁棒实时目标检测”提出的Viola-Jones 框架。这个方法速度快,相对简单,因此傻瓜相机的实时脸部检测就是使用的这个算法,它的运算量很小。
我们不会详细介绍这个框架是怎么工作、怎么训练的,但是概括来说,它使用Harr 特征来生成不同的(可能上千个)简单的二分类.这些分类被级联的多尺度滑动窗口来处理,并且会及时丢弃错误分类。
另外一个与之相似的传统方法是梯度方向直方图(HOG)特征和支持向量机(SVM)来分类。它仍然依赖多尺度多尺度滑动窗口,虽然它优于Viola-Jones方法,但它仍旧比较慢。
深度学习作为机器学习领域的变革者已经众人皆知了,尤其是计算机视觉领域。与深度学习在图形分类领域碾压传统模型类似,深度学习模型现在也是目标检测领域最好的方法。
现在你已经对目标检测有了一个更加直观的了解,也知道了其中的难点在哪里以及传统方法是怎么解决它的,现在我们对过去几年深度学习目标检测方法做一个综述介绍。
第一个使用深度学习做目标检测并取得很大进展的方法是纽约大学在2013年提出的OverFeat。他们提出了一个使用卷积神经网络(CNN)的多尺度滑动窗口算法。
在OverFeat提出不就,伯克利大学的Ross Girshick等人就提出了RCNN(基于区域的卷积特征)[9],它在目标检测比赛上相比其他方法取得了50%的性能提升。他们提出了一个三阶的方法:
使用区域提议方法(最流行的方法是选择性搜索Selective Search)提取可能的目标;
使用CNN在区域上提取特征;
使用支持向量机(SVM)对区域进行分类
Ross Girshick等人在2014年提出的RCNN
虽然RCNN取得了了不起的成绩,但是训练过程中有很多的问题。训练它,你首先需要生成训练集的提议区域,然后在每个区域使用CNN特征提取器来提取特征(在Pascal2012的训练集上,需要生成大于200GB的中间文件),然后训练SVM分类器。
一年以后,Ross Girshick发表了Fast RCNN,这个方法迅速进化成了一个纯深度学习的方法。与R-CNN相似,它也使用Selective Search来生成区域提议,但与R-CNN独立的提取不同区域然后使用SVM分类器不同的是,Fast RCNN在整张图上使用CNN来提取特征,然后在特征图上使用区域兴趣池化(Region of Interest,ROI),最后是一个反向传播网络来做分类和边框回归。这个方法不仅快,而且因为RoI池化层和全连接层,该模型可以进行端到端的差分,并且训练也更容易。最大的不足是该模型仍旧依赖于Selective Search(或者其他的区域提议算法),这也成为了模型推理阶段的一个瓶颈。
Fast R-CNN架构
很快,Joseph Redmon(Girshick也作为共同作者或出现)发表了一篇名为You Only Look Once: Unified, Real-Time Object Detection(YOLO)的论文。YOLO提出了一个简单的卷积神经网络方法,它取的了很好的结果,速度也非常快,第一次让目标检测达到了实时性。
YOLO架构
随后,任少卿(Girshick也作为共同作者,现在Facebook研究院)发表了Faster R-CNN,这是R-CNN系列的第三个迭代。Faster R-CNN增加了一个所谓的“区域提议网络(Regio Proosal Network,RPN)”,试图摆出SelectiveSearch算法从而让模型实现完全端到端的训练。我们不会详细介绍RPNs是怎么做的,但是概括来说,它的作用是根据“物体”的分数来输出可能目标。这些目标区域被后面的RoI池化和全连接层来做分类(译者注:其实还有回归呢)。我们会在后续的博客中详细介绍该结构的细节。
Faster R-CNN 架构
最后两篇著名的论文,SSD在YOLO的基础上改进了一些,它使用多个尺度的卷积特征图以达到更好的结果和速度,R-FCN(Region-based Fully Convolutional Networks )使用了Faster RCNN的卷积架构。
在研究中,数据集起到了一个直观重要的作用(有时候他们的作用甚至被低估了)。每当一个新的数据集发布以后,新的论文接踵而至,新的模型被各种比较,不断进步,一切可能的想法都被提出来了。
不幸的是,目标检测的数据集不是太多。数据比较难(也很昂贵)获取,公司可能不愿意免费发布他们投资的产品,大学又缺乏资源。
现在有一些弥足珍贵的数据集,下面是一些公开的数据集:
总而言之,目标检测领域现在有很多机会,不管是在未知的应用还是在提出新的最优的方法上。即使这只是一个目标检测的概述,我希望它抛砖引玉,引导你们更深入的了解知识。
后面几周,我们会做一个目标检测框架实现的细节的文章,以及评估标准和训练模型的方法。我们也会尝试将过去的目标检测算法应用到其他问题上。
新人福利
关注 AI 研习社(okweiwu),回复 1 领取
【超过 1000G 神经网络 / AI / 大数据,教程,论文】
这六段代码隐藏着深度学习的前世今生!
▼▼▼