• 欢迎光临~

ncnn加载模型的几种方式

开发技术 开发技术 2022-08-30 次浏览

一、常用转换工具

在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模型中部分算子进行合并优化等,ref: 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

     #include "net.h"
     FILE* fp = fopen("*-all.bin", "rb");
     net.load_param_bin(fp);
     net.load_model(fp);
     fclose(fp);
    
程序员灯塔
转载请注明原文链接:ncnn加载模型的几种方式
喜欢 (0)