ncnn加载模型的几种方式
一、常用转换工具
在ncnn库编译完成后,在bin目录下有很多工具, 编译可参考ncnn编译与安装
- onnx2ncnn
利用ncnn库的./onnx2ncnn 工具进行转换
onnx2ncnn *.onnx *.param *.bin
转换时如果报以下错误提示 ,则利用onnxsim库先对onnx模型进行简化再转成ncnn
python -m onnxsim tooth.onnx tooth_sim.onnx
Shape not supported yet!
Gather not supported yet!
Unsupported unsqueeze axes !
Unknown data type 0
- ncnnoptimize
对ncnn模型中部分算子进行合并优化等,onnx的reshape和resize算子优化参考: https://zhuanlan.zhihu.com/p/93017149
ncnnoptimize *.param *.bin new.param new.bin flag
其中flag为0指fp32, 为1指fp16
- ncnn2mem
将ncnn模型中的可见字符去除,执行以下命令可生成*.param.bin 和两个静态数组的代码文件
ncnn2mem *.param *.bin *.id.h *.mem.h
- 合并param和bin文件
cat *.param.bin *.bin > *_all.bin
二、加载方式
-
原始param和bin
ncnn::Net net; net.load_param("*.param"); net.load_model("*.bin");
-
二进制param.bin和bin
ncnn::Net net; net.load_param_bin("*.param.bin"); net.load_model("*.bin");
-
加载数据模型
#include "*.mem.h" ncnn::Net net; net.load_param(*_param_bin); net.load_model(*_bin);
-
加载合并后bin
这种方式需要参考*.id.h更换输入输出为blobs对应的数字#include "net.h" FILE* fp = fopen("*-all.bin", "rb"); net.load_param_bin(fp); net.load_model(fp); fclose(fp);
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 因为Apifox不支持离线,我果断选择了Apipost!
· 通过 API 将Deepseek响应流式内容输出到前端