1. 程式人生 > >ubuntu16.04安裝caffe以及各種問題彙總

ubuntu16.04安裝caffe以及各種問題彙總

前言:
本文是基於已經成功安裝了python各種常用包、opencv、cuda

安裝過程

1、首先安裝各種更新包

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

sudo apt-get install -y
libatlas-base-dev sudo apt-get install -y --no-install-recommends libboost-all-dev sudo apt-get install -y libgflags-dev libgoogle-glog-dev liblmdb-dev sudo apt-get install -y python-pip sudo apt-get install -y python-dev sudo apt-get install -y python-numpy python-scipy sudo apt-get install -y
libopencv-dev

2、下載caffe

cd ~
mkdir git  //在home下新建一個git資料夾,用來存放那些從github上git下來的文zong件
git clone https://github.com/BVLC/caffe.git    //從github上git caffe

3、開始安裝

cd caffe    //開啟到剛剛git下來的caffe
cp Makefile.config.example Makefile.config //將Makefile.config.example的內容複製到Makefile.config
//因為make指令只能make   Makefile.config
檔案,而Makefile.config.example是caffe給出的makefile例子 gedit Makefile.config //開啟Makefile.config檔案

仔細閱讀makefile中的註釋語句其實就知道該怎麼操作了,為了方便理解,筆者還是介紹一各個配置說明。
在開啟的Makefile.config修改如下內容:

//如果你不使用GPU的話,就將
# CPU_ONLY := 1
修改成:
CPU_ONLY := 1

//若使用cudnn,則將
# USE_CUDNN := 1
修改成:
USE_CUDNN := 1

//若使用的opencv版本是3的,則將
# OPENCV_VERSION := 3
修改為:
OPENCV_VERSION := 3

//若要使用python來編寫layer,則需要將
# WITH_PYTHON_LAYER := 1
修改為
WITH_PYTHON_LAYER := 1

//重要的一項# Whatever else you find you need goes here.下面的
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
//這是因為ubuntu16.04的檔案包含位置發生了變化,尤其是需要用到的hdf5的位置,所以需要更改這一路徑

4、為hdf5之類的檔案建立新的連結

\\首先執行下面兩句話:
find . -type f -exec sed -i -e 's^"hdf5.h"^"hdf5/serial/hdf5.h"^g' -e 's^"hdf5_hl.h"^"hdf5/serial/hdf5_hl.h"^g' '{}' \;

cd /usr/lib/x86_64-linux-gnu

\\然後根據情況執行下面兩句:
sudo ln -s libhdf5_serial.so.10.1.0 libhdf5.so
sudo ln -s libhdf5_serial_hl.so.10.0.2 libhdf5_hl.so
\\注意:這裡的10.1.010.0.2根據不同的系統可能對應的數字會不同,比如在ubuntu15.10中其數字就是8.0.2.
\\具體的數字可以在開啟的檔案中檢視對應檔案後面跟的數字

5、執行python資料夾下的指令

\\現在將目錄cd到你之前git的caffe資料夾下:

cd python

for req in $(cat requirements.txt); do pip install $req; done

\\如果發現執行上述程式碼後,終端中有很多紅字,一堆的錯誤之類的,那不管是什麼錯誤都執行下面一句話:
for req in $(cat requirements.txt); do sudo -H pip install $req --upgrade; done
\\執行完上面這句話後應該就不會有很多紅字錯誤了

6、make 各種檔案

cd ..   \\此時位置應該處於caffe資料夾下

make all -j8  //j8代表計算機cpu有8個核,因此可以多執行緒一起make,這樣make的速度會快很多。一般常用的還有j4

make test -j8

make runtest -j8

make pycaffe   //如果以後用python來開發的話必須執行這一句,一般不管你是否用python,都會執行這一句

make distribute

至此,安裝caffe差不都就已經完成了。但是筆者在安裝的過程中,遇到了各種各樣問題,有時候解決了這個問題,那個問題又出現了,幾近崩潰的邊緣,究其原因還是對ubuntu這個系統熟悉。筆者在遇到問題google的時候都將介面留存了下來,下面羅列一下遇到問題以及解決方式。

caffe安裝錯誤集錦

1

在make all 的時候出現如下錯誤

Error 'fatal error: pyconfig.h: No such file or directory' when executing 'make pycaffe' on dev-branch #410

解決方案:

make clean
export CPLUS_INCLUDE_PATH=/usr/include/python2.7
make all -j8

2

string.h ‘memcy’ was not declared in this scope

解決方案:開啟makefile搜尋並替換

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

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

儲存退出

重新make

3

類似以下情況的錯誤:

.build_release/lib/libcaffe.so: undefined reference to `cv::imread(cv::String const&, int)'
.build_release/lib/libcaffe.so: undefined reference to `cv::imencode(cv::String const&, cv::_InputArray const&, std::vector<unsigned char, std::allocator<unsigned char> >&, std::vector<int, std::allocator<int> > const&)'

這種問題很有可能是你的系統中使用的是opencv3,但是你的Makefile.config中沒有將OPENCV_VERSION := 3這一句取消註釋。

4

出現各種undefined referenceserrors,比如:

undefined reference togoogle::base::CheckOpMessageBuilder::NewString()'

這類問題往往是因為gcc和g++編譯器版本的問題,在ubuntu16.04中,其預設的gcc編譯器版本是gcc 5,但是cuda目前又不支援高於4.9的編譯器,因此會出現不相容的情況。

解決方法:
這裡有一種比較暴力的解決方法,不確定是否安全。編輯/usr/local/cuda/include/host_config.h,將其中的第115行註釋掉:

將
#error -- unsupported GNU version! gcc versions later than 4.9 are not supported!

改為
//#error -- unsupported GNU version! gcc versions later than 4.9 are not supported!

注意:檢視現在的gcc編譯器版本,可能有的人在之前安裝cuda的時候會將預設的gcc、g++版本改成4.8之類比較老的版本,在make caffe的時候最好將gcc和g++的版本改到最新的,這樣在make的時候才不會出現類似undefined references之類的錯誤。具體的修改方法可以google之。