【计算机视觉】Openvino给yolov5目标检测提速实战
1.摘要
目标检测是计算机视觉主要应用方向之一。目标检测通常包括两方面的工作,首先是找到目标,然后就是识别目标。常用的目标检测方法分为两大流派:一步走(one_stage)算法:直接对输入的图像应用算法并输出类别和相应的定位,典型的算法有yolo,ssd;两步走(two_stage)算法:先产生候选区域,然后在进行CNN分类,代表的算法有R-CNN。其中一步走目标检测算法检测速度快,实时性好,在模型的快速部署上有着很强的优势,被广泛应用在各行各业中。本文也将选择yolov5算法对目标物体进行目标预测。训练好模型要部署在不同的边缘端,才会产生价值,本文将采用Openvino(Open Visual Inferencing and Neural Network Optimization/ 开放视觉推理和神经网络优化)来部署目标检测模型,Openvino是一个用于解决在intel硬件平台上进行深度学习部署的方案,支持windows、linux和macOS,有效地避免了不同软硬件平台兼容性的问题。
2.yolov5如何实现目标检测?
如何采用yolov5训练自己的数据,我已经在之前的博客里详细讲了训练过程,参照博客:【计算机视觉】目标检测—yolov5自定义模型的训练以及加载-https://blog.csdn.net/qq_43018832/article/details/128054360?spm=1001.2014.3001.5502。本文为了方便起见,不再进行训练自己的数据,将yolov5官方的预训练模型进行Openvino加速,查看加速效果。首先,去yolov5官网(https://github.com/ultralytics/yolov5)进行下载官方文件,也可以通过克隆地址(git clone https://github.com/ultralytics/yolov5.git)进行获取,并且下载预训练权重文件,放到yolov5文件下。结果如图:
运行下面的代码detection_show.py,在运行之前,首先安装yolov5文件下的requirements里面的依赖包,命令:pip install -r requirements.txt,运行后可以看到yolov5的官方预训练模型的检测结果,我使用的是笔记本,帧率只有2,3,如下图所示:
import cv2
import numpy as np
import torch
import time# local repo
model = torch.hub.load('./yolov5', 'custom', 'weights/yolov5n.pt',source='local')
model.conf = 0.4cap = cv2.VideoCapture(0)fps_time = time.time()while True:ret,frame = cap.read()# frame = cv2.flip(frame,1)img_cvt = cv2.cvtColor(frame,cv2.COLOR_BGR2RGB)# Inferenceresults = model(img_cvt)result_np = results.pandas().xyxy[0].to_numpy()for box in result_np:l,t,r,b = box[:4].astype('int') cv2.rectangle(frame,(l,t),(r,b),(0,255,0),5)cv2.putText(frame,str(box[-1]),(l,t-20),cv2.FONT_ITALIC,1,(0,255,0),2)now = time.time()fps_text = 1/(now - fps_time)fps_time = nowcv2.putText(frame,str(round(fps_text,2)),(50,50),cv2.FONT_ITALIC,1,(0,255,0),2)cv2.imshow('demo',frame)if cv2.waitKey(10) & 0xFF == ord('q'):breakcap.release()
cv2.destroyAllWindows()
3.Openvino如何加速模型?
3.1.原理简介
要使用它,你需要一个预先训练好的深度学习模型,支持的格式有:TensorFlow、PyTorch、PaddlePaddle、MXNet、Caffe、Kaldi或ONNX,本文选用的是yolov5官方预训练模型yolov5n.pt,读者可以训练自己的预训练模型。模型优化器将模型转换为OpenVINO中间表示格式(IR),稍后您可以使用OpenVINO™运行时进行推断。注意,模型优化器不推断模型。下图说明了部署经过训练的深度学习模型的典型工作流。
模型优化器通过以下机制来优化模型:
1. 对模型进行修剪:移除部分在训练时候需要的,而推理时候不需要的网络;DropOut 就是这种网络层的一个例子;
2. 融合操作:有些时候多步操作可以融合成一步,模型优化器检测到这种就会进行必要的融合;
优化过程结束后会生成一个 IR model / 中间表示模型,模型可以被分成两部分:
1. model.xml: XML 文件包含网络架构;
2. model.bin: bin 包含 Weights / 权重 和 Biases / 误差的二进制数据。
3.2.环境配置
首先,我们在安装openvino之前,使用conda创建自己的虚拟环境,安装pytorch CPU版本,命令:pip install torch torchvision torchaudio。接下来,将pytorch预训练模型转化为ONNX,安装依赖的环境ONNX,命令:pip install onnx==1.11.0,最后将转换为的onnx文件转换为openvino需要的.bin和.xml文件,安装依赖包:pip install openvino-dev[onnx],pip install openvino。
3.3.预训练模型.pt转ONNX文件
接下来,开始吧!将预训练模型yolov5n.pt转换为ONNX文件,可以直接使用yolov5中的文件export.py文件,此文件的作用是将yolov5 pytorch模型转换为各种格式(onnx,tensorrt,coreml,tensorflow等等)的文件。
执行命令为:
python export.py --weights yolov5n.pt --include onnx --img 640 --device 0
也可以通过执行下面代码转换为onnx格式。
if not onnx_path.exists():dummy_input = torch.randn(1, 3, IMAGE_HEIGHT, IMAGE_WIDTH)# For the Fastseg model, setting do_constant_folding to False is required# for PyTorch>1.5.1torch.onnx.export(model,dummy_input,onnx_path,opset_version=11,do_constant_folding=False,)print(f"ONNX model exported to {onnx_path}.")
else:print(f"ONNX model {onnx_path} already exists.")
转换后的结果如下。
3.4.ONNX文件转IR文件
使用模型优化器将ONNX模型转换为具有FP16精度的OpenVINO IR。模型被保存到当前目录。向模型中添加平均值,并使用——scale_values按标准偏差缩放输出。有了这些选项,在通过网络传播输入数据之前就没有必要对其进行规范化。有关模型优化器的更多信息,请参阅模型优化器开发人员指南https://docs.openvino.ai/latest/openvino_docs_MO_DG_Deep_Learning_Model_Optimizer_DevGuide.html。转换为IR文件的命令格式如下:
# Construct the command for Model Optimizer.
mo_command = f"""mo--input_model "{onnx_path}"--input_shape "[1,3, {IMAGE_HEIGHT}, {IMAGE_WIDTH}]"--mean_values="[123.675, 116.28 , 103.53]"--scale_values="[58.395, 57.12 , 57.375]"--data_type FP16--output_dir "{model_path.parent}""""
mo_command = " ".join(mo_command.split())
print("Model Optimizer command to convert the ONNX model to OpenVINO:")
display(Markdown(f"`{mo_command}`"))if not ir_path.exists():print("Exporting ONNX model to IR... This may take a few minutes.")mo_result = %sx $mo_commandprint("\n".join(mo_result))
else:print(f"IR model {ir_path} already exists.")
命令行为:
mo --input_model yolov5n.onnx --model_name openvino_yolov5n_part1 -s 255 --reverse_input_channels --output Conv294,conv245
出现这种情况,代表模型转换成功。
4.查看加速结果
最后使用推理引擎查看推理结果。
# Load the network in OpenVINO Runtime.
ie = Core()
model_ir = ie.read_model(model=ir_path)
compiled_model_ir = ie.compile_model(model=model_ir, device_name="CPU")# Get input and output layers.
output_layer_ir = compiled_model_ir.output(0)# Run inference on the input image.
res_ir = compiled_model_ir([input_image])[output_layer_ir]result_mask_ir = np.squeeze(np.argmax(res_ir, axis=1)).astype(np.uint8)
viz_result_image(image,segmentation_map_to_image(result=result_mask_ir, colormap=CityScapesSegmentation.get_colormap()),resize=True,
)
为了直观的看出加速结果,在不影响检测效果的前提下,丢弃部分小目标检测,查看加速结果提升至9.8帧。
本篇简单记录了作者在学习openvino加速模型的过程,希望对大家有所帮助。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.dgrt.cn/a/391999.html
如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!相关文章:

【计算机视觉】Openvino给yolov5目标检测提速实战
1.摘要 目标检测是计算机视觉主要应用方向之一。目标检测通常包括两方面的工作,首先是找到目标,然后就是识别目标。常用的目标检测方法分为两大流派:一步走(one_stage)算法:直接对输入的图像应用算法并输出…...

超声波测距LCD1602显示
超声波测距模块:1、采用IO口TRIG触发测距,给至少10us的高电平信号;2、模块自动发送8个40khz的方波,自动检测是否有信号返回;3、有信号返回,通过IO口ECHO输出一个高电平,高电平持续的时间就是超声…...

Python应用程序打包
Python应用程序打包 PyInstaller将Python应用程序及其所有依赖项捆绑到一个包中。 用户可以运行打包的应用程序,而无需安装 Python 解释器或任何模块。 项目结构: Python应用程序打包项目示例 demo data students.json [{"name": "花千…...

软件设计师(软考中级)_下午题Java题总结
创建型设计模式 创建模式是处理对象创建的设计模式,试图根据实际情况使用合适的方式创建对象;创建模式的主导思想为,将系统使用的具体类封装起来,隐藏这些具体类的实例创建和结合的方式。 创建型设计模式主要有:抽象…...

OAuth2(3)
目录 一、利用redis集成jwt 1.认证服务器 2.资源所有者 3.资源服务器 4.主要了解client(客户) 一、利用redis集成jwt 目的: 1.将grant code变成动态的 2.将授权流程进行界面化展示 客户:京东(关联跳转第三方授权…...

在Nginx中让所有HTTP请求转发到HTTPS
title: 在Nginx中让所有HTTP请求转发到HTTPS date: 2017-10-23 20:50:24 tags: nginxhttphttps categories:运维 背景 在启用HTTPS协议的网站上,通常会让用户始终以 https:// 访问,那怎样来实现这个需求呢?首次想到的是在应用代码中实现&am…...

LeetCode 2176. 统计数组中相等且可以被整除的数对
给你一个下标从 0 开始长度为 n 的整数数组 nums 和一个整数 k ,请你返回满足 0 < i < j < n ,nums[i] nums[j] 且 (i * j) 能被 k 整除的数对 (i, j) 的 数目 。 示例 1: 输入:nums [3,1,2,2,2,1,3], k 2 输出&…...

【Spark分布式内存计算框架——Spark 基础环境】3. 快速入门(下)案例:词频统计、 运行圆周率
词频统计WordCount 大数据框架经典案例:词频统计WordCount,从文件读取数据,统计单词个数。 MapReduce WordCount 首先回顾一下MapReduce框架如何实现,流程如下图所示: 第一步、Map阶段:读取文件数据&…...

Python issubclass和isinstance函数:检查类型
Python 提供了如下两个函数来检查类型:issubclass(cls, class_or_tuple):检查 cls 是否为后一个类或元组包含的多个类中任意类的子类。isinstance(obj, class_or_tuple):检查 obj 是否为后一个类或元组包含的多个类中任意类的对象。通过使用上…...

仲裁期间投的简历竟被转发给原公司,原公司HR给我发截图,并转达老板威胁:老板行业圈子广,仲裁公司,以后投简历都是这个下场!...
论某些公司能有多恶心?下面是一位网友的遭遇:仲裁期间投的简历竟然被原公司HR发给自己截图,看来是投递简历的公司又转给了原公司,还转达老板原话威胁他:老板行业圈子广,仲裁公司,以后投的简历都…...

技术面面试高频考点总结-C++篇
文章目录技术面面试高频考点总结-C篇一、C常考考点枚举二、C基础推荐学习资料三、小结技术面面试高频考点总结-C篇 大家好呀,这里是小黛! 在技术面面试中,除了考察一些基础的计算机知识外,对语言掌握情况的考察,也是…...

Docker搭建php开发环境
1. 第一步拉去需要的镜像(根据个人需要, 获取对应版本) 2. 创建自己的docker网络, 默认桥接模式 ➜ ~ docker network create mynet 32c681d46c036dd9450e45f8930d7520f47f9fbb2df83c6348752d56683bcee5 ➜ ~ docker network ls NETWORK ID NAME DRIVER SCOPE 4a…...

运动蓝牙耳机哪个品牌好?运动型蓝牙耳机推荐
国内运动耳机品牌的兴起对外国品牌带了不小的冲击。在国内运动消费市场快速增长的今天,运动耳机市场的竞争也是相当的激烈。谁能吃下这块大蛋糕,当然是要用实力说话了。今天小编就来盘点一下市场上的明星产品,是骡子是马拉出来溜溜。 1、南卡…...

深度学习初识
博主简介 博主是一名大二学生,主攻人工智能研究。感谢让我们在CSDN相遇,博主致力于在这里分享关于人工智能,c,Python,爬虫等方面知识的分享。 如果有需要的小伙伴可以关注博主,博主会继续更新的,…...

基于Java+SpringBoot+SpringCloud+vue的智慧养老平台设计与实现【源码(完整源码请私聊)+论文+演示视频+包运行成功】
博主介绍:专注于Java技术领域和毕业项目实战 🍅文末获取源码联系🍅 👇🏻 精彩专栏推荐订阅👇🏻 不然下次找不到哟 Java项目精品实战案例(200套) 目录 一、效果演示 二、…...

02_Python 学习基础
1\ 核心汇总更新python更新的通知 PEP 1 : PEP 1 – PEP Purpose and Guidelines | peps.python.org PEP 0 : PEP 0 – Index of Python Enhancement Proposals (PEPs) | peps.python.org PEP 8 :编码规范 PEP 8 – Style Guide for Python Code | pep…...

elasticsearch7.17.3 实现类似mysql的like查询
前言:现在想要实现在elasticsearch中类似于mysql的like查询方式,有下面几种方法可以参考 建议:wildcard方法是纯纯的like查询方式平替,但是性能差,上百GB的数据量后就会很慢。根据自己业务量需求,前面两种方…...

IT知识百科:什么是802.1X?
一、引言 网络安全是企业和个人必须关注的问题。随着网络技术的发展,网络安全威胁也日益增加。802.1X是一个基于端口的网络访问控制协议,可以保护企业网络安全。在本文中,我们将介绍802.1X的基本原理、应用场景以及未来的发展方向。 二、802…...

IOC/DI注解开发管理第三方bean
IOC/DI注解开发管理第三方bean4,IOC/DI注解开发管理第三方bean4.1 环境准备4.2 注解开发管理第三方bean步骤1:导入对应的jar包步骤2:在配置类中添加一个方法步骤3:在方法上添加Bean注解步骤4:从IOC容器中获取对象并打印4.3 引入外部配置类4.3.1 使用包扫描引入步骤1…...

适合新手使用的视频模版制作工具 操作简单易上手
在现代社会,短视频已经成为了人们表达自己、传达信息的重要方式之一。随着社交媒体和短短视频平台的流行,越来越多的人开始将短视频作为自己的创作方式。为了制作出有创意的短视频,除了创意和想象力,好的视频模版制作工具也是不可…...