01.概述
Ubuntu20.04环境下使用OpenVINO部署BiSeNetV2模型
目标检测的主要任务就是从一张图或者视频流的图像中检测图像内某个或者某几个类别对象实例的任务[1]。用更通俗易懂的话来解释就是 在图像中识别出有多少个物体,每个物体是什么类别的,并且对于每个识别出来的物体给出相应的定位。
具体命令如下:
conda install paddlepaddle-gpu==2.1.2 cudatoolkit=11.2 -c https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/Paddle/ -c conda-forge
安装完底层框架之后,是时候安装PaddleDetection啦. 同理, 安装的时候您的好朋友是它的Github仓库。
git clone https://github.com/PaddlePaddle/PaddleDetection.git
当PaddleDetection的代码库下载完之后,就是激动人心的拿来即用步骤。下一步我们将会导出PaddleDetection Model Zoo里训练好的Yolo V3模型~!
04模型转换
模型的转换分为4个步骤:
-
最后编译IR模型成为.blob模型(只适用于Intel? VPU,神经棒等, 部署到CPU时不需要)
-
首先请下载YOLOv3的参数文件 (YOLOv3_mobilenet_v3_large_270e_voc.pdparams). 下载后请在PaddleDetection目录下创建一个叫做models的文件夹,并且把参数文件放在里面。
-
激活刚才安装好的Anaconda Paddle环境
conda activate paddle
- 克隆PaddleDetection的代码库(如果您在前面已经下载好请略过这一步)
git clone https://github.com/PaddlePaddle/PaddleDetection.git
- 安装依赖项
cd PaddleDetection
pip install -r requirements.txt
- 导出模型
python tools/export_model.py
–output_dir inference_model
注意,请先创建一个 名为: inference_model的文件夹,记得把参数文件的路径也改成您存放参数文件的相应路径。
导出后的模型将会保存在
inference_model/YOLOv3_mobilenet_v3_large_270e_voc这个文件夹下面。
4.3转换ONNX模型到OpenVINO? IR模型
铺垫了很久,终于来到了这一步。
先来快速介绍一下OpenVINO? 的IR模型。IR的全称叫做Intermediate Representation. IR格式的模型是由2个文件组成的,它们分别是 .xml 和 .bin.
来到这一步之前请确保您的Intel OpenVINO安装成功啦。怎样安装Intel OpenVINO呢的好朋友又要出现了:Intel OpenVINO官 安装教程(地址:
https://docs.openvinotoolkit.org/cn/latest/openvino_docs_install_guides_installing_openvino_linux.html#install-openvino),这里是Intel OpenVINO官方下载地址(https://software.seek.intel.com/openvino-toolkit)
Intel OpenVINO的安装包里3种安装选项分别是:
对于新手,推荐用GUI安装,清清楚楚、明明白白。
4.3.1设置外部软件依赖
安装成功后,记得把Install External Software Dependencies这个部分的要求也跟完。
(地址:
https://docs.openvinotoolkit.org/cn/latest/openvino_docs_install_guides_installing_openvino_linux.html#install-external-dependencies)
4.3.2激活OpenVINO? 工具套件环境变量
小提示:接下来要使用OV就要设置好它的环境变量。官方教程(地址:
https://docs.openvinotoolkit.org/cn/latest/openvino_docs_install_guides_installing_openvino_linux.html#set-the-environment-variables)要求把环境变量加载到您的 .bashrc文件里,这样每次打开任何命令行接口都可以自动加载OV的环境变量。但是我在实际使用过程中发现了一个问题。安装完OV后,我的一部分程序开始 错,出现了一个和Gstreamer相关的错误信息。经过研究发现原来OV的环境变量会和Anaconda的虚拟环境冲突,导致GStreamer出现问题。
其实解决方法也很简单。我们一般只会在模型转换的时候用到OV,那么就不要把OV的环境变量设置到.bashrc文件里面,只需要在使用OV之前,在命令行里激活OV的环境变量就行。激活环境变量的方法如下:
source /opt/intel/openvino_2021/bin/setupvars.sh
记住/opt/intel/openvino_2021/bin 是默认的OV安装路径,如果您改变了路径,请记得也随之改变这里的路径。
4.3.3配置模型优化器
Model Optimizer(MO)
MO是一个基于Python的命令行工具,可以用来从其他流行的人工智能框架例如Caffe,ONNX,TensorFlow等导入训练好的模型。没有用MO优化过的模型是不能用来在OV上做推理的。
在这一步可以只为您需要的环境比如ONNX,或者Tensorflow等做配置,但也可以一下配置好可以适用于各种人工智能框架的环境。我在这里选择了后者,毕竟路慢慢其修远 现在用ONNX 之后也有可能用到任何其他 络。
4.3.4转ONNX模型到IR模式
配置好MO之后 CD到MO设置的文件夹里面:
cd /opt/intel/openvino_2021/deployment_tools/model_optimizer
记得激活一下OpenVINO? 工具套件的环境变量:
source /opt/intel/openvino_2021/bin/setupvars.sh
之后我们就可以开始期待已久的OpenVINO? 工具套件IR模型转换(请把下面文件的路径替换成您相应的路径)。
$ python mo_onnx.py –input_model /Paddle2ONNX/YOLOv3.onnx –output_dir /Intel/Models/Paddle/Detection/YOLOv3_mobilenet_v3_large_270e_voc/OpenVINO/
Model Optimizer arguments:
Common parameters:
ONNX specific parameters:
Inference Engine version: 2021.4.0-3839-cd81789d294-releases/2021/4
Model Optimizer version: 2021.4.0-3839-cd81789d294-releases/2021/4
[ SUCCESS ] Generated IR version 10 model.
[ SUCCESS ] XML file: /media/winstonfan/Workspace/Work/Intel/Models/Paddle/Detection/YOLOv3_mobilenet_v3_large_270e_voc_origin/OpenVINO/YOLOv3.xml
[ SUCCESS ] BIN file: /media/winstonfan/Workspace/Work/Intel/Models/Paddle/Detection/YOLOv3_mobilenet_v3_large_270e_voc_origin/OpenVINO/YOLOv3.bin
[ SUCCESS ] Total execution time: 24.99 seconds.
[ SUCCESS ] Memory consumed: 575 MB.
4.4验证转换后的IR模型
在继续下去之前我们应该先检验一下这个模型是否真的转换成功。
在运行如下代码之前,请换一个命令行窗口,并且启动之前创建的Anaconda 环境,这样做是为了确保OV的环境变量和Conda的不互相冲突,产生错误。
幸运的是, 在Paddle2ONNX代码库的 release/0.9分支有提供给我们一个检测IR模型的代码。(地址:
https://github.com/PaddlePaddle/Paddle2ONNX/tree/release/0.9)
所以我们只需要在Paddle2Onnx代码库的根目录下创建一个文件 YOLOv3_infer.py,代码如下(请替换相应的文件路径):
from experimental.openvino_ppdet.YOLOv3_infer import YOLOv3
xml_file =”/Intel/Models/Paddle/Detection/YOLOv3_mobilenet_v3_large_270e_voc/OpenVINO/YOLOv3.xml”
bin_file = “/Intel/Models/Paddle/Detection/YOLOv3_mobilenet_v3_large_270e_voc/OpenVINO/YOLOv3.bin”
model = YOLOv3(xml_file=xml_file,bin_file=bin_file,model_input_shape=[608, 608])
boxes = model.predict(“street.jpeg”, visualize_out=“result.jpg”, threshold=0.1)
4.5模型性能和吞吐量
测试好模型之后,我们还可以检查一下模型的性能和吞吐量。幸运的是,Intel? DevCloud已经提供了现有的工具来帮助我们快速完成这项工作。
这里是它的Jupyter Notebooks平台:
https://devcloud.intel.com/zh/edge/advanced/connect_and_create/
在使用前,需要先注册账户。
任意挑选了几套硬件搭配,来看一下刚转换好的IR模型性能。
05总结
https://github.com/franva/Intel-OpenVINO-Paddle/tree/main/PaddleDetection,欢迎大家提出宝贵的意见。
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!
-