MindSpore Lite的ms模型在安卓手机端进行推理方法

转载地址:https://bbs.huaweicloud.com/forum/thread-106906-1-1.html

作者:MindSpore狂热粉丝

邮箱:chaojiwangyuan2021@163.com

注:本人利用imagenet网络训练ms模型,推到手机端进行图片推理。

加载模型:从文件系统中读取MindSpore Lite模型,并进行模型解析。

1

2

3

4

5

model = new Model();

if (!model.loadModel(context, "wangyuan.ms")) {

    Log.e("MS_LITE""This demo loads model unsuccessfully");

    return false;

}

创建配置上下文:创建配置上下文MSConfig,保存会话所需的一些基本配置参数,用于指导图编译和图执行。主要包括deviceType:设备类型、threadNum:线程数、cpuBindMode:CPU绑定模式、enable_float16:是否优先使用float16算子。

1

2

3

4

5

MSConfig msConfig = new MSConfig();

if (!msConfig.init(DeviceType.DT_CPU, 2, CpuBindMode.MID_CPU, true)) {

    Log.e("MS_LITE""This demo inits context unsuccessfully");

    return false;

}

创建会话:创建LiteSession,并调用init方法将上一步得到MSConfig配置到会话中。

1

2

3

4

5

6

7

session = new LiteSession();

if (!session.init(msConfig)) {

    Log.e("MS_LITE""This demo creates session unsuccessfully");

    msConfig.free();

    return false;

}

msConfig.free();

图编译:在图执行前,需要调用LiteSession的compileGraph接口进行图编译,主要进行子图切分、算子选型调度。这部分会耗费较多时间,所以建议LiteSession创建一次,编译一次,多次执行。

1

2

3

4

5

6

if (!session.compileGraph(model)) {

    Log.e("MS_LITE""This demo compiles graph unsuccessfully");

    model.freeBuffer();

    return false;

}

model.freeBuffer();

输入数据:图执行之前需要向输入Tensor中填充数据(注:本人输入用的是二进制的图片)

1

2

3

4

List<MSTensor> inputs = session.getInputs();

MSTensor inTensor = inputs.get(0);

byte[] inData = readFileFromAssets(context, "wangyuan_cat.bin");

inTensor.setData(inData);

图执行:使用LiteSession的runGraph进行模型推理。

1

2

3

4

if (!session.runGraph()) {

    Log.e("MS_LITE""This demo runs graph unsuccessfully");

    return;

}

获得输出:图执行结束之后,可以通过输出Tensor得到推理结果。

1

2

3

4

5

6

7

8

9

10

11

List<String> tensorNames = session.getOutputTensorNames();

Map<String, MSTensor> outputs = session.getOutputMapByTensor();

Set<Map.Entry<String, MSTensor>> entries = outputs.entrySet();

for (String tensorName : tensorNames) {

    MSTensor output = outputs.get(tensorName);

    if (output == null) {

        Log.e("MS_LITE""Can not find output " + tensorName);

        return;

    }

    float[] results = output.getFloatData();

}


释放内存:无需使用MindSpore Lite推理框架的时候,需要将创建的LiteSession和model进行释放。

1

2

3

4

private void free() {

    session.free();

    model.free();

}

本人选取的数据集是cat_dog数据集,输出结果在logcat里,利用results对应的最高值匹配label,输出相应的结果,结果如下:

WangYuan infer result is Cat !

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值