Caffe學習系列(一)Ubuntu16.04下搭建編譯Caffe環境,並運行MNIST示例(僅CPU)


前言:學習深度學習是從本科畢業設計開始,如今學習了不少理論知識,利用Caffe框架要付諸實踐了,記錄下來學習過程,也算是心路歷程。

剛開始搭建Caffe環境遇到很多的問題,先放棄安裝GPU相關的環境了,先在CPU下訓練,盡管跑訓練速度很慢,但以后再解決GPU的問題。

 正文:

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 libatlas-base-dev
sudo apt-get install python-dev
sudo apt-get install libgflags-dev libgoogle-glog-dev liblmdb-dev

PYTHON需要2.7版本,這是操作系統本身已經安裝好的. 輸入python2.7 --version 會顯示具體的版本號說明安裝了.

2、下載Caffe

   首先安裝git工具:

sudo apt-get install git

   然后下載caffe包:

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

   接下來進入caffe目錄下(我講caffe下載到/home下了)。

cd caffe/

    進入里面的PYTHON文件夾,然后輸入

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

   如果沒有pip,得先安裝一下:      sudo apt install python-pip

3、安裝Caffe

  進入caffe根目錄,使用模板寫個Makefile.config. 具體就是先復制一下模板, 再改一些內容

cp Makefile.config.example Makefile.config

   首先,#CPU MODE下,在CPU_ONLY := 1前面的#要去掉.    (因為僅在CPU下跑Caffe)

 然后,在其中找到如下內容,兩個路徑要改成這樣:(添加后面的兩個hdf5的路徑, 否則編譯時報hdf5錯誤)

# Whatever else you find you need goes here.

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/hdf5/serial

現在准備就緒,開始安裝Caffe:

依次執行下列命令:

make pycaffe

make all

make test

make runtest

當我執行make pycaffe命令的時候,報了錯:fatal error: numpy/arrayobject.h沒有那個文件或目錄

其實numpy已經是安裝的,anaconda2里面有,Python中import numpy也沒有問題,但就是在此處報錯,解決方法:

sudo apt-get install python-numpy

然后再執行一遍 make pycaffe命令就行了。

  顯示所有的TESTS PASSED,說明已經安裝好了。

如果遇到:fatal error: hdf5.h: 沒有那個文件或目錄”,解決辦法如下:

 

Makefile.config文件的第85行,添加/usr/include/hdf5/serial/INCLUDE_DIRS,也就是把下面第一行代碼改為第二行代碼。

 

將# 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

 

Makefile文件的第173行,把 hdf5_hl 和hdf5修改為hdf5_serial_hlhdf5_serial,也就是把下面第一行代碼改為第二行代碼。

 

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
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

之后繼續編譯就行了。

 

4、配置python

在caffe根目錄的python文件夾下,有一個requirements.txt的清單文件,上面列出了需要的依賴庫,按照這個清單安裝就可以了。

因為前面配置有報錯,所以執行一下一下語句查看:

sudo pip install -r python/requirements.txt

結果打印如下:

UndefinedEnvironmentName: 'extra' does not exist in evaluation environment.
You are using pip version 8.1.1, however version 9.0.1 is available.
You should consider upgrading via the 'pip install --upgrade pip' command.

顯示scikit-image錯誤, 那就安裝一下scikit-image就好了。

  按照提示,執行一下語句:

pip install --upgrade pip

  然后執行:

pip install scikit-image

 去到Caffe根目錄里面的python文件夾, 把當前路徑記錄下來(pwd). 然后在終端下輸入以下命令(把記下的路徑改在相應地方),回車

export PYTHONPATH=/path/caffe/python:$PYTHONPATH

 這時候應該可以了,試驗一下:

# python
Python 2.7.12 (default, Nov 19 2016, 06:48:10) 
[GCC 5.4.0 20160609] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import caffe
>>> 

import caffe后回車,沒有報錯,說明python環境已經搭建好。

問題:

當我再進入系統的時候import caffe失效

 

直接使用export 時 只是在當前的登錄窗口中有效,一旦關閉就會失效

解決如下:

 

$注意:  /path/to/caffe/python 這是你的caffe的路徑下面的python

 

我查了一下Ubuntu中有很多文件可以存放

 

PYTHONPATH=/path/to/caffe/python:$PYTHONPATH

添加到

 
$sudo vim /etc/profile 

 

PYTHONPATH=/path/to/caffe/python:$PYTHONPATH

 export 添加完成后記得要

source profile

 

 

 

解決目前的困難。

 更新:在我遠程控制時,出現如下錯誤:

這個錯誤一般是因為你在遠程登陸服務器,而caffe python中 matplotlib是繪圖功能,需要在圖形界面才行,這時候可以在import之前加入如下代碼解決:

打開 {caffe_root}/python/caffe/__init__.py

Add the following lines to the top:

import matplotlib
matplotlib.use('Agg')

解決當前困難。

5、訓練MNIST集

 將終端定位到Caffe根目錄
 然后執行腳本文件,下載MNIST數據庫並解壓縮
 

./data/mnist/get_mnist.sh

  我由於網絡問題沒有收到HTTP返回,所以按照腳本里的代碼,根據網址在網上下載壓縮包,cp到mnist文件夾下,使用腳本里的解壓命令依次解壓。

然后,將其轉換成Lmdb數據庫格式

./examples/mnist/create_mnist.sh

  然后訓練網絡

./examples/mnist/train_lenet.sh

   訓練的時候可以看到損失與精度數值

   可以看到最終訓練精度是0.9911

   成功完成。

 

               分享只為更好的記錄~

                         by  still、


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM