Ubuntu 16.04 下安裝配置caffe

原文地址:https://blogof33.com/post/5/

很長一段時間沒有更新博客了,忙著充電少孝,忙著學(xué)習(xí)继低。這次做項目需要使用到caffe,花了一些時間搭好了稍走。本來是懶得寫這一篇文章的袁翁,但是突然看到Tensorflow那一篇已經(jīng)有700+的閱讀量了,小博客訪問量本來就少婿脸,大多仰仗校友們幫助粱胜,不能就這樣荒廢下去,辜負(fù)大家的一片心意狐树,剛好寫一下自己踩的坑焙压,防止重蹈覆轍。

這篇教程參考了caffe官方文檔抑钟,分成兩個版本涯曲,CPU版本和GPU版本,其實本質(zhì)上只是配置不同罷了在塔。

首先需要查看默認(rèn)python(針對Python2與Python3并存的情況):

python --version

如果是python2.7幻件,則以下請遵循python2.7的配置,如果是python3.5以上蛔溃,則遵循python3.5的配置(最好使用python2.7傲武,因為教程只在2.7環(huán)境下編譯通過,不保證3.5以上不會出現(xiàn)問題)城榛。

初始配置:

sudo apt-get update
sudo apt-get upgrade
sudo apt-get install -y build-essential cmake git pkg-config
sudo apt-get install -y libprotobuf-dev libleveldb-dev libsnappy-dev libhdf5-serial-dev protobuf-compiler libatlas-base-dev libboost-all-dev libgflags-dev libgoogle-glog-dev liblmdb-dev
#下載包管理器pip揪利,如果有可以跳過
sudo apt-get install -y python-pip

#如果默認(rèn)python是Python2.7
sudo apt-get install -y python-dev
sudo apt-get install -y python-numpy python-scipy

#如果默認(rèn)python是Python3.5及以上
sudo apt-get install -y python3-dev
sudo apt-get install -y python3-numpy python3-scipy

#如果opencv版本為2.4
sudo apt-get install -y libopencv-dev

安裝CUDA 8以及Cudnn(可選)

如果你的顯卡是英偉達(NVIDA)的,并且你想使用GPU版本的caffe狠持,那么可以安裝Cuda Toolkit 8和CUDNN庫疟位,詳情請見博主的另一篇文章

在Ubuntu16.04上安裝opencv3.3

如果未安裝opencv則可以通過以下方式安裝opencv3.3(目前最新版)喘垂。

構(gòu)建opencv 3.3

首先安裝依賴關(guān)系:

sudo apt-get install --assume-yes build-essential cmake git
sudo apt-get install --assume-yes pkg-config unzip ffmpeg qtbase5-dev python-dev python3-dev python-numpy python3-numpy
sudo apt-get install --assume-yes libopencv-dev libgtk-3-dev libdc1394-22 libdc1394-22-dev libjpeg-dev libpng12-dev libtiff5-dev libjasper-dev
sudo apt-get install --assume-yes libavcodec-dev libavformat-dev libswscale-dev libxine2-dev libgstreamer0.10-dev libgstreamer-plugins-base0.10-dev
sudo apt-get install --assume-yes libv4l-dev libtbb-dev libfaac-dev libmp3lame-dev libopencore-amrnb-dev libopencore-amrwb-dev libtheora-dev
sudo apt-get install --assume-yes libvorbis-dev libxvidcore-dev v4l-utils vtk6
sudo apt-get install --assume-yes liblapacke-dev libopenblas-dev libgdal-dev checkinstall

然后從https://github.com/opencv/opencv/archive/3.3.0.zip下載OpenCV 3.3的最新源代碼甜刻,解壓以后進入解壓后的目錄(一般為opencv-3.3.0),執(zhí)行:

mkdir build
cd build/    
cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -D FORCE_VTK=ON -D WITH_TBB=ON -D WITH_V4L=ON -D WITH_QT=ON -D WITH_OPENGL=ON -D WITH_CUBLAS=ON -D 

#如果是CUDA 8.0正勒,則執(zhí)行以下命令
CUDA_NVCC_FLAGS="-D_FORCE_INLINES" -D WITH_GDAL=ON -D WITH_XINE=ON -D BUILD_EXAMPLES=ON ..

#如果是CUDA 9.0得院,則執(zhí)行以下命令
CUDA_NVCC_FLAGS="-D_FORCE_INLINES --expt-relaxed-constexpr"

#最后make
make -j $(($(nproc) + 1))

注意:Java 9會導(dǎo)致編譯失敗。

安裝Opencv 3.3

使用make:

sudo make install
sudo /bin/bash -c 'echo "/usr/local/lib" > /etc/ld.so.conf.d/opencv.conf'
sudo ldconfig
sudo apt-get update
#以上完成以后重啟
reboot

測試opencv 3.3

進入opencv 3.3目錄章贞,執(zhí)行以下代碼:

cd samples/cpp
g++ edge.cpp `pkg-config opencv --cflags --libs` -o test 
./test

如圖所示:

aoGZy.png

說明opencv安裝成功祥绞。

修改gcc和g++版本

在編譯caffe之前,先要查看ubuntu下的gcc和g++默認(rèn)版本,如果是5.0以下(比如4.8)蜕径,則需要修改两踏。查看:

gcc -v
g++ -v

如果都是5.0以下,則輸入以下命令:

sudo rm /usr/bin/gcc
sudo rm /usr/bin/g++
sudo ln -s /usr/bin/gcc-5 /usr/bin/gcc  
sudo ln -s /usr/bin/g++-5 /usr/bin/g++  
sudo ldconfig  

然后再次檢查gcc和g++版本:

gcc -v
g++ -v

如果都是5.0以上則修改成功兜喻。

然后如果進行了修改梦染,則再編輯/usr/local/cuda-8.0/targets/x86_64-linux/include/host_config.h文件,將119行的

error -- unsupported GNU version! gcc versions later than 5 are not supported!

注釋掉:

//#error -- unsupported GNU version! gcc versions later than 5 are not supported!

編譯caffe

從github上面clone caffe:

cd
git clone https://github.com/BVLC/caffe.git

進入caffe目錄下朴皆,將Makefile.config.example復(fù)制到Makefile.config中:

cd caffe
cp Makefile.config.example Makefile.config

當(dāng)前路徑如圖所示:

aoJWp.png

下面分成兩個版本分別編譯caffe帕识,請各位讀者根據(jù)需要選擇CPU或者GPU版本。

CPU版本

編輯Makefile.config:

vi Makefile.config

將配置文件里面的#CPU_ONLY:= 1改為CPU_ONLY:= 1遂铡,即取消注釋肮疗。

同理將# WITH_PYTHON_LAYER := 1修改為 WITH_PYTHON_LAYER:=1#USE_OPENCV := 0修改成USE_OPENCV :=1忧便,#USE_LEVELDB := 0修改為 USE_LEVELDB:=1族吻,將#USE_LMDB := 0修改成 USE_LMDB :=1帽借。

然后修改以下幾行(路徑根據(jù)自己的情況來定):

PYTHON_INCLUDE := /usr/include/python2.7 /usr/local/lib/python2.7/dist-packages/numpy/core/include

WITH_PYTHON_LAYER := 1

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

如果opencv為3以上(本文為3.3)珠增,則將OPENCV_VERSION := 3取消注釋,然后修改下面一行(opencv中的3rdparty/lib路徑根據(jù)自己的情況來定):

LIBRARY_DIRS := $(PYTHON_LIB) /usr/local/lib /usr/lib /usr/lib/x86_64-linux-gnu /usr/lib/x86_64-linux-gnu/hdf5/serial /usr/local/share/OpenCV/3rdparty/lib/

然后進入Python目錄安裝依賴關(guān)系:

cd python
#默認(rèn)Python版本為Python2
for req in $(cat requirements.txt); do sudo -H pip2 install $req --upgrade; done

然后返回caffe目錄砍艾,修改Makefile.config:

cd ..
vi Makefile.config

將這一行:

NVCCFLAGS += -ccbin=$(CXX) -Xcompiler -fPIC $(COMMON_FLAGS)

替換為:

NVCCFLAGS += -D_FORCE_INLINES -ccbin=$(CXX) -Xcompiler -fPIC $(COMMON_FLAGS)

然后打開CMakeLists.txt蒂教,加入下面一行:

# ---[ Includes
set(${CMAKE_CXX_FLAGS} "-D_FORCE_INLINES ${CMAKE_CXX_FLAGS}")

最后編譯caffe(在caffe目錄下):

mkdir build
cd build
cmake ..
make all -j $(($(nproc) + 1))
make test -j $(($(nproc) + 1))
make runtest -j $(($(nproc) + 1))
make pycaffe -j $(($(nproc) + 1))
#看看是否在caffe目錄下,不是就切換到該目錄下再執(zhí)行
make distribute -j $(($(nproc) + 1))

最后為了讓Python與Caffe一起工作脆荷,編輯文件~/.bashrc:

vi ~/.bashrc

在文件末尾加入這一行:

export PYTHONPATH=/path/to/caffe-master/python:$PYTHONPATH

最后為了使配置立即生效:

source ~/.bashrc 

CPU版本至此編譯完成凝垛。

GPU版本

和CPU版本很像,只是有些許不同蜓谋。編譯該版本前請保證已經(jīng)安裝CUDA 8和Cudnn梦皮。

編輯Makefile.config:

vi Makefile.config

將配置文件里面的# USE_CUDNN := 1 修改成: USE_CUDNN := 1,即取消注釋桃焕。

同理將# WITH_PYTHON_LAYER := 1修改為 WITH_PYTHON_LAYER:=1剑肯,#USE_OPENCV := 0修改成USE_OPENCV :=1#USE_LEVELDB := 0修改為 USE_LEVELDB:=1观堂,將#USE_LMDB := 0修改成 USE_LMDB :=1让网。

然后修改以下幾行(路徑根據(jù)自己的情況來定):

PYTHON_INCLUDE := /usr/include/python2.7 /usr/local/lib/python2.7/dist-packages/numpy/core/include

WITH_PYTHON_LAYER := 1

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

CUDA_DIR := /usr/local/cuda-8.0

如果opencv為3以上(本文為3.3),則將OPENCV_VERSION := 3取消注釋师痕,然后修改下面一行(opencv中的3rdparty/lib路徑根據(jù)自己的情況來定):

LIBRARY_DIRS := $(PYTHON_LIB) /usr/local/lib /usr/lib /usr/lib/x86_64-linux-gnu /usr/lib/x86_64-linux-gnu/hdf5/serial /usr/local/share/OpenCV/3rdparty/lib/

然后進入Python目錄安裝依賴關(guān)系:

cd python
#默認(rèn)Python版本為Python2
for req in $(cat requirements.txt); do sudo -H pip2 install $req --upgrade; done

然后返回caffe目錄溃睹,修改Makefile.config:

cd ..
vi Makefile.config

將這一行:

NVCCFLAGS += -ccbin=$(CXX) -Xcompiler -fPIC $(COMMON_FLAGS)

替換為:

NVCCFLAGS += -D_FORCE_INLINES -ccbin=$(CXX) -Xcompiler -fPIC $(COMMON_FLAGS)

然后打開CMakeLists.txt,加入下面一行:

# ---[ Includes
set(${CMAKE_CXX_FLAGS} "-D_FORCE_INLINES ${CMAKE_CXX_FLAGS}")

最后編譯caffe(在caffe目錄下):

mkdir build
cd build
cmake ..
make all -j $(($(nproc) + 1))
make test -j $(($(nproc) + 1))
make runtest -j $(($(nproc) + 1))
make pycaffe -j $(($(nproc) + 1))
#看看是否在caffe目錄下胰坟,不是就切換到該目錄下再執(zhí)行
make distribute -j $(($(nproc) + 1))

最后為了讓Python與Caffe一起工作因篇,編輯文件~/.bashrc:

vi ~/.bashrc

在文件末尾加入這一行:

export PYTHONPATH=/path/to/caffe-master/python:$PYTHONPATH

最后為了使配置立即生效:

source ~/.bashrc 

至此GPU版本編譯成功。

測試caffe mnist集

進入caffe目錄并測試:

cd ~/caffe 
./data/mnist/get_mnist.sh  
./examples/mnist/create_mnist.sh  
./examples/mnist/train_lenet.sh  

結(jié)果如下:

cGyVH.png

測試成功,至此惜犀,本教程結(jié)束铛碑。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市虽界,隨后出現(xiàn)的幾起案子汽烦,更是在濱河造成了極大的恐慌,老刑警劉巖莉御,帶你破解...
    沈念sama閱讀 217,406評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件撇吞,死亡現(xiàn)場離奇詭異,居然都是意外死亡礁叔,警方通過查閱死者的電腦和手機牍颈,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,732評論 3 393
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來琅关,“玉大人煮岁,你說我怎么就攤上這事』烈祝” “怎么了画机?”我有些...
    開封第一講書人閱讀 163,711評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長新症。 經(jīng)常有香客問我步氏,道長,這世上最難降的妖魔是什么徒爹? 我笑而不...
    開封第一講書人閱讀 58,380評論 1 293
  • 正文 為了忘掉前任荚醒,我火速辦了婚禮,結(jié)果婚禮上隆嗅,老公的妹妹穿的比我還像新娘界阁。我一直安慰自己,他們只是感情好胖喳,可當(dāng)我...
    茶點故事閱讀 67,432評論 6 392
  • 文/花漫 我一把揭開白布泡躯。 她就那樣靜靜地躺著,像睡著了一般禀晓。 火紅的嫁衣襯著肌膚如雪精续。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,301評論 1 301
  • 那天粹懒,我揣著相機與錄音重付,去河邊找鬼。 笑死凫乖,一個胖子當(dāng)著我的面吹牛确垫,可吹牛的內(nèi)容都是我干的弓颈。 我是一名探鬼主播,決...
    沈念sama閱讀 40,145評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼删掀,長吁一口氣:“原來是場噩夢啊……” “哼翔冀!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起披泪,我...
    開封第一講書人閱讀 39,008評論 0 276
  • 序言:老撾萬榮一對情侶失蹤纤子,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后款票,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體控硼,經(jīng)...
    沈念sama閱讀 45,443評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,649評論 3 334
  • 正文 我和宋清朗相戀三年艾少,在試婚紗的時候發(fā)現(xiàn)自己被綠了卡乾。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,795評論 1 347
  • 序言:一個原本活蹦亂跳的男人離奇死亡缚够,死狀恐怖幔妨,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情谍椅,我是刑警寧澤误堡,帶...
    沈念sama閱讀 35,501評論 5 345
  • 正文 年R本政府宣布,位于F島的核電站毯辅,受9級特大地震影響埂伦,放射性物質(zhì)發(fā)生泄漏煞额。R本人自食惡果不足惜思恐,卻給世界環(huán)境...
    茶點故事閱讀 41,119評論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望膊毁。 院中可真熱鬧胀莹,春花似錦、人聲如沸婚温。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,731評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽栅螟。三九已至荆秦,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間力图,已是汗流浹背步绸。 一陣腳步聲響...
    開封第一講書人閱讀 32,865評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留吃媒,地道東北人瓤介。 一個月前我還...
    沈念sama閱讀 47,899評論 2 370
  • 正文 我出身青樓吕喘,卻偏偏與公主長得像,于是被迫代替她去往敵國和親刑桑。 傳聞我的和親對象是個殘疾皇子氯质,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,724評論 2 354

推薦閱讀更多精彩內(nèi)容