概要
Neural Network Consoleの学習済みモデルの.nnpファイルを
Neural Network Libraries(nnabla)で tensorflow の SavedModel に変換しようとした時にハマったので、解決策をメモしました。
環境
Windows10 Pro 64bit (バージョン1909)
python 3.7.9
conda 4.9.2
(以下全てpipでインストール)
pip 20.3.3
nnabla(Neural Network Libraries) 1.16.0
nnabla-converter 1.16.0
onnx 1.8.1
onnx-tf 1.7.0
tensorflow 2.3.1
tensorflow-addons 0.12.1
tensorflow-estimator 2.3.0
(※環境はcondaの環境ですが、condaとpipでパッケージが重複しないように注意はしています)
起こった問題
Neural Network Consoleの学習済みモデルの.nnpファイルを
tensorflow SavedModel形式に変換するために、
Neural Network Librariesで
nnabla_cli convert results.nnp results_saved_model --export-format SAVED_MODEL
とコマンドを実行したところ、以下のようなエラーが出て失敗しました。
(default) PS C:\Users\user\my_dir_path> nnabla_cli convert results.nnp results_saved_model --export-format SAVED_MODEL
2021-02-05 15:04:57,598 [nnabla][INFO]: Initializing CPU extension...
NNabla command line interface (Version:1.16.0, Build:210129003607)
2021-02-05 15:04:59,066 [nnabla][WARNING]: The export file format is 'CSRC' or 'SAVED_MODEL' that argument '--export-format' will have to be set!!!
2021-02-05 15:04:59.172269: W tensorflow/stream_executor/platform/default/dso_loader.cc:59] Could not load dynamic library 'cudart64_101.dll'; dlerror: cudart64_101.dll not found
2021-02-05 15:04:59.181706: I tensorflow/stream_executor/cuda/cudart_stub.cc:29] Ignore above cudart dlerror if you do not have a GPU set up on your machine.
Importing results.nnp
Expanding Main.
Expanding MainValidation.
Expanding MainRuntime.
Traceback (most recent call last):
File "c:\users\user\miniconda3\envs\default\lib\site-packages\nnabla\utils\cli\cli.py", line 141, in cli_main
return_value = args.func(args)
File "c:\users\user\miniconda3\envs\default\lib\site-packages\nnabla\utils\cli\convert.py", line 103, in convert_command
nnabla.utils.converter.convert_files(args, args.files, output)
File "c:\users\user\miniconda3\envs\default\lib\site-packages\nnabla\utils\converter\commands.py", line 301, in convert_files
return _export_from_nnp(args, nnp, output)
File "c:\users\user\miniconda3\envs\default\lib\site-packages\nnabla\utils\converter\commands.py", line 168, in _export_from_nnp
TensorflowExporter(nnp, args.batch_size).execute(output)
File "c:\users\user\miniconda3\envs\default\lib\site-packages\nnabla\utils\converter\tensorflow\exporter.py", line 65, in execute
tf_rep = prepare(onnx_model)
File "c:\users\user\miniconda3\envs\default\lib\site-packages\onnx_tf\backend.py", line 70, in prepare
return cls.onnx_model_to_tensorflow_rep(model, strict, **kwargs)
File "c:\users\user\miniconda3\envs\default\lib\site-packages\onnx_tf\backend.py", line 91, in onnx_model_to_tensorflow_rep
**kwargs)
File "c:\users\user\miniconda3\envs\default\lib\site-packages\onnx_tf\backend.py", line 111, in _onnx_graph_to_tensorflow_rep
handlers = cls._get_handlers(opset)
File "c:\users\user\miniconda3\envs\default\lib\site-packages\onnx_tf\backend.py", line 303, in _get_handlers
return get_all_backend_handlers(opset_dict)
File "c:\users\user\miniconda3\envs\default\lib\site-packages\onnx_tf\common\handler_helper.py", line 28, in get_all_backend_handlers
max_inclusive_version=version).since_version
onnx.onnx_cpp2py_export.defs.SchemaError: No schema registered for 'Celu'!
解決策
このページによると、
どうやら最新のonnx1.8.1では例外の型?に関して何やら変更があったようで、
pipからインストールできるonnx-tfはまだ対応が追い付いてないみたいです。
ここに書いてある通り、一度onnx-tfをアンインストールしてから
pip install git+https://github.com/onnx/onnx-tensorflow.git
を実行してgithubからインストールしたらちゃんと動くようになりました。
参考ページ
onnx.onnx_cpp2py_export.defs.SchemaError: No schema registered for 'BitShift'! · Issue #865 · onnx/onnx-tensorflow · GitHub
pipでGitHubのコードを直接インストールする | エンジニアもどきの技術メモ