开发者实战 | 在AI爱克斯开发板上用OpenVINO™加速YOLOv8分类模型

2023/05/22 10:29
阅读数 151

点击蓝字

关注我们,让开发变得更有趣


以下文章来源于英特尔物联网,作者英特尔物联网行业创新大使 杨雪锋


本系列文章将在 AI 爱克斯开发板上使用 OpenVINO 开发套件依次部署并测评 YOLOv8 的

分类模型、目标检测模型、实例分割模型人体姿态估计模型



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


请先下载本文的代码仓:

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


1

YOLOv8 简介


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


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


用 Python 代码训练 YOLOv8 模型


用命令行训练 YOLOv8 模型


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


2


准备 YOLOv8 的 

OpenVINO 推理程序开发环境


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

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

向右滑动查看完整代码

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

pip install -r requirements.txt


3

导出 YOLOv8 OpenVINOIR 模型


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



首先使用命令:

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

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



然后使用命令:

mo -m yolov8n-cls.onnx --compress_to_fp16

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



4

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


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


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




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()

向右滑动查看完整代码

运行结果如下图所示:



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 Formatppp.input().tensor() \    .set_element_type(Type.u8) \    .set_spatial_dynamic_shape() \    .set_layout(Layout('NHWC')) \    .set_color_format(ColorFormat.BGR)# Declaring Model Layoutppp.input().model().set_layout(Layout('NCHW'))# Explicit preprocessing steps. Layout conversion will be done automatically as last stepppp.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 Modelprint(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')

向右滑动查看完整代码

运行结果,如下图所示:



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

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 = 1000for 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)

向右滑动查看完整代码

运行结果,如下所示:



结论

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


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


--END--

              
              
              
你也许想了解(点击蓝字查看)⬇️
➡️  以AI作画,祝她节日快乐;简单三步,OpenVINO™ 助你轻松体验AIGC
➡️  还不知道如何用OpenVINO™作画?点击了解教程。
➡️  如何给开源项目做贡献? | 开发者节日福利
➡️   几行代码轻松实现对于PaddleOCR的实时推理,快来get!
➡️   使用OpenVINO 在“端—边—云”快速实现高性能人工智能推理
➡️  图片提取文字很神奇?试试三步实现OCR!
➡️ 【Notebook系列第六期】基于Pytorch预训练模型,实现语义分割任务
➡️ 使用OpenVINO™ 预处理API进一步提升YOLOv5推理性能


             
             
             

扫描下方二维码立即体验 

OpenVINO™ 工具套件 2022.3



                      
                      
                      


点击 阅读原文 立即体验OpenVINO 2022.3
文章这么精彩,你有没有“在看”?

本文分享自微信公众号 - OpenVINO 中文社区(openvinodev)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

展开阅读全文
加载中
点击引领话题📣 发布并加入讨论🔥
0 评论
0 收藏
0
分享
返回顶部
顶部