2020-7-27 23:28:08 [显示全部楼层]
1361浏览
查看: 1361|回复: 2

[平台测评] 将Pytorch模型部署到Movidius神经计算棒

[复制链接]
本帖最后由 K2dCnC_w 于 2020-7-27 23:39 编辑

        上一篇帖子中,我们讲述了OpenVINO的安装与配置过程,这篇文章将又是从笔者这样一个小白的视角出发,演示如何将自己训练的网络模型使用OpenVINO的优化器进行优化,并将其部署到神经计算棒进行推理加速的过程。


1.将Pytorch模型转化为ONNX格式
        我们可以从脚本中保存网络的结构开始看,Pytorch保存模型分为两种:
        ① 只保留模型参数
         [mw_shl_code=python,false]# 只保留参数
torch.save(model.state_dict(), '\parameter.pkl')[/mw_shl_code]
        ②保存完整的模型
         [mw_shl_code=python,false]# 保存完整的模型
torch.save(model, '\model.pkl')[/mw_shl_code]
        我们需要完整的网络信息用于转化,所以需要在此选择第二种“保存完整的模型”方式。
        之后,我们需要读取这个pkl文件并将其转化为onnx格式,我们需要定义批处理大小、输入数据尺寸、使用设备等信息,再定义好文件输入与输出的路径即可。
[mw_shl_code=python,false]import torch
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
model = torch.load(model_path, map_location=device)
model.eval()
batch_size = 1
input_shape = (3,224,224)
input_data_shape = torch.randn(batch_size, *input_shape, device=device)
torch.onnx.export(model, input_data_shape, output_path, verbose=True)[/mw_shl_code]


2.使用模型优化器进行优化
         OpenVINO的推理引擎支持的文件为中间表示文件IR,需要调用OpenVINO工具包中的mo.py进行优化,如果使用Tensorflow等直接支持的框架则可以直接从框架模型转化为IR,而如果是像本文中提到的Pytorch的模型,其需先转化到ONNX文件再进行间接的IR转化,最终得到的IR文件将由两个部分组成:

        ① .xml 描述网络的拓扑结构
        ② .bin  网络的权重与偏置的二进制数据

        先在开始前设置好OpenVINO的环境变量。
[mw_shl_code=bash,false]cd C:\Program Files (x86)\IntelSWTools\openvino_2020.3.194\bin
setupvars.bat[/mw_shl_code]
        接着,我们需要切换到模型优化器的目录下,这个目录下保存了用于不同框架的模型优化器,例如mo_caffe.py, mo_tf.py等文件。
       M2@1DDZU13HY1_7@SH]I{%S.png
        当然,如果安装时没有安装在默认目录的话,需要重新调整前半段的路径位置。
         [mw_shl_code=python,false]cd C:\Program Files (x86)\IntelSWTools\openvino\deployment_tools\model_optimizer[/mw_shl_code]
        之后,我们运行模型优化器mo.py并输入onnx文件的路径,就可以完成模型的优化,得到xml与bin文件。
         [mw_shl_code=python,false]python mo.py --input_model F:\Onedrive\Code\DFRobot\acconeer\model\example.onnx[/mw_shl_code]
        模型优化后的文件会自动保存在【....\openvino\deployment_tools\model_optimizer\example.xml】目录下,我们需要记下这个位置之后在部署时使用。


3.将优化后的模型部署到神经网络计算棒上
        笔者在比赛中所作的项目是射频信号图片的分类工作,需要用到classification_sample.py,在model参数中输入上一步生成的xml文件的路径,在input 参数中输入需要进行分类的图片路径,我们也可以通过device参数选择运行的设备,如果需要使用神经计算棒进行加速的话,我们在这一栏选择MYRIAD即可。

        由于OpenVINO在顶层规划上就很好地采用了一套API用于不同设备的设计,我们在实际使用的时候输入xml的拓扑结构描述文件与需要进行加速的设备就能方便地使用了,这也是其一大亮点。
[mw_shl_code=bash,false]"C:\Program Files (x86)\IntelSWTools\openvino_2020.3.194\deployment_tools\inference_engine\samples\python\classification_sample\classification_sample.py" --model 【xml_path】 --device HETERO:MYRIAD,CPU,GPU --input 【img_path】[/mw_shl_code]
         %OLNO5(SMNO5641IWD3UU1H.png

        从输出我们可以看到神经计算棒顺利的完成了这个四分类问题的推理,尽管经过了模型的转化和优化,但是推理的正确率仍然是很高的,神经计算棒的推理速度也非常快。当然,这只是一个getting start的一个简单示例,在实际生产环境中还是要使用专用的benchmark_app 工具。


pATAq  版主

发表于 2020-7-28 15:58:53

回复

使用道具 举报

gray6666  初级技神

发表于 2020-7-29 18:43:48

学习了,赞。。。。。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

为本项目制作心愿单
购买心愿单
心愿单 编辑
[[wsData.name]]

硬件清单

  • [[d.name]]
btnicon
我也要做!
点击进入购买页面
上海智位机器人股份有限公司 沪ICP备09038501号-4

© 2013-2022 Comsenz Inc. Powered by Discuz! X3.4 Licensed

mail