8

Ubuntu 12.04LTS を搭載したマシンでcaffeを実行しようとしています。インストール ページのすべての手順を完了した後、LeNet モデルを正常にトレーニングし、ここからチュートリアルとして使用しようとしました。次に、次のエラーが発生しました。

Traceback (most recent call last): 
    File "<string>", line 1, in <module>
ImportError: No module named caffe
Error in sys.excepthook:
Traceback (most recent call last):
    File "/usr/lib/python2.7/dist-packages/apport_python_hook.py", line 66, in apport_excepthook
      from apport.fileutils import likely_packaged, get_recent_crashes
    File "/usr/lib/python2.7/dist-packages/apport/__init__.py", line 1, in <module>
      from apport.report import Report
    File "/usr/lib/python2.7/dist-packages/apport/report.py", line 18, in <module>
      import problem_report
    File "/usr/lib/python2.7/dist-packages/problem_report.py", line 14, in <module>
      import zlib, base64, time, sys, gzip, struct, os
    File "/usr/lib/python2.7/gzip.py", line 10, in <module>
      import io
    File "${HOME}/path/to/caffe/python/caffe/io.py", line 2, in <module>
      import skimage.io
    File "/usr/local/lib/python2.7/dist-packages/skimage/io/__init__.py", line 11, in <module>
      from ._io import *
    File "/usr/local/lib/python2.7/dist-packages/skimage/io/_io.py", line 1, in <module>
      from io import BytesIO
ImportError: cannot import name BytesIO

Original exception was:
Traceback (most recent call last): 
    File "<string>", line 1, in <module>
ImportError: No module named caffe

PYTHONPATH上記を行う前に、 in.bashrcファイルを設定しました。何が問題ですか?誰かヒントをくれませんか?私は本当に混乱しています。python -c 'import io; print io.__file__'非常にディレクトリでコマンドを実行した後:

Traceback (most recent call last): 
    File "${HOME}/path/to/caffe/python/caffe/io.py", line 2, in <module>
      import skimage.io
    File "/usr/local/lib/python2.7/dist-packages/skimage/io/__init__.py", line 11, in <module>
      from ._io import *
    File "/usr/local/lib/python2.7/dist-packages/skimage/io/_io.py", line 1, in <module>
      from io import BytesIO
ImportError: cannot import name BytesIO
Error in sys.excepthook:
Traceback (most recent call last):
    File "/usr/lib/python2.7/dist-packages/apport_python_hook.py", line 66, in apport_excepthook
      from apport.fileutils import likely_packaged, get_recent_crashes
    File "/usr/lib/python2.7/dist-packages/apport/__init__.py", line 1, in <module>
      from apport.report import Report
    File "/usr/lib/python2.7/dist-packages/apport/report.py", line 18, in <module>
      import problem_report
    File "/usr/lib/python2.7/dist-packages/problem_report.py", line 14, in <module>
      import zlib, base64, time, sys, gzip, struct, os
    File "/usr/lib/python2.7/gzip.py", line 10, in <module>
      import io
    File "${HOME}/path/to/caffe/python/caffe/io.py", line 2, in <module>
      import skimage.io
    File "/usr/local/lib/python2.7/dist-packages/skimage/io/__init__.py", line 11, in <module>
      from ._io import *
    File "/usr/local/lib/python2.7/dist-packages/skimage/io/_io.py", line 1, in <module>
      from io import BytesIO
ImportError: cannot import name BytesIO

Original exception was:
Traceback (most recent call last): 
    File "${HOME}/path/to/caffe/python/caffe/io.py", line 2, in <module>
      import skimage.io
    File "/usr/local/lib/python2.7/dist-packages/skimage/io/__init__.py", line 11, in <module>
      from ._io import *
    File "/usr/local/lib/python2.7/dist-packages/skimage/io/_io.py", line 1, in <module>
      from io import BytesIO
ImportError: cannot import name BytesIO

では、問題は次のようになります。名前の問題を解決するにはどうすればよいでしょうか。PS: caffe のリポジトリにも問題を挿入しました。

4

2 に答える 2

11

io標準ライブラリ パッケージをマスクしている Python パスで指定されたパッケージまたはモジュールがあるようです。BytesIO代わりにインポートされますが、インポートするオブジェクトがありません。

実行してみてください:

python -c 'import io; print io.__file__'

チュートリアルを実行しているのと同じ場所で、そのインポートによって名前が付けられたファイルの名前を変更するか移動します。これは、標準ライブラリ バージョン (末尾がlib/python2.7/io.pyc) ではないことを前提としています。

Python パスを間違ったディレクトリに設定している可能性があります。path/to/caffe/pythonではなく、を含めるpath/to/caffe/python/caffe必要があります。また、後者を現在の作業ディレクトリとして python を実行しようとしてもいけません。どちらの場合もcaffe/python/caffe/io.py、標準ライブラリ バージョンではありません。

ここでは、インストール手順に誤りはありません。彼らは明確に使用するようにあなたに言います:

export PYTHONPATH=/path/to/caffe/python:$PYTHONPATH

/caffeそのパスの最後に がないことに注意してください。

于 2014-12-10T08:56:52.597 に答える
2

私もこの問題に遭遇し、AWS ubuntu 14.04 インスタンスに Caffe をインストールしました。次のスクリプトは、BVLC github リポジトリの「Caffe on EC2 Ubuntu 14.04」で概説されています。

指示に従ってpythonパスをセットアップしました。@Martijn Pieters によって診断されたように、問題は、caffe が独自の io ライブラリをインポートし、それが scikit-image の io ライブラリをインポートし、次に標準の python io ライブラリ (BytesIO が配置されている場所) をロードしようとしている (しかし失敗している) ことです。 )。代わりに、python パスが原因で、scikit-image がモジュール io から BytesIO をインポートしようとすると、循環的に caffe の io モジュールに戻ります。

また、caffe をインポートしようとしていない場合でも、python パスに caffe を含めるように設定しているため、この同じ問題が他の場所で発生することがわかりました。

これに対処するには、おそらくいくつかの方法があります。しかし本質は、カフェのトップレベルのインポートが間違っているということです。これを確認するために、カフェのコードを次のように変更しました。

  1. .../caffe/io.py安全のためにモジュールの名前を変更し.../caffe/caffe_io.pyました (ただし、正しい名前空間のケアがあれば、これは必要ないはずです)。

  2. pycaffe.pyモジュールの上部にあるインポートを次のように変更しましたimport caffe.ioimport caffe.caffe_io

  3. __init__.py同じ方法でインポートを変更しました(からimport caffe.ioimport caffe.caffe_io

これで、Python から io をインポートすると、caffe で io ライブラリが取得されません。Caffe をインポートすると、そのカスタム caffe_io ライブラリがインポートされ、すべてがうまくいくはずです。インポートを変更する必要がある他の場所を見落としていないことを確認するために、python caffe モジュールをより徹底的にスキャンすることをお勧めします。

これが役立つことを願っています。おそらく時間があれば、これらの (または同様の) 変更を含むプル リクエストを caffe github リポジトリに発行します。

于 2015-12-09T20:37:44.233 に答える