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