记录一次关于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

三、写在最后,

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

猜你喜欢

转载自blog.csdn.net/small_wu/article/details/120362624