歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux綜合 >> 學習Linux

在MAC上安裝Caffe

在MAC上安裝Caffe


在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接口也可以正常使用。

 

遇到的報錯:

  1. 如果運行import caffe的時候提示 no module  那麼說明你的PYTHONPATH有問題 注意更改
  2. 如果遇到了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:
  1.   Caffe offical installation
  2.      Github:Theory of Building Caffe on OS X
  3.      Github Issue#591

本文永久更新鏈接地址:

http://xxxxxx/Linuxjc/1141045.html TechArticle

Copyright © Linux教程網 All Rights Reserved