文章作者

英特尔物联网行业创新大使

杨雪锋 博士

中国矿业大学机电工程学院副教授;
发表学术论文30余篇,获国家专利授权20多件(其中发明专利8件)

目录

1.1 OpenVINOTM 2022.2简介

1.2  YOLOv5简介

1.3 蝰蛇峡谷简介

1.4 准备YOLOv5的OpenVINO推理程序开发环境

1.5 导出yolov5s.onnx模型

1.6 用Netron工具查看yolov5s.onnx模型的输入和输出

1.7 使用模型优化器将yolov5s.onnx转换为FP16精度的IR模型

1.8 使用benchmark_app获得yolov5s.xml模型的性能数据

1.9 使用OpenVINO Runtime API开发YOLOv5的同步推理程序

1.10 总结


1.1 OpenVINOTM 2022.2简介

openvino-dev(OpenVINO开发工具) 2022.2版于2022年9月21日正式发布,根据官宣《支持英特尔独立显卡的OpenVINO™ 2022.2新版本来啦》,OpenVINO™ 2022.2将是第一个支持英特尔独立显卡的版本。

图片来源:openvino-dev · PyPI

从开发者的角度来看,对于提升开发效率或运行效率有用的特性有:

  • 支持英特尔独立显卡。开发者只需要编写一次OpenVINO程序,即可以将AI模型通过指定推理设备的方式,部署到英特尔的CPU、集成显卡、独立显卡、VPU或FPGA上,大大降低了学习投入,提高了开发效率,如下图所示。

  • 为AUTO设备插件新增“Cumulative throughput”性能倾向选择。这意味着开发者无需手动新增推理计算请求,便可在多个AI推理计算设备(例如:多个GPU)上进行并发推理。
  • AUTO和MULTI设备插件支持用“-CPU” 将CPU移除推理设备列表。举个例子:“AUTO:-CPU”意味着不使用CPU作为AI推理计算设备,从而将CPU从AI推理计算中释放出来,聚焦于任务调度和其它非AI推理计算(例如:从摄像头采集图像、运行传统图像处理算法...)。

1.2  YOLOv5简介

Ultralytics公司贡献的YOLOv5 PyTorch (https://github.com/ultralytics/yolov5)实现版,由于其工程化和文档做的特别好,深受广大AI开发者的喜爱,GitHub上的星标超过了31.1K,而且被PyTorch官方收录于PyTorch的官方模型仓。

由于YOLOv5精度高速度快,且工程化做的非常好,使得产业实践中,即便YOLOv6和YOLOv7已发布,但大多数人仍然选用YOLOv5做目标检测——参考OpenCV学堂的测评文章《YOLOv5,YOLOv6,YOLOv7在TensorRT推理速度比较》。

图片来源:https://github.com/ultralytics/yolov5/blob/master/.github/README_cn.md

1.3 蝰蛇峡谷简介

蝰蛇峡谷(Serpent Canyon) 是一款性能强劲,并且体积小巧的高性能迷你主机,搭载全新一代混合架构的第 12 代智能英特尔® 酷睿™ 处理器,并且内置了英特尔锐炫™ A770M 显卡。强悍内芯搭配全新独显的蝰蛇峡谷体积仅约2.5升,节省桌面空间的同时提供了丰富的接口,作为生产力工具,从内到外都是高标准要求,能够为用户带来优质的工作体验。

英特尔锐炫™ A770M 显卡基于Xe-HPG 微架构,Xe HPG GPU 中的每个 Xe 内核都配置了一组 256 位矢量引擎,旨在加速传统图形和计算工作负载,以及新的 1024 位矩阵引擎或 Xe 矩阵扩展,旨在加速人工智能工作负载。

蝰蛇峡谷上有两块GPU:一块是英特尔®锐炬®集成显卡,一块是英特尔®锐炫® A770M独立显卡。本文在后面章节将使用OpenVINO 2022.2的Cumulative throughput”性能倾向选择新特性,同时使用这两块显卡进行AI推理计算。

1.4 准备YOLOv5的OpenVINO推理程序开发环境

要完成YOLOv5的OpenVINO 2022.2推理程序开发,需要安装:

  1. YOLOv5
  2. OpenVINO 2022.2

由于YOLOv5的工程化做的实在太好,在Windows中安装上述环境,只需要两条命令:

git clone https://github.com/ultralytics/yolov5  # clonecd yolov5cd yolov5pip install -r requirements.txt && pip install openvino-dev[onnx] # install

1.5 导出yolov5s.onnx模型

在yolov5文件夹下,使用命令:python export.py --weights yolov5s.pt --include onnx,完成yolov5s.onnx模型导出,如下图所示。

1.6 用Netron工具查看yolov5s.onnx模型的输入和输出

使用Netron(https://netron.app/),查看yolov5s.onnx模型的输入和输出

从图中可以看出:YOLOv5 模型的输出叫:“output0”,每张图片的推理结果有25200行,每行85个数值,前面5个数值分别是:

cx, cy, w, h, score, 后面80个参数是MSCOCO的分类得分。

1.7 使用模型优化器将yolov5s.onnx转换为FP16精度的IR模型

模型优化器(Model Optimizer)是OpenVINO自带的跨平台的命令行模型优化工具,当执行完“pip install openvino-dev”安装命令后,模型优化器已经随同OpenVINO一并安装好了。参考链接:https://pypi.org/project/openvino-dev/

模型优化器主要通过进行静态模型分析,执行与硬件无关的网络优化(例如:网络层与算子融合、删除死节点等),更改模型精度,添加归一化参数(mean & scale)等等,最终输出IR(Intermediate Representation)模型,从而进一步提升AI推理计算速度。参考链接:Model Optimization Guide — OpenVINO™ documentation

使用模型优化器优化并转换模型时,模型精度通常选FP16,因为它是在GPU上性能最好,且所有推理设备都支持的模型精度,参考链接:https://docs.openvino.ai/latest/openvino_docs_OV_UG_supported_plugins_Supported_Devices.html

综上,使用命令:mo --input_model yolov5s.onnx --data_type FP16,进一步优化yolov5s模型,并将模型格式转换为IR格式,模型精度转换为FP16,运行结果如下图所示。

1.8 使用benchmark_app获得yolov5s.xml模型的性能数据

benchmark_app也是OpenVINO自带的跨平台的命令行工具,通过该工具,可以快速获得模型的性能数据。

如前所述,直接使用“AUTO:-CPU”设备插件,并指定“Cumulative throughput”性能倾向选择,即可同时使用蝰蛇峡谷上的两块显卡做AI推理计算。

使用命令获得yolov5s.xml模型在两块显卡上同时做AI推理计算的性能数据:

benchmark_app -m yolov5s.xml -d AUTO:-CPU -hint cumulative_throughput

从任务管理器中可以看出,通过“AUTO:-CPU”设备插件释放了CPU;通过“Cumulative throughput”性能倾向选择,使得两块显卡都在做AI推理计算。

benchmark_app运行结果,如下图所示。

1.9 使用OpenVINO Runtime API开发YOLOv5的同步推理程序

基于OpenVINO Runtime API实现同步推理计算程序的典型流程,主要有三步:

  1. 创建Core对象;
  2. 载入并编译模型;
  3. 执行推理计算获得推理结果;

完整范例程序如下所示,总共不到50行。本范例程序使用了yolort(https://github.com/zhiqwang/yolov5-rt-stack)中的non_max_suppression实现后处理,运行范例程序前,请先安装yolort: pip install -U yolort

请将范例代码下载后放入yolov5文件夹下再运行:

https://gitee.com/ppov-nuc/yolov5_infer/blob/main/yolov5_ov2022_sync_dGPU.py

import cv2
import time
import yaml
import torch
from openvino.runtime import Core
# https://github.com/zhiqwang/yolov5-rt-stack
from yolort.v5 import non_max_suppression, scale_coords
# Load COCO Label from yolov5/data/coco.yaml
with open('./data/coco.yaml','r', encoding='utf-8') as f:result = yaml.load(f.read(),Loader=yaml.FullLoader)
class_list = result['names']
# Step1: Create OpenVINO Runtime Core
core = Core()
# Step2: Compile the Model, using dGPU
net = core.compile_model("yolov5s.xml", "GPU.1")
output_node = net.outputs[0]
# color palette
colors = [(255, 255, 0), (0, 255, 0), (0, 255, 255), (255, 0, 0)]
#import the letterbox for preprocess the frame
from utils.augmentations import letterbox  start = time.time() # total excution time =  preprocess + infer + postprocess
frame = cv2.imread("./data/images/zidane.jpg")
# preprocess frame by letterbox
letterbox_img, _, _= letterbox(frame, auto=False)
# Normalization + Swap RB + Layout from HWC to NCHW
blob = cv2.dnn.blobFromImage(letterbox_img, 1/255.0, swapRB=True)
# Step 3: Do the inference
outs = torch.tensor(net([blob])[output_node])
# Postprocess of YOLOv5:NMS
dets = non_max_suppression(outs)[0].numpy()
bboxes, scores, class_ids= dets[:,:4], dets[:,4], dets[:,5]
# rescale the coordinates
bboxes = scale_coords(letterbox_img.shape[:-1], bboxes, frame.shape[:-1]).astype(int)
end = time.time()
#Show bbox
for bbox, score, class_id in zip(bboxes, scores, class_ids):color = colors[int(class_id) % len(colors)]cv2.rectangle(frame, (bbox[0],bbox[1]), (bbox[2], bbox[3]), color, 2)cv2.rectangle(frame, (bbox[0], bbox[1] - 20), (bbox[2], bbox[1]), color, -1)cv2.putText(frame, class_list[class_id], (bbox[0], bbox[1] - 10), cv2.FONT_HERSHEY_SIMPLEX, .5, (255, 255, 255))
# show FPS
fps = (1 / (end - start))
fps_label = "FPS: %.2f" % fps
cv2.putText(frame, fps_label, (10, 25), cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 0, 255), 2)
print(fps_label+ "; Detections: " + str(len(class_ids)))
cv2.imshow("output", frame)
cv2.waitKey()
cv2.destroyAllWindows()

1.10 总结

第一:OpenVINO主要应用于AI模型的优化和部署。

第二:OpenVINO易学易用:

  • 掌握两个命令行工具:mo和benchmark_app就可以优化并测试模型的性能;
  • 掌握三个Python API函数,就可以完成AI模型的同步推理计算程序;
  • 整个范例程序不超过80行,清晰易读。即便零基础,也能快速掌握并应用。

第三:通过“AUTO:-CPU”设备插件和“Cumulative throughput”性能倾向选择,可以非常容易的同时使用多个GPU进行推理计算,并释放出宝贵的CPU资源。

第四:蝰蛇峡谷是首款英特尔独显NUC迷你电脑,AI推理性能强大,请参见benchmark_app的性能测试结果。

基于OpenVINOTM2022.2和蝰蛇峡谷优化并部署YOLOv5模型相关推荐

  1. win10环境下基于OpenVINO部署yolov5模型

    以在Intel的OpenVINO上部署Yolov5模型为例,加深对模型部署的理解. 1. 训练准备 获取yolov5模型及数据集 git clone git://github.com/ultralyt ...

  2. 基于Caffe格式部署YOLOV5模型

    点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 [导语]本文为大家介绍了一个caffe部署yolov5 模型的教程,并开源了全部代码.主要是教你如何搭 ...

  3. 使用OpenVINO优化和部署DenseNet模型并在DevCloud上完成性能测试

    概述 Intel® DevCloud for the Edge支持在英特尔的硬件平台上主动构建原型并试验面向计算机视觉的AI 工作负载.其硬件平台托管在云环境中,专门用于深度学习,用户可以全面访问这些 ...

  4. 在蝰蛇峡谷上实现YOLOv5模型的OpenVINO异步推理程序

    作者:战鹏州  英特尔物联网行业创新大使 目录 1.1 AI推理程序性能评价指标 1.1.1 AI模型的推理性能 1.1.2 端到端的AI推理程序性能 1.2 异步推理实现方式 1.2.1 OpenV ...

  5. 肉眼可见的优越性能,Serpent Canyon 蝰蛇峡谷性能剖析

    在迷你电脑领域,Intel NUC长期都属于标杆性的存在.现在NUC主要衍生出了搭载第12代酷睿的"华尔街峡谷""蝰蛇峡谷""飞龙峡谷"以及 ...

  6. CIKM 2021 | 基于IPCA的多属性分子优化

    今天给大家介绍以色列理工学院Kira Radinsky课题组发表在CIKM会议上的一篇文章"Multi-Property Molecular Optimization using an In ...

  7. sqlplus几个存储过程执行变量值窜掉了_基于大数据的冷连轧过程控制优化技术研究...

    作者:郭立伟, 王彦辉 , 王佃龙,宋浩源,刘海超,曹静 摘要:针对冷连轧过程控制模型系统目前存在的问题,以摩擦系数模型参数优化和平坦度控制参数优化为例,本文阐述了在完整.准确和可靠的工艺实时数据基础 ...

  8. 阿里妈妈基于TensorFlow做了哪些深度优化?TensorFlowRS架构解析

    一. 综述 深度学习比传统的逻辑回归有着更强的模型刻画能力,同时也带来了计算力百倍提升的需求.相比图像.语音.视频等领域,搜索.广告.推荐等场景有着独特的场景特点: 样本规模和特征空间通常非常巨大,千 ...

  9. Hystrix面试 - 基于 request cache 请求缓存技术优化批量商品数据查询接口

    Hystrix面试 - 基于 request cache 请求缓存技术优化批量商品数据查询接口 Hystrix command 执行时 8 大步骤第三步,就是检查 Request cache 是否有缓 ...

最新文章

  1. sql server2005 出现一个或多个参数无效
  2. Struts2的Stack Context和ValueStack
  3. POJ3069:Saruman's Army
  4. Vue中虚拟DOM的理解
  5. linux sh 必要,Linux Shell学习之基础篇(不适合学习,仅为本人笔记)
  6. OpenCv之图像二值化(笔记12)
  7. 1、linux网络服务实验 用PuTTY连接Linux
  8. 频率采样型滤波器matlab,频率采样法设计带通滤波器matlab.doc
  9. Web端QR二维码扫描实现
  10. 深度学习半年学习心得(如何入门)
  11. dns解析失败如何处理?
  12. 如何提升网络安全应急响应与事件处置能力
  13. 漫画:如何给女朋友解释灭霸的指响并不是真随机消灭半数宇宙人口的?
  14. 韭菜简史:快招加盟的致富骗局
  15. 老熊一亩三分地里的Oracle工具
  16. 基于微信小程序的食堂窗口自助点餐系统
  17. 一个人的朝圣深度感悟_朝圣之末找到更强大的WordWrap函数
  18. 8.2 Affine independence (仿射无关性)
  19. 基于Auto.js的蚂蚁森林能量收集脚本
  20. App渠道推广怎么统计?一张图讲解

热门文章

  1. Unity多分辨率适配
  2. Jetpack Compose——Scaffold(脚手架)、SnackBar(通知,类似Toast)的简单使用
  3. 费马定理在算法取模中的应用
  4. ---中南海香烟---系列[男人应该抽的烟]
  5. 前端中unescape是什么意思_详解JavaScript中的Unescape()和String() 函数
  6. 无线传感器的优势_如何挑选无线传感器
  7. R中用ggplot2画百分比柱状图
  8. tuend\stratis\vdo总结和案例
  9. 飞机结冰的那些事(2) Spring-Ice结冰软件介绍
  10. 【Android Activity】Activity的生命周期