LoginSignup
0
1

More than 3 years have passed since last update.

Neural Network Librariesで.nnpファイルをtensorflow saved model に変換できないのを解決したのでメモ

Posted at

概要

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のコードを直接インストールする | エンジニアもどきの技術メモ

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1