Android加载pytorch模型异常完美解决:The model version must be between 3 and 5But the model version is 7 ()

有时候需要在android app中加载使用pytorch训练的模型文件,选择这样的部署方式的优点:

1、使用pytorch提供的mobile库,避免了自己实现模型的推理;

2、模型的加载和推理都是在java层,pytorch已经提供了native的实现,我们只需要使用Java的接口进行模型加载和使用,所有细节被封装。

github上的pytorch官方的仓:pytorch/android-demo-app里面有相关的示例app,下载下来首先从hello world开始。

Android加载pytorch模型异常完美解决:The model version must be between 3 and 5But the model version is 7 ()_第1张图片

 在Android studio上运行的结果是这样的:

Android加载pytorch模型异常完美解决:The model version must be between 3 and 5But the model version is 7 ()_第2张图片

 HelloWorldApp提供了一个python脚本trace_model.py,用于生成模型:

但是当在自己的平台上生成的模型,再通过Android加载时却报这样的错误:

com.facebook.jni.CppException: Lite Interpreter verson number does not match. The model version must be between 3 and 5But the model version is 7 () Exception raised from parseMethods at ../torch/csrc/jit/mobile/import.cpp:320 (most recent call first):

HelloWorldApp assets中原来的模型是19M,在自己的python平台上生成的模型是9M

 问题出现的原因是生成的模型所使用的torch和torch vision的版本与pytorch提供的java 包不一致。

解决方法:

1、卸载已安装的torch和torchvision

pip3 uninstall torch torchvision

2、从官网安装老版本的torch1.8.0和torchvsion0.9.0
1. pip3 install torch==1.8.0 torchvision==0.9.0 -f https://download.pytorch.org/whl/torch_stable.html

注意:torch和torch vision的版本不能太高,也不能太低,太低了不支持torchvision.models.mobilenet_v3_small()函数。 

3、保存模型
import torch
import torchvision
from torch.utils.mobile_optimizer import optimize_for_mobile

model = torchvision.models.mobilenet_v3_small(pretrained=True)
model.eval()

scripted_module = torch.jit.script(model)

# Export mobile interpreter version model (compatible with mobile interpreter)
optimized_scripted_module = optimize_for_mobile(scripted_module)
optimized_scripted_module._save_for_lite_interpreter("model7.ptl")
4、将模型拷贝到HelloWorldApp的app的assets

生成的模型也有19M,与原来的模型大小一致。

Android加载pytorch模型异常完美解决:The model version must be between 3 and 5But the model version is 7 ()_第3张图片

 另外:网上说修改app的build.gradle

implementation 'org.pytorch:pytorch_android_lite:1.9.0'修改为
implementation 'org.pytorch:pytorch_android_lite:1.10.0'

通过验证这种方法行不通,还会报其他的错误。

你可能感兴趣的:(Pytorch教程,pytorch,深度学习,人工智能,pytorch模型部署,Android)