Ubuntu18.04 配置Caffe(Anaconda3和非Anaconda3))

前言

本文主要使用兩種方法來配置Caffe以及在發(fā)布自己配置過程中遇到的問題和解決方案秆吵,以供大家參考奸披。一種是基于系統(tǒng)本身的Python環(huán)境坟漱,無需安裝Anaconda3竟纳,另外一種是基于Anaconda3的獨(dú)立Python環(huán)境搞莺。
安裝的前提是需要已經(jīng)進(jìn)行顯卡驅(qū)動息罗、CUDA、CUDNN的安裝以及Opencv的安裝才沧,如果沒有安裝可以參考Ubuntu18.04 安裝顯卡驅(qū)動阱当、CUDA、CUDNN糜工,Ubuntu18.04配置Opencv3.4.9弊添。
其次要提到的是Caffe開源代碼(這里的地址是我鏈接到碼云上的,下載會比github快很多)捌木,目前對應(yīng)的Python版本是3.6油坝,這一步在后面的配置中會提到。

無需安裝Anaconda3的caffe配置

這種方式相對比較簡單刨裆,且不容易出錯澈圈,但是我在配置到最后一步的時候卻發(fā)生使用上出了問題,原因是似乎是多操作了一步帆啃,因此喜歡簡單方法的建議謹(jǐn)慎嘗試瞬女。
1.安裝必要的依賴包

$ sudo apt-get install libprotobuf-dev libleveldb-dev libsnappy-dev libopencv-dev libhdf5-serial-dev protobuf-compiler
$ sudo apt-get install --no-install-recommends libboost-all-dev
$  sudo apt-get install libopenblas-dev liblapack-dev libatlas-base-dev
$ sudo apt-get install libgflags-dev libgoogle-glog-dev liblmdb-dev
$  sudo apt-get install git cmake build-essential

一定要確保所有的依賴包都正常安裝了,如果沒有可以嘗試apt update一下
2.更改默認(rèn)Python
終端輸入python查看版本努潘,如果默認(rèn)不是python3诽偷,則在終端輸入:

$ sudo update-alternatives --install /usr/bin/python python /usr/bin/python2 100
$ sudo update-alternatives --install /usr/bin/python python /usr/bin/python3 150  

執(zhí)行完上述兩行命令之后在終端輸入python,如果第一行信息是3.6疯坤,則成功报慕。
如果要切換到Python2,執(zhí)行:

$ sudo update-alternatives --config python

3.下載caffe開源庫

$ git clone https://gitee.com/notalone0125/caffe.git

4.進(jìn)行編譯前的配置更改

$ cd caffe
$ sudo cp Makefile.config.example Makefile.config
$ sudo gedit Makefile.config
/#修改Makefile.config文件
1.應(yīng)用 cudnn
將 #USE_CUDNN := 1
修改成:
USE_CUDNN := 1

2.應(yīng)用 opencv 版本
將 #OPENCV_VERSION := 3
修改為:
OPENCV_VERSION := 3
3.使用 python 接口
將#WITH_PYTHON_LAYER := 1
修改為
WITH_PYTHON_LAYER := 1
4.修改 python 路徑
將#INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include
#LIBRARY_DIRS := $(PYTHON_LIB) /usr/local/lib /usr/lib
修改為:
 INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include /usr/include/hdf5/serial
LIBRARY_DIRS := $(PYTHON_LIB) /usr/local/lib /usr/lib /usr/lib/x86_64-linux-gnu /usr/lib/x86_64-linux-gnu/hdf5/serial
5.刪掉compute_20压怠,最后效果是
CUDA_ARCH := -gencode arch=compute_30,code=sm_30 \
    -gencode arch=compute_35,code=sm_35 \
    -gencode arch=compute_50,code=sm_50 \
    -gencode arch=compute_52,code=sm_52 \
    -gencode arch=compute_60,code=sm_60 \
    -gencode arch=compute_61,code=sm_61 \
    -gencode arch=compute_61,code=compute_61
/#
$ sudo gedit Makefile
/#修改Makefile文件
1.將:
NVCCFLAGS +=-ccbin=$(CXX) -Xcompiler-fPIC $(COMMON_FLAGS)
替換為:
NVCCFLAGS += -D_FORCE_INLINES -ccbin=$(CXX)  -Xcompiler -fPIC $(COMMON_FLAGS)

2.將:
LIBRARIES += glog gflags protobuf boost_system boost_filesystem m hdf5_hl hdf5
改為:
LIBRARIES += glog gflags protobuf boost_system boost_filesystem m hdf5_serial_hl hdf5_serial

3.將
PYTHON_LIBRARIES := boost_python python2.7
改為
PYTHON_LIBRARIES := boost_python-py35  #py35需要改為你自己的python版本眠冈,如py34,py33
/#

5.開始編譯
在 caffe 目錄下執(zhí)行 :

$ make all -j8

這一步前面如果配置正確就應(yīng)該沒什么問題。

$ make runtest -j8

圖片.png

出現(xiàn)如圖結(jié)果就表示成功菌瘫。
到了這一步蜗顽,在命令行的執(zhí)行python,之后import caffe應(yīng)該就可以正常使用的雨让。提示File "<stdin>", line 1, in <module> ImportError: No module named caffe的話,進(jìn)行一下環(huán)境變量的配置

$ sudo echo export PYTHONPATH="~/caffe/python" >> ~/.bashrc
$ source ~/.bashrc

但是在參考文章中說位置支持Python接口雇盖,需要make pycaffe -j8。這一步我嘗試了之后宫患,import caffe就報錯了刊懈,暫時沒有找到原因。如果在上面一步import caffe已經(jīng)可以成功娃闲,先不要進(jìn)行make pycaffe -j8虚汛,看后面能不能正常使用。
關(guān)于更詳細(xì)的操作可以看我的參考文章的第一篇皇帮。我還是想重點(diǎn)講一講第二種方法卷哩。

安裝Anaconda3之后進(jìn)行Caffe環(huán)境的配置

我在操作了make pycaffe -j8之后就報錯了,因此就又折騰了一下在Anaconda3下配置pyhton并且安裝caffe属拾。
1.安裝Anaconda3,這張表上提供了Anaconda以及對應(yīng)的Python版本将谊。我使用的是3.5.2,最好是3.5.2渐白,因為對應(yīng)的caffe里的python是3.6版本的尊浓,這樣會少走很多彎路。

Anaconda版本.png

anaconda下載纯衍,這里使用清華鏡像軟件站下載栋齿,會很快。
下載完之后執(zhí)行.sh文件襟诸,并按照第一種方法中的第2步更改默認(rèn)Python.
之后還要更改環(huán)境變量

$ sudo gedit /etc/profile
# 在文件末尾處添加exportPATH=/home/liguangyao/anaconda3/bin:$PATH
$ source ~/.bashrc

此時瓦堵,在終端輸入Python,會看到第一行位Python3.6.5 |Anaconda歌亲,Inc.|.....菇用,這樣就證明默認(rèn)的Python已經(jīng)是Anaconda下的Python3.6.5了。

2.首先安裝Caffe-GPU

$ sudo apt install caffe-cuda

3.基本依賴庫的安裝

$ sudo apt-get install libprotobuf-dev libleveldb-dev libsnappy-dev libopencv-dev
$ sudo apt-get install libhdf5-serial-dev protobuf-compiler
$ sudo apt-get install --no-install-recommends libboost-all-dev
$ sudo apt-get install libopenblas-dev liblapack-dev libatlas-base-dev
$ sudo apt-get install libgflags-dev libgoogle-glog-dev liblmdb-dev

4.下載源碼的過程和上面一樣陷揪,只要是文件的配置更改稍有不同惋鸥,參考如下:

/#修改Makefile.config的配置文件
1.將#USE_CUDNN:= 1
取消注釋

2.將#OPENCV_VERSION := 3
取消注釋

3.將#compute_20刪掉,最后效果是
CUDA_ARCH := -gencode arch=compute_30,code=sm_30 \
    -gencode arch=compute_35,code=sm_35 \
    -gencode arch=compute_50,code=sm_50 \
    -gencode arch=compute_52,code=sm_52 \
    -gencode arch=compute_60,code=sm_60 \
    -gencode arch=compute_61,code=sm_61 \
    -gencode arch=compute_61,code=compute_61

4.將#BLAS:= atlas注釋
換成BLAS := open

5.將Python2環(huán)境注銷,換成Anaconda3下的Python環(huán)境悍缠,最后效果:
# 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
# Anaconda Python distribution is quite popular. Include path:
# Verify anaconda location, sometimes it's in root.
ANACONDA_HOME := $(HOME)/anaconda3
PYTHON_INCLUDE := $(ANACONDA_HOME)/include \
    $(ANACONDA_HOME)/include/python3.6m \
    $(ANACONDA_HOME)/lib/python3.6m/site-packages/numpy/core/include

6.將#PYTHON_LIB:= /usr/lib注釋
取消PYTHON_LIB:= $(ANACONDA_HOME)/lib的注釋

7.將#INCLUDE_DIRS :=$(PYTHON_INCLUDE) /usr/local/include /usr/local/hdf5/include LIBRARY_DIRS :=$(PYTHON_LIB) /usr/local/lib /usr/lib /usr/local/hdf5/lib
改為
# Whatever else you find you need goes here.
INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include /usr/local/hdf5/include
LIBRARY_DIRS := $(PYTHON_LIB) /usr/local/lib /usr/lib /usr/local/hdf5/lib
/#
/#修改Makefile的配置文件
1將#NVCCFLAGS+= -ccbin=$(CXX) -Xcompiler -fPIC $(COMMON_FLAGS)
修改為NVCCFLAGS += -D_FORCE_INLINES -ccbin=$(CXX) -Xcompiler -fPIC $(COMMON_FLAGS) 
 
2.將:
LIBRARIES += glog gflags protobuf boost_system boost_filesystem m hdf5_hl hdf5
改為:
LIBRARIES += glog gflags protobuf boost_system boost_filesystem m hdf5_serial_hl hdf5_serial

3.將
PYTHON_LIBRARIES := boost_python python2.7
改為
PYTHON_LIBRARIES := boost_python-py35  #py35需要改為你自己的python版本揩慕,如py34,py33
/#
/#

5.進(jìn)入到caffe主目錄下的python目錄,安裝Python的必要項( -i https://pypi.tuna.tsinghua.edu.cn/simple可以極大提高pip的下載速度)

$ for req in $(cat requirements.txt); do pip install  -i https://pypi.tuna.tsinghua.edu.cn/simple $req; done

這一步可能會出現(xiàn)一些紅色報錯扮休,按照下面的方法解決
(1).ERROR: After October 2020 you may experience errors when installing or updating packages

$ pip install python-openstackclient python-glanceclient python-neutronclient   -i https://pypi.tuna.tsinghua.edu.cn/simple --use-feature=2020-resolver

(2).錯誤:pandas 0.23.4 has requirement python-dateutil>=2.5.0, but you'll have python-dateutil 1.5

$ sudo pip install --upgrade python-dateutil
#或者
$ sudo gedit requirements.txt
將#python-dateutil>=1.4,<2
改為python-dateutil

直到for req in $(cat requirements.txt); do pip install -i語句執(zhí)行不出現(xiàn)任何紅色字體并正確執(zhí)行迎卤。

6.進(jìn)入caffe的根目錄下進(jìn)行編譯

$ sudo make clean
$ sudo make all -j4
$ sudo make test -j8 
$ sudo make runtest -j8   

這些步驟中只要沒提示報錯信息,就代表執(zhí)行成功了玷坠。一般runtest會報錯蜗搔,參見參考文章中Anaconda3配置Caffe的第五篇,比較常見的是錯誤三八堡。
最后樟凄,sudo make pycaffe -j4 //配置pycaffe即可。

參考文章

無Anaconda3配置Caffe
1.Ubuntu18.04 Caffe 安裝步驟記錄(超詳盡)
2.error while loading shared libraries: xxx.so.x" 錯誤的原因和解決辦法

Anaconda3配置Caffe
1.Ubuntu18.04LTS下基于 Anaconda3 安裝 Caffe-GPU及 Python3.6 + Pycharm + Mnist例子教程(超詳細(xì))
2.ERROR: After October 2020 you may experience errors when installing or updating packages
3.錯誤:pandas 0.23.4 has requirement python-dateutil>=2.5.0, but you'll have python-dateutil 1.5
4.pycaffe編譯后的配置問題(ModuleNotFoundError: No module named 'caffe'
5.Ubuntu18.04 LTS下Caffe-GPU版本安裝常見錯誤

python降級的靈感來源
1.ubuntu18——ModuleNotFoundError: No module named 'caffe._caffe'
2.Ubuntu 16.04下安裝Caffe解決 undefined symbol: _ZN5boost6python6detail11init_moduleER11PyModuleDefPFvvE

其他文章
1.完美解決pip下載慢兄渺、下載超時問題(含鏡像網(wǎng)站缝龄,代碼)
2.清華大學(xué)開源軟件鏡像站
3.恢復(fù)anaconda環(huán)境, 卸載anaconda, 重裝anaconda
4.Boost Python 的安裝配置以及示例 (支持python3.x)
5.Linux 編譯boost (for python3)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子叔壤,更是在濱河造成了極大的恐慌瞎饲,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,406評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件炼绘,死亡現(xiàn)場離奇詭異嗅战,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)俺亮,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,395評論 3 398
  • 文/潘曉璐 我一進(jìn)店門驮捍,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人脚曾,你說我怎么就攤上這事东且。” “怎么了本讥?”我有些...
    開封第一講書人閱讀 167,815評論 0 360
  • 文/不壞的土叔 我叫張陵苇倡,是天一觀的道長。 經(jīng)常有香客問我囤踩,道長旨椒,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,537評論 1 296
  • 正文 為了忘掉前任堵漱,我火速辦了婚禮综慎,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘勤庐。我一直安慰自己示惊,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,536評論 6 397
  • 文/花漫 我一把揭開白布愉镰。 她就那樣靜靜地躺著米罚,像睡著了一般。 火紅的嫁衣襯著肌膚如雪丈探。 梳的紋絲不亂的頭發(fā)上录择,一...
    開封第一講書人閱讀 52,184評論 1 308
  • 那天,我揣著相機(jī)與錄音碗降,去河邊找鬼隘竭。 笑死,一個胖子當(dāng)著我的面吹牛讼渊,可吹牛的內(nèi)容都是我干的动看。 我是一名探鬼主播,決...
    沈念sama閱讀 40,776評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼爪幻,長吁一口氣:“原來是場噩夢啊……” “哼菱皆!你這毒婦竟也來了须误?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,668評論 0 276
  • 序言:老撾萬榮一對情侶失蹤仇轻,失蹤者是張志新(化名)和其女友劉穎京痢,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體拯田,經(jīng)...
    沈念sama閱讀 46,212評論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡历造,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,299評論 3 340
  • 正文 我和宋清朗相戀三年甩十,在試婚紗的時候發(fā)現(xiàn)自己被綠了船庇。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,438評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡侣监,死狀恐怖鸭轮,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情橄霉,我是刑警寧澤窃爷,帶...
    沈念sama閱讀 36,128評論 5 349
  • 正文 年R本政府宣布,位于F島的核電站姓蜂,受9級特大地震影響按厘,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜钱慢,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,807評論 3 333
  • 文/蒙蒙 一逮京、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧束莫,春花似錦懒棉、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,279評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至饿敲,卻和暖如春妻导,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背怀各。 一陣腳步聲響...
    開封第一講書人閱讀 33,395評論 1 272
  • 我被黑心中介騙來泰國打工栗竖, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人渠啤。 一個月前我還...
    沈念sama閱讀 48,827評論 3 376
  • 正文 我出身青樓狐肢,卻偏偏與公主長得像,于是被迫代替她去往敵國和親沥曹。 傳聞我的和親對象是個殘疾皇子份名,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,446評論 2 359