Windowsでpytorchモデルをncnn利用可能なモデルに変換する

1:まず、ダウンロードするツールのURLをいくつか指定します
(1)protobuf:https://github.com/protocolbuffers/protobuf/releases/tag/v3.7.1(私はprotobuf-all-3.7.1.zipを使用します)バージョン)
(2)onnx-simplifier
https://github.com/daquexian/onnx-simplifier(ダウンロードする必要はありません。インストールにはpipを使用してください。インストール手順は次のとおりです:pip install onnx-simplifier)
(3)ncnn
https: //github.com/Tencent/ncnn
2:cmakeでprotobufをコンパイルします
(1)mybuild-vs2015という名前の新しいフォルダーをprotobuf-3.7.1ディレクトリに作成します
(2)VS2015 x64ネイティブツールのコマンドプロンプトを使用して入力しますディレクトリ
cd / d Dを解凍します。\ onnx_android_ncnn \ protobuf-all-3.7.1-test \ protobuf-3.7.1 \ build-vs2015
(3)cmake -G "NMake Makefiles" -DCMAKE_BUILD_TYPE = Release -DCMAKE_INSTALL_PREFIX =%cd%/ install -Dprotobuf_BUILD_TESTS = OFF -Dprotobuf_MSVC_STATIC_RUNTIME = OFF…/ cmake
nmake
nmake install
コンパイルが完了すると、インストールフォルダーの下に4つのフォルダーがあります:bin、camke、include、lib
3:ncnnをコンパイル
(1)ncnn-masterディレクトリにmybuild-vs2015という名前の新しいフォルダーを作成
(2)VS2015 x64を使用ネイティブツールのコマンドプロンプトが解凍ディレクトリに入ります
(3)
cmake -G "NMake Makefiles" -DCMAKE_BUILD_TYPE = Release -DCMAKE_INSTALL_PREFIX =%cd%/ install
-DProtobuf_INCLUDE_DIR = D:/onnx_android_ncnn/protobuf-all-3.7.1-test/ protobuf-3.7.1 / build-vs2015 / install / include
-DProtobuf_LIBRARIES = D:/onnx_android_ncnn/protobuf-all-3.7.1-test/protobuf-3.7.1/build-vs2015/install/lib/libprotobuf.lib
-DProtobuf_PROTOC_EXECUTABLE = D:/onnx_android_ncnn/protobuf-all-3.7.1-test/protobuf-3.7.1/build-vs2015/install/bin/protoc.exe ...
nmake
nmake install
4:モデル変換:
(1)
コードを入力:
import torch
import torchvision
import torch.onnx
import cv2 as cv
mean = torch.tensor([0.485、0.456、0.406]、dtype = torch.float32)
std = torch.tensor([0.229、0.224、0.225]、dtype = torch.float32)
モデル= torchvision.models.resnet18(pretrained = True)
x = torch.Tensor(cv.cvtColor(cv.resize(cv.imread('11 .jpg ')、(224,224))、cv.COLOR_BGR2RGB))。float( )/255.0
x =(x-mean)/ std
x = x.contiguous()
x = torch.Tensor.unsqueeze(x.permute([2,0,1])、dim = 0)
model.eval()
with torch.no_grad():
pre = torch.Tensor.argmax(model(x))
torch_out = torch.onnx._export(model、x、“ resnet18.onnx”、export_params = True、keep_initializers_as_inputs = True)
pre1 = torch.Tensor .argmax(torch_out、1)
print(pre、pre1)
(注:keep_initializers_as_inputs = TrueをTrueに設定する必要があります。そうしないと、モデルを簡略化するとエラーが報告されます)
(2)モデルの簡略化
python -m onnxsim resnet18.onnx resnet18-sim.onnx
(3)Get ncnn認識されたbinファイルとparamファイル
onnx2ncnn resnet18-sim.onnx resnet18-sim.param resnet18-sim.bin

元の記事を36件公開しました 賞賛されました1 訪問6384

おすすめ

転載: blog.csdn.net/qq_34291583/article/details/102838598