[Python] 纯文本查看 复制代码# 只保留参数[/align]torch.save(model.state_dict(), '\parameter.pkl')
②保存完整的模型
[Python] 纯文本查看 复制代码# 保存完整的模型
torch.save(model, '\model.pkl')
我们需要完整的网络信息用于转化,所以需要在此选择第二种“保存完整的模型”方式。
之后,我们需要读取这个pkl文件并将其转化为onnx格式,我们需要定义批处理大小、输入数据尺寸、使用设备等信息,再定义好文件输入与输出的路径即可。
[Python] 纯文本查看 复制代码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)
2.使用模型优化器进行优化
OpenVINO的推理引擎支持的文件为中间表示文件IR,需要调用OpenVINO工具包中的mo.py进行优化,如果使用Tensorflow等直接支持的框架则可以直接从框架模型转化为IR,而如果是像本文中提到的Pytorch的模型,其需先转化到ONNX文件再进行间接的IR转化,最终得到的IR文件将由两个部分组成:
① .xml 描述网络的拓扑结构
② .bin 网络的权重与偏置的二进制数据
先在开始前设置好OpenVINO的环境变量。
[Bash shell] 纯文本查看 复制代码cd C:\Program Files (x86)\IntelSWTools\openvino_2020.3.194\bin
setupvars.bat
接着,我们需要切换到模型优化器的目录下,这个目录下保存了用于不同框架的模型优化器,例如mo_caffe.py, mo_tf.py等文件。
M2@1DDZU13HY1_7@SH]I{%S.png (3.01 KB, 下载次数: 0)
2020-7-27 23:27 上传
当然,如果安装时没有安装在默认目录的话,需要重新调整前半段的路径位置。
[Python] 纯文本查看 复制代码cd C:\Program Files (x86)\IntelSWTools\openvino\deployment_tools\model_optimizer
之后,我们运行模型优化器mo.py并输入onnx文件的路径,就可以完成模型的优化,得到xml与bin文件。
[Python] 纯文本查看 复制代码python mo.py --input_model F:\Onedrive\Code\DFRobot\acconeer\model\example.onnx
模型优化后的文件会自动保存在【....\openvino\deployment_tools\model_optimizer\example.xml】目录下,我们需要记下这个位置之后在部署时使用。
3.将优化后的模型部署到神经网络计算棒上
笔者在比赛中所作的项目是射频信号图片的分类工作,需要用到classification_sample.py,在model参数中输入上一步生成的xml文件的路径,在input 参数中输入需要进行分类的图片路径,我们也可以通过device参数选择运行的设备,如果需要使用神经计算棒进行加速的话,我们在这一栏选择MYRIAD即可。
由于OpenVINO在顶层规划上就很好地采用了一套API用于不同设备的设计,我们在实际使用的时候输入xml的拓扑结构描述文件与需要进行加速的设备就能方便地使用了,这也是其一大亮点。
[Bash shell] 纯文本查看 复制代码"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】
%OLNO5(SMNO5641IWD3UU1H.png (242.38 KB, 下载次数: 0)
2020-7-27 23:26 上传
从输出我们可以看到神经计算棒顺利的完成了这个四分类问题的推理,尽管经过了模型的转化和优化,但是推理的正确率仍然是很高的,神经计算棒的推理速度也非常快。当然,这只是一个getting start的一个简单示例,在实际生产环境中还是要使用专用的benchmark_app 工具。