开发者社区> 【方向】> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

零基础入门:对象检测及其算法指南

简介: 本文将向您介绍对象检测及各种算法,如:Fast R-CNN算法,YOLO算法,SSD算法等。我们将从零基础入手,一直到对象检测最先进的算法,并了解每种算法的具体方法和显著特征。
+关注继续查看

        图像分类是拍摄一张图像并对其中的对象进行预测。例如:当我们构建一个猫狗分类器时,我们拍摄了猫或狗的图像,并预测它们属于哪个类别。

c4a002e70d63743777c3d5536ecad7d3e070a970

如果猫和狗都出现在同一张图像中,你会怎样做呢?

f21c624c7c656ea5b1db640aa887981e7a72480c

我们的模型将会预测出什么呢?为了解决这一问题,我们可以训练一个可预测这两个类别(猫和狗)的多标签分类器。然而,我们仍然不知道猫或狗所在的位置。识别图像中给定类别对象的位置称为定位(Localization。如果不知道对象类别,我们不仅要确定其位置,还要预测每个对象的类别。

1956a8591ddedb3d501df16c3b52372017e1c95a

预测对象的位置和类别称为对象检测(Object Detection。过去从图像中预测对象的类别,而现在我们必须预测对象类别及包含该对象的矩形——称为边界框(Bounding Box)。这需要4个变量唯一确定一个矩形。因此,对于图像中的每个对象实例,应预测以下5个变量:class_name,ounding_box_top_left_x_coordinate,ounding_box_top_left_y_coordinate,ounding_box_width,ounding_box_height

就像多标签图像分类一样,我们可以拥有多类别对象检测器来检测单张图像中的多种类别的对象:

1dd29a51b5202ab24afe4248e9de4b95c5121c18

在以下章节中,我将介绍当前所有流行的科学方法来训练对象检测器。从2001 ViolaJones提出Haar Cascades开始,目前已经有很多种方法来进行对象检测。本文将聚焦于所有使用神经网络和深度学习的最先进的方法。

我们将对象检测建模为一个分类问题。我们从输入图像所有可能的位置获取固定大小的窗口,并将这些小块送入图像分类器。

d3e0fe10e3b25047c9b4cdf4355d757e06ecb335

滑动式窗口检测器演示

每个窗口被送入分类器,该分类器可以预测窗口内对象的类别(或者是背景)。因此,我们确定了图像中对象的类别和位置。那么如何确定窗口的大小以便它总是包含对象?请看下面的例子:

1a0484066451a1cc717b8871e411c9eb7a835323

小尺寸对象

a315daa0573503092686ae8f49ce8b6f829d2aa5

正如你所看到的,对象可以有不同的尺寸。我们通过测量图像来创建一个图像金字塔来解决这一问题。想法如下:调整图像到多个不同的尺寸,并基于这样一个事实,即选择的窗口将完全包含这些调整过的图像中的对象。最常见的情况就是,将图像下采样(缩小),直到达到某些条件下的最小尺寸。在每个图像上运行一个固定大小的窗口检测器,这样,在这个金字塔上通常会有64层。现在,所有的窗口被送入一个分类器检测感兴趣的对象。这解决了大小和位置两个问题。

86d248fb755d55418fd45915332e72c8f7f60fa4

还有一个问题:宽高比。很多对象可以以不同的形状呈现出来,例如:坐下的人与站立或睡觉的人的宽高比不同。我们将稍后进行阐述。

目前,对象检测的算法有很多,如RCNNFaster-RCNNSSD等,为什么会有这么多的方法?每个方法的显著特点是什么? 我们来看一下:

1.使用HOG Features进行对象检测

2005年,Navneet DalalBill Triggs阐述了面向梯度直方图的特征提取(HOG features),其计算简单且适用于很多现实问题。金字塔上运行滑动窗口所获得的每个窗口上,我们计算HOG features——被送入支持向量机(SVM——来创建分类器。我们能够在视频上实时运行以进行行人检测,人脸检测以及其他的对象检测用例。

2.区域卷积神经网络(R-CNN

            我们已经将对象检测建模为一个分类问题,其效果取决于分类的准确性。深度学习兴起以后,通常的想法是用一个更准确的基于卷积神经网络(CNN)的分类器代替基于HOG的分类器。但是现在有一个问题:CNN运行太慢,计算上也较为昂贵。在滑动窗口检测器上产生的很多小块上运行卷积神经网络是不太可能的。R-CNN通过使用被称为选择性搜索(Selective Search的对象候选算法解决了这一问题,该算法将送至分类器的边界框数量接近2000个候选框(Region Proposal)。选择性搜索使用局部提示(如纹理,强度,颜色和/或内部度量等)生成对象所在的所有可能位置。现在,我们将这些边界框送入基于CNN的分类器。请记住,CNN的全连接部分需要一个固定大小的输入,因此,我们调整(不保留宽高比)所有生成的边界框至一个固定大小(224*224VGG),并送至CNN中。因此R-CNN3个重要的部分:

1)运行选择性搜索生成可能的对象;

2)将这些小块送至CNN,然后用SVM预测每个小块的类别;

3)分别训练边界框回归,优化小块。

46f2c42d457bd8f6d39f4b21c1e19c15631c64b0

3.空间金字塔池化网络(SPP-net

            然而,R-CNN运行由选择性搜索产生的2000个候选框需要大量的时间。SPP-net试图解决了这一问题:只需要计算一次整个图像的CNN representation,并且可以使用其计算由选择性搜索生成的每个块的CNN representation。这在和该区域对应的最后一个卷积层的特征映射部分中,通过执行池化类型操作来完成。可通过考虑在中间层发生的下采样(VGG中将坐标除以16),映射该区域到一个卷积层来计算与该区域对应的卷积层的矩形。

            我们还面临另外一个挑战:我们需要为CNN的全连接层生成固定大小的输入。因此,SPP-net引入了更多的技巧:在最后一层的卷积层后使用了空间池化,而不是传统的最大池化。SPP-net层将一个任意大小的区域划分为恒定数量的箱(bins)并执行最大池化,产生了恒定大小的矢量,如下图所示:

166b5305635c26b9fe76885943bcd5fcb5665f3e

            然而,SPP-net有一个很大的缺点:通过空间池化层进行的反向传播并不能忽略。

4. Fast R-CNN

Fast R-CNN采用了SPP-netRCNN算法的思想,并解决了SPP-net中的关键问题,即可以进行端到端的训练。为了通过空间池化来传播梯度,它使用一个反向传播进行计算,这与最大池化梯度计算非常相似,其区别在于池化区域重叠,因此一个单元可以从多个区域中抽取梯度。

Fast R-CNN还在神经网络训练中增加了边界框回归。因此网络中有两个头部:分类头部和边界框回归头部。多任务目标是Fast R-CNN的一个显著特点,因为它不再需要单独训练网络来分类和定位。CNN的端到端学习减少了整体训练时间,并且其准确性比SPP网络高。

5. Faster R-CNN

            Faster RCNN有什么改进呢?它速度更快。Fast RCNN中最慢的部分是选择性搜索或边框(Edge boxes),Faster RCNN采用区域生成网络(RPN)这个非常小的卷积网络代替选择性搜索来生成感兴趣区域。

b4c7a4e930a3f66c7961b0305ca5b79d1f4d01ab

            为了应对长宽比和对象大小的改变,Faster R-CNN引入了anchor boxes。在每个位置,原始图像使用3种比例的anchor boxes128*128256*256512*512。同样,宽高比也有3种比例:1:12:11:2。因此,每个位置共有9anchor boxesRPN可在这9anchor boxes上预测其为背景或前景的概率。我们用边界框回归改进每个位置的anchor boxes。因此,RPN给出了不同大小的边界框及其对应类别的概率。像Fast-RCNN一样,可通过空间池化进一步传输不同大小的边界框。Faster-RCNNFast-RCNN快十倍,Fast-RCNN的数据集类似于VOC-2007Faster-RCNN一直都是最精确的对象检测算法之一的原因就在于此。下图是R-CNN各种版本之间的比较。

00ba56dce3b6de6ca5459f114faa3adb85d36f6f

基于回归的对象检测器

            上述方法都是通过建立一个传输途径(pipeline)产生第一个候选对象送至分类器或回归头部,将检测作为分类问题来处理。然而,有几种方法将检测作为回归问题,其中两个最流行的是YOLOSSD。让我们来看一下:

6.YOLO

YOLO将检测看做一个简单的回归问题,它需要一张输入图像并学习类别概率和边界框坐标。YOLO将每张图像划分为SS个网格,每个网格预测N个边界框和置信度。置信度反映了边界框的准确性及边界框是否真正包含了一个对象(不管是什么类)。针对训练中的每个类,YOLO预测了每个边界框的分类值。你可以结合两个类来计算每个类出现在预测框中的概率。

            因此,YOLO共预测了SSN个边界框。然而,大部分边界框的置信度较低,如果我们设置一个阀值(30%置信度),则可以删除大部分边界框。

7. Single Shot DetectorsSSD

SSD在运行速度和准确度间取得了较好的平衡。SSD在输入图像上仅仅运行一个卷积网络,并计算出一个特征映射。现在,我们在这个特征映射上运行一个3*3大小的卷积内核,来预测边界框和分类概率。SSD也使用了各种宽高比的anchor boxesFaster-RCNN比较相似),并且学习了偏移量而不是学习边界框。SSD在多个卷积层后预测了边界框,因此能够检测出各种比例的对象。

面对这么多算法,你应该选择哪一种?如果您对追求准确性,应该选择Faster-RCNN;如果您更注重计算,SSD则是一个更好的建议;如果您想要较高的运行速度,而不要求精确度太高,YOLO将会是一个很好的选择。

下图为SSDYOLOFaster-RCNN在检测不同大小对象时的性能对比。当对象为大尺寸时,SSD的精确度似乎和Faster-RCNN较为类似;当尺寸较小时,二者精确度的差距就会扩大。

8b052615a8cd6d8b3497edf9441a57ad9c2de495

            希望这篇文章能让您对当前最流行的对象检测算法有个直观的理解。


以上为译文。

本文由北邮@爱可可-爱生活 老师推荐,阿里云云栖社区组织翻译。

文章原标题《object-detection,译者:Mags,审校:袁虎。

文章为简译,更为详细的内容,请查看原文

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
JVM是如何判定对象为垃圾的(可达性分析算法)
被判定为垃圾的对象或者内存区域会被垃圾收集器回收。那么什么样的对象或者内存区域会被判定为垃圾呢?下面就要说起经常作为垃圾判定依据的可达性分析算法与引用计数法了。这两种算法,都是经常被用作垃圾判定的算法,下面说下这两种算法。
0 0
如何判断对象是否该被回收(引用计数法、可达性分析算法)
概述 垃圾收集器需要完那些内存需要回收? 什么时候回收? 如何回收?
0 0
jvm(7) -- 如何回收垃圾对象、回收算法策
jvm(7) -- 如何回收垃圾对象、回收算法策
0 0
STL算法——内建函数对象
STL算法——内建函数对象
0 0
【React】归纳篇(六)组件对象的生命周期 | 实例 | 虚拟DOM与DOM Diff算法
【React】归纳篇(六)组件对象的生命周期 | 实例 | 虚拟DOM与DOM Diff算法
0 0
算法将一个对象中的某一个key值变为true,其他值都为false
算法将一个对象中的某一个key值变为true,其他值都为false
0 0
JVM05_堆的概述、内存结构、复制算法、Minor|Major|Full GC、私有区域TLAB、对象分配、参数总结、逃逸分析、栈上分配、锁消除、标量替换(二)
⑤. 复制算法 ⑥. Minor GC | Major GC | Full GC ⑦. 针对不同年龄阶段的对象分配原则 ⑧. TLAB(Thread Local Allocation Buffer)
0 0
JVM05_堆的概述、内存结构、复制算法、Minor|Major|Full GC、私有区域TLAB、对象分配、参数总结、逃逸分析、栈上分配、锁消除、标量替换(一)
①. 堆的概述(共享|垃圾回收) ②. 堆的内存结构 ③. 堆空间大小的设置 -Xms -Xmx ④. 新生代与老年代参数设置 NewRation SurvivorRatio
0 0
+关注
【方向】
欢迎各位对内容方向及质量提需求,我们尽量满足,将国外优质的内容呈现给大家!
文章
问答
文章排行榜
最热
最新
相关电子书
更多
网易云音乐音视频算法处理的 Serverless 探索之路
立即下载
阿里技术参考图册-算法篇
立即下载
阿里千亿特征深度学习算法XNN实践
立即下载