ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

MNNConvert 模型转换实战:5 种框架模型一键转成 .mnn 上端侧推理

2026/9/11 8:03:32 拓冰建站 浏览量
MNNConvert 模型转换实战:5 种框架模型一键转成 .mnn 上端侧推理 MNNConvert 模型转换实战5 种框架模型一键转成 .mnn 上端侧推理【免费下载链接】MNNMNN: A blazing-fast, lightweight inference engine battle-tested by Alibaba, powering high-performance on-device LLMs and Edge AI.项目地址: https://gitcode.com/GitHub_Trending/mn/MNN模型训练完.onnx或.pt文件躺在服务器里但手机、车机、开发板上能直接加载的往往是.mnn格式。MNN 的模型转换工具 MNNConvert 负责补上这一步它读取 ONNX、PyTorchTorchScript、TensorFlow、TFLite、Caffe 五种来源的模型输出单个.mnn文件再由 MNN 推理引擎在 CPU/GPU/NPU 上运行。本文按“拿到工具 → 完成转换 → 压体积 → 过校验 → 排错”的任务流走一遍每步都给出可直接照抄的命令。MNNConvert 一次转换里做的 4 件事一条 MNNConvert 命令背后其实是四步阶段做什么对应参数解析读取源框架模型onnx/tflite/pt/pb/caffemodel-f指定框架优化图优化、算子融合决定最终推理图形态--optimizeLevel/--optimizePrefer压缩权重量化、FP16 存储只减体积不改计算行为--weightQuantBits/--fp16落盘输出.mnn或 JSON文件供 MNN 引擎加载--MNNModel/--JsonFile完整参数说明见仓库文档 docs/tools/convert.md转换逻辑的源码在 tools/converter/。MNNConvert 在整个 MNN 工具链中的位置如下图所示它与 Compress压缩、Express表达式、Train训练等模块并列第 1 步准备 MNNConvert 转换工具pip 或源码编译两条路线按需求选一条路线 Apip 安装推荐免编译pip install MNN mnnconvert -h # 确认命令可用mnnconvert 是 MNNConvert 的 Python 封装路线 B源码编译需要定制编译选项时git clone https://gitcode.com/GitHub_Trending/mn/MNN cd MNN mkdir build cd build cmake .. -DMNN_BUILD_CONVERTERON -DMNN_BUILD_TORCHON # TORCH 选项才支持 .pt 转换 make -j8产物在build/下MNNConvert转换器本体、MNNDump2Json/MNNRevert2Buffer模型与 JSON 互转。各平台编译细节参考 docs/compile/other.md。第 2 步第一次 MNN 模型转换5 种框架的命令对照转换的基本语法只有三个必填项-f框架类型、--modelFile输入模型、--MNNModel输出文件源框架-f参数输入文件注意事项ONNXONNXmodel.onnx最常用算子覆盖广PyTorchTORCHmodel.pt必须是torch.jit.trace/script导出的 TorchScript不能直接用训练权重文件TensorFlowTFmodel.pb必须是 frozen pbSavedModel 不支持TFLiteTFLITEmodel.tflite直接转CaffeCAFFEmodel.caffemodel需额外传--prototxt 结构文件以 ONNX 为例./MNNConvert -f ONNX --modelFile mobilenetv2.onnx --MNNModel mobilenetv2.mnn --bizCode myapp看到Converted Success!即完成。PyTorch 侧的导出代码只需要几行model.eval()后torch.jit.trace(model, example)再.save(model.pt)详见 docs/tools/convert.md 的 TorchScript 一节。 转换前想先看模型的输入输出信息对已转好的.mnn执行./MNNConvert -f MNN --modelFile model.mnn --info即可打印输入名、形状和模型版本不用自己写代码加载。第 3 步转换时就地压缩体积优先还是速度优先MNNConvert 的压缩能力全部在转换时完成不需要二次处理。按目标选参数参数效果适用场景--weightQuantBits 8卷积/矩阵乘/LSTM 权重量化为 8bit体积减约 4 倍精度基本无损加载后自动解码回 float 计算速度不变只嫌模型大不想动精度--weightQuantBits 4同上但 4bit体积减约 8 倍精度略有损失存储非常紧张--fp16权重以 float16 存储体积减半精度几乎无损想要最简单无损压缩--optimizePrefer 1/2配合--optimizeLevel 2优化目标分别为“模型尽可能小” / “推理尽可能快”对图优化做取舍两条典型命令# 体积优先8bit 权重量化 ./MNNConvert -f ONNX --modelFile model.onnx --MNNModel model_wq8.mnn --weightQuantBits 8 # 速度优先图优化拉到最高档并偏向推理速度 ./MNNConvert -f ONNX --modelFile model.onnx --MNNModel model_fast.mnn --optimizeLevel 2 --optimizePrefer 2两个易错点--optimizeLevel 2是“对常见输入正确、部分输入可能出错”的档位正式部署建议先用默认档位 1若转换后想继续做离线量化、自动量化调优属于模型压缩工具箱的范畴可继续参考 docs/tools/compress.md。第 4 步跑通正确性校验拿到 TEST_SUCCESS转换“成功”不等于结果“正确”。仓库在 tools/script/ 提供了与 MNNConvert 同级的对照校验脚本先用原始框架跑一遍输出再跑 MNN 输出逐项比对。脚本适用模型需要安装的依赖testMNNFromOnnx.py.onnxpip install onnxruntimetestMNNFromTf.py.pbpip install tensorflowtestMNNFromTflite.py.tflitepip install tensorflowtestMNNFromTorch.py.ptpip install torch在build/目录里面有 MNNConvert执行python3 ../tools/script/testMNNFromOnnx.py mobilenetv2.onnx结尾出现TEST_SUCCESS即可放心部署。若报TESTERROR接DEBUG参数会用支配树二分查找自动定位到第一个出错的算子python3 ../tools/script/testMNNFromOnnx.py model.onnx DEBUG ### First Error Node is : Add_15 # 直接指出出错层两个脚本层面的注意点动态输入形状的模型脚本默认把部分维度设为 1原始框架阶段可能报错需要改脚本里的输入张量TorchScript 模型基本都要自行修改testMNNFromTorch.py中的输入定义。转换失败时先看这张高频报错速查表现象原因处理报“op not support”类错误源模型里有 MNN 未支持的算子执行./MNNConvert -f ONNX --OP查看该框架的算子支持列表在上游框架里把不支持的算子替换掉TF 转换直接失败传了 SavedModel先导出 frozen pb 再转PyTorch 转换失败直接传了训练权重文件用torch.jit.trace/script导出后再转校验脚本报find var error图优化删掉了末尾 Identity 输出层改校验其上一层的输出名python3 ../tools/script/testMNNFromTf.py xxx.pb 上一层名字动态 batch/形状行为不对转换时未固定形状用--saveStaticModel加--inputConfigFile指定固定输入形状结果精度偏差优化档位过高降回--optimizeLevel 1再不行用--debug看详细转换日志看透模型内部MNN 与 JSON 互转、查算子支持调试或微调模型时可以把.mnn导出为 JSON 查看每一层的类型、输入输出索引和权重数值./MNNConvert -f MNN --modelFile model.mnn --JsonFile model.json # MNN - JSON ./MNNConvert -f JSON --modelFile model.json --MNNModel model_new.mnn # JSON - MNN改完 JSON 再转回.mnn就完成了一次对模型结构的轻量修改。转换过程中如果想看转换细节加--debug打开调试输出想确认某框架支持哪些算子用上一节的--OP参数即可。收尾快速复查清单与配套资源转换完成前过一遍这张清单✅ 命令三要素齐了吗-f框架、--modelFile输入、--MNNModel输出✅ PyTorch / TF 用的是 TorchScript、frozen pb而不是训练权重或 SavedModel✅ 体积有要求时加了--weightQuantBits或--fp16并复测精度✅ 跑过对应testMNNFrom*.py结果是TEST_SUCCESS而不是TESTERROR✅ 部署到旧引擎时考虑过--targetVersion兼容性参数配套资源均在仓库内相对路径可直接点开资源路径MNNConvert 完整参数文档docs/tools/convert.mdpip 版 mnnconvert 使用说明docs/tools/python.md源码编译与转换器编译选项docs/compile/other.md模型压缩/离线量化工具箱docs/tools/compress.md转换器源码tools/converter/正确性校验脚本tools/script/【免费下载链接】MNNMNN: A blazing-fast, lightweight inference engine battle-tested by Alibaba, powering high-performance on-device LLMs and Edge AI.项目地址: https://gitcode.com/GitHub_Trending/mn/MNN创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考