用python调用caffe时出错:AttributeError: 'module' object has no attribute 'bool_'

由于用caffe的时候需要将/somepath/your_caffe/python include进来作为环境变量,但是caffe中有个io.py和numpy的io冲突,所以导致这种现象。

下面给出了一种解决方法,即对有冲突的io文件进行重命名:

numpyのioとPyCaffeのio.pyが競合するようです。(Strange Issue using Python #782)

$ python classify.py --raw_scale 255 ~/caffe/101_ObjectCategories/airplanes/image_0001.jpg ../result.npy
Traceback (most recent call last):
  File "classify.py", line 7, in <module>
    import numpy as np

...


  File "/usr/local/lib/python2.7/dist-packages/skimage/util/dtype.py", line 8, in <module>
    dtype_range = {np.bool_: (False, True),
AttributeError: 'module' object has no attribute 'bool_'

無理やりな方法ですがio.pyをcaffe_io.pyにrenameします。
ここでrenameした場合には、次の”Caffeを特徴抽出器として使った分類”に作成するfeature.pyでもrenameする必要があります。

$ cd ~/caffe/python/
$ aftfile="caffe_io"
$ for file in `find . -name "*.py"`; do; cat $file | sed -e "s/import [\w\.]*io/import $aftfile/g" | sed -e "s/caffe\.io/caffe\.$aftfile/g" > $file".tmp";mv $file".tmp" $file; done
$ mv "caffe/io.py" "caffe/"$aftfile".py"

另外,还可以先将PATH中的caffe的路径去掉,然后import numpy,然后在通过sys.path.append把caffe的路径显式添加进路径,从而调用caffe。

import sys
if '/somepath/caffe-yolov2-master/python' in sys.path:
    sys.path.remove('/somepath/caffe-yolov2-master/python')
if '/somepath/caffe-yolov2-master/python/caffe' in sys.path:
    sys.path.remove('/somepath/caffe-yolov2-master/python/caffe')
if '' in sys.path:
    sys.path.remove('')
import numpy as np
import time
# caffe_root = '../../'  # this file should be run from {caffe_root}/examples (otherwise change this line)
caffe_root = '/home/gpu_share/jz/about-caffe/gklz1982/caffe-yolov2-master/'
if caffe_root + 'python' not in sys.path:
    sys.path.append(caffe_root + 'python')
# sys.path.insert(0, caffe_root + 'python')
import caffe
import math

reference:
Caffe, Pylearn2をまとめて試す https://qiita.com/CORDEA/items/9fad27ae024928b6a7b1

posted @ 2018-07-16 12:26  毛利小九郎  阅读(349)  评论(0编辑  收藏  举报