Scipyのバージョンによるimresizeのimportエラー

少し前に流行ったCycleGanとか画像を使うDeepLearningの実装をgithubから落としてくるとScipyのimresizeでエラーが発生します。 scipy.misc.imresizeが非推奨となり削除されてしまったのが原因なので、imresizeを使っている箇所が少なければ修正可能ですが、すでに作りこまれた実装から必要箇所をひたすら修正していくのは面倒です。本記事では修正する方法とimresizeが削除される前のバージョンを紹介します。



発生するエラー

SciPy 1.3.0. で削除されてしまったので、下記エラーが発生します。

ImportError: cannot import name 'imresize'

ちなみにimreadという関数も削除されているため、画像読み込みすらできません。どちらかというとこっちで困っている人のほうが多いかもしれません。

ImportError: cannot import name 'imread'

対処法

以前のバージョンに戻す場合

imresizeしか使わない場合は1.2.0に戻せば問題ないのですが、imreadは1.2.0でも使用できないので、特にこだわりが無ければ、1.1.0に戻すことをお勧めします。

pip install scipy==1.1.0

imresizeを修正する場合

SciPy.orgに従ってPillowを使って下記処理に置き換えれば良いです。

numpy.array(Image.fromarray(arr).resize())

確かにPillowかOpenCVが画像処理のデファクトだと思うので、画像の読み込みやリサイズはそちらに任せるべきだとは思うのですが、少し前の論文実装とかだと当然のように使われているのでforkして修正するか、以前のバージョンを使うかは悩みどころですね。
実装した当時のバージョンで使えれば良いのですが、依存関係が解決できなかったりするわけで、、、
requirements.txtにはバージョンも記載しておくほうが親切ですね。注目されなければ関係ない話ですが。(2019/07時点でスター0…)


カテゴリー:DeepLearning,エラー対処,画像処理

Output不足なエンジニア

統計が好きになれず、機械学習やったら必然的に統計が必要になるだろうと思ったら想像以上に機械学習にハマる。数学は芸術なので商売にするつもりはないけど、DeepLearningは数学じゃないし商売にしたいと思っているところ。画像処理がメイン。