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

## 概要
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'!
```

## 解決策
[このページ](https://github.com/onnx/onnx-tensorflow/issues/865#issuecomment-773582830)によると、
どうやら最新の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](https://github.com/onnx/onnx-tensorflow/issues/865)
[pipでGitHubのコードを直接インストールする | エンジニアもどきの技術メモ](https://e-tec-memo.herokuapp.com/article/293/)