1. 環境は、Window 10 Home (64bit) 上で行った。
2. Anaconda3 (64bit) – Spyder上で、動作確認を行った。
3. Python の バージョンは、3.6.6 である。
4. Chainer の バージョンは、5.1.0 である。
5. ChainerCV の バージョンは、0.11.0 である。
6. onnx-chainer の バージョンは、1.3.0a1 である。
7. MXNet の バージョンは、1.5.0b20181224 である。
8. CPU は, Intel社 の Core(TM) i7-7700HQ である。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
① PyTorch の 動作確認というよりは, ONNX を 確認したように見える. ② 今回確認した内容は, Chainer -> (*.onnx) -> MXNet の 動作確認である(参照URL⑤). ③ 元々, ONNXの挙動について, Caffe2 -> (*.onnx) -> PyTorch のようなことを確認したかったが, 下記2点から, 断念することになった. ・Caffe2 の 環境構築のハードルが高いこと(参照URL①). ・PyTorch は, [Importing ONNX models] について, "coming soon" と記載されていたこと(参照URL④). ⑤ したがって, 以下のパターンを確認することにした(参照URL⑤). export側 … Chainer import側 … MXNet ⑥ 詰まった箇所として, onnx-chainer の install を, Python の バージョン が 3.7.x である仮想環境行ったところ, ~(略)~ AssertionError: Could not find "cmake" executable! ~(略)~ のような error が出力されたので, Python の バージョン が 3.6.6 の仮想環境で, install した. ※参照URL⑤ の Tested environment の箇所で, "Python 3.5.5, 3.6.7" と記載されているので, Python の バージョン が 3.7.x だと, 動作確認出来ないことが, 後から分かった. ⑦ Spyder の version を, 3.3.2 としたところ, 起動しなくなったので, Spyder だけ単品で再install(conda install -c anaconda spyder)したところ起動するようになった. |
■Chainer(参照URL③ の チュートリアルより)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
# -*- coding: utf-8 -*- # chainer を 下記コマンドで, install. # pip install chainer # 1. library import. from __future__ import print_function import chainer import numpy as np # 2. check the output of the tutorial. print("Hello World!") print(chainer.__version__) print(355.0 / 113.0) print(np.eye(5)) total = 0 for i in range(10): total += i print(total) |
■実行結果.
1 2 3 4 5 6 7 8 9 |
Hello World! 5.1.0 3.1415929203539825 [[1. 0. 0. 0. 0.] [0. 1. 0. 0. 0.] [0. 0. 1. 0. 0.] [0. 0. 0. 1. 0.] [0. 0. 0. 0. 1.]] 45 |
■Chainer -> (*.onnx) -> MXNet(参照URL⑤から抜粋)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
# -*- coding: utf-8 -*- # chainer, onnx-chainer, chainercv, mxnet を 下記コマンドで, install. # pip install chainer # pip install onnx-chainer # pip install chainercv # pip install mxnet --pre # 1. library import. from __future__ import print_function import collections import mxnet import numpy as np import chainer import chainercv.links as C import onnx_chainer import os, time # 2. prepare an input tensor etc. start = time.time() model = C.VGG16(pretrained_model='imagenet') fn = os.path.expanduser('~') + '\\.spyder-py3\\chainer\\vgg16-to-MXNet.onnx' x = np.random.rand(1, 3, 224, 224).astype(np.float32) * 255 ~(略)~ # 11. check the prediction results are same. assert np.argmax(chainer_out) == np.argmax(mxnet_out) # 12. check both outputs have same values. np.testing.assert_almost_equal(chainer_out, mxnet_out, decimal=5) end = time.time() print('--------------------------------------------------') print('Elapsed Time: ' + str(end - start) + "[sec]") |
■実行結果.
1 2 3 4 |
-------------------------------------------------- Elapsed Time: 18.647728204727173[sec] -> Chainer で export した, vgg16-to-MXNet.onnx を, MXNet で 正しく import 出来ることを確認出来た. |
■参照サイト
【参照URL①】Why it is so difficult to install caffe2??? #1811
【参照URL②】【入門】Windows10にChainerをインストールする方法(Anaconda使用)
【参照URL③】Chainer Tutorial Bookへようこそ!
【参照URL④】Getting ONNX models
【参照URL⑤】Tested environment
【参照URL⑥】Installation