python安装caffe_Caffe安装笔记二:Caffe安装过程
下面開始正題,caffe的安裝過程。因為出問題很多,所以實際上我是嘗試了python2和python3兩種python的接口。下面一并放出來。
1.安裝build-essential
sudo apt-get install
build-essential
這個是一些基本的庫,具體包括哪些,安裝前確認時會顯示,印象中有gcc等等。
2. boost安裝
caffe官網給出的是sudo apt-get install
--no-install-recommends libboost-all-dev
我不知道他特意加個--no-install-recommends干啥。另外,在installation主頁上標明了Boost>=1.55,但是如果用上面那條命令的話,默認裝上的是1.54。我現在還不能完全確定1.54是不是不行,但是為了保險起見,請使用
sudo apt-get install libboost1.55-all-dev
關于boost在makefile.config中的配置,這是個坑,下面詳細講講。
2.1. python2/Anaconda2
對于python2,只要執行完上面的安裝就可以了,makefile中的配置項無需做特別設置。
2.2. python3/Anaconda3
對于python3,boost安裝方面沒啥要留意的。需要特別注意的是makefile.config中,有一行
# Uncomment to use Python 3 (default isPython
2)
PYTHON_LIBRARIES := boost_python-py34python3.5m
這一項很有迷惑性,而且我也迷糊了很久,因為相關有一項是PYTHON_LIB,一開始我以為是相同的重復項。但是如果這句stay
comment的話,make
caffe和pycaffe都能成功通過,但是使用時卻會報錯:
ImportError:
/home/zero/Documents/caffe-master/python/caffe/_caffe.so:undefined
symbol:
_ZN5boost6python6detail11init_moduleER11PyModuleDefPFvvE
這個錯誤的意思是,boost版本不匹配。
boost.python是啥東西呢?我理解的是boost.python是一個類似翻譯器的東西,所以如果你是python3的程序,卻用了python2的翻譯器,那語法、定義等等各方面必然會有沖突。我記得在某篇帖子中看到過,str、int等等的定義,在兩者中是不同的,所以有時會有報錯信息說找不到str啦int啦之類。當時沒有把沒一個錯誤都記下來。
然后,如果我們去makefile中查找這個變量PYTHON_LIBRARIES,會發現有這么一句:
PYTHON_LIBRARIES ?= boost_python python2.7
這句的意思是說,如果不出意外,使用的是2版本的python和boost.python。但是這里有個問題,如果把makefile.config里面那句uncomment,原來默認的是"PYTHON_LIBRARIES
:=boost_python3 python3.5m
",直接去掉的話會報錯說找不到
-lboost_python3
。這里我無法解釋原理,但是去/usr/lib/x86_64-linux-gnu/文件夾下面去找找,你會找到屬于python3的boost版本,可能是33,也可能是34。確定后,把makefile中的名稱換成相應名稱就可以了。3.5m
的,我不了解為何要加m。修改后應該是:
PYTHON_LIBRARIES := boost_python-py34python3.5m
3. protobuf安裝
protobuf官方產品默認是不支持python3的,所以通過默認的apt-get命令安裝的libprotobuf和protobuf
complier僅適用于python2系列。
而對于python3,以前支持python3的是民間組織搞的一個protobuf-py3,似乎是基于2.5的一個改貨。但是現在下不到了。試過pip3-protobuf,當時也不行。但是現在想來,我或許是之前裝過protobuf2.5沒卸載干凈的關系,如果有興趣的話,倒是可以試試pip3的方式。不過我這里還是建議手動安裝。
有人在帖子中說protobuf-3.0.0
-alpha有問題,我試過也確實不行,但是當時嘗試的環境依然是
protobuf2
沒卸干凈,所以到底alpha行不行,這里說不好,不過我確定beta是可以的,所以我們直接去下載protobuf-3.0.0-beta-2。注意分別下載cpp和python兩個版本的。
https://github.com/google/protobuf/releases
解壓后
./configure
--prefix=/path/protobuf
(這里指定的路徑可以是任意)
make
make check
make install
然后配置路徑,將protobuf下的lib和include加入makefile.config,同時,protobuf要加入bashrc里面。
export PATH=$PATH:/path/protobuf/bin
export
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/path/protobuf/lib
然后protoc–version查看版本是否正確。如果顯示的是protoc2.5.0
,那是有問題的。我曾經執行apt-get
installlibprotobuf-dev,后來又purge卸載,但是執行protoc
--version后還是能看到2.5.0的信息。如果是默認系統執行命令后會提示沒有protobuf,所以最好在安裝前先查一下。萬一有,怎么干凈的卸載,這個我真不清楚。
關于系統權限問題
這里講一下系統權限的問題,初入手ubuntu很容易迷糊,username賬戶、sudo、su這是三個不同的東西。bashrc配置過的路徑僅針對username賬戶有效,怎么樣能夠全局有效?理論是是修改/etc/profile,但是實際測試過不太好用。sudo的權限是不同于su賬戶的,所以下一步安裝python依賴我寧愿用su也不要用sudo。理論上修改sudo的配置文件/etc/sudoers就能夠達到不清除用戶賬戶環境配置的效果,但是實測無效。
然后是pip,系統關聯anaconda3之后,默認pip是anaconda的pip,但是如果你執行sudo
pip的話執行的是系統默認python2的pip,這些地方一定要注意。所以后面很多路徑配置后,執行sudo命令會提示找不到這個那個,原因是在做環境變量配置時僅針對當前用戶做了配置。
另外有網優提到過,在caffemake的時候不要用sudo,不然后面會把部分文件加入權限限制,導致在make
pycaffe的時候出問題。
解壓protobuf的Python版本,進入目錄后
cd Documents/pyprotobuf/protobuf-3.0.0
-beta-2/python
python setup.py build
python setup.py test
python setup.py install
最后一步需要sudo或者su權限。我們還是把su也配置好anaconda,然后進入su賬戶執行安裝。
這里一定要注意python的版本問題,如果裝了anaconda3,那么username賬戶下面python進去后是3.5.1
,這時一定要注意,測試下su賬戶下python進去后是什么,如果不修改bashrc,那么進去后是2.7.6。可以直接從username下的bashrc中把anaconda的路徑配置copy過去。
安裝完python的protobuf后,進入python進行測試:
Import google.protobuf
from google.protobuf.internal
importenum_type_wrapper
3. hdf5
python2/3下照常安裝就好,應該沒什么太大問題。
sudo apt-get install libhdf5-serial-dev
anaconda自己自帶hdf5,不需要安裝,但是需要注意配置。在makefileconfig中,要把anaconda的lib和include加入路徑配置當中,所以在make的時候,會依照該配置尋找anaconda中的動態鏈接庫文件libhdf5.so.10,但是系統找不到,怎么辦呢?這里有兩種解決辦法。
一種是在bashrc中加入anaconda的lib路徑:
LD_LIBRARY_PATH=home/zero/anaconda3/lib:$LD_LIBRARY_PATH
exportLD_LIBRARY_PATH
但是這樣會引發別的問題,make時,opencv方面會報錯,
undefined reference
toTIFFRGBAImageOK@LIBTIFF_4.0'
按照晉倪的文章,這就需要手動安裝opencv,并在配置時設置:
加上-DBUILD_TIFF=ON
但是我嫌麻煩,所以開辟新路徑。
第二種方式就是對hdf本身動手腳,一種辦法是在/usr/lib/x86_64-linux-gnu
文件夾下面找,看有libhdf5.so.x幾,就把它鏈接為10,然后make時就找到啦。比如
sudo ln -s libhdf5.so.7 libhdf5.so.10
但是這不就是貍貓換太子?有網友說照著這個做,報錯說libhdf5版本不對。所以可能9換7可以,10換8就不行。然后有個哥們比較逗的是,直接把so文件復制到/usr/lib/x86_64-linux-gnu文件夾下面,我試了下:
sudo cp
libhdf5_hl.so.10/usr/lib/x86_64-linux-gnu/
sudo cp libhdf5.so.10/usr/lib/x86_64-linux-gnu/
然后,似乎是可以的。
4. opencv
python2的我直接就禁用opencv了,所以有興趣可以自己試試看。當時也是報錯
undefined reference
toTIFFRGBAImageOK@LIBTIFF_4.0'
可能對于python2/3,真的要手動安裝。
對于anaconda,直接照常安裝就行了。
sudo apt-get install libopencv-dev
5.其他
sudo apt-get install
libleveldb-devlibsnappy-dev
sudo apt-get install libatlas-base-dev
sudo apt-get install libgflags-devlibgoogle-glog-dev
liblmdb-dev
這些似乎都不會出太大問題。
6.安裝python依賴庫
anaconda用戶可以跳過此步,這一步僅針對原生python而言。
首先安裝一些必備的編譯器:
sudo apt-get install gcc-gfortran.x86_64
sudo apt-get install gfortran
然后安裝pip(針對python2):
sudo apt-get install python-pip
或者(針對python3):
sudo apt-get install python3-pip
使用的時候是pip或者pip3,分別針對兩個版本的python。
然后執行caffe的python下面的requirements.txt中的模塊安裝。
官網給出的命令:
for req in $(catrequirements.txt); do pip install
$req; done
執行此命令需要su權限,你可以先進入su賬戶,如果不用su而用sudo的話則命令改為:
for req in $(cat requirements.txt); do sudopip3 install
$req; done
不過網上還是看到有人說不要用他的文檔,自己一個一個裝比較好。確實在安裝過程中會有不能完全安裝而留意不到的情況,所以最好手動安裝,沒裝完一個看返回信息是否是安裝成功。例如:
sudo pip3 install
'python-gflags>=2.0'
需要選擇版本的話記得加引號。
7.安裝caffe及配置makefile文件
先下載Caffe。github上下載好caffe庫:https://github.com/BVLC/caffe,復制到ubuntu下,解壓。然后按照官網說法修改config
cd /home/zero/Documents/caffe-master
cp Makefile.config.example Makefile.config
直接用gedit打開
CPU_ONLY := 1
#這句要去掉comment。因為我們只用cpu
# USE_OPENCV := 0
#不用opencv的話也可以去掉,不過最好留著吧。我是在python2下面實在懶才去掉的。
PYTHON_INCLUDE := /usr/include/python2.7 \
/usr/lib/python2.7/dist-packages/numpy/core/include
這兩句,如果是要用python3或者anaconda,一概去掉,如果是原生python2.7,下面的要改為/usr/local/lib/python2.7/dist-packages/numpy/core/include
ANACONDA_HOME := /home/zero/anaconda3
PYTHON_INCLUDE := $(ANACONDA_HOME)/include\
$(ANACONDA_HOME)/include/python3.5m
\
$(ANACONDA_HOME)/lib/python3.5/site-packages/numpy/core/include\
注意是anaconda3,或者anaconda2,帶了數字的
PYTHON_LIBRARIES := boost_python-py34python3.5m
這句前面講過,boost版本的問題。
# PYTHON_LIB := /usr/lib
PYTHON_LIB := $(ANACONDA_HOME)/lib
默認就用上面的,anaconda就用下面的。
INCLUDE_DIRS := $(PYTHON_INCLUDE)/usr/local/include
/usr/local/protobuf/include
LIBRARY_DIRS := $(PYTHON_LIB)/usr/local/lib /usr/lib
/usr/local/protobuf/lib
注意后面手動添加protobuf的庫。
8. make
在caffe根目錄下
make
make test
make runtest
make pycaffe
make pytest
如果測試都通過,那就沒問題了。注意配置文件里面有一個
WITH_PYTHON_LAYER := 1
如果這句的注釋去掉就不能pytest了。記得googlegroup上有人這么說過。
9.配置環境變量:
export PATH=$PATH:/usr/local/protobuf/bin
exportLD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/protobuf/lib
這兩句是配置protobuf的,手動安裝3beta2之后,要添加這兩句,不然系統找不到你安裝的protobuf。如果是2系列的不需要執行這一步。
# added by Anaconda34.0.0
installer
exportPATH="/home/zero/anaconda3/bin:$PATH"
上面這個是安裝anaconda3的時候自動添加的,如果在問你要不要添加時你直接回車no了,那回頭自己添上這一句。否則python進去的還是系統自帶的python2。前面提到過,晉倪的文章中說建議
LD_LIBRARY_PATH=home/zero/anaconda3/lib:$LD_LIBRARY_PATH
export LD_LIBRARY_PATH
說如果不加就會進不去系統。我沒遇到進不去系統的情況。反而是加了這兩句會導致opencv的報錯。
exportPYTHONPATH=/home/zero/Documents/caffe-master/python:$PYTHONPATH
最后這句是caffe的配置,有人居然說可以配置為caffe/build/python,嚴重誤導了我……
10.驗證
最后還是需要仔細驗證一下,不然可能空歡喜一場
python進去后
import caffe
如果不報錯也別急著高興
from caffe import layers as L
如果這句也不報錯,那應該是不會有問題了。
萬一第一句成功了結果第二句沒成功,可能是路徑配錯了,用dir(caffe)看看caffe都有些啥。我第一次海市蜃樓的時候只有
['__doc__', '__loader__', '__name__','__package__',
'__path__', '__spec__']。說明是有問題的。
最后
雖然自己極盡所能想要做到沒有遺漏,但是由于caffe安裝過程本身重復了太多次,每次錯誤都不同,我沒有時間一一記錄和呈現。萬一有所疏漏,請及時指出。
關于參考資料,看了太多的博文,沒辦法一一列出,而且根本系統、環境的不同,操作方法也有太多的不一樣。這里要感謝google
user group上面的兩位網友,針對我的問題他們直接給出了很好的建議。
總結
以上是生活随笔為你收集整理的python安装caffe_Caffe安装笔记二:Caffe安装过程的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: JDBC实战(一)JDBC概述
- 下一篇: python xlrd模块_python