Mac 任意Python環境安裝 Caffe 的終極教程 —— Jinkey 原創

Jinkey發表於2017-08-25

原文連結 jinkey.ai/post/tech/m…
本文作者 Jinkey(微信公眾號 jinkey-love,官網 jinkey.ai
感謝 yubang 老司機指導填坑,大神的部落格blog.yubangweb.com/
文章允許非篡改署名轉載,刪除或修改本段版權資訊轉載的,視為侵犯智慧財產權,我們保留追求您法律責任的權利,特此宣告!

1.1 為什麼要寫這篇文章

由於歷史原因:
我的電腦有五六個直接安裝在系統的Python的環境,加上一堆 Python 虛擬環境。

包括 Mac 系統的原因
自帶的系統環境無法安裝 pip 及其他第三方庫,必須通過 homebrew來自行安裝一個python 而這個python路徑和系統的並不一樣。
包括 Anaconda 的原因
之前為了安裝某些科學計算庫方便使用了Anaconda,並且需要同時使用python2和3,所以由多了兩個環境。

在如此混亂的開發環境下,配置 Caffe 實在艱難,特此教程。

1.2 為什麼不用 docker 執行

因為 Pycharm Community Edition 2017.1 不支援遠端除錯,其他開發環境不好用。你要用 docker 的話可以不忽略該教程了。

1.3 用到的環境

因為隨著各種庫更新,不一定有空更新教程導致該教程某些步驟不可用,特此說明一下寫這個文章的時候各個庫的版本。
MacOS 10.12.6
Python 2.7.13
pip 9.0.1
Pycharm Community Edition 2017.1
Homebrew 1.3.1
cmake version 3.8.2
caffe 1.0

2 環境準備

2.1 Homebrew

終端執行

/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"複製程式碼

2.2 Python

brew install python複製程式碼

下載(get-pip.py)[bootstrap.pypa.io/get-pip.py]… get-pip.py所在目錄,終端輸入命令

python get-pip.py複製程式碼

完成後安裝虛擬環境(也不是必須的,後面配置路徑的時候會說到,這裡順便介紹虛擬環境,避免多個專案造成開發環境很混亂)

sudo pip install virtualenv複製程式碼

2.3 CMake

brew install cmake複製程式碼

2.4 Caffe 依賴

brew install -vd snappy leveldb gflags glog szip lmdb
brew tap homebrew/science
brew install hdf5 opencv
brew install --build-from-source --with-python -vd protobuf
brew install --build-from-source -vd boost boost-python
brew install protobuf boost複製程式碼

2.5 Caffe 的 Python 依賴

這裡我使用的是 Pycharm 新建虛擬環境,新建在 /Users/Yourname/CaffeLearn(建立在哪裡都可以,你自己記住就好)
選擇基礎環境的時候記得選擇通過 Homebrew 安轉的那個,應該是在/usr/local/Cellar/python/2.7.13,參考下圖

Pycharm建立虛擬環境
Pycharm建立虛擬環境

建立好之後,在控制檯(點Terminal 那個Tab)依賴 caffe 所需要的 Python庫

執行以下命令

pip install numpy scikit-image protobuf複製程式碼

3 Caffe 配置詳解

3.1 Makefile.config

從(github.com/BVLC/caffe/… caffe-1.0`。該教程使用的是 caffe-1.0。

cp Makefile.config.example Makefile.config複製程式碼

用 Xcode 開啟 Makefile.config(不要用 word 或者文字編輯開啟)
如果你的 Mac 的顯示卡是Intel 的GPU,那麼是沒法使用 cuda 加速的,找到並把# CPU_ONLY := 1的註釋去掉,即CPU_ONLY := 1,這樣讓 Caffe 僅在 CPU 下執行。
(微信公眾號 jinkey-love)
找到以下片段

# NOTE: this is required only if you will compile the python interface.
# We need to be able to find Python.h and numpy/arrayobject.h.
PYTHON_INCLUDE := /usr/include/python2.7 \
        /usr/lib/python2.7/dist-packages/numpy/core/include複製程式碼

PYTHON_INCLUDE修改成( 步驟2.5叫你們記住的虛擬環境路徑!!! 現在就有用了,一定得分別能找到Python.hnumpy/arrayobject.h兩個檔案),後面接著是python2.7還是python2.7.13還是python2.7.12取決於你們安裝的版本,教程後面提到的部分也請注意這點

PYTHON_INCLUDE := /Users/Yourname/CaffeLearn/include/python2.7 \
        /Users/Yourname/CaffeLearn/lib/python2.7/site-packages/numpy/core/include複製程式碼

儲存,(caffe-1.0目錄)終端執行

cmake .複製程式碼

3.2 CaffeConfig.cmake

cmake完成後,用 Xcode 開啟專案目錄下的 CaffeConfig.cmake(不要用 word 或者文字編輯開啟),把倒數第三行的set(Caffe_CPU_ONLY OFF)改成set(Caffe_CPU_ONLY ON),儲存並關閉。
(微信公眾號 jinkey-love)

3.3 CMakeCache.txt

用 Xcode 開啟專案目錄下的 CMakeCache.txt(不要用 word 或者文字編輯開啟)

CPU_ONLY:BOOL=OFF複製程式碼

改為

CPU_ONLY:BOOL=ON複製程式碼

此外,找到然後修改PYTHON_EXECUTABLE:FILEPATHPYTHON_INCLUDE_DIR:PATHPYTHON_LIBRARY:FILEPATH,修改如下

//Path to a program.
PYTHON_EXECUTABLE:FILEPATH=/Users/Yourname/CaffeLearn/bin/python2.7

//Path to a file.
PYTHON_INCLUDE_DIR:PATH=Users/Yourname/CaffeLearn/include/python2.7

//Path to a library.( 通過 Homebrew 安裝的 Python 環境)
PYTHON_LIBRARY:FILEPATH=/usr/local/Cellar/python/2.7.13_1/Frameworks/Python.framework/Versions/2.7/lib/libpython2.7.dylib複製程式碼

儲存並關閉。

4 Caffe 編譯

4.1 臨時軟連線系統和Homebrew 安裝的 Python 路徑

否則在接下來 make 的過程可能會出現錯誤:

'pyconfig.h' cannot be found

在終端執行以下命令建立連線

export CPLUS_INCLUDE_PATH="$CPLUS_INCLUDE_PATH:/usr/include/python2.7/"複製程式碼

4.2 開始編譯

在終端依次執行

make all
make install
make runtest複製程式碼

(微信公眾號 jinkey-love)
編譯且測試成功。

5 使用

將 Caffe-1.0/python 路徑下的 caffe 資料夾拷貝到虛擬環境下

/Users/Yourname/CaffeLearn/lib/python2.7/site-packages/

在專案中 import caffe 即可。

6 版權宣告

原文連結 jinkey.ai/post/tech/m…
本文作者 Jinkey(微信公眾號 jinkey-love,官網 jinkey.ai)
感謝 yubang 老司機指導填坑,大神的部落格blog.yubangweb.com/
文章允許非篡改署名轉載,刪除或修改本段版權資訊轉載的,視為侵犯智慧財產權,我們保留追求您法律責任的權利,特此宣告!!

相關文章