2021-05-12 14:32:11
在MAC上安裝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:
本文永久更新連結地址:http://www.linuxidc.com/Linux/2016-06/132547.htm
相關文章