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

简介: 本文将向您介绍对象检测及各种算法,如: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,审校:袁虎。

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

相关文章
|
1月前
|
机器学习/深度学习 算法 数据安全/隐私保护
基于MSER和HOG特征提取的SVM交通标志检测和识别算法matlab仿真
### 算法简介 1. **算法运行效果图预览**:展示算法效果,完整程序运行后无水印。 2. **算法运行软件版本**:Matlab 2017b。 3. **部分核心程序**:完整版代码包含中文注释及操作步骤视频。 4. **算法理论概述**: - **MSER**:用于检测显著区域,提取图像中稳定区域,适用于光照变化下的交通标志检测。 - **HOG特征提取**:通过计算图像小区域的梯度直方图捕捉局部纹理信息,用于物体检测。 - **SVM**:寻找最大化间隔的超平面以分类样本。 整个算法流程图见下图。
|
1月前
|
缓存 算法 Java
JVM知识体系学习六:JVM垃圾是什么、GC常用垃圾清除算法、堆内存逻辑分区、栈上分配、对象何时进入老年代、有关老年代新生代的两个问题、常见的垃圾回收器、CMS
这篇文章详细介绍了Java虚拟机(JVM)中的垃圾回收机制,包括垃圾的定义、垃圾回收算法、堆内存的逻辑分区、对象的内存分配和回收过程,以及不同垃圾回收器的工作原理和参数设置。
62 4
JVM知识体系学习六:JVM垃圾是什么、GC常用垃圾清除算法、堆内存逻辑分区、栈上分配、对象何时进入老年代、有关老年代新生代的两个问题、常见的垃圾回收器、CMS
|
15天前
|
机器学习/深度学习 算法 数据安全/隐私保护
基于GA-PSO-SVM算法的混沌背景下微弱信号检测matlab仿真
本项目基于MATLAB 2022a,展示了SVM、PSO、GA-PSO-SVM在混沌背景下微弱信号检测中的性能对比。核心程序包含详细中文注释和操作步骤视频。GA-PSO-SVM算法通过遗传算法和粒子群优化算法优化SVM参数,提高信号检测的准确性和鲁棒性,尤其适用于低信噪比环境。
|
1月前
|
算法 安全
分别使用OVP-UVP和OFP-UFP算法以及AFD检测算法实现反孤岛检测simulink建模与仿真
本课题通过Simulink建模与仿真,实现OVP-UVP、OFP-UFP算法及AFD检测算法的反孤岛检测。OVP-UVP基于电压幅值变化,OFP-UFP基于频率变化,而AFD则通过注入频率偏移信号来检测孤岛效应,确保电力系统安全稳定运行。系统使用MATLAB 2013b进行建模与仿真验证。
|
21天前
|
存储 JSON 算法
TDengine 检测数据最佳压缩算法工具,助你一键找出最优压缩方案
在使用 TDengine 存储时序数据时,压缩数据以节省磁盘空间是至关重要的。TDengine 支持用户根据自身数据特性灵活指定压缩算法,从而实现更高效的存储。然而,如何选择最合适的压缩算法,才能最大限度地降低存储开销?为了解决这一问题,我们特别推出了一个实用工具,帮助用户快速判断并选择最适合其数据特征的压缩算法。
28 0
|
1月前
|
算法 计算机视觉 Python
圆形检测算法-基于颜色和形状(opencv)
该代码实现了一个圆检测算法,用于识别视频中的红色、白色和蓝色圆形。通过将图像从RGB转换为HSV颜色空间,并设置对应颜色的阈值范围,提取出目标颜色的区域。接着对这些区域进行轮廓提取和面积筛选,使用霍夫圆变换检测圆形,并在原图上绘制检测结果。
64 0
|
3月前
|
机器学习/深度学习 监控 算法
目标检测算法技术
8月更文挑战第11天
|
3月前
|
机器学习/深度学习 监控 算法
目标检测算法
8月更文挑战第5天
|
3月前
|
机器学习/深度学习 监控 算法
目标检测算法
8月更文挑战第8天
|
4月前
|
存储 监控 算法
(六)JVM成神路之GC基础篇:对象存活判定算法、GC算法、STW、GC种类详解
经过前面五个章节的分析后,对于JVM的大部分子系统都已阐述完毕,在本文中则开始对JVM的GC子系统进行全面阐述,GC机制也是JVM的重中之重,调优、监控、面试都逃不开的JVM话题。
126 8