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/

直感 Deep Learning ―Python×Kerasでアイデアを形にするレシピ

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です