最近尝试在MAC(OS X 10.11 El Capitan)上安装Caffe 以及Python接口遇到了一些问题但是官方安装教程上并没有提出这些问题的解决办法搜索了很久(主要在于Python接口上) 终于找到了解决办法
其实Caffe的安装分两步:安装依赖+编译源码
首先是安装依赖:
【必要依赖】:
官方推荐用homebrew来安装:
brew install -vd snappy leveldb gflags glog szip lmdb
# 添加science源来安装 OpenCV 和 hdf5
brew tap homebrew/science
brew install hdf5 opencv
或者使用Anaconda Python这个工具包含了大量的Python工具包来解决以上依赖问题而且安装新的软件包也特别容易。如果用Anaconda Python的话HDF5已经包含其中了 可以略过。并且opencv这里有两行需要改一下:
brew edit opencv
然后找到跟下面两行类似的改成如下(改变的他Python路径用Anaconda的Python而不是系统自带的)
-DPYTHON_LIBRARY=#{py_prefix}/lib/libpython2.7.dylib
-DPYTHON_INCLUDE_DIR=#{py_prefix}/include/python2.7
然后是BOOST和BOOST-Python 安装这个主要是为了之后Python接口的编译
# with Python pycaffe needs dependencies built from source
brew install --build-from-source --with-python -vd protobuf
brew install --build-from-source -vd boost boost-python
BLAS部分:网上有人说系统自带的不稳定推荐换成MKL但是我没有换也是可以用的。
Python接口:从Github上把Caffe下载下来解压后用命令行进入其中的Python文件夹执行以下命令来安装Python的依赖:
for req in $(cat requirements.txt); do pip install $req; done
用MAKE指令来编译:
在编译之前我们需要修改make.config的几个地方
首先将make.config.example的.example后缀删除
然后将CPU_ONLY := 1
的注释去掉(删除#)因为我的电脑是AMD的显卡没法使用CUDA所以无法进行GPU加速
然后就是后面的Python路径,用Anaconda Python的话将下面的注释去掉:
ANACONDA_HOME := $(HOME)/anaconda
PYTHON_INCLUDE := $(ANACONDA_HOME)/include \
$(ANACONDA_HOME)/include/python2.7 \
$(ANACONDA_HOME)/lib/python2.7/site-packages/numpy/core/include \
这个地方一定要注意路径正确 按照自己机器的配置来。
接下来就可以MAKE了
make all
make test
make runtest
make pycaffe
如果没有报错并且运行完runtest之后看到了一路绿色pass那么恭喜你安装完了这个时候他的CPP接口是可以用的但是Python不一定
将caffe/python路径放入你的PYTHONPATH中注意/path/to/caffe/python是你caffe的地址,注意更改。
export PYTHONPATH=/path/to/caffe/python:$PYTHONPATH
在命令行中进入Python尝试import caffe 如果不报错那么恭喜你Python接口也可以正常使用。
遇到的报错:
- 如果运行import caffe的时候提示 no module 那么说明你的PYTHONPATH有问题 注意更改
- 如果遇到了segmentation fault 那很有可能是你系统里也有多个版本的Python并且编译和运行的时候不是一个版本(通常是boost-Python链接的Python是系统自带Python而不是anaconda)。这个时候可以在编译的时候强制他们都用同一个Python。用otool -L指令来检查:
$ brew info boost
...
$ otool -L /usr/local/Cellar/boost/1.57.0/lib/libboost_system.dylib # this is one of the libs that caffe links against
...
/usr/lib/libc++.1.dylib (compatibility version 1.0.0, current version 120.0.0)
...
$ brew info boost-python
...
$ otool -L /usr/local/Cellar/boost-python/1.57.0/lib/libboost_python.dylib
...
/usr/local/Frameworks/Python.framework/Versions/2.7/Python (compatibility version 2.7.0, current version 2.7.0)
注意其中的boost和boost-python的版本和路径需要更改。
我在Github上发现还有另一种解决方法,首先查看_caffe.so:
otool -L python/caffe/_caffe.so
如果他没有链接到你的anaconda Python上那么用下面的命令强制他链接上去就不会有segmentation fault的错误啦:
install_name_tool -change "libpython2.7.dylib" "$HOME/anaconda/lib/libpython2.7.dylib" python/caffe/_caffe.so
Reference: