1、pytorch模型轉onnx
input = cv.imread('c:/123.jpg')
input = np.transpose(input, (2, 0, 1)).astype(np.float32)
now_image1 = Variable(torch.from_numpy(input))
dummy_input = now_image1.unsqueeze(0)
input_name = ['input']
output_name = ['output']
torch_out = torch.onnx._export(model, dummy_input, "c:/resnet50.onnx", verbose=True, input_names=input_name, output_names=output_name)
2、onnx再精簡模型python -m onnxsim c:/resnet50.onnx c:/resnet50-sim.onnx
注意這里需要安裝一些庫>pip install onnx-simplifier pip install onnxruntime
3、下載ncnn源碼,編譯后會有onnx2ncnn的應用
轉換過程出現
查找了各種辦法都不行,后面看了一下onnx2ncnn的源碼,發現每一層里面都有對應的代碼處理,而我用的onnx2ncnn里面沒有對Unsqueeze和Squeeze的層做處理,因為我的onnx2ncnn的代碼是較早的版本,再去github上看最新的代碼,發現已經有對Unsqueeze和Squeeze的層的處理,於是重新下載最新的代碼編譯,成功轉換完成。可是轉換后的模型測試結果都是正確的,就是速度好像特別慢,單線程在windows上要4.3秒,這也太慢了吧。這個還沒找到什么原因。