安卓

首页 » 常识 » 问答 » PyTorchOCR模型的安卓端部署
TUhjnbcbe - 2021/1/13 7:32:00
白癜风症状 http://m.39.net/pf/a_6947166.html
开发环境选择

本文操作系统为Windows,因为Windows上的安卓模拟器选择较多,并且真机调试也比较方便;

交叉编译在Windows和Ubuntu上都进行了尝试,都可行,但是如果是Ubuntu上交叉编译之后再挪到Windows的话,容易出幺蛾子;

我目前使用的最稳定的工具版本组合是:ndk18、androidstudio4.1、cmake3.10、gradle6.5、MinGW(CodeBlocks自带)。

1.PyTorch模型转NCNN这一小节是介绍如何将自己重新训练过的PyTorch模型转成ncnn,如果没有重训练需求的话,可以直接跳过这一节。

(1)整体步骤理想情况下,从PyTorch转到ncnn只需要下面两步:

PyTorch转ONNX

torch.onnx._export(model,x,path,opset_version=11)ONNX转NCNN

./onnx2ncnnmodel.onnxmodel.parammodel.bin遇到问题的适合解决思路如下:

convert.png下面介绍一下我在做ChineseOCRLite中的PSENet模型转换的过程中遇到的问题。

(2)实际操作的时候可能会遇到各种问题问题1:ReLU6不支持概述:ReLU6算子在转换的时候容易出现不支持的情况,需要使用其他算子替代

解决:使用torch.clamp替代(虽然ReLU6可以通过组合ReLU的方式实现,但是组合得到的ReLU6在NCNN中容易转换失败,不建议使用。)

defrelu6(x,inplace=True):returntorch.clamp(x,0,6)问题2:Resize算子转换问题概述:因为各个框架对Resize算子的支持都不尽相同,在转换过程中总会出现一些问题,pytorch中的interpolate算子转换成ONNX之后变成很多零散的算子,如cast、shape等,这些在ncnn里面不支持。你可以选择手动修改文件,也可以使用下面这个自动的方法:

解决:使用onnx_simplifier对onnx模型进行简化,可以合并这些零散的算子。

python-monnxsimmodel.onnxmodel_sim.onnx问题3:关于转ONNX及使用onnx_simplifier过程中出现的一系列奇怪问题概述:使用不同版本的ONNX可能会遇到不同的问题,比如提示conv层无输入等(具体错误名称记不清了)。

解决:下载最新ONNX源码编译安装(onnx_simplifier中出现的一些错误也可以通过安装最新ONNX来解决)

gitclone

1
查看完整版本: PyTorchOCR模型的安卓端部署