前言
最近想自己學習學習caffe架構,畢竟這個架構使用的很廣泛,所以準備在我的虛擬機上安裝caffe搞搞。網上的教程已經很多,我還要寫這篇文章是因爲每個人安裝出現的錯誤總是各種各樣,希望我安裝過程中遇到的問題可以提供一些參考,也便於自己總結出現的問題。
提示:虛擬機下不可以安裝caffe 的gpu版(我自己安裝過,安裝GPU驅動時會報錯,說找不到GPU的),所以只能安裝caffe 的cpu版。
依賴庫的安裝
sudo apt-get install libprotobuf-dev
sudo apt-get install libleveldb-dev
sudo apt-get install libsnappy-dev
sudo apt-get install libopencv-dev
sudo apt-get install libhdf5-serial-dev
sudo apt-get install protobuf-compiler
sudo apt-get install libgflags-dev
sudo apt-get install libgoogle-glog-dev
sudo apt-get install liblmdb-dev
sudo apt-get install libatlas-base-dev
依賴庫這一塊基本都一樣,一步一步安裝一般也不會出現什麼問題,不要漏裝了某個就行。
下載caffe
如果你的ubuntu裏沒有git工具,就先安裝個git。
sudo apt-get install git
接着下載caffe源碼
git clone git://github.com/BVLC/caffe.git
不過我在這一步出錯了,報錯:error: RPC failed; curl 18 transfer closed with outstanding read data remaining。
網上說執行以下命令,把緩存設置大一點,500M(命令如下:),我設置了,不過下載還是出錯,沒什麼鳥用的。
git config --global http.postBuffer 524288000
接着嘗試少clone一些,加入–depth 1 。這次下載成功了。
–depth 1的含義是複製深度爲1,就是每個文件只取最近一次提交,不是整個歷史版本。
git clone https://github.com/flutter/flutter.git --depth 1
編譯caffe
進入到caffe目錄,cd caffe/目錄下。
接着把caffe目錄下自帶的Makefile.config.example文件複製一份並更名爲Makefile.config,如下:
cp Makefile.config.example Makefile.config
接着修改 Makefile.config文件
vim Makefile.config
刪除CPU_ONLY前面的#號,表示只是用CPU,如下圖:
接着修改配置選擇項中include的路徑和lib的路徑,把HDF5的路徑加進去。
原配置選項爲:
INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include
LIBRARY_DIRS := $(PYTHON_LIB) /usr/local/lib /usr/lib
增加HDF5路徑後:
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/
配置文件裏面的python設置並沒有改,用的還是默認的python2.7, 網上有的說用python3.5,這個版本的我還沒有嘗試。
然後開始編譯
sudo make all -j2
sudo make test -j2
sudo make runtest
如下圖,證明caffe編譯通過了。
注意:如果執行結果失敗,則需要執行語句sudo make clean,然後解決掉問題重新編譯
一般到這一步不會有啥問題,下面python接口的編譯到時出來不少問題。
python接口的編譯
caffe具有Python和C++接口,我們較爲常用Python接口,這裏開始編譯python接口。
(1)安裝pip
sudo apt-get install python-pip
(2)在caffe根目錄下,有個python文件夾,文件夾裏面有個requirements.txt,裏面有需要的依賴庫和版本信息,按照其安裝即可,在安裝前,需要先安裝fortran編輯器(gfrotran),因爲安裝scipy庫時需要它,命令如下
sudo apt-get install gfortran
cd ~/caffe/python
for req in $(cat requirements.txt); do pip install $req; done
注意執行這個for req in $(cat requirements.txt); do pip install $req; done命令安裝時,一定要保證網速比較好,我安裝的過程中就把網換了,用手機建了個熱點安裝,之前的網不太好。
在執行for req in $(cat requirements.txt); do pip install $req; done這個安裝時,出現了問題。
提示pip的版本是8.1.1的,推薦升級,故使用下面的指令對pip 進行升級:
pip install --upgrade pip
升級後,使用pip -V 查看版本,結果又報錯:ImportError: cannot import name main。
查網上資料,解決方法是:
pip文件在usr/bin目錄下,cd進去,修改pip文件。
cd /usr/bin
vim pip
進行以下修改,把下面的三行
from pip import main
if __name__ == '__main__':
sys.exit(main())
換成下面的三行
from pip import __main__
if __name__ == '__main__':
sys.exit(__main__._main())
接着從新執行下面命令:
for req in $(cat requirements.txt); do sudo pip install $req; done
可是,又報錯了。錯誤如下,提示python-dateutil的版本不對
pandas 0.24.4 has requirement python-dateutil>=2.5.0, but you'll have
python-dateutil 1.5 which is incompatible.
matplotlib 2.2.3 has requirement python-dateutil>=2.1, but you'll have
python-dateutil 1.5 which is incompatible.
查看已經安裝的python-dateutil
root@ubuntu:~/caffe# apt list python-dateutil
Listing... Done
python-dateutil/xenial,xenial,now 2.4.2-1 all [installed,automatic]
直接把原文件裏的版本限制給刪掉
vim requirements.txt
把python-dateutil>=1.4,<2 改爲python-dateutil
再次執行for req in $(cat requirements.txt); do sudo pip install $req; done,這次終於安裝過了。
(3)接下來,修改python的環境變量
vim ~/.bashrc
在文件的最後面添加
export PYTHONPATH=/home/moqi/caffe/python:$PYTHONPATH
啓用環境變量:
source ~/.bashrc
編譯python接口
cd ~/caffe/
make pycaffe
報錯:python/caffe/_caffe.cpp:10:31: fatal error: numpy/arrayobject.h: No such file or directory,沒找到numpy/arrayobject.h這個文件。
在Makefile.config找到PYTHON_INCLUDE,
PYTHON_INCLUDE := /usr/include/python2.7 \
/usr/lib/python2.7/dist-packages/numpy/core/include
要加一個local,變成:
PYTHON_INCLUDE := /usr/include/python2.7 \
/usr/local/lib/python2.7/dist-packages/numpy/core/include
再make pycaffe就ok了
最後
驗證python接口是否安裝成功,如下,表示安裝成功了。
至此,虛擬機ubuntu16.04下caffe (cpu 版)安裝完成。下一篇文章將開始研究caffe的具體例程。
參考:
https://blog.csdn.net/qq_38784979/article/details/82811907