最近在做部署相关工作,为了验证MNN的编译是否有问题,使用MobilenetV2在MNN上进行了部署测试。
我实现模型在ARM CPU上使用MNN的部署,主要有六个步骤:
1.使用pytorch完成模型代码,并用torch.jit.script生成静态模型;
2.使用ONNX完成模型转换;
3.编译MNN环境;
4.使用MNNConvert将ONNX文件转为MNN文件;
5.使用C++完成MNN模型类;
6.调用模型推理代码,编译代码进行测试;
下面分开介绍一下每个步骤:
1.第一个步骤从GitHub上找到一个mobilenet-v2的开源代码(GitHub - tonylins/pytorch-mobilenet-v2: A PyTorch implementation of MobileNet V2 architecture and pretrained model.)可以直接用,下载代码并同时下载权重。注意在加载权重时,会报missing keys的错误,需要修改mobilenet_v2方法。
def mobilenet_v2(tar_file,pretrained=True):
model = MobileNetV2(width_mult=1)
if tar_file:
state_dict = torch.load(tar_file)
new_state_dict = collections.OrderedDict()
for k,v in state_dict.items():
if k == "classifier.1.weight":
new_state_dict["classifier.weight"] = v
elif k == "classifier.1.bias":
new_state_dict["classifier.bias"] = v
else:
new_state_dict[k] = v
model.load_state_dict(new_state_dict)
return model
同时使用torch.jit.scr