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

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

3天内不再提示

在AI爱克斯开发板上用OpenVINO?加速YOLOv8分类模型

英特尔物联网 ? 来源:英特尔物联网 ? 2023-05-05 11:47 ? 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

文章作者:

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

本系列文章将在AI 爱克斯开发板上使用 OpenVINO开发套件依次部署并测评 YOLOv8 的分类模型、目标检测模型、实例分割模型和人体姿态估计模型。

接下来,本文将介绍在AI 爱克斯开发板上搭建 OpenVINO 推理程序的开发环境、导出并优化 YOLOv8 分类模型、完成 YOLOv8 分类模型的推理程序,最后给出实测性能。

请先下载本文的代码仓:

git clone https://gitee.com/ppov-nuc/yolov8_openvino.git

1YOLOv8 简介

YOLOv8 是 Ultralytics 公司基于 YOLO 框架,发布的一款面向物体检测与跟踪、实例分割、图像分类和姿态估计任务的 SOTA 模型工具套件。

只需要几行 Python 代码,或者一行命令,即可完成在自己的数据集上从头训练 (Training a model from scratch) 或者微调(Fine-tune) YOLOv8 模型。

d1c41c2e-e6b2-11ed-ab56-dac502259ad0.png

用 Python 代码训练 YOLOv8 模型

d1d3e0dc-e6b2-11ed-ab56-dac502259ad0.png

用命令行训练 YOLOv8 模型

导出训练好的 YOLOv8 模型,并用 OpenVINO 部署在英特尔硬件平台上,也非常方便,下面依次介绍。

2准备 YOLOv8 的

OpenVINO 推理程序开发环境

请基于本文范例代码仓提供的 requirements.txt 文件,通过一行命令完成开发环境安装。

# Usage: pip install -r requirements.txt
ultralytics
# Base ----------------------------------------
matplotlib>=3.2.2
numpy>=1.21.6
opencv-python>=4.6.0
Pillow>=7.1.2
PyYAML>=5.3.1
requests>=2.23.0
scipy>=1.4.1
torch==1.13.1
torchvision==0.14.1
tqdm>=4.64.0
# Plotting ------------------------------------
pandas>=1.1.4
seaborn>=0.11.0
# Export --------------------------------------
onnx>=1.12.0 # ONNX export
onnxruntime
openvino-dev==2023.0.0.dev20230407 # modify the openvino-dev version to the latest one
# Extras --------------------------------------
psutil # system utilization
thop>=0.1.1 # FLOPs computation

向右滑动查看完整代码

一行命令完成开发环境安装。

pip install -r requirements.txt

3导出 YOLOv8 OpenVINOIR 模型

YOLOv8 的分类模型有5种,在 ImageNet 数据集上的精度如下表所示。

d1e398b0-e6b2-11ed-ab56-dac502259ad0.png

首先使用命令:

yolo classify export model=yolov8n-cls.pt format=onnx imgsz=224

完成 yolov8n-cls.onnx 模型导出,如下图所示。

d1ff0bcc-e6b2-11ed-ab56-dac502259ad0.png

然后使用命令:

mo -m yolov8n-cls.onnx --compress_to_fp16

优化并导出 FP16 精度的 OpenVINO IR 格式模型,如下图所示。

d21687b6-e6b2-11ed-ab56-dac502259ad0.png

4用 benchmark_app 测试 YOLOv8 分类模型的推理计算性能

benchmark_app 是 OpenVINO 工具套件自带的 AI 模型推理计算性能测试工具,可以指定在不同的计算设备上,在同步或异步模式下,测试出不带前后处理的纯AI 模型推理计算性能。

使用命令:benchmark_app -m yolov8n-cls.xml -d GPU ,获得 yolov8n-cls.xml 模型在 AI 爱克斯开发板的集成显卡上的异步推理计算性能,如下图所示。

d231fd2a-e6b2-11ed-ab56-dac502259ad0.png

5使用 OpenVINO Python API 编写 YOLOv8 分类模型推理程序

基于 OpenVINO Python API 的 YOLOv8 分类模型范例程序 yolov8_cls_ov_sync_infer.py 的核心源代码,如下所示:

# 实例化Core对象
core = Core() 
# 载入并编译模型
net = core.compile_model(f'{MODEL_NAME}-cls.xml', device_name="GPU")
# 获得模型输入输出节点
input_node = net.inputs[0]  # yolov8n-cls只有一个输入节点
N, C, H, W = input_node.shape # 获得输入张量的形状
output_node = net.outputs[0] # yolov8n-cls只有一个输出节点
ir = net.create_infer_request()
##########################################
#  ---根据模型定义预处理和后处理函数-------
##########################################
# 定义预处理函数
def preprocess(image, new_shape=(W,H)):
  # Preprocess image data from OpenCV
  image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)  # BGR->RGB
  resized = cv2.resize(image, new_shape)      # Resize Image
  norm = (resized - IMAGENET_MEAN) / IMAGENET_STD # Normalization
  blob = np.transpose(norm, (2, 0, 1))       # HWC->CHW
  blob = np.expand_dims(blob, 0)          # CHW->NCHW
  return blob
# 定义后处理函数
def postprocess(outs):
  score = np.max(outs)
  id = np.argmax(outs)
  return score, id, imagenet_labels[id]
##########################################
#  ----- AI同步推理计算 ------------
##########################################
# 采集图像
image = cv2.imread("bus.jpg")
# 数据预处理
blob = preprocess(image)
# 执行推理计算并获得结果
outs = ir.infer(blob)[output_node]
# 对推理结果进行后处理
score, id, label = postprocess(outs)
# 显示处理结果
msg = f"YOLOv5s-cls Result:{label}, Score:{score:4.2f}, FPS:{FPS:4.2f}"
cv2.putText(image, msg, (10, 50), cv2.FONT_HERSHEY_SIMPLEX, 0.8, (100, 100, 200), 2)
cv2.imshow("YOLOv5s-cls OpenVINO Sync Infer Demo",image)
cv2.waitKey()
cv2.destroyAllWindows()

向右滑动查看完整代码

运行结果如下图所示:

d2436eb6-e6b2-11ed-ab56-dac502259ad0.png

6

使用 OpenVINO 预处理 API 提升推理计算性能

参考《将数据预处理嵌入 AI 模型的常见技巧》,使用 OpenVINO 预处理 API ,将数据预处理嵌入 YOLOv8 分类模型,可以进一步提高推理设备(例如,英特尔集成显卡/独立显卡)的利用率,进而提高包含前后处理的端到端的AI 推理计算性能。

使用 OpenVINO预处理 API 将预处理嵌入模型的范例程序 export_yolov8_cls_ppp.py 的核心代码,如下所示:

# ======== Step 0: read original model =========
core = Core()
model = core.read_model(f"{MODEL_NAME}-cls.xml")


# Step 1: Add Preprocessing steps to a model ==
ppp = PrePostProcessor(model) 
# Declare User’s Data Format
ppp.input().tensor() 
  .set_element_type(Type.u8) 
  .set_spatial_dynamic_shape() 
  .set_layout(Layout('NHWC')) 
  .set_color_format(ColorFormat.BGR)
# Declaring Model Layout
ppp.input().model().set_layout(Layout('NCHW'))
# Explicit preprocessing steps. Layout conversion will be done automatically as last step
ppp.input().preprocess() 
  .convert_element_type()   
  .convert_color(ColorFormat.RGB) 
  .resize(ResizeAlgorithm.RESIZE_LINEAR) 
  .mean([123.675, 116.28, 103.53]) 
  .scale([58.624, 57.12, 57.375])
# Integrate preprocessing Steps into a Model
print(f'Dump preprocessor: {ppp}')
model_with_ppp = ppp.build()
# ======== Step 2: Save the model with preprocessor================
serialize(model_with_ppp, f'{MODEL_NAME}-cls_ppp.xml', f'{MODEL_NAME}-cls_ppp.bin')

向右滑动查看完整代码

运行结果,如下图所示:

d2621370-e6b2-11ed-ab56-dac502259ad0.png

基于内嵌预处理模型的推理程序

yolov8_cls_ppp_sync_infer.py 的核心代码,如下所示

##########################################
#  ----- AI同步推理计算 ------------
##########################################
# 采集图像
image = cv2.imread("bus.jpg")
blob = np.expand_dims(image,0)
# 执行推理计算并获得结果
outs = ir.infer(blob)[output_node]
# 对推理结果进行后处理
score, id, label = postprocess(outs)
##########################################
#  ----- 统计带前后预处理的AI推理性能------
##########################################
start = time.time()
N = 1000
for i in range(N):
  blob = np.expand_dims(image,0)
  outs = ir.infer(blob)[output_node]
  score, id, label = postprocess(outs)
FPS = N / (time.time() - start)

向右滑动查看完整代码

运行结果,如下所示:

d2823254-e6b2-11ed-ab56-dac502259ad0.png

结论

AI 爱克斯开发板借助N5105处理器的集成显卡(24个执行单元)和 OpenVINO ,可以在 YOLOv8 的分类模型上获得相当不错的性能。

通过异步处理和AsyncInferQueue ,还能进一步提升计算设备的利用率,提高 AI 推理程序的吞吐量。下一篇将继续介绍在《在 AI 爱克斯开发板上用 OpenVINO 加速 YOLOv8 目标检测模型》。

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

    关注

    61

    文章

    10205

    浏览量

    175063
  • AI
    AI
    +关注

    关注

    88

    文章

    35476

    浏览量

    281285
  • 开发板
    +关注

    关注

    25

    文章

    5725

    浏览量

    105625
  • 模型
    +关注

    关注

    1

    文章

    3531

    浏览量

    50572
  • python
    +关注

    关注

    56

    文章

    4831

    浏览量

    87375

原文标题:在AI爱克斯开发板上用OpenVINO?加速YOLOv8分类模型 | 开发者实战

文章出处:【微信号:英特尔物联网,微信公众号:英特尔物联网】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    如何提高yolov8模型k230运行的帧率?

    我rgb888p_size参数[1280,720]时只有4~6 FPS,调成[640,640]大概也只有10FPS左右,我是官方yoolo大作战的示例代码看的,的是
    发表于 06-20 06:25

    【爱芯派 Pro 开发板试用体验】yolov8模型转换

    通过开发板预制的ax_run_model 工具,测试模型速度和精度。 示例都是yolov5的,没有yolov8
    发表于 11-20 12:19

    YOLOv8自定义数据集训练到模型部署推理简析

    如果你只是想使用而不是开发,强烈推荐通过pip安装方式获取YOLOv8包!YOLOv8安装命令行
    的头像 发表于 03-24 09:27 ?5204次阅读

    AI爱克斯开发板OpenVINO?加速YOLOv8目标检测模型

    AI 爱克斯开发板 OpenVINO
    的头像 发表于 05-12 09:08 ?1857次阅读
    <b class='flag-5'>在</b><b class='flag-5'>AI</b><b class='flag-5'>爱克斯</b><b class='flag-5'>开发板</b><b class='flag-5'>上</b><b class='flag-5'>用</b><b class='flag-5'>OpenVINO</b>?<b class='flag-5'>加速</b><b class='flag-5'>YOLOv8</b>目标检测<b class='flag-5'>模型</b>

    ?AI爱克斯开发板OpenVINO加速YOLOv8-seg实例分割模型

    benchmark_app是OpenVINOTM工具套件自带的AI模型推理计算性能测试工具,可以指定在不同的计算设备同步或异步模式下,测试出不带前后处理的纯
    的头像 发表于 05-24 11:19 ?1060次阅读
    ?<b class='flag-5'>在</b><b class='flag-5'>AI</b><b class='flag-5'>爱克斯</b><b class='flag-5'>开发板</b><b class='flag-5'>上</b><b class='flag-5'>用</b><b class='flag-5'>OpenVINO</b><b class='flag-5'>加速</b><b class='flag-5'>YOLOv8</b>-seg实例分割<b class='flag-5'>模型</b>

    AI爱克斯开发板使用OpenVINO加速YOLOv8目标检测模型

    AI爱克斯开发板OpenVINO
    的头像 发表于 05-26 11:03 ?1903次阅读
    <b class='flag-5'>AI</b><b class='flag-5'>爱克斯</b><b class='flag-5'>开发板</b><b class='flag-5'>上</b>使用<b class='flag-5'>OpenVINO</b><b class='flag-5'>加速</b><b class='flag-5'>YOLOv8</b>目标检测<b class='flag-5'>模型</b>

    AI爱克斯开发板OpenVINO?加速YOLOv8-seg实例分割模型

    AI 爱克斯开发板 OpenVINO
    的头像 发表于 06-05 11:52 ?1488次阅读
    <b class='flag-5'>在</b><b class='flag-5'>AI</b><b class='flag-5'>爱克斯</b><b class='flag-5'>开发板</b><b class='flag-5'>上</b><b class='flag-5'>用</b><b class='flag-5'>OpenVINO</b>?<b class='flag-5'>加速</b><b class='flag-5'>YOLOv8</b>-seg实例分割<b class='flag-5'>模型</b>

    教你如何用两行代码搞定YOLOv8各种模型推理

    大家好,YOLOv8 框架本身提供的API函数是可以两行代码实现 YOLOv8 模型推理,这次我把这段代码封装成了一个,只有40行代码左右,可以同时支持
    的头像 发表于 06-18 11:50 ?3799次阅读
    教你如何用两行代码搞定<b class='flag-5'>YOLOv8</b>各种<b class='flag-5'>模型</b>推理

    OpenVINO? C++ API编写YOLOv8-Seg实例分割模型推理程序

    本文章将介绍使用 OpenVINO 2023.0 C++ API 开发YOLOv8-Seg 实例分割(Instance Segmentation)模型
    的头像 发表于 06-25 16:09 ?2386次阅读
    <b class='flag-5'>用</b><b class='flag-5'>OpenVINO</b>? C++ API编写<b class='flag-5'>YOLOv8</b>-Seg实例分割<b class='flag-5'>模型</b>推理程序

    AI爱克斯开发板OpenVINO?加速YOLOv8-seg实例分割模型

    AI 爱克斯开发板 OpenVINO
    的头像 发表于 06-30 10:43 ?2023次阅读
    <b class='flag-5'>在</b><b class='flag-5'>AI</b><b class='flag-5'>爱克斯</b><b class='flag-5'>开发板</b><b class='flag-5'>上</b><b class='flag-5'>用</b><b class='flag-5'>OpenVINO</b>?<b class='flag-5'>加速</b><b class='flag-5'>YOLOv8</b>-seg实例分割<b class='flag-5'>模型</b>

    三种主流模型部署框架YOLOv8推理演示

    部署。这里以YOLOv8为例,演示了YOLOv8对象检测模型OpenVINO、ONNXRUNTIME、TensorRT三个主流框架上C++
    的头像 发表于 08-06 11:39 ?3362次阅读

    基于YOLOv8的自定义医学图像分割

    YOLOv8是一种令人惊叹的分割模型;它易于训练、测试和部署。本教程中,我们将学习如何在自定义数据集使用YOLOv8。但在此之前,我想告
    的头像 发表于 12-20 10:51 ?1308次阅读
    基于<b class='flag-5'>YOLOv8</b>的自定义医学图像分割

    基于哪吒开发板部署YOLOv8模型

    开发板的推理性能,同时测试所推出的 OpenVINO C# API (https://github.com/guojin-yan/OpenVINO-CSharp-API) 项目能否应用到该
    的头像 发表于 11-15 14:13 ?1139次阅读
    基于哪吒<b class='flag-5'>开发板</b>部署<b class='flag-5'>YOLOv8</b><b class='flag-5'>模型</b>

    RK3576 yolov8训练部署教程

    本章展示yolov8模型EASY EAI Orin nano的部署过程。
    的头像 发表于 04-02 16:04 ?547次阅读
    RK3576 <b class='flag-5'>yolov8</b>训练部署教程

    RV1126 yolov8训练部署教程

    YOLOv8 是 ultralytics 公司 2023 年 1月 10 号开源的基于YOLOV5进行更新的 下一个重大更新版本,目前支持图像分类、物体检测和实例分割任务,鉴于
    的头像 发表于 04-16 14:53 ?556次阅读
    RV1126 <b class='flag-5'>yolov8</b>训练部署教程