由浅入深:教你如何构建一个行人目标检测模型(Python)

摘要: 零基础也能构建一个目标检测(对象检测)模型?小编教你使用Image AI库从头开始构建一个行人检测模型。

当咱们看到一张图片时,咱们的大脑会当即识别图片中所包含的物体。而对于机器来讲,识别这些对象则须要耗费大量的时间和大量的训练数据。可是,随着深度学习和硬件技术的不断进步,目标检测在计算机视觉领域变得更加简单和直观。算法

以下图所示,该目标检测系统可以以使人难以置信的精确度来识别图像中的不一样对象。安全

clipboard.png

如今,目标检测技术在不一样的行业中发展迅速。它能帮助无人驾驶汽车在交通中安全行驶、在拥挤的地方发现暴力行为、协助运动团队分析和创建相应的报告、制造业中保证部件质量等等。以上这些只不是是目标检测技术的冰山一角而已。网络

本文将介绍什么是目标检测,以及解决这一领域问题的一些方法。而后,咱们将深刻探究如何用Python构建一个目标检测系统。读完这篇文章,你将有能力独自应对不一样对象的检测!机器学习

读本文以前,你须要有必定的深度学习基础知识,而且也解决过简单的图像处理问题。性能

什么是目标检测?

在开始构建模型以前,让咱们先试着理解什么是目标检测。假设咱们要为一个无人驾驶汽车构建一个行人检测系统,汽车已经捕获到了以下这张图片,请问,你会如何描述这张图片?学习

clipboard.png

这张图片描述了这样一个场景:汽车在广场附近,前面有些人正在穿过马路,因为马路上的交通标志不是很清晰,所以,这个行人检测系统必须可以准确的识别行人在哪里行走,这样咱们的汽车就能够避开这些行人了。优化

那么,汽车的行人检测系统须要作些什么呢?它须要在这些行人的周围建立一个边界框,这样一来,系统就可以准确的定位图像中的行人,而后再决定走哪条路来避开行人。spa

clipboard.png

该系统进行目标检测的目标以下:3d

1.肯定图像中全部的对象以及其所在的位置。对象

2.过滤出目标对象。

目标检测的方法

如今,咱们已经知道要解决什么问题,那么,有什么方法能够进行目标检测呢?

方法一:分而治之

将图像简单的分为四个部分:

(1)左上角

clipboard.png

(2)右上角

clipboard.png

(3)左下角

clipboard.png

(4)右下角

clipboard.png

这是一个很不错的办法,可是咱们想构建一个更为精确的系统,它须要识别整个对象(好比这个图中的某我的) 。

方法二:增长分割的数量

方法一的系统能够运做的很好,那么咱们还须要作什么呢?增长咱们输入到系统的块的数量,来改进这个系统,以下图所示:

clipboard.png

这虽然是个很好的方法,可是也带来了没必要要的麻烦。固然,这要比第一个方法要好一些,惟一的缺点就是有大量的边界框。所以,咱们须要一个更为合理的办法来进行目标检测。

方法三:结构化划分

为了更有调理的建立一个目标检测系统,咱们的改进以下:

第一步:将图像划分红10*10的网格,以下图所示:

clipboard.png

第二步:定义每一个块的中心

第三步:对于每一个中心,取三种不一样的块的组合,即不一样长宽比例:

clipboard.png

咱们继续进行改进,看看还有什么方法可以使这个目标检测模型的性能更好。

方法四:提升效率

上述三种方法都是比较容易实现的,可是咱们但愿构建一个更有效率的系统。我在方法三的基础上进行优化,来提升模型的性能,我总共作了两件事:

1.增长网格的数量:将原来的1010网格的数量提升到2020。

clipboard.png

2.从以前的3个快增长到更多不一样长宽比的块:在同一个中心上取出9个块,即3个不一样宽度的正方形块和6个不一样长宽比的矩形块,以下图所示:

clipboard.png

这种方法有利有弊,它可以使咱们从更细的层次来检测对象,可是,另外一方面,咱们必须将大量的块输入到图像分类模型中。

所以,咱们能够进行有选择性的选择一部分块,而不是所有做为模型的输入。好比,创建一个中间分类器,来检测图像中是否为背景,仍是可能包含一个图像。这样就能够大大的减小了模型所须要检测的块。

咱们还能够作另外一个优化:减小对“同一个对象”的预测。咱们再来看看方法三的输出:

clipboard.png

正如上图显示的那样,边界框里预测的是同一我的,咱们就能够选择其中任何一个进行预测。所以,为了进行目标检测,对于有“同一对象”的盒子,咱们选择那个最容易检测到是人的边界框。

到目前为止,全部这些优化系统的预测结果都很不错。那么,是否是还缺乏点什么?没错,就是深度学习!

方法五:利用深度学习进行特征选择,并构建一个端到端的方法

深度学习在目标检测领域中有着很大的应用潜力。那么,咱们应该如何将深度学习应用到目标检测中呢?下面,我列出了几种方法:

1.将原始图像输入到神经网络中来下降维度,而不是原始图像的块。

2.使用神经网络来检测所选择的预测块。

3.使用强化深度学习算法,使预测结果尽量的接近原始边界框,这将确保算法可以提供更加精确的边界框预测。

如今,咱们并不会训练不一样的神经网络来解决目标检测中的每个问题,而是训练一个单一的深度神经网络模型来解决全部的问题。这样作的好处是,神经网络中每个小组件有助于优化这个神经网络的其余组件,也有助于咱们训练整个深度学习模型。

其输出结果是上述全部的方法中性能最好的一个方法,结果相似于下面这个图像,最后,咱们将会学习如何使用Python来建立该模型。

clipboard.png

教程:如何使用Image AI库构建一个目标检测模型

既然咱们如今已经了解了什么是目标检测和解决问题的最佳方法,那么让咱们来构建一个属于本身的目标检测系统吧!在这里,咱们使用Image AI库来构建目标检测模型——支持最前沿的计算机视觉任务的机器学习Python库。

运行一个目标检测模型来得到预测结果,这是件至关简单的事。咱们并不须要进行复杂的脚本安装,更不须要一个GPU来产生预测结果。咱们将使用上述方法五和Image AI库进行目标检测,代码实现以下所述。

请注意:在构建目标检测模型以前,请确保您在本地计算机上安装了Python的Anaconda版本!

第一步:在Python 3.6中布置一个Anaconda环境。

clipboard.png

第二步:激活环境,并安装必要的软件包。

clipboard.png

第三步:安装Image AI库。

clipboard.png

第四步:下载预先训练好的模型,该模型是基于目标检测器——Retina Net,下载Retina Net预训练模型。

第五步:将下载好的文件复制到工做文件夹中。

第六步:下载图片,并命名为image.png。

第七步:在 Jupyter Notebook 上运行如下代码:

clipboard.png

这将会建立一个名为image new.png的图像文件,该图像中包含了边界框。

第八步:打印图片,代码及输出图像以下:

clipboard.png

clipboard.png

这样,咱们就成功构建了一个行人目标检测模型。

结语

在这篇文章中,咱们了解什么是目标检测,以及建立一个目标检测模型的思路。最后,咱们使用Image AI库成功构建了一个行人检测模型。

本文做者:【方向】

阅读原文

本文为云栖社区原创内容,未经容许不得转载。

相关文章
相关标签/搜索