0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

执行高性能目标检测的编码教程

8g3K_AI_Thinker 来源:未知 作者:胡薇 2018-06-22 10:07 次阅读

作为人工智能的一个重要领域,计算机视觉是一门可以识别并理解图像和场景的计算机及软件系统科学。该领域主要包括图像识别,目标检测,图像生成,图像超分辨率等多个方向。由于现实中存在众多的实际案例,目标检测应该是计算机视觉中最令人深刻的一个方向。在本教程中,我们将简要介绍包括当前目标检测的概念,软件开发人员所面临的挑战,相应的解决方案以及执行高性能目标检测的编码教程等内容。

目标检测是指计算机和软件系统在图像/场景中定位并识别出每个目标的能力,已广泛应用于人脸检测,车辆检测,行人计数,网络图像,安全系统和无人驾驶汽车等领域。当前有很多目标检测方法能够在实践中应用。像其他任何计算机技术一样,各种创造性和效果惊人的目标检测方法都是来自计算机程序员和软件开发人员的努力。

在应用程序和系统中使用目标检测方法,并基于这些方法构建新的应用并不是一项直接的任务。在早期,目标检测的实现包括一些经典算法的使用,如在受欢迎的计算机视觉库OpenCV中支持的算法。然而,这些经典算法无法在不同条件下达到同等优秀的工作性能。

2012 年之后,深度学习技术的突破性及其快速应用,带来了诸如 R-CNN,Fast-RCNN,Faster-RCNN,RetinaNet等诸多高精度目标检测方法,以及以 SSD和YOLO为代表的等快而准的目标检测算法。想要使用这些基于深度学习的目标检测方法,我们需要对数学知识及深度学习框架的深刻理解。数百万的专业计算机程序员和软件开发人员想要集成和创建用于目标检测的新产品。但是,理解并在实际中使用目标检测产品需要额外且复杂的方法,这种技术超出了一般程序员的能力范围。

在几个月前,我的团队就意识到了这个问题,这就是为什么我和John Olafenwa构建ImageAI的原因。这是一个基于 Python程序库,它允许程序员和软件开发人员轻松地将最先进的计算机视觉技术集成到他们现有的或新的应用程序中。

想要使用ImageAI实现目标检测任务,你需要做的就是:

1.在计算机系统上安装Python

2.安装ImageAI及其依赖库

3.下目标象检测的模型文件

4.运行示例代码(只有10行)

现在让我们开始吧~

1)从Python官网上下载并安装 Python 3:

https://python.org

2)通过 pip 安装以下依赖库:

Ⅰ. Tensorflow:pipinstall tensorflow

II. NumPy:pip install numpy

III. SciPy:pipinstall scipy

IV. OpenCV:pipinstall opencv-python

Ⅴ. Pillow:pip install pillow

Ⅵ. Matplotlib:pipinstall matplotlib

Ⅶ. H5py:pipinstall h5py

Ⅷ. Keras:pip install keras

Ⅸ. ImageAI:pipinstall

https://github.com/OlafenwaMoses/ImageAI/releases

/download/2.0.1/imageai-2.0.1-py3-none-any.whl

3)通过此链接下载用于目标检测的RetinaNet模型文件。

https://github.com/OlafenwaMoses/ImageAI/releases/download/1.0/resnet50_coco_best_v2.0.1.h5

现在,你已经安装了需要的依赖库。接下来,你就可以编写第一段目标检测代码了。创建一个Python文件并为其命名(例如,FirstDetection.py),然后写入下面的 10 行代码,并将RetinaNet模型文件和需要检测的图像复制到包含这个 python 文件的文件夹中。

FirstDetection.py

fromimageai.DetectionimportObjectDetectionimportosexecution_path=os.getcwd()detector=ObjectDetection()detector.setModelTypeAsRetinaNet()detector.setModelPath(os.path.join(execution_path,"resnet50_coco_best_v2.0.1.h5"))detector.loadModel()detections=detector.detectObjectsFromImage(input_image=os.path.join(execution_path,"image.jpg"),output_image_path=os.path.join(execution_path,"imagenew.jpg"))foreachObjectindetections:print(eachObject["name"]+":"+eachObject["percentage_probability"])

然后运行代码,稍等片刻结果将显示在控制台中。一旦控制台打印出结果后,转到FirstDetection.py所在的文件夹,你将找到所保存的新图像。如下是两个原图像样本,检测后将保存新图像。

Before Detection:

Image Credit: alzheimers.co.uk

Image Credit: Wikicommons

After Detection:

控制台打印的检测结果:

person: 55.8402955532074

person: 53.21805477142334

person: 69.25139427185059

person: 76.41745209693909

bicycle: 80.30363917350769

person: 83.58567953109741

person: 89.06581997871399

truck: 63.10953497886658

person: 69.82483863830566

person: 77.11606621742249

bus: 98.00949096679688

truck: 84.02870297431946

car: 71.98476791381836

控制台打印的检测结果:

person: 71.10445499420166

person: 59.28672552108765

person: 59.61582064628601

person: 75.86382627487183

motorcycle: 60.1050078868866

bus: 99.39600229263306

car: 74.05484318733215

person: 67.31776595115662

person: 63.53200078010559

person: 78.2265305519104

person: 62.880998849868774

person: 72.93365597724915

person: 60.01397967338562

person: 81.05944991111755

motorcycle: 50.591760873794556

motorcycle: 58.719027042388916

person: 71.69321775436401

bicycle: 91.86570048332214

motorcycle: 85.38855314254761

现在,我们来解释下这 10 行代码是如何工作的。

fromimageai.DetectionimportObjectDetectionimportosexecution_path=os.getcwd()

在上面 3 行代码种,第一行我们导入了ImageAI目标检测类,第二行导入了 python 的 os 类,第三行定义了一个变量用来保存我们的python文件,其中 RetinaNet模型文件和图像都将存放在该文件夹路径下。

detector=ObjectDetection()detector.setModelTypeAsRetinaNet()detector.setModelPath(os.path.join(execution_path,"resnet50_coco_best_v2.0.1.h5"))detector.loadModel()detections=detector.detectObjectsFromImage(input_image=os.path.join(execution_path,"image.jpg"),output_image_path=os.path.join(execution_path,"imagenew.jpg"))

在上面的 5 行代码中,第一行定义了目标检测类,第二行将模型的类型设置为RetinaNet,并在第三行将模型路径设置为RetinaNet模型的路径,第四行将模型加载到的目标检测类,第五行调用目标检测函数,解析输入的和输出的图像路径。

foreachObjectindetections:print(eachObject["name"]+":"+eachObject["percentage_probability"])

在上面的2行代码中,第一行迭代执行 detector.detectObjectsFromImage函数并返回所有的结果,然后在第二行打印出所检测到的每个目标的名称及其概率值。

ImageAI支持许多强大的目标检测过程。其中之一就是能够提取图像中检测到的每个目标。如下所示,通过简单地解析将extra_detected_objects = True变为 detectObjectsFromImage函数,目标检测类将为图像目标创建一个新的文件夹,提取每张图像,并将每张图像保存到新创建的文件夹中,同时返回一个包含每张图像路径的额外数组。

detections,extracted_images=detector.detectObjectsFromImage(input_image=os.path.join(execution_path,"image.jpg"),output_image_path=os.path.join(execution_path,"imagenew.jpg"),extract_detected_objects=True)

下面我们来看看在第一张图像上取得的目标检测结果:

所有包含行人的图像都能被提取出来了,我没有保存所有的目标,因为它们会占用太多不必要的空间。

ImageAI还提供了更多功能,可用于定制和生产功能部署所需的目标检测任务。一些支持的功能如下:

Adjusting Minimum Probability:默认情况下,检测概率低于 50% 的对象将不会显示或报告。你可以增加高确定性目标的检测概率,或者在需要检测所有可能对象的情况下降低该概率值。

Custom Objects Detection:使用所提供的CustomObject类,如此检测类函数将打印出一个或几个唯一目标的检测结果。

Detection Speed:通过将检测速度设置为“fast”、“faster”和“fastest”,以便缩短目标检测所需的时间。

Input Types:你可以指定并解析图像的文件路径,Numpy数组或图像文件流作为输入图像

Output Types:你可以指定detectObjectsFromImage函数所返回的图像格式,可以是以文件或Numpy数组的形式。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 人工智能
    +关注

    关注

    1791

    文章

    46896

    浏览量

    237664
  • 计算机视觉
    +关注

    关注

    8

    文章

    1696

    浏览量

    45930

原文标题:10行代码实现目标检测,请收下这份教程

文章出处:【微信号:AI_Thinker,微信公众号:人工智能头条】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    高性能实用工具  我爱发明  生活好妙招  #硬声创作季

    DIY高性能
    Hello,World!
    发布于 :2022年09月26日 20:52:22

    #硬声创作季 家里的音箱坏了,便制作了一个高性能的移动音箱

    音箱DIY高性能
    Mr_haohao
    发布于 :2022年10月20日 23:03:23

    PowerPC小目标检测算法怎么实现?

    检测系统在低功耗、轻小型化等方面提出了更高的要求。因此,完成小目标检测任务不仅需要寻求合理的小目标检测算法,在实现时还需要考虑处理
    发表于 08-09 07:07

    目标检测和图像语义分割领域性能评价指标

    目标检测和图像语义分割领域的性能评价指标
    发表于 05-13 09:57

    【HarmonyOS HiSpark AI Camera】基于HiSpark AI Camera的夜间目标检测项目

    不良数据,经过gpu训练后将训练后的模型部署在Horizon x3开发板上(Sunrise3芯片),实现全国产边缘目标检测的demo,同时可以通过b站或51cto网站上韦东山老师的教学视频学习harmony os所以想尝试申请此款高性能
    发表于 11-19 20:49

    如何实现PMSM高性能控制

    速度环,内环为电流环。为了实现PMSM高性能控制,我们会采用各种复杂的算法来实现目标,这其中电流环相关算法又是重中之重。但是需要指出,电流环性能好坏除了与采用的算法有关之外,还与...
    发表于 08-27 06:45

    基于ADSP-TS101S的目标检测系统

    微弱地低速运动目标信号,是一个频率极低,准周期,低信噪比,多谐波组合的信号,如何更加有效准确地检测目标信号是信号处理领域的难点和热点。本文提出了基于ADI公司高性能的ADSP-T
    发表于 08-05 11:37 22次下载

    高性能红外瓦斯检测系统的硬件设计

    高性能红外瓦斯检测系统的硬件设计,有兴趣的同学可以下载学习
    发表于 05-04 14:37 0次下载

    网络雷达对Swerling_目标检测性能分析

    网络雷达对Swerling_目标检测性能分析_刘月平
    发表于 01-07 16:06 0次下载

    目标特性对MIMO雷达检测性能影响研究

    目标特性对MIMO雷达检测性能影响研究_姜秋喜
    发表于 01-07 16:06 0次下载

    基于深度自编码网络的慢速移动目标检测

    强杂波背景下的慢速目标检测存在低多普勒频移、杂波干扰严重、鲁棒性不足、特征提取困难与信息利用不充分等问题。为此,提出一种基于深度自编码网络的宽带信号目标
    发表于 03-29 11:29 0次下载
    基于深度自<b class='flag-5'>编码</b>网络的慢速移动<b class='flag-5'>目标</b><b class='flag-5'>检测</b>

    解析在目标检测中怎么解决小目标的问题?

    的发展中,也出现了一些提高小目标检测性能的解决方案。本文将对这些方法进行分析、整理和总结。 图像金字塔和多尺度滑动窗口检测 一开始,在深学习方法成为流行之前,对于不同尺度的
    的头像 发表于 04-26 14:13 6232次阅读
    解析在<b class='flag-5'>目标</b><b class='flag-5'>检测</b>中怎么解决小<b class='flag-5'>目标</b>的问题?

    自定义并自动执行Notes到Exchange的高性能迁移

    BinaryTree Migrator by Quest forNotes执行Notes至Exchange的高性能迁移,可将邮箱和存档从内部部署和SmartCloud版本的Notes迁移至您所选的目标位置。
    的头像 发表于 09-19 09:49 834次阅读

    CCV 2023 | SparseBEV:高性能、全稀疏的纯视觉3D目标检测

    本文介绍在3D 目标检测领域的新工作:SparseBEV。我们所处的 3D 世界是稀疏的,因此稀疏 3D 目标检测是一个重要的发展方向。然而,现有的稀疏 3D
    的头像 发表于 09-19 10:00 952次阅读
    CCV 2023 | SparseBEV:<b class='flag-5'>高性能</b>、全稀疏的纯视觉3D<b class='flag-5'>目标</b><b class='flag-5'>检测</b>器

    基于深度学习的小目标检测

    )的广泛应用,小目标检测性能得到了显著提升。本文将详细探讨基于深度学习的小目标检测技术,包括其定义、挑战、常用方法以及未来发展方向。
    的头像 发表于 07-04 17:25 772次阅读