A Step-by-Step Introduction to the Basic Object Detection Algorithms (Part 1)翻译

原文链接:https://www.analyticsvidhya.com/blog/2018/10/a-step-by-step-introduction-to-the-basic-object-detection-algorithms-part-1/?utm_source=blog&utm_medium=7-innovative-machine-learning-github-projects-in-python

介绍
你花了多少时间在一间凌乱的房子里寻找丢失的房间钥匙?这发生在我们很多人身上,到目前为止,这仍然是一个很糟糕的经历。但是如果一个简单的计算机算法能在几毫秒内找到你的钥匙呢?

这就是目标检测算法的威力。虽然这只是一个简单的例子,但目标检测的应用跨越了多个不同的行业,从24小时监控到智能城市中的实时车辆检测。简而言之,这些都是强大的深度学习算法。

在本文中,我们将更深入地研究可用于目标检测的各种算法。我们将从属于RCNN家族的算法开始,即RCNN、Fast RCNN和Faster RCNN。在本系列的下一篇文章中,我们将介绍更高级的算法,如YOLO、SSD等。

如果你刚刚接触CNNs,你可以参加我们全面介绍CNNs的免费课程:Convolutional Neural Networks (CNN) from Scratch:https://courses.analyticsvidhya.com/courses/convolutional-neural-networks-cnn-from-scratch?utm_source=blog&utm_medium=a-step-by-step-introduction-to-the-basic-object-detection-algorithms-part-1

我鼓励你阅读上一篇关于目标检测的文章(原文链接https://www.analyticsvidhya.com/blog/2018/06/understanding-building-object-detection-model-python/,翻译链接:https://blog.csdn.net/Stella_CYT/article/details/114277218),在这篇文章中,我们将介绍这项出色技术的基础知识,并向您展示使用ImageAI库的Python实现。

本系列的第2部分和第3部分也已发布。你可以在此处访问:
A Practical Implementation of the Faster R-CNN Algorithm for Object Detection (Part 2)
原文链接https://www.analyticsvidhya.com/blog/2018/11/implementation-faster-r-cnn-python-object-detection/?utm_source=blog&utm_medium=a-step-by-step-introduction-to-the-basic-object-detection-algorithms-part-1
翻译链接https://blog.csdn.net/Stella_CYT/article/details/114359219

A Practical Guide to Object Detection using the Popular YOLO Framework – Part III (with Python codes)
原文链接:https://www.analyticsvidhya.com/blog/2018/12/practical-guide-object-detection-yolo-framewor-python/?utm_source=blog&utm_medium=a-step-by-step-introduction-to-the-basic-object-detection-algorithms-part-1
翻译链接:https://blog.csdn.net/Stella_CYT/article/details/114383511

让我们开始吧!

目录
1.解决目标检测任务的简单方法(使用深度学习)

2.理解RCNN
(1)RCNN的直观理解
(2)RCNN的问题

3.理解快速RCNN
(1)快速RCNN的直观理解
(2)快速RCNN的问题

4.理解更快RCNN
(1)更快RCNN的直观理解
(2)更快RCNN的问题

5.以上算法总结

 
 
1.解决目标检测任务的简单方法(使用深度学习)

下图是说明目标检测算法工作原理的一个典型示例。图像中的每一个物体,从一个人到一只风筝,都被精确地定位和识别。

让我们从最简单的深度学习方法开始,这是一种广泛使用于检测图像中对象的方法——卷积神经网络或CNN。如果你对CNNs的理解有点生疏,我建议你先阅读这篇文章https://www.analyticsvidhya.com/blog/2017/06/architecture-of-convolutional-neural-networks-simplified-demystified/(翻译链接https://blog.csdn.net/Stella_CYT/article/details/114299621)。

但是我也会简要地总结CNN的内部工作机理。请看下图:
我们将图像送入网络,然后图像通过各种卷积层和池化层。最后,我们得到输出,输出为一个物体的种类。很简单,不是吗?

对于每个输入图像,我们得到一个对应的类作为输出。我们能用这种技术来检测图像中的各种物体吗?是的,我们可以!让我们看看如何使用CNN解决一般的目标检测问题。

1.首先,我们选择一幅图像作为输入:
2.接着,我们把图像分为几个区域:
3.我们把每一个区域看作一个单独的图像
4.把所有区域输入CNN,并把他们分入不同的类
5.一旦我们已经把每个区域划分到对应的类,我们可以把这些区域结合起来,得到原图以及探测到的对象:
使用这种方法的问题是图像中的对象可能具有不同的长宽比和空间位置。例如,在某些情况下,对象可能会覆盖图像的大部分区域,而在其他情况下,对象可能只覆盖图像的一小部分。对象的形状也可能不同(在实际用例中经常发生)。

由于这些因素,我们将需要大量的区域,从而导致需要大量的计算时间。为了解决这一问题,减少区域的数目,我们可以使用基于区域的CNN,CNN通过一种方法来选择区域。让我们了解一下这个基于区域的CNN能为我们做些什么。

 

2.理解RCNN
2.1 RCNN的直观理解
RCNN算法不需要处理大量的区域,而是在图像中提取一组框,并检查这些框中是否包含任何对象。RCNN使用选择性搜索从图像中提取这些框(这些框称为区域)。

让我们首先了解什么是选择性搜索,以及它如何识别不同的区域。一个对象基本上由四个方面构成:不同的比例、颜色、纹理和轮廓。选择性搜索识别图像中的这些方面,并在此基础上提取不同的区域。以下是选择性搜索工作原理的简要概述:

首先选择一幅图像作为输入:
然后,它生成初始子分割块,这样我们就可以从这幅图像中得到多个区域:
然后,该技术把相似区域结合成更大的区域(基于颜色相似性、纹理相似性、大小相似性和形状兼容性):
最后,这些区域生成最终的目标位置(感兴趣区域)。

下面简要总结了RCNN中检测对象的步骤:

1.我们首先采用预先训练好的卷积神经网络。

2.然后,对该模型进行再训练。我们根据需要检测的类的数量来训练网络的最后一层。

3.第三步是得到每幅图像的感兴趣区域。然后,我们重塑所有这些地区,使他们能够匹配CNN的输入大小。

4.得到区域后,训练SVM对目标和背景进行分类。对于每一类,我们训练一个二值支持向量机。

5.最后,我们训练一个线性回归模型来为图像中的每一个被识别对象生成更紧密的边界框。

你可以通过一个直观的示例更好地了解上述步骤。所以让我们举一个例子!

首先,选取一幅图像作为输入:
接着,我们用某种方法(比如选择性搜索)得到感兴趣区域:

所有区域都统一尺寸,输入卷积网络:

CNN从每个区域中提取特征,SVM把这些区域分入不同的类:

最后边界框回归被用来预测每一个区域的边界框:
这就是,RCNN帮助我们检测目标的过程。

2.2 RCNN的问题
到目前为止,我们已经看到了RCNN如何有助于目标检测。但这种技术有其自身的局限性。由于以下步骤,训练RCNN模型既昂贵又缓慢:

1.基于选择性搜索,每幅图像要提取2000个区域。

2.利用CNN对每个图像区域进行特征提取。假设我们有N张图片,那么CNN的特征数量将是N*2000

3.使用RCNN进行目标检测的整个过程有三个模型:
用于特征提取的CNN
用于目标识别的线性SVM分类器
用于收紧边界框的回归模型。

所有这些过程结合起来使得RCNN非常慢。对每幅新图像进行预测大约需要40-50秒,这就使得模型非常繁琐,而且在面对庞大的数据集时几乎不可能构建。

好消息是,我们有另一种目标检测技术,它打破了我们在RCNN中看到的大多数限制。

 
3.理解快速RCNN
3.1快速RCNN的直观理解
我们还能做些什么来减少RCNN算法通常需要的计算时间?我们不需要在每张图像上运行CNN 2000次,只需在每张图像上运行一次,就可以得到所有感兴趣的区域(包含某些对象的区域)。

RCNN的作者Ross Girshick提出了这样一个想法:每幅图像只运行一次CNN,然后找到一种方法在2000个区域中共享计算结果。在快速RCNN中,我们输入图像给CNN,CNN生成卷积特征映射。利用这些映射,提取出特定的区域。然后,我们使用一个RoI池化层将所有区域整合为一个固定的大小,这样就可以将其输入到一个全连接的网络中。

让我们将其分解为几个步骤来简化概念:

1.与前两种技术一样,我们将图像作为输入。

2.该图像被传递到ConvNet,ConvNet依次生成感兴趣的区域。

3.一个RoI池化层应用于所有这些区域,以根据ConvNet的输入重塑它们。然后,每个区域被传递到一个全连接的网络。

4.在全连接的网络上使用softmax层来输出类。除了softmax层之外,线性回归层还用于并行输出预测类的边界框坐标。

因此,Fast-RCNN没有使用三种不同的模型(如RCNN),而是使用一个模型从区域中提取特征,将它们划分为不同的类,并同时返回已识别类的边界框。

为了进一步分解这个问题,我将对每一步进行可视化,从更实际的角度来解释。

选择一幅图像作为输入:
图像输入一个卷积网络,相应地返回感兴趣区域:
对已经提取出的感兴趣区域使用Rol池化层,确保每个区域都是相同尺寸:
最后这些区域被传递到一个全连接网络,进行分类,同时用softmax和线性回归返回边界框:


这就是快速RCNN如何解决RCNN的两个主要问题,即每个图像传递一个而不是2000个区域到ConvNet,以及使用一个而不是三个不同的模型来提取特征、分类和生成边界框。

3.2快速RCNN的问题
但即使是快速RCNN也有一些问题。它还使用选择性搜索来找到感兴趣的区域,这是一个缓慢而耗时的过程。每幅图像大约需要2秒钟来检测目标,这比RCNN好得多。但是当我们考虑到现实生活中的大型数据集时,即使是一个快速RCNN看起来也不再那么快了。

但还有另一种目标检测算法胜过快速RCNN。你不会对它的名字感到惊讶。

 

4.更快RCNN
4.1 更快RCNN的直观理解
更快RCNN是快速RCNN的改进版本。它们之间的主要区别在于快速RCNN使用选择性搜索来生成感兴趣的区域,而快速RCNN使用“Region Proposal Network”,即RPN。RPN将图像特征映射作为输入,生成一组对象区域,每个都有一个对象得分作为输出。

在更快RCNN方法中通常遵循以下步骤:

1.我们将一个图像作为输入并传递给ConvNet,ConvNet返回该图像的特征映射。

2.在这些特征图上应用了RPN。这将返回区域及其对象得分。

3.在这些区域上应用RoI池化层,将所有区域降低到相同的大小。

4.最后,所有区域被传递到一个全连接的层,接下来有一个softmax层和一个线性回归层,以分类和输出对象的边界框。

让我简单解释一下RPN是如何工作的:

首先,更快RCNN从CNN获取特征图并将其传递到RPN。RPN在这些特征图上使用一个滑动窗口,在每个窗口上,它生成k个不同形状和大小的框:
固定大小的边界框,放置在整个图像中,具有不同的形状和大小。对于每个框,RPN预测两件事:

第一个是框内是对象的概率(它不考虑对象属于哪个类)

第二个是边界框回归器,用于调整框以更好地适应对象

我们现在有不同形状和大小的边界框,它们被传递到RoI池化层。现在,在RPN步骤之后,可能存在没有分配类的框。我们可以对每个框进行裁剪,使每个框包含一个对象。这就是RoI池化层所做的。它为每个框提取固定大小的特征映射:

然后这些特征映射被传递到一个全连接的层,该层有一个softmax和一个线性回归层。最后对目标进行分类并预测目标的边界框。

4.2更快RCNN的问题
到目前为止,我们讨论的所有目标检测算法都使用区域来识别目标。该网络不会一次性查看完整的图像,而是按顺序关注图像的一部分。这造成了两个复杂情况:

该算法需要多次通过一幅图像来提取所有的目标。

由于由不同的系统一个接一个地工作,因此后续系统的性能取决于之前系统的性能。

 

5.以上算法总结

总结
目标检测是一个精彩的领域,在商业领域和研究领域都有着巨大的吸引力。由于现代硬件和计算资源的进步,这一领域突破迅速。

本文只是我们目标检测旅程的开始。在本系列的下一篇文章(第2部分和第3部分)中,我们将遇到像YOLO和RetinaNet这样的现代目标检测算法。所以请继续关注!

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
《算法导论》Hardcover版的引言(Introduction to Algorithms - Hardcover Edition)是一本经典的计算机科学教材。该版本不仅在内容上与平装版相同,还具有精美的硬皮封面,能够更好地保护书籍,并增添一份高质感和专业感。 首先,这本书是由Thomas H. Cormen等四位作者共同编写。他们是计算机科学领域的权威人物,在算法研究和教育方面具有丰富的经验。这本书的目的是为计算机科学专业的学生和从业人员提供系统而全面的算法知识,帮助他们深入理解和应用算法。 《算法导论》Hardcover版首先介绍了算法设计和分析的基础知识,包括分治法、贪婪算法、动态规划和回溯法等。接着,书中详细阐述了各种经典算法,如排序、图算法、字符串匹配、高级数据结构等。此外,书中还介绍了算法的优化技巧和应用领域,例如算法的并行化和近似算法。 与平装版相比,Hardcover版的封面更加美观,书页由高品质纸张制成,更加耐用。这使得读者在长时间研究和使用这本书时,能够更好地保存它的完整性和精美外观。此外,Hardcover版也更加适合作为礼品或收藏品,体现了读者对该书的重视和对算法学习的热爱。 总之,《算法导论》Hardcover版是一本内容丰富、思想深刻的算法教材,通过系统化的介绍和实例,帮助读者深入理解和应用各种算法。同时,Hardcover版的精美外观和耐用性也增强了读者在日常使用和收藏方面的满意度。无论是学习算法的新手还是资深专家,都能从这本书中获得极大的收益。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值