建议使用以下浏览器,以获得最佳体验。 IE 9.0+以上版本 Chrome 31+ 谷歌浏览器 Firefox 30+ 火狐浏览器
请选择 进入手机版 | 继续访问电脑版
设置昵称

在此一键设置昵称,即可参与社区互动!

确定
我再想想
选择版块
标签
您还可以添加5个标签
  • 没有搜索到和“关键字”相关的标签
  • 云产品
  • 解决方案
  • 技术领域
  • 通用技术
  • 平台功能
取消

JeffDing

发帖: 38粉丝: 24

发消息 + 关注

更新于2021年01月25日 08:05:08 201 3
直达本楼层的链接
楼主
显示全部楼层
[干货分享] 【MindSpore两日训练营第五期笔记】导出MindIR格式模型

一、MindIR 概述

MindSpore通过统一IR定义了网络的逻辑结构和算子的属性,将MindIR格式的模型文件
与硬件平台解耦,实现一次训练多次部署。
MindIR作为MindSpore的统一模型文件,同时存储了网络结构和权重参数值。同时支持
部署到云端Serving和端侧Lite平台执行推理任务。
同一个MindIR文件支持多种硬件形态的部署:
- Serving部署推理
- 端侧Lite推理部署

二、名词解释

Checkpoint
• 采用了Protocol Buffers格式,存储了网络中所有的参数值。
• 一般用于训练任务中断后恢复训练,或训练后的微调(Fine Tune)任务。
•MindIR
• 全称MindSpore IR,是MindSpore的一种基于图表示的函数式IR,定义了可扩展的图
结构以及算子的IR表示。
• 它消除了不同后端的模型差异,一般用于跨硬件平台执行推理任务。
•ONNX
• 全称Open Neural Network Exchange,是一种针对机器学习模型的通用表达。
• 一般用于不同框架间的模型迁移或在推理引擎(TensorRT)上使用。
•AIR
• 全称Ascend Intermediate Representation,是华为定义的针对机器学习所设计的开放式
文件格式。
• 它能更好地适应华为AI处理器,一般用于Ascend 310上执行推理任务。

三、导出LeNet网络的MindIR格式模型

1.训练LeNet模型生成checkpoint

LeNet训练代码选用MindSpore官方代码仓中modelzool中的代码

地址:https://gitee.com/mindspore/mindspore/tree/master/model_zoo/official/cv/lenet

2.MNIST数据下载地址

1)官方下载地址:http://yann.lecun.com/exdb/mnist/

2)网盘下载:链接: https://pan.baidu.com/s/1zX-OwL8bOgq4dhEuaRj2Xg 提取码: zew6 

MNIST数据集下载完成后解压到代码根目录下

3.执行训练命令

python train.py --data_path ./MNIST_DATA/ --ckpt_path=./checkpoint/ --device_target Ascend

注:我使用的是昇腾平台进行模型训练,如果使用CPU或者GPU进行训练的话device_target后面改为对应的就好

当屏幕出现epoch、loss等数值时模型就开始进行训练了

4.得到checkpoint

当模型训练参数中指定的ckpt_path文件夹中出现ckpt文件就代表训练成功了。接下去我们可以选择一个ckpt文件进行转换mindir格式。这里我选择checkpoint_lenet-10_1875.ckpt

5.编写模型转换代码

import numpy as np
from mindspore import Tensor, export, load_checkpoint, load_param_into_net
from src.lenet import LeNet5

lenet = LeNet5()
# load the parameter into net
load_checkpoint("./checkpoint/checkpoint_lenet-10_1875.ckpt", net=lenet)  #checkpoint_lenet-10_1875.ckpt更换成对应所需要转换的ckpt文件
input = np.random.uniform(0.0, 1.0, size=[32, 1, 32, 32]).astype(np.float32)  #Lenet模型的size为32,1,32,32
export(lenet, Tensor(input), file_name='lenet-10_1875', file_format='MINDIR') #file_name指定转换后文件的文件名

6.执行模型转换代码

python lenet_mindr.py

执行完毕后查看代码根目录下如果存在前面我们指定的lenet-10_1875.mindir文件的话就代表模型转化成功了!

四、导出ResNet50网络的MindIR格式模型

1.训练ResNet50网络生成checkpoint

ResNet50模型训练代码依旧使用MindSpore官方代码仓中modelzoo的代码,链接:https://gitee.com/mindspore/mindspore/tree/master/model_zoo/official/cv/resnet

2.Cifar10数据集

因为ImageNet数据集比较庞大训练需要比较久的时间,所以这边我们采用cifar10数据集进行模型训练

1)Cifar10数据集官方下载:http://www.cs.toronto.edu/~kriz/cifar.html

2)  百度网盘下载:链接: https://pan.baidu.com/s/1CpgjFtZk2ZQsr_qUtc6z1g 提取码: kjhi 

3.执行训练命令

python train.py --net resnet50 --dataset cifar10 --dataset_path ./data/cifar10-bin/train/  --device_target Ascend

注:我使用的是昇腾平台进行模型训练,如果使用CPU或者GPU进行训练的话device_target后面改为对应的就好

当屏幕出现epoch、loss等数值时模型就开始进行训练了

resnet50.png

4.获取checkpoint

当模型训练参数中指定的ckpt_path文件夹中出现ckpt文件就代表训练成功了。接下去我们可以选择一个ckpt文件进行转换mindir格式。这里我选择resnet-90_1562.ckpt

5.编写模型转换脚本

import numpy as np
from mindspore import Tensor, export, load_checkpoint, load_param_into_net
from src.resnet import resnet50 as ResNet50

resnet = ResNet50()
# load the parameter into net
load_checkpoint("./checkpoint/resnet-90_1562.ckpt", net=resnet)
input = np.random.uniform(0.0, 1.0, size=[32, 3, 224, 224]).astype(np.float32)
export(resnet, Tensor(input), file_name='resnet-90_162', file_format='MINDIR')

6.执行模型转换

python resnet_mindir.py

执行完毕后查看代码根目录下如果存在前面我们指定的resnet-90_1562.mindir文件的话就代表模型转化成功了!


举报
分享

分享文章到朋友圈

分享文章到微博

张辉

发帖: 123粉丝: 75

发消息 + 关注

发表于2021年01月25日 00:20:51
直达本楼层的链接
沙发
显示全部楼层

mark、

点赞 评论 引用 举报

chengxiaoli

发帖: 140粉丝: 25

发消息 + 关注

发表于2021年01月25日 09:28:23
直达本楼层的链接
板凳
显示全部楼层

完整的例子,欢迎大家参考

点赞1 评论 引用 举报

胡琦

发帖: 77粉丝: 28

发消息 + 关注

发表于2021年01月25日 15:09:42
直达本楼层的链接
地板
显示全部楼层

 MindSpore Lite 有 docker 镜像吗?

评论
JeffDing 2021-1-25 18:44 评论

好像没有

... 查看全部
点赞 评论 引用 举报

游客

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