前言
本文主要使用兩種方法來(lái)配置Caffe以及在發(fā)布自己配置過(guò)程中遇到的問(wèn)題和解決方案,以供大家參考。一種是基于系統(tǒng)本身的Python環(huán)境,無(wú)需安裝Anaconda3,另外一種是基于Anaconda3的獨(dú)立Python環(huán)境。
安裝的前提是需要已經(jīng)進(jìn)行顯卡驅(qū)動(dòng)、CUDA、CUDNN的安裝以及Opencv的安裝,如果沒(méi)有安裝可以參考Ubuntu18.04 安裝顯卡驅(qū)動(dòng)、CUDA、CUDNN,Ubuntu18.04配置Opencv3.4.9。
其次要提到的是Caffe開(kāi)源代碼(這里的地址是我鏈接到碼云上的,下載會(huì)比github快很多),目前對(duì)應(yīng)的Python版本是3.6,這一步在后面的配置中會(huì)提到。
無(wú)需安裝Anaconda3的caffe配置
這種方式相對(duì)比較簡(jiǎn)單,且不容易出錯(cuò),但是我在配置到最后一步的時(shí)候卻發(fā)生使用上出了問(wèn)題,原因是似乎是多操作了一步,因此喜歡簡(jiǎn)單方法的建議謹(jǐn)慎嘗試。
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 libopenblas-dev liblapack-dev libatlas-base-dev
$ sudo apt-get install libgflags-dev libgoogle-glog-dev liblmdb-dev
$ sudo apt-get install git cmake build-essential
一定要確保所有的依賴包都正常安裝了,如果沒(méi)有可以嘗試apt update一下
2.更改默認(rèn)Python
終端輸入python查看版本,如果默認(rèn)不是python3,則在終端輸入:
$ sudo update-alternatives --install /usr/bin/python python /usr/bin/python2 100
$ sudo update-alternatives --install /usr/bin/python python /usr/bin/python3 150
執(zhí)行完上述兩行命令之后在終端輸入python,如果第一行信息是3.6,則成功。
如果要切換到Python2,執(zhí)行:
$ sudo update-alternatives --config python
3.下載caffe開(kāi)源庫(kù)
$ git clone https://gitee.com/notalone0125/caffe.git
4.進(jìn)行編譯前的配置更改
$ cd caffe
$ sudo cp Makefile.config.example Makefile.config
$ sudo gedit Makefile.config
/#修改Makefile.config文件
1.應(yīng)用 cudnn
將 #USE_CUDNN := 1
修改成:
USE_CUDNN := 1
2.應(yīng)用 opencv 版本
將 #OPENCV_VERSION := 3
修改為:
OPENCV_VERSION := 3
3.使用 python 接口
將#WITH_PYTHON_LAYER := 1
修改為
WITH_PYTHON_LAYER := 1
4.修改 python 路徑
將#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
5.刪掉compute_20,最后效果是
CUDA_ARCH := -gencode arch=compute_30,code=sm_30 \
-gencode arch=compute_35,code=sm_35 \
-gencode arch=compute_50,code=sm_50 \
-gencode arch=compute_52,code=sm_52 \
-gencode arch=compute_60,code=sm_60 \
-gencode arch=compute_61,code=sm_61 \
-gencode arch=compute_61,code=compute_61
/#
$ sudo gedit Makefile
/#修改Makefile文件
1.將:
NVCCFLAGS +=-ccbin=$(CXX) -Xcompiler-fPIC $(COMMON_FLAGS)
替換為:
NVCCFLAGS += -D_FORCE_INLINES -ccbin=$(CXX) -Xcompiler -fPIC $(COMMON_FLAGS)
2.將:
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
3.將
PYTHON_LIBRARIES := boost_python python2.7
改為
PYTHON_LIBRARIES := boost_python-py35 #py35需要改為你自己的python版本,如py34,py33
/#
5.開(kāi)始編譯
在 caffe 目錄下執(zhí)行 :
$ make all -j8
這一步前面如果配置正確就應(yīng)該沒(méi)什么問(wèn)題。
$ make runtest -j8

出現(xiàn)如圖結(jié)果就表示成功。
到了這一步,在命令行的執(zhí)行python,之后import caffe應(yīng)該就可以正常使用的。提示File "<stdin>", line 1, in <module> ImportError: No module named caffe的話,進(jìn)行一下環(huán)境變量的配置
$ sudo echo export PYTHONPATH="~/caffe/python" >> ~/.bashrc
$ source ~/.bashrc
但是在參考文章中說(shuō)位置支持Python接口,需要make pycaffe -j8。這一步我嘗試了之后,import caffe就報(bào)錯(cuò)了,暫時(shí)沒(méi)有找到原因。如果在上面一步import caffe已經(jīng)可以成功,先不要進(jìn)行make pycaffe -j8,看后面能不能正常使用。
關(guān)于更詳細(xì)的操作可以看我的參考文章的第一篇。我還是想重點(diǎn)講一講第二種方法。
安裝Anaconda3之后進(jìn)行Caffe環(huán)境的配置
我在操作了make pycaffe -j8之后就報(bào)錯(cuò)了,因此就又折騰了一下在Anaconda3下配置pyhton并且安裝caffe。
1.安裝Anaconda3,這張表上提供了Anaconda以及對(duì)應(yīng)的Python版本。我使用的是3.5.2,最好是3.5.2,因?yàn)閷?duì)應(yīng)的caffe里的python是3.6版本的,這樣會(huì)少走很多彎路。

anaconda下載,這里使用清華鏡像軟件站下載,會(huì)很快。
下載完之后執(zhí)行.sh文件,并按照第一種方法中的第2步更改默認(rèn)Python.
之后還要更改環(huán)境變量
$ sudo gedit /etc/profile
# 在文件末尾處添加exportPATH=/home/liguangyao/anaconda3/bin:$PATH
$ source ~/.bashrc
此時(shí),在終端輸入Python,會(huì)看到第一行位Python3.6.5 |Anaconda,Inc.|.....,這樣就證明默認(rèn)的Python已經(jīng)是Anaconda下的Python3.6.5了。
2.首先安裝Caffe-GPU
$ sudo apt install caffe-cuda
3.基本依賴庫(kù)的安裝
$ sudo apt-get install libprotobuf-dev libleveldb-dev libsnappy-dev libopencv-dev
$ sudo apt-get install 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
4.下載源碼的過(guò)程和上面一樣,只要是文件的配置更改稍有不同,參考如下:
/#修改Makefile.config的配置文件
1.將#USE_CUDNN:= 1
取消注釋
2.將#OPENCV_VERSION := 3
取消注釋
3.將#compute_20刪掉,最后效果是
CUDA_ARCH := -gencode arch=compute_30,code=sm_30 \
-gencode arch=compute_35,code=sm_35 \
-gencode arch=compute_50,code=sm_50 \
-gencode arch=compute_52,code=sm_52 \
-gencode arch=compute_60,code=sm_60 \
-gencode arch=compute_61,code=sm_61 \
-gencode arch=compute_61,code=compute_61
4.將#BLAS:= atlas注釋
換成BLAS := open
5.將Python2環(huán)境注銷,換成Anaconda3下的Python環(huán)境,最后效果:
# NOTE: this is required only if you will compile the python interface.
# We need to be able to find Python.h and numpy/arrayobject.h.
# PYTHON_INCLUDE := /usr/include/python2.7 \
/usr/lib/python2.7/dist-packages/numpy/core/include
# Anaconda Python distribution is quite popular. Include path:
# Verify anaconda location, sometimes it's in root.
ANACONDA_HOME := $(HOME)/anaconda3
PYTHON_INCLUDE := $(ANACONDA_HOME)/include \
$(ANACONDA_HOME)/include/python3.6m \
$(ANACONDA_HOME)/lib/python3.6m/site-packages/numpy/core/include
6.將#PYTHON_LIB:= /usr/lib注釋
取消PYTHON_LIB:= $(ANACONDA_HOME)/lib的注釋
7.將#INCLUDE_DIRS :=$(PYTHON_INCLUDE) /usr/local/include /usr/local/hdf5/include LIBRARY_DIRS :=$(PYTHON_LIB) /usr/local/lib /usr/lib /usr/local/hdf5/lib
改為
# Whatever else you find you need goes here.
INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include /usr/local/hdf5/include
LIBRARY_DIRS := $(PYTHON_LIB) /usr/local/lib /usr/lib /usr/local/hdf5/lib
/#
/#修改Makefile的配置文件
1將#NVCCFLAGS+= -ccbin=$(CXX) -Xcompiler -fPIC $(COMMON_FLAGS)
修改為NVCCFLAGS += -D_FORCE_INLINES -ccbin=$(CXX) -Xcompiler -fPIC $(COMMON_FLAGS)
2.將:
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
3.將
PYTHON_LIBRARIES := boost_python python2.7
改為
PYTHON_LIBRARIES := boost_python-py35 #py35需要改為你自己的python版本,如py34,py33
/#
/#
5.進(jìn)入到caffe主目錄下的python目錄,安裝Python的必要項(xiàng)( -i https://pypi.tuna.tsinghua.edu.cn/simple可以極大提高pip的下載速度)
$ for req in $(cat requirements.txt); do pip install -i https://pypi.tuna.tsinghua.edu.cn/simple $req; done
這一步可能會(huì)出現(xiàn)一些紅色報(bào)錯(cuò),按照下面的方法解決
(1).ERROR: After October 2020 you may experience errors when installing or updating packages
$ pip install python-openstackclient python-glanceclient python-neutronclient -i https://pypi.tuna.tsinghua.edu.cn/simple --use-feature=2020-resolver
(2).錯(cuò)誤:pandas 0.23.4 has requirement python-dateutil>=2.5.0, but you'll have python-dateutil 1.5
$ sudo pip install --upgrade python-dateutil
#或者
$ sudo gedit requirements.txt
將#python-dateutil>=1.4,<2
改為python-dateutil
直到for req in $(cat requirements.txt); do pip install -i語(yǔ)句執(zhí)行不出現(xiàn)任何紅色字體并正確執(zhí)行。
6.進(jìn)入caffe的根目錄下進(jìn)行編譯
$ sudo make clean
$ sudo make all -j4
$ sudo make test -j8
$ sudo make runtest -j8
這些步驟中只要沒(méi)提示報(bào)錯(cuò)信息,就代表執(zhí)行成功了。一般runtest會(huì)報(bào)錯(cuò),參見(jiàn)參考文章中Anaconda3配置Caffe的第五篇,比較常見(jiàn)的是錯(cuò)誤三。
最后,sudo make pycaffe -j4 //配置pycaffe即可。
參考文章
無(wú)Anaconda3配置Caffe
1.Ubuntu18.04 Caffe 安裝步驟記錄(超詳盡)
2.error while loading shared libraries: xxx.so.x" 錯(cuò)誤的原因和解決辦法
Anaconda3配置Caffe
1.Ubuntu18.04LTS下基于 Anaconda3 安裝 Caffe-GPU及 Python3.6 + Pycharm + Mnist例子教程(超詳細(xì))
2.ERROR: After October 2020 you may experience errors when installing or updating packages
3.錯(cuò)誤:pandas 0.23.4 has requirement python-dateutil>=2.5.0, but you'll have python-dateutil 1.5
4.pycaffe編譯后的配置問(wèn)題(ModuleNotFoundError: No module named 'caffe'
5.Ubuntu18.04 LTS下Caffe-GPU版本安裝常見(jiàn)錯(cuò)誤
python降級(jí)的靈感來(lái)源
1.ubuntu18——ModuleNotFoundError: No module named 'caffe._caffe'
2.Ubuntu 16.04下安裝Caffe解決 undefined symbol: _ZN5boost6python6detail11init_moduleER11PyModuleDefPFvvE
其他文章
1.完美解決pip下載慢、下載超時(shí)問(wèn)題(含鏡像網(wǎng)站,代碼)
2.清華大學(xué)開(kāi)源軟件鏡像站
3.恢復(fù)anaconda環(huán)境, 卸載anaconda, 重裝anaconda
4.Boost Python 的安裝配置以及示例 (支持python3.x)
5.Linux 編譯boost (for python3)