Pytouchモデル転送onnxモデルの例
以下の通りです
上のコードにコメントしたdummy_input 2,dummy_input 3は、toch.onx.exportに対応する複数の入力の例です。
変換中に発生した問題のまとめ
RuntimeError:Failed to export an ONX atribute、since it's not constant、please try to make things(e.g.kersnel size)static if possible
変換過程でRuntimeError:Failed to export an ONX atribute、since it's not constant、please try to make things(e.g.kersnel size)static if possibleのエラーに遭遇しました。
新聞のエラーログ情報によって開く/home/joy/tenssorflow/venv/lib/python 3.6/site-packages/touch/onnx/smbonic_helper.pyは、該当する位置にprintを追加した後、具体的などのopに問題があるかを特定できます。
たとえば:
該当位置に追加
以上のPytouchモデルがonnxモデルに転向した例は、小編集が皆さんに提供した内容の全てです。参考にしていただければと思います。どうぞよろしくお願いします。
import io
import torch
import torch.onnx
from models.C3AEModel import PlainC3AENetCBAM
device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu")
def test():
model = PlainC3AENetCBAM()
pthfile = r'/home/joy/Projects/models/emotion/PlainC3AENet.pth'
loaded_model = torch.load(pthfile, map_location='cpu')
# try:
# loaded_model.eval()
# except AttributeError as error:
# print(error)
model.load_state_dict(loaded_model['state_dict'])
# model = model.to(device)
#data type nchw
dummy_input1 = torch.randn(1, 3, 64, 64)
# dummy_input2 = torch.randn(1, 3, 64, 64)
# dummy_input3 = torch.randn(1, 3, 64, 64)
input_names = [ "actual_input_1"]
output_names = [ "output1" ]
# torch.onnx.export(model, (dummy_input1, dummy_input2, dummy_input3), "C3AE.onnx", verbose=True, input_names=input_names, output_names=output_names)
torch.onnx.export(model, dummy_input1, "C3AE_emotion.onnx", verbose=True, input_names=input_names, output_names=output_names)
if __name__ == "__main__":
test()
直接PlainC 3 AENetCBAMを変換するモデルに置き換え、pthfileを修正して、Onxモデルの名前を入力して実行すればいいです。上のコードにコメントしたdummy_input 2,dummy_input 3は、toch.onx.exportに対応する複数の入力の例です。
変換中に発生した問題のまとめ
RuntimeError:Failed to export an ONX atribute、since it's not constant、please try to make things(e.g.kersnel size)static if possible
変換過程でRuntimeError:Failed to export an ONX atribute、since it's not constant、please try to make things(e.g.kersnel size)static if possibleのエラーに遭遇しました。
新聞のエラーログ情報によって開く/home/joy/tenssorflow/venv/lib/python 3.6/site-packages/touch/onnx/smbonic_helper.pyは、該当する位置にprintを追加した後、具体的などのopに問題があるかを特定できます。
たとえば:
該当位置に追加
print(v.node())
出力情報は以下の通りです。
%124 : Long() = onnx::Gather[axis=0](%122, %121), scope: PlainC3AENetCBAM/Bottleneck[cbam]/CBAM[cbam]/ChannelGate[ChannelGate] # /home/joy/Projects/models/emotion/WhatsTheemotion/models/cbam.py:46:0
原因はpytouchのtenssor.size(1)方式のonnxが識別できないので、定数に修正する必要があります。以上のPytouchモデルがonnxモデルに転向した例は、小編集が皆さんに提供した内容の全てです。参考にしていただければと思います。どうぞよろしくお願いします。