1. 程式人生 > >ubuntu 17.10 + caffe(CPU)環境搭建

ubuntu 17.10 + caffe(CPU)環境搭建

如果需要編譯Python的caffe庫,需要安裝Python,這裡就不詳述Python的安裝了

1.caffe依賴庫安裝

可以通過apt-get 安裝

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

或者通過

原始檔安裝,這裡我打包了所需的原始檔庫,自己也可以去官網下載

① Protobuf  glog  lmdb openblas

由於我配置的是python3.6的介面,因此protobuf的版本必須大於3.0以上

以上這幾個原始檔都是直接解壓,進入資料夾,執行:

./configure (如果這裡預設安裝都系統目錄下,如果想安裝在自己的目錄,可以 執行 ./configure  --prefix="自己的目錄")

make all -j8

sudo make install (如果confiure配置了prefix,就安裝在了指定的目錄)

② boost

這裡是boost1.66

a) 解壓原始檔編譯,執行

./bootstrap.sh

./b2

sudo ./b2 install

b) 上一步執行完畢可能沒有編譯boost的Python庫,再次執行

./bootstrap.sh

./b2 --with-python include="pyconfig.h所在目錄"(pyconfig.h所在位置,可以通過find命令去找,如果是anaconda,在anaconda/inlude/python3.6m,我這裡是Python3.6,所以是Python3.6m,根據自己的Python版本去找對應的pyconfig.h所在目錄)

sudo ./b2 install

③ gflags snapppy

這兩個原始檔使用cmake,這裡我使用cmake-gui,如果沒有cmake-gui就先安裝

sudo apt-get install cmake

sudo apt-get install cmake-gui

在命令列直接執行cmake-gui,如圖:


在where is the source code 輸入原始碼路徑,在where to build the binaries (一般在原始檔目錄新建一個資料夾,比如build,這樣便於找到)輸入構建路徑,點選左下方configure,會生成配置列表,是一個name-value,其中build_shared_libs要選上,然後點選generate。

然後就是進入where to build the binaries 所指定的目錄下,執行

make all -j8

sudo make install

④ hdf5

如果需要編譯Python版caffe,這個要使用和Python安裝的hdf5的版本一至,檢視Python安裝的hdf5版本,執行

pip list | grep "hdf5"

我這裡已經安裝最新的版本1.10.1,我提供的打包庫檔案原始碼也是1.10.1,這個是支援cmake編譯的,但是我還是用了make方式編譯

解壓CMake-hdf5-1.10.1.tar.gz,進入CMake-hdf5-1.10.1/hdf5-1.10.1,執行

./configure --prefix="/usr/local/hdf5" (這個一定要指定目錄

make all -j8

sudo make install

④ leveldb

解壓這個原始檔,進入原始檔目錄,執行 make all -j8 sudo cp out-shared/libleveldb.so.1.20 /usr/lib sudo cp out-static/*.a /usr/lib sudo cp -r ./include/leveldb/ /usr/local/include/ sudo ln -s /usr/lib/libleveldb.so.1.20 /usr/lib/libleveldb.so.1 sudo ln -s /usr/lib/libleveldb.so.1.20 /usr/lib/libleveldb.so

⑦ atlas-devel 

這個原始碼編譯安裝有問題,直接使用apt-get安裝
sudo apt-get install liblapack-dev libatlas-base-dev

opencv

依然採用cmake-gui方式生成build

如果要編譯Python庫,其中,name為PYTHON3_*的配置要指定到對應的路徑(如果環境變數PATH設定了Python路徑,cmake會自動識別,但是library和dir不會識別到),PYTHON2_*同理 然後就是:makesudo make install 以上工作都做完執行 sudo ldconfig

Caffe編譯

解壓caffe,進入caffe目錄
cd caffe
vi Makefile

找到# Complete build flags其下的
COMMON_FLAGS +=後面加上-I/usr/local/hdf5/include
LDFLAGS +=後面加上-L/usr/local/hdf5/lib

/usr/local/hdf5就是在編譯安裝hdf5時指定的安裝目錄
修改Makefile.config
如果沒有Makefile.config,

cp Makefile.config.example Makefile.config
vi Makefile.config

修改Makefile.config,如下:

CPU_ONLY := 1

USE_OPENCV := 1

OPENCV_VERSION := 3

#如果使用的是anaconda安裝的Python設定如下

ANACONDA_HOME :=  anaconda所在目錄
PYTHON_INCLUDE := $(ANACONDA_HOME)/include \
$(ANACONDA_HOME)/include/python3.6m \
$(ANACONDA_HOME)/lib/python3.6/site-packages/numpy/core/include

PYTHON_LIBRARIES := boost_python3 python3.6m

PYTHON_LIB := $(ANACONDA_HOME)/lib

WITH_PYTHON_LAYER := 1

INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include /usr/local/hdf5/include
LIBRARY_DIRS := $(PYTHON_LIB) /usr/local/lib /usr/lib /usr/local/hdf5/lib

這些都配好,就可以執行

make all -j8

make test -j8

make runtest -j8

make pycaffe

在執行以上幾個make時,常出現的錯誤

a) undefined reference to cv::imread之類的錯誤 該錯誤是因為cmake編譯opencv時沒有選擇build_imgcodecs,並且不要選擇build_world,重新安裝opencv b) make runtest
.build_release/tools/caffe
.build_release/tools/caffe: /usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.15' not found (required by /home/HY/caffe/caffe/.build_release/tools/../lib/libcaffe.so.1.0.0)
.build_release/tools/caffe: /usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.15' not found (required by /usr/local/lib/libopencv_core.so.3.1)
.build_release/tools/caffe: /usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.15' not found (required by /usr/local/lib/libopencv_imgcodecs.so.3.1)
make: *** [runtest] Error 1

這個錯誤是因為gcc版本過低,安裝更新版本的gcc,如果直接sudo apt-get install build-essential依然獲取的是低版本,那就下載原始碼安裝。

error while loading shared libraries: libpython3.6m.so.1.0: cannot open shared object file: No such file or directory  
這個錯誤就是找不到python庫,編輯.bahsrc新增

export LD_LIBRARY_PATH="anaconda目錄/lib:$LD_LIBRARY_PATH"

儲存,source ~/.bashrc

c)以下錯誤

Warning! ***HDF5 library version mismatched error***
The HDF5 header files used to compile this application do not match
the version used by the HDF5 library to which this application is linked.
Data corruption or segmentation faults may occur if the application continues.
This can happen when an application was compiled by one version of HDF5 but
linked with a different version of static or shared HDF5 library.
You should recompile the application or check your shared library related
settings such as 'LD_LIBRARY_PATH'.
You can, at your own risk, disable this warning by setting the environment
variable 'HDF5_DISABLE_VERSION_CHECK' to a value of '1'.
Setting it to 2 or higher will suppress the warning messages totally.
Headers are 1.8.3, library is 1.8.17

是因為python的hdf5與系統中安裝的hdf5不一致,所以這也是為什麼前面hdf5安裝的時候我一再強調版本和安裝路徑。找到和Python的hdf5同一版本的hdf5原始碼進行安裝

最後配置Python路徑

編輯.bashrc檔案vi ~/.bashrc

在檔案最後加上

export PYTHONPATH="caffe目錄/python:$PYTHONPATH"

儲存退出vi,執行source ~/.bashrc

python要用caffe還要安裝protobuf

pip install protobuf

最後執行

python進入Python命令列

輸入import caffe

如果沒有報錯,說明caffe成功安裝。