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 *.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);
    
posted @ 2022-08-30 09:57  半夜打老虎  阅读(1040)  评论(0编辑  收藏  举报