如何转换PyTorch模型并使用OpenVINO™工具包运行它

注意:本文是使用 OpenVINO 2022.1创建的。如果您想知道如何使用OpenVINO 2021.4的旧API,请查看此notebook

尽管PyTorchAI训练的绝佳框架,可用于推理,但 OpenVINO™工具包可以在推理性能方面提供额外的好处,因为它针对此任务进行了大量优化。要使用它,您只需3个简单的步骤:安装OpenVINO、转换和优化模型并运行推理。为了向您展示整个过程,我们决定使用FastSeg模型,这是一个用于语义分割的网络,在Cityscapes数据集上进行了预训练。

OpenVINO能够以中间表示IR)格式为网络运行推理。因此,您必须使用模型优化器(开发包中的命令行工具)转换网络。最简单的安装方法是使用PyPi

pip install openvino-dev[pytorch,onnx]

第一步是将模型导出为ONNX格式。您需要使用Opset版本11,因为OpenVINO支持该版本。此外,对于此特定型号,不允许恒定折叠。

from fastseg import MobileV3Large

model = MobileV3Large.from_pretrained().cpu().eval()
dummy_input = torch.randn(1, 3, 512, 1024)

torch.onnx.export(model, dummy_input, "fastseg1024.onnx", opset_version=11, do_constant_folding=False)

OpenVINO直接支持ONNX,因此您可以将导出的模型加载到运行时并开始处理。但是,为了获得更好的性能,需要将模型转换并优化为IR。在终端中使用以下命令:

mo --input_model fastseg1024.onnx --input_shape "[1,3,512,1024]"

这意味着您正在转换输入大小等于1024x512x3W x H x C)的model.onnx。当然,您可以提供其他参数,例如预处理或模型精度(FP32FP16):

mo --input_model fastseg1024.onnx --input_shape "[1,3,512,1024]" --mean_values="[123.675,116.28,103.53]" --scale_values="[58.395,57.12,57.375]" --data_type FP16

均值的减法和除以标准差将直接内置到处理图中,推理将使用FP16运行。执行后,您应该看到如下所示的内容,其中包含所有显式和隐式参数,例如模型路径、输入形状、精度、平均值和小数位数值、转换参数等等:

Model Optimizer arguments:
Common parameters:
    - Path to the Input Model: /home/adrian/repos/openvino_notebooks/notebooks/102-pytorch-onnx-to-openvino/fastseg.onnx
    - Path for generated IR: /home/adrian/repos/openvino_notebooks/notebooks/102-pytorch-onnx-to-openvino/
    - IR output name: fastseg
    - Log level: ERROR
    - Batch: Not specified, inherited from the model
    - Input layers: Not specified, inherited from the model
    - Output layers: Not specified, inherited from the model
    - Input shapes: [1,3,512,1024]
    - Source layout: Not specified
    - Target layout: Not specified
    - Layout: Not specified
    - Mean values: [123.675,116.28,103.53]
    - Scale values: [58.395,57.12,57.375]
    - Scale factor: Not specified
    - Precision of IR: FP16
    - Enable fusing: True
    - User transformations: Not specified
    - Reverse input channels: False
    - Enable IR generation for fixed input shape: False
    - Use the transformations config file: None
Advanced parameters:
    - Force the usage of legacy Frontend of Model Optimizer for model conversion into IR: False
    - Force the usage of new Frontend of Model Optimizer for model conversion into IR: False
OpenVINO runtime found in:  /home/adrian/repos/openvino_notebooks/venv/lib/python3.9/site-packages/openvino
OpenVINO runtime version: 2022.1.0-7019-cdb9bec7210-releases/2022/1
Model Optimizer version: 2022.1.0-7019-cdb9bec7210-releases/2022/1
[ SUCCESS ] Generated IR version 11 model.
[ SUCCESS ] XML file: /home/adrian/repos/openvino_notebooks/notebooks/102-pytorch-onnx-to-openvino/fastseg.xml
[ SUCCESS ] BIN file: /home/adrian/repos/openvino_notebooks/notebooks/102-pytorch-onnx-to-openvino/fastseg.bin
[ SUCCESS ] Total execution time: 0.55 seconds. 
[ SUCCESS ] Memory consumed: 112 MB. 
[ INFO ] The model was converted to IR v11, the latest model format that corresponds to the source DL framework input/output format. While IR v11 is backwards compatible with OpenVINO Inference Engine API v1.0, please use API v2.0 (as of 2022.1) to take advantage of the latest improvements in IR v11.
Find more information about API v2.0 and IR v11 at https://docs.openvino.ai

几乎在最后的成功一词表示一切都已成功转换。您获得了IR,它包含两个文件:.xml.bin。您现在可以将此网络放入OpenVINO™运行时并执行推理。

import cv2 
import numpy as np 
from openvino.runtime import Coreimage_filename = "data/street.jpg"

image = cv2.cvtColor(cv2.imread(image_filename), cv2.COLOR_BGR2RGB)resized_image = cv2.resize(image, (1024, 512))

# Convert the resized images to network input shape
input_image = np.expand_dims(np.transpose(resized_image, (2, 0, 1)), 0)

# Load the network in Inference Engine
core = Core()
model_ir = core.read_model(model="fastseg.xml")
compiled_model_ir = core.compile_model(model=model_ir, device_name="CPU")

# Get output layer
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)

它有效!下面的街道是分段的。您可以通过此演示自己尝试。

或者,您可以使用此工具找到下载和安装有关您的环境的OpenVINO™工具包的最佳方式。

资源

本文最初发表于https://medium.com/openvino-toolkit/how-to-convert-pytorch-model-and-run-it-with-openvino-toolkit-c73cebcc01f5

https://www.codeproject.com/Articles/5335242/How-to-convert-PyTorch-model-and-run-it-with-OpenV

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
### 回答1: 好的,使用 OpenVINO 来实现人物检测,你需要以下几步: 1. 安装 OpenVINO 工具包。安装完成后,你可以在命令行中使用 `setupvars.bat` 命令来设置环境变量。 2. 准备数据集。你需要有一些带有人物的图像,用来训练你的模型。 3. 选择一个预训练的模型或自己训练一个模型OpenVINO 提供了许多不同的预训练模型,例如 MobileNet-SSD、YOLOv3 等。你也可以使用 TensorFlow、PyTorch 等框架自己训练一个模型。 4. 将模型转换OpenVINO 能够识别的格式。你可以使用 OpenVINO 的 Model Optimizer 工具来转换模型。 5. 使用 OpenVINO 的 Inference Engine 库来加载并运行你的模型。你可以使用 OpenCV 等库来处理图像,并使用 Inference Engine 库来对图像进行人物检测。 6. 可以使用 OpenCV 等库来在图像上绘制人物检测的结果。 希望这些步骤能帮助你使用 OpenVINO 实现人物检测。 ### 回答2: 使用OpenVINOOpen Visual Inference & Neural Network Optimization)实现人物检测是一种基于硬件加速的深度学习推理解决方案。OpenVINO是英特尔开发的一款开源工具套件,旨在优化和加速基于深度学习的计算机视觉应用。 人物检测指的是在图像或视频中自动识别和定位人物的过程。使用OpenVINO实现人物检测的步骤如下: 首先,选择一个适当的深度学习模型进行人物检测。常用的模型包括SSD(Single Shot MultiBox Detector)和 Faster R-CNN(Region-based Convolutional Neural Networks)等。这些模型可以从预训练的模型库中获取,也可以自己训练。 接下来,使用OpenVINO的Model Optimizer工具将选择的模型转换OpenVINO的推理引擎可以使用的中间表示(Intermediate Representation,IR)。这将加快推理过程,并为模型优化做准备。 然后,根据具体需求,选择合适的硬件进行加速。OpenVINO支持多种硬件加速平台,包括英特尔的CPU、GPU和VPU(Vision Processing Unit)等。选择适当的硬件加速平台可以提高模型的推理速度和效率。 最后,使用OpenVINO的推理引擎加载并推理经过优化和加速的模型。该引擎将模型的IR加载到所选的硬件上,并对输入图像或视频进行推理,从而检测和定位人物。 通过使用OpenVINO实现人物检测,可以在较短的时间内实现高效的人物检测应用,而无需深入了解硬件细节和编程细节。该平台提供了一系列方便易用的工具和API,使得开发者可以快速部署和优化深度学习模型,实现人物检测的各种应用场景。 ### 回答3: 使用OpenVINO实现人物检测是一个利用深度学习技术的计算机视觉任务。OpenVINO是英特尔的一套用于实现高性能计算机视觉和深度学习推理的工具包。 在人物检测任务中,首先需要收集并准备一个人物检测的数据集,包含有人物的图片数据。然后,可以选择合适的深度学习模型作为人物检测模型,例如SSD(Single Shot MultiBox Detector)或YOLO(You Only Look Once)。这些模型已经在大型数据集上进行了训练,并能够高效地检测出图像中的人物。 接下来,使用OpenVINO模型优化器对选择的人物检测模型进行优化,以使其在Intel硬件上的推理性能最大化。模型优化器会对模型进行重量级量化、剪枝以及其他优化操作,以减小模型的大小和计算量,并提高推理速度。 完成模型优化后,可以使用OpenVINO提供的推理引擎,将优化后的模型加载到目标硬件上进行推理。推理引擎会将输入的图像数据传递给模型,并输出检测到的人物信息,如人物的位置、边界框和置信度等。 使用OpenVINO实现人物检测还可以结合其他功能,如并发推理、多个摄像头输入和人物跟踪等技术。并发推理可以实现多个图像同时进行推理,提高检测速度;多个摄像头输入可以同时检测多个视频流中的人物;人物跟踪可以实现对特定人物的持续跟踪和识别。 综上所述,通过使用OpenVINO工具包,结合合适的深度学习模型和进行模型优化,可以实现高效、准确的人物检测。这些技术和功能可以广泛应用于人脸识别、监控安防、人物计数等领域。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值