1. 程式人生 > >ubuntu16.04 在caffe中安裝python3時踩到的坑

ubuntu16.04 在caffe中安裝python3時踩到的坑

在caffe中安裝python3.5的原因:

開始之前一定要提醒大家,不要安裝python3.6,目前caffe的官方給的說明是,還不能很好的支援python3.6

剛開始那會,筆者在安裝caffe之前就已經裝過anaconda3了,但是熟悉anaconda3的童鞋都知道,anaconda3預設安裝的是python3.6的版本,導致我在編譯caffe時,具體編譯指令如下:

可以參考我的另一篇部落格:Ubuntu 16.04 在cuda9.0 cudNN7.5 opencv3.4.0下安裝 caffe(詳細):部落格地址

cd ..\\回到caffe資料夾的位置
 
make all -j12 //j12代表計算機cpu有12個核,這個得根據自己的電腦配置,我這裡可以12執行緒一起make,這樣make速度會快上很多
 
make test -j12
 
sudo make runtest -j12
//這裡直接 make runtest -j12 可能如下報錯
check failed : status == cublas_status_success(1 vs 0) cublas_status_not_initialized
 
make pycaffe //如果以後用python來開發的話必須執行這一句,一般不管你是否用python,都會執行這一句

在進行make pycaffe後,檢測pycaffe是否安裝好,使用指令:

python

//進入python,會提示你安裝的是在anaconda3的版本

import caffe

 在匯入caffe模型時,就會報錯:

Caffe中ImportError: dynamic module does not define module export function (PyInit__caffe)錯誤

主要原因:就是caffe對python3的支援並不好,只支援python2.7,此時你可以去anaconda官方下載anaconda2,使用2來進行對caffe模型的使用。

注意:

這裡在使用anaconda2來編譯caffe時,你的opencv版本不能是opencv3的,否則會報錯:大量的opencv未定義的引用。

考慮到python3是未來的趨勢,建議大家安裝anaconda3.

安裝過程中踩過的坑:

針對上面的問題:Caffe中ImportError: dynamic module does not define module export function (PyInit__caffe)錯誤

首先:

先對自己電腦中的anaconda3中的python3.6進行降級,下載python3.5,官網連結:python3.6換成3.5

沒有anaconda3的可以在這裡下載:anaconda3下載,具體安裝很簡單,可以自行百度。

其次:

安裝好python3.5,你按照上面要求重新編譯caffe,並匯入caffe模型時,依然報錯,可以通過更改caffe目錄下的makefile.config檔案:

# Uncomment to use Python 3 (default is Python 2)
#PYTHON_LIBRARIES := boost_python3 python3.5m
#PYTHON_INCLUDE := /usr/include/python3.5m \
#                /usr/lib/python3.5/dist-packages/numpy/core/include

將上面的語句後三行的#號註釋掉,如下:
# Uncomment to use Python 3 (default is Python 2)
PYTHON_LIBRARIES := boost_python3 python3.5m
PYTHON_INCLUDE := /usr/include/python3.5m \
                /usr/lib/python3.5/dist-packages/numpy/core/include

註釋完再重新

make clean
make all -j12 //12是我伺服器的核數,具體根據自己電腦配置
make pycaffe

這時又有一個坑等著我們,遇到了這個錯誤:提示 缺少libboost,很頭疼,解決辦法:

出現問題“ld cannot find lboost_python3”,這個時候應該建立一個libboost_python-py35.so的符號連結。 

cd /usr/lib/x86_64-linux-gnu
sudo ln -s libboost_python-py35.so libboost_python3.so

如果沒有boost這時就需要自己去安裝一個:

sudo apt-get install libboost-all-dev
//標頭檔案一般安裝在
/usr/include
//下面有一個目錄boost,裡面是標頭檔案。而庫檔案一般都放在
/usr/lib/x86_64-linux-gnu

//如何檢視當前安裝的boost版本
dpkg -S /usr/include/boost/version.hpp

//通過上面的命令,你就可以發現boost的版本了,檢視結果可能如下:
libboost1.58-dev: /usr/include/boost/version.hpp

到這裡,在重新編譯caffe:

make clean
make all -j12 //12是我伺服器的核數,具體根據自己電腦配置
make pycaffe

輸入python,再import caffe,報錯!!!

ImportError: No module named 'google'
//或者報如下錯誤:
ImportError: No module named google.protobuf.

這裡就必須再安裝protobuf:

手動編譯和安裝 protobuf 3.0 以上版本,到 protobuf 的 release頁面去下載兩個安裝包:github地址

注意,仔細看 protobuf 的說明。安裝 protobuf 需要安裝兩樣東西, 少一樣都不行:

  • the protocol compiler;
  • the protobuf runtime 

因此, 接下來首先安裝 the protocol compiler 和 protobuf cpp runtime

解壓第一個安裝包 `protobuf-cpp-3.0.0-beta-2.zip`,並進入解壓出來的目錄
$ ./configure
$ make
$ make check
$ sudo make install
$ sudo ldconfig # refresh shared library cache.

這樣 the protocol compiler 和 protobuf cpp runtime 就同時編譯和安裝好了。下面編譯和安裝 protobuf python runtime:

解壓第二個安裝包 `protobuf-python-3.0.0-beta-2.zip`,並進入解壓出來的目錄
$ cd python
$ python setup.py build
$ python setup.py test
$ python setup.py install

這樣 protobuf python runtime 就編譯和安裝好了。注意 protobuf python runtime 是作為 pip 的包安裝的。但是你可以從 conda 裡面看到它:

$ conda list | grep protobuf
protobuf                  3.0.0b2                   <pip>

最後:

在重新編譯caffe,再在python中匯入:import caffe就能成功了。