MNN使用1-基本用法

MNN使用1-基本用法 Debug 2023-09-07 18:43:08 325

编译好之后的MNN工具都在build目录下面。

1 模型转换

动态输入大小的interpreter代码编写,见https://www.yuque.com/mnn/cn/input

cd到build,执行

./MNNConvert -f TF --modelFile ../resource/model/ocr-STR.pb --MNNModel  ../resource/model/ocr-STR.mnn --bizCode MNN
  • 模型转化的速度非常非常快,10ms左右估计;
  • 模型转换完成后,会出现Inputs和Outputs节点名称,注意该名称与转换前的tensorflow或者pytorch的节点名称不一样;
  • 模型转换支持非固定尺寸的输入。如果需要指定尺寸,对于TensorFlow,则需要在freeze成pb模型的时候就指定尺寸,即需修改freeze函数中tf.placeholder的img_holder为固定尺寸而非None;

2 模型量化(离线量化)

文档:https://www.yuque.com/mnn/cn/tool_quantize
  • 转换为量化模型时必须固定输入尺寸,所以离线量化模型不能够非固定尺寸输入进行推理
  • 如下图所示,需要修改mean、normal、width、height,用于量化评估的测试图片(官方推荐100-1000张)
# 模型量化
./quantized.out ../resource/model/ocr/STD/STD.mnn ../resource/model/ocr/STD/quant-STD.mnn /Volumes/学习/programs/MNN-0.2.2.2/tools/quantization/preprocessConfig.json

易百纳社区

3 速度测试

timeProfile.out工具可进行模型Op总耗时统计和模型运算量估计
  • 对于固定输入尺寸的模型,使用下述命令时可不指定尺寸

cd到build,执行

# timeProfile.out除了可以查看模型性能瓶颈,还可以通过timeProfile.out运行是否成功来判断模型的输入数据格式顺序(nchw还是nhwc),caffe转换后的mnn模型好像是nhwc
./timeProfile.out ../resource/model/mobilenetV2.mnn 10 0 1x3x88×352

# 对于nhwc格式的数据
./timeProfile.out ../resource/model/mobilenet_v2.caffe.mnn  10 0 1x88×352x3

4 MNN模型转换前后的inference结果对比

运行原模型:

  • 修改test4TF.py中输入的维度,pb模型的路径,输入和输出tensor的名称
  • 运行完后,即可输出Python调用tensorflow模型的output结果,并保存在当前文件夹下的TF_result.txt中
# cd到tools/converter/tools
python test4TF.py

运行MNN转换后的模型:

  • 生成MNN转换后的模型输出,并保存在当前文件夹下的output.txt中,可用于与python test4TF.py的输出进行比对(但MNNV2Basic.out 仅支持单输入单输出模型)
  • 同时MNNV2Basic.out 可以将每个op的操作时间都打印出来
# cd到build
./MNNV2Basic.out ../benchmark/models/MNN_model/ocr_recognize_1178500_noUpsample.pb.mnn 10 1 0 1x3x128x512

5 查看模型节点信息

cd到tools/converter/build文件夹下,执行

./MNNDump2Json.out ../tools/ocr_STR.mnn test.json

即可生成权重、节点的信息,保存在json文件中。

注意:运行模型时若出现The mobilenetv2/conv1_1/conv1_1/conv2d/Conv2D’s input is not ready Resize error for mobilenetv2/conv1_1/conv1_1/conv2d/Conv2D, code=3,注意这个不是错误,这个是因为在model file中没有定义input dimensions。

6 MNN的pc端测试自己的模型

pc的demo在exec文件夹中

# [1]修改CMkeLists.txt的内容并生成test_ocr.out
cmake ..
make
# [2]执行test_ocr.out得到网络运行结果
./test_ocr.out ../benchmark/models/MNN_model/ocr_STR.mnn ../demo/exec/images/test.jpg ../demo/exec/pose.png


声明:本文内容由易百纳平台入驻作者撰写,文章观点仅代表作者本人,不代表易百纳立场。如有内容侵权或者其他问题,请联系本站进行删除。
Debug
红包 1 收藏 评论 打赏
评论
0个
内容存在敏感词
手气红包
    易百纳技术社区暂无数据
相关专栏
置顶时间设置
结束时间
删除原因
  • 广告/SPAM
  • 恶意灌水
  • 违规内容
  • 文不对题
  • 重复发帖
打赏作者
易百纳技术社区
Debug
您的支持将鼓励我继续创作!
打赏金额:
¥1易百纳技术社区
¥5易百纳技术社区
¥10易百纳技术社区
¥50易百纳技术社区
¥100易百纳技术社区
支付方式:
微信支付
支付宝支付
易百纳技术社区微信支付
易百纳技术社区
打赏成功!

感谢您的打赏,如若您也想被打赏,可前往 发表专栏 哦~

举报反馈

举报类型

  • 内容涉黄/赌/毒
  • 内容侵权/抄袭
  • 政治相关
  • 涉嫌广告
  • 侮辱谩骂
  • 其他

详细说明

审核成功

发布时间设置
发布时间:
是否关联周任务-专栏模块

审核失败

失败原因
备注
拼手气红包 红包规则
祝福语
恭喜发财,大吉大利!
红包金额
红包最小金额不能低于5元
红包数量
红包数量范围10~50个
余额支付
当前余额:
可前往问答、专栏板块获取收益 去获取
取 消 确 定

小包子的红包

恭喜发财,大吉大利

已领取20/40,共1.6元 红包规则

    易百纳技术社区