ImageAI是一个python库,旨在使开发人员能够使用简单的几行代码构建具有包含深度学习和计算机视觉功能的应用程序和系统。 这个 AI Commons 项目https://commons.specpal.science 由 Moses Olafenwa 和 John Olafenwa 开发和维护。为了更好的使用 ImageAI,我将其 Fork 到 CodeXZone/ImageAI。同时,ImageAI 也提供了中文手册:imageai。下面我将借助该教程一步一步的学习目标检测。

利用 cocoz 载入 COCO 数据集

首先,利用 cocoz 载入 COCOZ:

import sys
# 将 cocoapi 添加进入环境变量
sys.path.append(r'D:\API\cocoapi\PythonAPI')
from pycocotools.cocoz import AnnZ, ImageZ, COCOZ
# ------------------import numpy as np
from matplotlib import pyplot as plt
from IPython import displaydef use_svg_display():# 用矢量图显示, 效果更好display.set_matplotlib_formats('svg')def show_imgs(imgs, k=4):'''展示 多张图片'''n = len(imgs)h, w = k, n // kassert n == h * w, "图片数量不匹配"use_svg_display()_, ax = plt.subplots(h, w, figsize=(5, 5))  # 设置图的尺寸K = np.arange(n).reshape((h, w))for i in range(h):for j in range(w):img = imgs[K[i, j]]ax[i][j].imshow(img)ax[i][j].axes.get_yaxis().set_visible(False)ax[i][j].set_xticks([])plt.show()
dataDir = r'E:\Data\coco\images'   # COCO 数据根目录
dataType = 'train2017'
imgZ = ImageZ(dataDir, dataType)show_imgs(imgZ[300:316])

物体检测,提取和微调

import sys
sys.path.append('D:/API/ImageAI')from imageai.Detection import ObjectDetection
import osexecution_path = os.getcwd()detector = ObjectDetection()  # 创建目标检测实例
detector.setModelTypeAsRetinaNet()
detector.setModelPath(os.path.join(execution_path, "resnet50_coco_best_v2.0.1.h5"))
detector.loadModel()  # 载入预训练模型

由于 detector.detectObjectsFromImage 比较容易支持解压后的图片,所以我们可以提取出一张图片来做测试:

input_image = imgZ.Z.extract(imgZ.names[0]) # 输入文件的路径
output_image = os.path.join(execution_path, "image2new.jpg")  # 输出文件的路径detections = detector.detectObjectsFromImage(input_image=input_image, output_image_path=output_image)for eachObject in detections:print(eachObject["name"] + " : ", eachObject["percentage_probability"])print("--------------------------------")
motorcycle :  99.99607801437378
--------------------------------

detectObjectsFromImage() 函数返回一个字典列表,每个字典包含图像中检测到的对象信息,字典中的对象信息有 name(对象类名)和 percentage_probability(概率)以及 box_points(图片的左上角与右下角的坐标)。

detections
[{'name': 'motorcycle','percentage_probability': 99.99607801437378,'box_points': array([ 34,  92, 546, 427])}]

下面我们看看其标注框:

img = plt.imread(output_image)
plt.imshow(img)
plt.show()

为了直接使用压缩文件,我们可以修改 detectObjectsFromImage 的默认参数 input_type='file'input_type='array'

input_image = imgZ[202]  # 输入文件的路径
output_image = os.path.join(execution_path, "image2.jpg")  # 输出文件的路径detections = detector.detectObjectsFromImage(input_image=input_image, output_image_path=output_image, input_type='array')for eachObject in detections:print(eachObject["name"] + " : ", eachObject["percentage_probability"])print("--------------------------------")img = plt.imread(output_image)
plt.imshow(img)
plt.show()
tennis racket :  54.25310730934143
--------------------------------
person :  99.85058307647705
--------------------------------

detections, objects_path = detector.detectObjectsFromImage(input_image=imgZ[900], input_type = 'array',output_image_path=os.path.join(execution_path, "image3new.jpg"),extract_detected_objects=True)for eachObject, eachObjectPath in zip(detections, objects_path):print(eachObject["name"] + " : ", eachObject["percentage_probability"])print("Object's image saved in ", eachObjectPath)print("--------------------------------")
person :  56.35678172111511
Object's image saved in  D:\API\CVX\draft\image3new.jpg-objects\person-1.jpg
--------------------------------
person :  75.83483457565308
Object's image saved in  D:\API\CVX\draft\image3new.jpg-objects\person-2.jpg
--------------------------------
person :  60.49004793167114
Object's image saved in  D:\API\CVX\draft\image3new.jpg-objects\person-3.jpg
--------------------------------
person :  85.2730393409729
Object's image saved in  D:\API\CVX\draft\image3new.jpg-objects\person-4.jpg
--------------------------------
person :  83.12703967094421
Object's image saved in  D:\API\CVX\draft\image3new.jpg-objects\person-5.jpg
--------------------------------
bus :  99.7751772403717
Object's image saved in  D:\API\CVX\draft\image3new.jpg-objects\bus-6.jpg
--------------------------------

extract_detected_objects=True 将会把检测到的对象提取并保存为单独的图像;这将使函数返回 2 个值,第一个是字典数组,每个字典对应一个检测到的对象信息,第二个是所有提取出对象的图像保存路径,并且它们按照对象在第一个数组中的顺序排列。我们先看看原图:

plt.imshow(imgZ[900])
plt.show()

显示识别出来的对象:

show_imgs([plt.imread(fname) for fname in objects_path], 2)

还有一个十分重要的参数 minimum_percentage_probability 用于设定预测概率的阈值,其默认值为 50(范围在 \(0-100\)之间)。如果保持默认值,这意味着只有当百分比概率大于等于 50 时,该函数才会返回检测到的对象。使用默认值可以确保检测结果的完整性,但是在检测过程中可能会跳过许多对象。下面我们看看修改后的效果:

detections = detector.detectObjectsFromImage(input_image=imgZ[900],input_type='array',output_image_path=os.path.join(execution_path, "image3new.jpg"),minimum_percentage_probability=70)for eachObject in detections:print(eachObject["name"] + " : ", eachObject["percentage_probability"])print("--------------------------------")
person :  75.83483457565308
--------------------------------
person :  85.2730393409729
--------------------------------
person :  83.12703967094421
--------------------------------
bus :  99.7751772403717
--------------------------------

我们将 minimum_percentage_probability 设置为 70,此时仅仅只能检测到 4 个。

转载于:https://www.cnblogs.com/q735613050/p/10165709.html

利用 ImageAI 在 COCO 上学习目标检测相关推荐

  1. 目标检测---以制作yolov5的数据集为例,利用labelimg制作自己的深度学习目标检测数据集(正确方法)

    以制作yolov5的数据集为例,利用labelimg制作自己的深度学习目标检测数据集的正确方法 文章目录 前言 一.labelimg简单介绍 1 VOC标签格式,保存为xml文件. 2 yolo标签格 ...

  2. 神经网络学习小记录50——Pytorch 利用efficientnet系列模型搭建yolov3目标检测平台

    神经网络学习小记录50--Pytorch 利用efficientnet系列模型搭建yolov3目标检测平台 学习前言 什么是EfficientNet模型 源码下载 EfficientNet模型的实现思 ...

  3. 神经网络学习小记录26——Keras 利用efficientnet系列模型搭建yolov3目标检测平台

    神经网络学习小记录26--Keras 利用efficientnet系列模型搭建efficientnet-yolov3目标检测平台 学习前言 什么是EfficientNet模型 源码下载 Efficie ...

  4. 姿态检测 树莓派_怎样在树莓派上轻松实现深度学习目标检测?

    原标题:怎样在树莓派上轻松实现深度学习目标检测? 雷锋网按:本文为 AI 研习社编译的技术博客,原标题 How to easily Detect Objects with Deep Learning ...

  5. GPU上创建目标检测Pipeline管道

    GPU上创建目标检测Pipeline管道 Creating an Object Detection Pipeline for GPUs 今年3月早些时候,展示了retinanet示例,这是一个开源示例 ...

  6. 深度学习目标检测详细解析以及Mask R-CNN示例

    深度学习目标检测详细解析以及Mask R-CNN示例 本文详细介绍了R-CNN走到端到端模型的Faster R-CNN的进化流程,以及典型的示例算法Mask R-CNN模型.算法如何变得更快,更强! ...

  7. 动手学深度学习——目标检测 SSD R-CNN Fast R-CNN Faster R-CNN Mask R-CNN

    来源:13.4. 锚框 - 动手学深度学习 2.0.0-beta1 documentation 目标检测:锚框算法原理与实现.SSD.R-CNN_神洛华的博客 目录 目标检测简介 目标检测模型 ​编辑 ...

  8. 深度学习目标检测方法综述

    参考:https://blog.csdn.net/Standing_On_Giant/article/details/60333329 参考:https://blog.csdn.net/xiaohu2 ...

  9. 深度学习目标检测网络汇总对比,挺好的

    深度学习目标检测网络汇总对比 本文总阅读量次 欢迎star我的博客 2019-01-03 参考 :https://medium.com/@jonathan_hui/object-detection-s ...

最新文章

  1. try()...catch()的用法
  2. 技术感悟--回顾2012
  3. Linux C编程--进程介绍3--进程终止和等待
  4. DX使用随记--GroupControl
  5. C#基础概念二十五问
  6. python localtime 与utc时间差5分钟_在linux中用localtime()显示的时间与实际时间不相符,不是与北京时间差8个小时,而是差15个小时...
  7. sql privot
  8. Flink CDC 2.0 正式发布,详解核心改进
  9. 项目奖金一般有多少_全年一次性奖金如何进行纳税筹划?
  10. AnswerOpenCV(1001-1007)一周佳作欣赏
  11. linux上pyenv卸载,在Ubuntu 18.04系统下安装pyenv的方法
  12. 如何判断线程池已经执行完所有任务了?
  13. 第53课 化功大法 《小学生C++趣味编程》
  14. 重磅 CV、NLP 算法赛,科大讯飞2020 A.I.开发者大赛正式启动!
  15. String 和 InputStream 互转方式
  16. 7.卷2(进程间通信)---互斥锁和条件变量
  17. GB28181 视频服务器文档整理
  18. vpay平台模式开发 15天交付系统
  19. 文件名不显示后缀格式(扩展名)
  20. 老话题,火车票抢票助手,简化版 (漏洞已经失效^_^)

热门文章

  1. 【天华学术】文艺美学论文:《哈姆雷特》悲剧蕴含的审美价值(节选)
  2. 华为无线路由器信道怎么测试软件,教你为无线路由器选择合适的信道让上网更快...
  3. maven项目搭建步骤
  4. Σ-Δ型ADC转换原理及程序设计--AD7712
  5. 在html里面加入flash,如何在HTML页面插入flash代码
  6. 如何启用计算机双通道内存的方法,组建双通道内存也要讲究方法,操作方法不正确,装上内存也没用处...
  7. 一文搞懂四种 WebSocket 使用方式
  8. GPU 利用率低常见原因分析及优化
  9. 费城老鹰队门票老鹰登陆了六号种子为NFC淘汰赛
  10. 一篇文章看明白 HashMap 工作原理