记录一次关于ncnn部署经历

一、 写在前面

第一次做移动端部署,经验为零,不断的学习和摸索,完成相关工作,书写只是为了和大佬交流,记录相关工作。

二、模型转换

1.模型转onnx

这里没有好强调的,总而言之坑比较多,我用的模型里面作者重写了state_dict()导致我的模型导入一直有问题,查看了2天代码才找到,完成了onnx转换。
主要代码:

torch.onnx.export(model, input_size, onnx_path, verbose=True, input_names=['input'], output_names=['output'],opset_version=11 )

2 .onnx2ncnn

这里主要参考了知乎的链接

安装相关的工具链: g++, cmake,protobuf,opencv,
其中测试OpenCV没有摄像头用的读取图片的方式:参考链接 中的第4步。

这里插一句:转ncnn模型会报错,知乎链接中的这个问题:
在这里插入图片描述
可以使用 onnx-simplifier 完成模型简化,

# 如果onnx转ncnn模型没有报错,这部分可以直接省去,报错再回来转一下模型就行。
# 使用pip安装库
pip3 install onnx-simplifier

# 安装好了库后调用库完成模型转换
Python3 -m onnxsim   input_onnxmodel.onnx   output_onnxmodel.onnx

完成相关内容安装后开始下载ncnn:ncnn代码仓库

$ git clone https://github.com/Tencent/ncnn.git
$ cd ncnn
$ git submodule update --init

模型转ncnn相关过程,将编译好的ncnn,调用onnx2ncnn完成onnx转换成ncnn的模型,最后的产物是model.bin(存放相关权重的)、model.param(存放相关结构)

#  onnx模型转ncnn模型的主要代码,编译好后,会自动生成onnx2ncnn工具,直接调用就行。
./onnx2ncnn  model.onnx   model.param    model.bin

至此,模型已经编译成ncnn了

3. 模型量化

参考git链接

主要步骤是3步
(1)模型转opt

./ncnnoptimize mobilenet.param mobilenet.bin mobilenet-opt.param mobilenet-opt.bin 0

(2)生成table文件

find images/ -type f > imagelist.txt
./ncnn2table mobilenet-opt.param mobilenet-opt.bin imagelist.txt mobilenet.table mean=[104,117,123] norm=[0.017,0.017,0.017] shape=[224,224,3] pixel=BGR thread=8 method=kl

这里单独说一下,find方法是自带的,直接传入images路径就行(第二个参数),然后给出imagelist.txt路径(最后一个参数)
得到如下的txt文件。(无法截图,用代码块代替)

/home/wqg/download/train_data/yemian_fenxi/img/942548_007851.jpg
/home/wqg/download/train_data/yemian_fenxi/img/914579_002196.jpg
/home/wqg/download/train_data/yemian_fenxi/img/1050921_031274.jpg
/home/wqg/download/train_data/yemian_fenxi/img/700936_034999.jpg
/home/wqg/download/train_data/yemian_fenxi/img/916084_002448.jpg
/home/wqg/download/train_data/yemian_fenxi/img/704436_036595.jpg

(3)生成量化后模型

./ncnn2int8 mobilenet-opt.param mobilenet-opt.bin mobilenet-int8.param mobilenet-int8.bin mobilenet.table

三、写在最后,

第一次做移动端部署,还有很多不会的地方,后面还有后处理和库文件的编译,过程艰辛而复杂,问题也比较多,慢慢强大,慢慢成长。

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

五小白

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值