恢復內容開始 最近嘗試在MAC(OS X 10.11 El Capitan)上安裝Caffe 以及Python介面遇到了一些問題但是官方安裝教程上並沒有提出這些問題的解決辦法搜索了很久(主要在於Python介面上) 終於找到瞭解決辦法 其實Caffe的安裝分兩步:安裝依賴+編譯源碼 首先是安裝依賴: ...
---恢復內容開始---
最近嘗試在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: