python实现目标检测_由浅入深:教你如何构建一个行人目标检测模型(Python)
摘要: 零基础也能构建一个目标检测(对象检测)模型?小编教你使用Image AI库从头开始构建一个行人检测模型。
当我们看到一张图片时,我们的大脑会立即识别图片中所包含的物体。而对于机器来说,识别这些对象则需要耗费大量的时间和大量的训练数据。但是,随着深度学习和硬件技术的不断进步,目标检测在计算机视觉领域变得更加简单和直观。
如下图所示,该目标检测系统能够以令人难以置信的精确度来识别图像中的不同对象。
现在,目标检测技术在不同的行业中发展迅速。它能帮助无人驾驶汽车在交通中安全行驶、在拥挤的地方发现暴力行为、协助运动团队分析和建立相应的报告、制造业中保证部件质量等等。以上这些只不是是目标检测技术的冰山一角而已。
本文将介绍什么是目标检测,以及解决这一领域问题的一些方法。然后,我们将深入探究如何用Python构建一个目标检测系统。读完这篇文章,你将有能力独自应对不同对象的检测!
读本文之前,你需要有一定的深度学习基础知识,并且也解决过简单的图像处理问题。
什么是目标检测?
在开始构建模型之前,让我们先试着理解什么是目标检测。假设我们要为一个无人驾驶汽车构建一个行人检测系统,汽车已经捕获到了如下这张图片,请问,你会如何描述这张图片?
这张图片描述了这样一个场景:汽车在广场附近,前面有些人正在穿过马路,由于马路上的交通标志不是很清晰,因此,这个行人检测系统必须能够准确的识别行人在哪里行走,这样我们的汽车就可以避开这些行人了。
那么,汽车的行人检测系统需要做些什么呢?它需要在这些行人的周围创建一个边界框,这样一来,系统就能够准确的定位图像中的行人,然后再决定走哪条路来避开行人。
该系统进行目标检测的目标如下:
1.确定图像中所有的对象以及其所在的位置。
2.过滤出目标对象。
目标检测的方法
现在,我们已经知道要解决什么问题,那么,有什么方法可以进行目标检测呢?
方法一:分而治之
将图像简单的分为四个部分:
(1)左上角
(2)右上角
(3)左下角
(4)右下角
这是一个很不错的办法,但是我们想构建一个更为精确的系统,它需要识别整个对象(比如这个图中的某个人) 。
方法二:增加分割的数量
方法一的系统可以运作的很好,那么我们还需要做什么呢?增加我们输入到系统的块的数量,来改进这个系统,如下图所示:
这虽然是个很好的方法,但是也带来了不必要的麻烦。当然,这要比第一个方法要好一些,唯一的缺点就是有大量的边界框。因此,我们需要一个更为合理的办法来进行目标检测。
方法三:结构化划分
为了更有调理的创建一个目标检测系统,我们的改进如下:
第一步:将图像划分成10*10的网格,如下图所示:
第二步:定义每个块的中心
第三步:对于每个中心,取三种不同的块的组合,即不同长宽比例:
我们继续进行改进,看看还有什么方法能够使这个目标检测模型的性能更好。
方法四:提高效率
上述三种方法都是比较容易实现的,但是我们希望构建一个更有效率的系统。我在方法三的基础上进行优化,来提高模型的性能,我总共做了两件事:
1.增加网格的数量:将原来的1010网格的数量提高到2020。
2.从之前的3个快增加到更多不同长宽比的块:在同一个中心上取出9个块,即3个不同宽度的正方形块和6个不同长宽比的矩形块,如下图所示:
这种方法有利有弊,它能够使我们从更细的层次来检测对象,但是,另一方面,我们必须将大量的块输入到图像分类模型中。
因此,我们可以进行有选择性的选择一部分块,而不是全部作为模型的输入。比如,建立一个中间分类器,来检测图像中是否为背景,还是可能包含一个图像。这样就可以大大的减少了模型所需要检测的块。
我们还可以做另一个优化:减少对“同一个对象”的预测。我们再来看看方法三的输出:
正如上图显示的那样,边界框里预测的是同一个人,我们就可以选择其中任何一个进行预测。因此,为了进行目标检测,对于有“同一对象”的盒子,我们选择那个最容易检测到是人的边界框。
到目前为止,所有这些优化系统的预测结果都很不错。那么,是不是还缺少点什么?没错,就是深度学习!
方法五:利用深度学习进行特征选择,并构建一个端到端的方法
深度学习在目标检测领域中有着很大的应用潜力。那么,我们应该如何将深度学习应用到目标检测中呢?下面,我列出了几种方法:
1.将原始图像输入到神经网络中来降低维度,而不是原始图像的块。
2.使用神经网络来检测所选择的预测块。
3.使用强化深度学习算法,使预测结果尽可能的接近原始边界框,这将确保算法能够提供更加精确的边界框预测。
现在,我们并不会训练不同的神经网络来解决目标检测中的每一个问题,而是训练一个单一的深度神经网络模型来解决所有的问题。这样做的好处是,神经网络中每一个小组件有助于优化这个神经网络的其他组件,也有助于我们训练整个深度学习模型。
其输出结果是上述所有的方法中性能最好的一个方法,结果类似于下面这个图像,最后,我们将会学习如何使用Python来创建该模型。
教程:如何使用Image AI库构建一个目标检测模型
既然我们现在已经了解了什么是目标检测和解决问题的最佳方法,那么让我们来构建一个属于自己的目标检测系统吧!在这里,我们使用Image AI库来构建目标检测模型——支持最前沿的计算机视觉任务的机器学习Python库。
运行一个目标检测模型来获得预测结果,这是件相当简单的事。我们并不需要进行复杂的脚本安装,更不需要一个GPU来产生预测结果。我们将使用上述方法五和Image AI库进行目标检测,代码实现如下所述。
请注意:在构建目标检测模型之前,请确保您在本地计算机上安装了Python的Anaconda版本!
第一步:在Python 3.6中布置一个Anaconda环境。
第二步:激活环境,并安装必要的软件包。
第三步:安装Image AI库。
第四步:下载预先训练好的模型,该模型是基于目标检测器——Retina Net,下载Retina Net预训练模型。
第五步:将下载好的文件复制到工作文件夹中。
第六步:下载图片,并命名为image.png。
第七步:在 Jupyter Notebook 上运行以下代码:
这将会创建一个名为image new.png的图像文件,该图像中包含了边界框。
第八步:打印图片,代码及输出图像如下:
这样,我们就成功构建了一个行人目标检测模型。
结语
在这篇文章中,我们了解什么是目标检测,以及创建一个目标检测模型的思路。最后,我们使用Image AI库成功构建了一个行人检测模型。
本文作者:【方向】
本文为云栖社区原创内容,未经允许不得转载。
python实现目标检测_由浅入深:教你如何构建一个行人目标检测模型(Python)相关推荐
- python编程简单案例_[五组数据]详解一个简单的卡尔曼滤波器python编程实例
上半年毕设的时候接触了卡尔曼滤波器,用matlab实现了该过程,尝试在一个课后作业中用三维度矩阵来存储变量的方式,结构似乎更好理解,记录一下分析的过程. 假如有一块电阻,你不知道它的阻值是多少,你想 ...
- 教你如何构建一个简单的遗传算法模型实现对密码的预测
达尔文常曰:'适者生存',只有能更适应环境的生物,才能再残酷的大自然竞争中生存下去. 根据进化论的启发,人们想到了遗传算法,用来实现一些最优化的问题,例如求一个函数的极值,或者什么样的特征组合是比较理 ...
- python如何训练模型生产_手把手教你用Python构建你的第一个多标签图像分类模型(附案例)...
你正在处理图像数据吗?我们可以使用计算机视觉算法来做很多事情: 对象检测 图像分割 图像翻译 对象跟踪(实时),还有更多-- 这让我思考--如果一个图像中有多个对象类别,我们该怎么办?制作一个图像分类 ...
- 教你轻松构建一个可以泡妞的 app
教你轻松构建一个可以泡妞的 app 此篇文章是比较初级的,主要是指导性内容,不涉及技术.适合非移动端开发人员,公司拍板的老总,有创业梦想的人士.如果你想做个能泡妞的 app 但是不知如何着手,这边文章 ...
- python k线合成_手把手教你写一个Python版的K线合成函数
手把手教你写一个Python版的K线合成函数 在编写.使用策略时,经常会使用一些不常用的K线周期数据.然而交易所.数据源又没有提供这些周期的数据.只能通过使用已有周期的数据进行合成.合成算法已经有一个 ...
- python进行数据预测_手把手教你用Python进行时间序列分解和预测
原标题:手把手教你用Python进行时间序列分解和预测 作者:Mohit Sharma 翻译:数据派THU-王闯(Chuck) 预测是一件复杂的事情,在这方面做得好的企业会在同行业中出类拔萃.时间序列 ...
- python手势识别控制幻灯片_手把手教你如何实现Python手势识别与控制(含代码及动图)...
Python手势识别与控制 概述 本文中的手势识别与控制功能主要采用 OpenCV 库实现, OpenCV是一个基于BSD许可(开源)发行的跨平台计算机视觉库, 可以运行在Linux, Windows ...
- python时间序列动图_手把手教你用Python进行时间序列分解和预测
来源:数据派THU(ID:DatapiTHU) ▔ 作者:Mohit Sharma 翻译:王闯(Chuck) 校对:王可汗 预测是一件复杂的事情,在这方面做得好的企业会在同行业中出类拔萃.时间序列预测 ...
- python numpy安装教程_手把手教你搭建机器学习开发环境—Python与NumPy的超简安装教程...
手把手教你搭建机器学习开发环境Python语言是机器学习的基础,所以,想要入门机器学习,配置好Python的开发环境是第一步.本文就手把手的教你配置好基于Python的机器学习开发环境.超简单!第一步 ...
最新文章
- antlr.collections.AST.getLine()I问题的起因及解决
- Windows Phone 7 隔离存储空间“.NET研究”资源管理器
- Linux df指令
- 它的斗争“和loser对话”短篇故事
- python字符串排序_Python-如何对字符串列表进行排序?
- [数据库]---mysql数据库 使用binlog+canal或binlake进行数据库的复制
- 职称计算机提前考试试卷,职称计算机考试多项选择考试卷模拟考^试题
- javastring转long的方法_被JDK坑的没商量?来试试这些方法吧
- Java代码:调用外部接口(使用Json格式传递参数)的方法
- Atitit nodejs js 获取图像分辨率 尺寸 大小 宽度 高度
- 关于Lambda表达式的简单语法理解,有参无参,有无返回值的格式的理解,仅限编程新手
- Centos Python安装graphviz和pydotplus
- C# IntPtr类型转换
- Python基础项目:超市购物管理系统
- 油烟浓度在线监测仪在浙江省某市餐饮油烟监测治理项目中的应用
- Nature 期刊介绍
- 如何注册属于自己的微信订阅号(公众号)
- 苹果开放降级_iPhone 突然开放降级...
- 3ds运行linux,3ds自制操作软件
- wow(2) : UI插件_EUI[2]_正式服配置分享
热门文章
- web前端之框架(frameset)
- python中包含的标准数据类型_Python数据类型基础
- Python编程,日志聚合工具,开源经济学,Prometheus监控,Kubernetes等
- blender使用_用Blender教青少年3D动画
- 贪心算法,递归算法,动态规划算法比较与总结
- Git笔记(2) 入门认知
- 中学教师计算机技术培训资料,教师信息技术能力培养
- koa2 mysql 事务_mysqljs在koa2中的正确姿势
- 云服务器如何实现装虚拟机_如何在服务器上安装虚拟机呢?服务器虚拟机安装教程...
- ansys用什么cpu_ansys参数化建模教程专栏——以例子吹爆APDL的省时省力(一)。...