quiver_engineで「ImportError: cannot import name ‘imsave’ from ‘scipy.misc’」の対応
quiver_engineを使用する際に「ImportError: cannot import name ‘imsave’ from ‘scipy.misc’」というエラーになった場合のの対応方法をご紹介します。
目次
条件
- Windows 10 64bit
- Python 3.7.0
- tensorflow==1.14.0
- git+git://github.com/keplr-io/quiver.git
- scipy==1.3.0
- imageio==2.5.0
Quiverとは?
畳み込みニューラルネットワークの特徴をインタラクティブな方法で可視化することが出来るソフトです。
詳細は以下のサイトをご確認ください。
https://github.com/keplr-io/quiver
実行ソース
必要なライブラリ一式をインストール後、以下のソースを実行します。
# test.py from keras.applications.vgg16 import VGG16 from quiver_engine import server model = VGG16() server.launch(model, input_folder='./sample_images', temp_folder='./tmp', port=8000)
ディレクトリ構成
実行ソース(test.py)の同階層に、「sample_iamges」ディレクトリが存在し、犬と猫の画像が入っています。
エラー
以下のようなエラーが出力されました。
scipy.miscのimsaveが無いと言われています。
C:\Users\user\PycharmProjects\quiverTest\venv\Scripts\python.exe C:/Users/user/PycharmProjects/quiverTest/test.py Using TensorFlow backend. Traceback (most recent call last): File "C:/Users/user/PycharmProjects/quiverTest/test.py", line 2, in <module> from quiver_engine import server File "C:\Users\user\PycharmProjects\quiverTest\venv\lib\site-packages\quiver_engine\server.py", line 26, in <module> from quiver_engine.file_utils import list_img_files File "C:\Users\user\PycharmProjects\quiverTest\venv\lib\site-packages\quiver_engine\file_utils.py", line 5, in <module> from scipy.misc import imsave ImportError: cannot import name 'imsave' from 'scipy.misc' (C:\Users\user\PycharmProjects\quiverTest\venv\lib\site-packages\scipy\misc\__init__.py)
scipy
scipy.miscについて以下のサイトを確認したところ、「imsave」はscipyのバージョン1.2.0以降は無くなっているようです。
https://docs.scipy.org/doc/scipy-1.1.0/reference/generated/scipy.misc.imsave.html
代わりに、「imageio.imwrite」を使用するよう記述されています。
scipy.misc.imsave(*args, **kwds)
imsave is deprecated! imsave is deprecated in SciPy 1.0.0, and will be removed in 1.2.0. Use imageio.imwrite instead.
対応
imageioのインストール
以下のコマンドでimageioをインストールします。
> pip install imageio
quiver_engineのソース修正
quiver_engine\file_utils.py
下記のように修正します。
(コメントアウトは修正前、その下が新規の追加。)
# file_utils.py抜粋 # from scipy.misc import imsave import imageio # imsave(filename, deprocess_image(layer_outputs)) imageio.imwrite(filename, deprocess_image(layer_outputs))
実行結果
ソース修正後、再度test.pyを実行します。
ブラウザで以下のURLを指定します。
http://localhost:8000/
左のネットワークのノードを拡大&選択し、犬の画像を選択すると以下のような表示になります。
同様に、猫の画像を選択すると以下のような表示になります。
参考
GitHub:Quiver
https://github.com/keplr-io/quiver
Pypi:imageio
https://pypi.org/project/imageio/