Mac下配置Caffe的Python接口

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/lkj345/article/details/51298586

声明一下,以下是我个人在配置过程中遇到的一些问题,每个人可能因为不同的操作系统、不同的参数等有一些不同的问题,仅供参考。首先希望读者可以看一下我之前写的博客-Mac极简安装Caffe并训练MNIST,这篇博客基于此。另外这篇博客可以说是一个问题集锦,而不是配置Python接口的整体流程。

首先用如下命令安装最新的Python,我安装的是2.7.11,

sudo pip install python

之前protobuf和boost两个库都是不带Python的版本,这两个库的安装命令改成如下,

sudo brew install --build-from-source --with-python -vd protobuf
sudo brew install --build-from-source -vd boost boost-python

安装成功之后执行,

make pycaffe

出现如下问题,

python/caffe/_caffe.cpp:10:10: fatal error: 'numpy/arrayobject.h' file not found

这是因为找不到numpy的路径,通过以下python脚本找到numpy的路径,

import numpy as np
np.get_include()

上述脚本的执行结果是’/usr/local/lib/python2.7/site-packages/numpy/core/include’,需要将Caffe中Makefile.config对应部分修改如下,

# We need to be able to find Python.h and numpy/arrayobject.h.
PYTHON_INCLUDE := /usr/include/python2.7 \
/usr/local/lib/python2.7/site-packages/numpy/core/include

这样make pycaffe就可以顺利进行了,但是在Python环境下导入caffe头文件会出现以下类似的问题,

ImportError: dlopen(/Users/mac/Desktop/caffe/python/caffe/_caffe.so, 2): Library not loaded: lib/libopencv_core.3.1.dylib

根据GitHub上的解释,可能是系统自带的Python和自己安装的Python之间有冲突。

但是如果执行如下命令来查看Python的版本的话,会看到还是之前的版本,比如我的是2.7.10,

python --version

执行如下命令,可以将Python更新成最新版本,

hash -r python

此外将Makefile.config对应部分修改成如下,

PYTHON_LIB := /usr/local/lib /usr/local/Cellar/python/2.7.11/Frameworks/

之后在Python下执行import caffe会出现如下三个问题,这都是缺少对应的库造成的,

ImportError: No module named skimage.io
ImportError: No module named scipy
ImportError: No module named matplotlib

依次执行下面三条命令来安装缺失的类库,

sudo pip install scikit-image
sudo pip install scipy
sudo pip install matplotlib

经过以上步骤后,import caffe应该可以执行了,参照StackOverflow上的解答,编写如下的Python脚本,当然脚本中的路径都是我自己的路径,比如caffe是在桌面上,测试图片在特定路径下,自己按照情况修改一下。脚本中第三行是必须的,这样可以保证caffe中python文件夹下的类库可以导入到工程中。另外lenet_iter_10000.caffemodel是之前训练MNIST得到的model,每张图片需要归一化到28*28大小并且是灰度图片。

import os
import sys
sys.path.append("/Users/mac/Desktop/caffe/python")

import caffe

model_file = '/Users/mac/Desktop/caffe/examples/mnist/lenet.prototxt'
pretrained_file = '/Users/mac/Desktop/caffe/examples/mnist/lenet_iter_10000.caffemodel'
net = caffe.Classifier(model_file, pretrained_file, image_dims=(28, 28), raw_scale=255)
score = net.predict([caffe.io.load_image('./mnist/images/1.png', color=False)], oversample=False)
print score

当然里面的测试图片来自于MNSIT数据集,如下给大家用来参考,
测试图片,可以下载到自己机器中进行测试,结果如下,第8个数为1表示图片中的数字是7(0,1,2,3,4,5,6,7,8,9),当然可以自己下载网络上的图片进行测试。

[[ 0.  0.  0.  0.  0.  0.  0.  1.  0.  0.]]

猜你喜欢

转载自blog.csdn.net/lkj345/article/details/51298586