caffe: Ubuntu16.04 + cuda8.0 + cudnn8.0 + opencv3.1.0 + python2.7 + matlab2014b + blas(mkl)

来源:互联网 发布:瑞士军刀软件 编辑:程序博客网 时间:2024/05/16 16:59

caffe环境这是第四次配了,第一次是CPU版本,比较简单,很容易就配成功了。后面两次是GPU版本,但总有一堆问题。这次边配环境边记录下来,如果再遇到问题也好查找。版本说明如下:
caffe: cuda8.0 + cudnn8.0 + opencv3.1.0 + python2.7 + matlab + blas(mkl)

1.重装系统

(这一步简单,就省略了。其中有一步preparing to install ubuntu,卡了有20分钟左右,好像是因为硬盘没有先格式化。我没有试,反正有时间,等着就好了。)

2. 安装五笔输入法

由于要边配边记录,所以就先安装输入法了。
(参考: http://www.2cto.com/os/201305/215680.html)

sudo apt-get install ibus ibus-clutter ibus-gtk ibus-gtk3 ibus-qt4    im-switch -s ibussudo apt-get install ibus-table-wubi killall ibus-daemon            ibus-daemon -drx

第一条语句是安裝IBus框架,有些版本自带了框架,则不需要安装。
第二条语句是启动IBus框架。(安装的时候提示im-switch: command not found,原来是现在改成了im-config,然后在选项中选择ibus。)
第三条语句是安装五笔引擎。
第四条重启IBus输入法框架:Kill掉ibus进程(如果ibus没有运行,会显示:
ibus-daemon: no process found
然后
输入ibus-daemon -d
就出来了。)
第五条重启IBus输入法框架:重启进程

3. 装显卡驱动。

显卡型号:GTX950。
查看显卡型号:

lspci | grep VGA

再进入nvidia官网搜索对应的驱动版本。
由于命令行安装比较容易,所以采用命令行安装。
开始安装:
首先按住ctrl+Alt+F1进入文字界面,然后执行以下语句:

sudo apt-get purge nvidia-*sudo add-apt-repository ppa:graphics-drivers/ppasudo apt-get updatesudo apt-get install nvidia-370sudo reboot

重启后执行:

nvidia-smi

出现以下界面:
这里写图片描述
则代表显卡驱动安装成功。
顺便说一下截图功能:
进入System Settings--Keyboard--Shortcuts--Screenshots
我设置的:
这里写图片描述
选中的那个是Alt+print

gnome-screenshot -h

用来查看这些快捷方式

4. cuda8.0安装

简介:
CUDA(Compute Unified Device Architecture),是显卡厂商NVIDIA推出的运算平台CUDA?是一种由NVIDIA推出的通用并行计算架构,该架构使GPU能够解决复杂的计算问题。开发人员现在可以使用C语言来为CUDA?架构编写程序,C语言是应用最广泛的一种高级编程语言。所编写出的程序于是就可以在支持CUDA?的处理器上以超高性能运行。CUDA3.0已经开始支持C++和FORTRAN。
文件可在https://developer.nvidia.com/cuda-downloads下载。
参考www.itdadao.com/articles/c15a234199p0.html安装。
下载完后进入目录:

cd Downloads/soft/

进行MD5检验,确保安装包正常:

sudo md5sum cuda.run

结果:
这里写图片描述
检验正确后,输入如下代码安装(第一行修改文件权限,第二行执行文件安装):

chmod 777 cuda.runsudo ./cuda.run --override

这里写图片描述
需要一直按住ENTER键。
后面选项答案依次为:
accept
n
y
/usr/local/cuda-8.0
y
y
/home/huhui
第三行配置询问是否要安装nvidia图形驱动器,一定要选n,因为之前已经安装过了,如果再安装则会报错。
如图:
这里写图片描述

5. CUDNN安装

下载地址:https://developer.nvidia.com/cudnn
cudnn-8.0-linux-x64-v5.1.tgz
进入下载目录:

cd Downloads/soft

我解压到上一层目录:(后面的-C ../不要就是解压到当前目录)

tar zxvf cudnn-8.0-linux-x64-v5.1.tgz -C ../

解压后有个cuda文件,内有include和lib64两个文件夹,进入include文件夹,执行如下命令复制头文件:

cd ../cuda/include/sudo cp cudnn.h /usr/local/cuda/include/

再cd命令切换进lib64文件夹,执行如下命令复制动态链接库:

cd ../lib64/sudo cp lib* /usr/local/cuda/lib64/

然后进入复制后的动态链接库进行新的链接。先进入目录:

cd /usr/local/cuda/lib64/

然后查看已有链接:

ls -al | grep libcudnn

这里写图片描述
删除原有动态文件:

sudo rm -rf libcudnn.so libcudnn.so.5

再次查看:

ls -al | grep libcudnn

这里写图片描述
已删除,现在建立新的链接:

sudo ln -s libcudnn.so.5.1.5 libcudnn.so.5sudo ln -s libcudnn.so.5 libcudnn.so

再次查看

ls -al | grep libcudnn

这里写图片描述
已链接好!
然后设置环境变量和动态链接库:

sudo gedit /etc/profile

然后再打开的文件末尾加上(“=”前后不要有空格)

export PATH=/usr/local/cuda/bin:$PATH

保存之后创建链接文件:

sudo vim /etc/ld.so.conf.d/cuda.conf

这时出现(若未出现问题可跳过)
这里写图片描述
于是检查一下vim是否安装:

rpm -qa|grep vim

这里写图片描述
rpm没有安装,按照提示执行:

sudo apt install rpm

再执行

rpm -qa|grep vim

什么结果也没有返回。于是在命令行输入:

vim

出现结果:
这里写图片描述
为安装vim,输入命令:

sudo apt install vim

再执行

sudo vim /etc/ld.so.conf.d/cuda.conf

现在可以打开了。在文件加入以下内容:

/usr/local/cuda/lib64

按下esc,按下wq保存后退出。并在终端输入以下命令使该链接生效:

sudo ldconfig

使用sample里面的例子来测试还需要编译。因为当前的cuda还不支持gcc5.0以上的版本,在编译之前,我们需要修改配置文件,否则无法编译成功。(之前试过降低gcc版本,搞了很久没成功,这样改会有warning,但是还是先这样吧。)

cd /usr/local/cuda-8.0/include/sudo cp host_config.h host_config.h.baksudo gedit host_config.h

113行如下:

#if __GNUC__ > 5 || (__GNUC__ == 5 && __GNUC_MINOR__ > 3)

说明GCC版本要在5.3以下。查看自己的gcc版本:

gcc --version

这里写图片描述
5.4的版本,所以这句话需要改,于是我把3直接改成9:

#if __GNUC__ > 5 || (__GNUC__ == 5 && __GNUC_MINOR__ > 9)

保存后退出。然后进入用例文件进行编译(注意执行第二步命令时候需要较长时间是正常现象):

cd ~/NVIDIA_CUDA-8.0_Samples/sudo make -j16

这里写图片描述
编译成功。

cd bin/x86_64/linux/release/sudo ./deviceQuery

运行结果:
这里写图片描述
说明显卡驱动和cuda安装成功。

6. BLAS(MKL)安装

简介
BLAS,即基础线性代数子程序库,里面拥有大量已经编写好的关于线性代数运算的程序,是一个应用程序接口的标准。caffe官网上推荐了三种实现:ATLAS, MKL, or OpenBLAS。其中atlas可以直接通过命令行安装.在此,采用intel的MKL库。https://software.intel.com/en-us/qualify-for-free-software/student,该链接进入后,申请学生版本的Parallel Studio XE Cluster Edition,这里注册要学校的邮箱拿去注册。该文件有3.9GB,下载完成后切换进文件所在目录解压缩该文件.

cd ~/Downloads/soft/

同样我解压到上层目录:

tar zxvf parallel_studio_xe_2017.tgz -C ../

获取权限:

cd ../chmod 777 parallel_studio_xe_2017/ -Rcd parallel_studio_xe_2017/sudo ./install_GUI.sh

上述命令后会跳出一个安装界面,其中需要输入license,从网站上获取: https://signin.intel.com/?TYPE=33554433&REALMOID=06-0a1c2c51-0321-465b-989e-ece55a46b7a2&GUID=&SMAUTHREASON=0&METHOD=GET&SMAGENTNAME=SMbvO2%2bjWXMw6Ozwe9nu3rQWgU71LObMMlKWUatZXQuukjpqZ%2fludA3rMJYobZbsIi&TARGET=SMhttps%3a%2f%2fregistrationcenter%2eintel%2ecom%2fregcensec%2flogin%2easpx, 进入该网站后点击信封那里就会给你之前注册过的邮箱发送含有license的邮件,输入即可正常安装如下图二所示。(我的用户名:myname123 密码:nameqq_)
注意邮件中的“connected to the Internet, please go to Intel® Software Development Products Registration Center to generate a license file.”中的链接,https://registrationcenter.intel.com/en/products/license/?SN=2JXL-XPH448ZS,打开后点击
Intel® Parallel Studio XE Cluster Edition for Linux* (all tools)
后的Download即出现序列号2HWS-XSRJT7VC,输入即可。
这里写图片描述
这里写图片描述
安装完成后进行相关文件链接:

sudo gedit /etc/ld.so.conf.d/intel_mkl.conf

在打开的文件中添加库文件

/opt/intel/lib/intel64/opt/intel/mkl/lib/intel64

添加完成后编译生效

sudo ldconfig

7. OpenCV3.1.0安装与配置

最难的就是这一步,之前两次的问题基本都出现在这里。
从官网下载:http://opencv.org/downloads.html
解压:

unzip opencv-3.1.0.zip -d ../cd ../opencv-3.1.0mkdir buildcd build

安装一些依赖项:

sudo apt-get updatesudo apt-get install build-essentialsudo apt-get install cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-devsudo apt-get install python-dev python-numpy libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libjasper-dev libdc1394-22-devcmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local ..

这里写图片描述
这里写图片描述
这里写图片描述
在CMakeLists.txt 中加入一行:

cd ../vim CMakeLists.txt 

在弹出的文件开头加入一行(注意里面的引号要英文状态下的):

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -D_FORCE_INLINES") 

然后按esc和:wq保存退出。
编译安装:

cd build/cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local ..make -j16

(在配置过程会出现– ICV: Downloading ippicv_linux_20151201.tgz…错误。可以到 ippicv_linux_20151201.tgz 下载。
将下载的文件替换掉 opencv-3.1.0/3rdparty/ippicv/downloads/linux-8b449a536a2157bcad08a2b9f266828b下的同名文件,同时在opencv-3.1.0目录下的CMakeList.txt 文件的开头加入一行,然后再次cmake即可,如下:

cd ~/Downloads/mv ippicv_linux_20151201.tgz opencv-3.1.0/3rdparty/ippicv/downloads/linux-808b791a6eac9ed78d32a7666804320e/ vim opencv-3.1.0/CMakeLists.txt 

在弹出的文件开头加入一行(注意里面的引号要英文状态下的):

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -D_FORCE_INLINES") 

然后按esc和:wq保存退出。)

这一步遇到了问题:
这里写图片描述
参考http://answers.opencv.org/question/95148/cudalegacy-not-compile-nppigraphcut-missing/

vim ../modules/cudalegacy/src/graphcuts.cpp 

#if !defined (HAVE_CUDA) || defined (CUDA_DISABLER)

改为

#if !defined (HAVE_CUDA) || defined (CUDA_DISABLER) || (CUDART_VERSION >= 8000)

保存后退出。
再次make -j16发现编译成功。
这里写图片描述

sudo make install

安装完成

8. Python安装与配置

选择的是anaconda linux64 2.7版本python2.7 。下载完成之后,最好也要进行md5sum的检验。完成之后,cd进入下载文件所在的目录,在命令行输入:

cd ~/Downloads/soft/bash Anaconda2-4.1.1-Linux-x86_64.sh

yes
(ENTER)
yes
这一选项把PATH=/home/huhui/anaconda2/bin加到了环境变量中。添加库:

sudo gedit ~/.bashrc

添加

export LD_LIBRARY_PATH=/home/huhui/anaconda2/lib:$LD_LIBRARY_PATH

重启电脑之后,在命令行输入:

ipython

就可以看到python的版本。

9. matlab的安装与配置

下载matlab安装包及crack文件。我的是别人拷给我的两个文件夹,所以也不需要我下载和解压。

cd Downloads/soft/r2014b_linux64/sudo ./install

选择不联网安装
这里写图片描述
密钥29797-39064-48306-32452
默认路径
默认选项
安装好了
激活
这里写图片描述
注意是crack下的路径
添加入环境变量:

vim ~/.bashrc

添加:

export PATH=/usr/local/MATLAB/R2014b/bin/:$PATH

保存退出后

source ~/.bashrc

echo $PATH来检验:
添加成功
这里命令行输入matlab还是会报错:
这里写图片描述
我们还需要将Crack/linux目录下的libmwservices.so文件拷贝到/usr/local/MATLAB/R2014a/bin/glnxa64:

cd ~/Downloads/soft/MATLAB_R2014B_MAC_LINUX_cracksudo cp libmwservices.so /usr/local/MATLAB/R2014b/bin/glnxa64/

这里命令行输入matlab就可以打开matlab了

10. caffe的安装和配置

安装各种依赖包

sudo apt-get updatesudo apt-get upgradesudo apt-get install -y build-essential cmake git pkg-configsudo apt-get install -y libprotobuf-dev libleveldb-dev libsnappy-dev libhdf5-serial-dev protobuf-compilersudo apt-get install -y libatlas-base-devsudo apt-get install -y --no-install-recommends libboost-all-devsudo apt-get install -y libgflags-dev libgoogle-glog-dev liblmdb-devsudo apt-get install -y python-pipsudo apt-get install -y python-devsudo apt-get install -y python-numpy python-scipysudo apt-get install -y libopencv-dev

下载caffe:

cd ~git clone https://github.com/BVLC/caffe.git    //从github上git caffe

安装配置caffe:

cd caffecp Makefile.config.example Makefile.configsudo gedit Makefile.config

配置文件修改(看英文提示根据具体修改):
OPENCV_VERSION := 3 #取消注释符号#,应用opencv3
BLAS := mkl #BLAS库应用英特尔的mkl
注释第66行自带的python
ANACONDA_HOME := /home/huhui/anaconda2 #将具体anaconda2路径写入

PYTHON_INCLUDE := $(ANACONDA_HOME)/include \          $(ANACONDA_HOME)/include/python2.7 \          $(ANACONDA_HOME)/lib/python2.7/site-packages/numpy/core/include \

#PYTHON_INCLUDE之前的注释#去掉,以及之后两行前的#也去掉

PYTHON_LIB := $(ANACONDA_HOME)/libINCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include /usr/include/hdf5/serialLIBRARY_DIRS := $(PYTHON_LIB) /usr/local/lib /usr/lib /usr/lib/x86_64-linux-gnu /usr/lib/x86_64-linux-gnu/hdf5/serial

为了之后编译matlab,这里提前在配置文件中修改matlab路劲,改完后保存退出:

MATLAB_DIR := /usr/local/MATLAB/R2014b

为hdf5之类的文件创建新的链接
\首先执行下面两句话:

cd /usr/lib/x86_64-linux-gnu/find . -type f -exec sed -i -e 's^"hdf5/serial/hdf5.h"^"hdf5/serial/hdf5.h"^g' -e 's^"hdf5/serial/hdf5_hl.h"^"hdf5/serial/hdf5_hl.h"^g' '{}' \;

执行

ls -al | grep libhdf

结果为
然后根据情况执行下面两句:
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.0和10.0.2根据不同的系统可能对应的数字会不同,比如在ubuntu16.04中其数字就是10.1.0.
具体的数字可以在输入命令时候使用tab键补全查看
打开makefile文件搜索并替换

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

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

在命令行输入:
source ~/.bashrc #编译立即生效
然后进入caffe目录:

make all -j4

报错
这里写图片描述
添加环境变量即可:

sudo vim ~/.bashrcexport LD_LIBRARY_PATH=/usr/lib/x86_64-linux-gnu:$LD_LIBRARY_PATHsource ~/.bashrc

出现错误的原因是执行convert_cifar_data.bin时会链接/usr/local/lib/libopencv_imgcodecs.so,而这个库需要调到TIFFxx的函数,所以需要找到这些函数在哪个库里。然后执行

find / -name "*libtiff*"

发现libtiff.so在/usr/lib/x86_64-linux-gnu目录下。然后查看环境变量

echo $LD_LIBRARY_PATH

发现没有该目录。于是添加进环境变量:

sudo vim ~/.bashrcexport LD_LIBRARY_PATH=/usr/lib/x86_64-linux-gnu:$LD_LIBRARY_PATHsource ~/.bashrc

即可编译成功。
编译matlab:

make matcaffemake mattest

报错:
这里写图片描述

(参考http://itbilu.com/linux/management/NymXRUieg.html)源码编译升级安装了gcc后,编译程序或运行其它程序时,有时会出现类似/usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.21’ not found的问题。这是因为升级gcc时,生成的动态库没有替换老版本gcc的动态库导致的,将gcc最新版本的动态库替换系统中老版本的动态库即可解决。

将/usr/local/MATLAB/R2014b/sys/os/glnxa64下的libstdc++.so.6 更改名称为libstd++.so.6_back:

cd /usr/local/MATLAB/R2014b/sys/os/glnxa64/sudo mv libstdc++.so.6 libstdc++.so.6_backsudo ldconfig

11. 编译自己的例子

至此caffe环境算是配好了。但是自己的例子还是跑不了。编译我的extract_features_v0.0.6得到结果:
第一次是是找不到ippicv对应的库(结果忘了截图了),于是就如下操作:

find / -name "libippicv*"

发现了libippicv.a文件在/usr/local/share/OpenCV/3rdparty/lib/目录下,由于好像平常没用到这个库,我就把这个路径加到了g++编译项后面:

LDFLAGS = -L /usr/local/share/OpenCV/3rdparty/lib/ `pkg-config --cflags --libs opencv` -lm

另一种解决方法:
调opencv的时候找不到ippicv的库(http://blog.csdn.net/dengshuai_super/article/details/51895120)
从opencv.pc中可以看出,pkg-config加载库的路径是/usr/local/lib,我们去这这个路径下看看,发现没有-lippicv对应的库,别的选项都有对应的库,然后我们把-lsudo make installsudo /bin/bash -c ‘echo “/usr/local/lib” > /etc/ld.so.conf.d/opencv.conf’sudo ldconfigippicv对应的库(libippicv.a)放到这个路径下就好啦了。
我的libippicv.a在/usr/local/share/OpenCV/3rdparty/lib/这个路径下。你的也在你自己opencv文件夹的对应路径下。
先cd 到上面这个路径下,然后cp liboppicv.a /usr/local/lib 将这个库文件复制到/usr/local/lib下就好了。

再次编译报下一个错:
这里写图片描述

/usr/local/lib/libopencv_imgproc.so.3.1: error adding symbols: DSO missing from command linecollect2: error: ld returned 1 exit statusMakefile:140: recipe for target 'myprogram' failedmake: *** [myprogram] Error 1

进/usr/local/lib/目录查找:

ls -al | grep libopencv_imgproc.so.3.1

结果如下:

huhui@huhui-ubuntu1604:/usr/local/lib$ ls -al | grep libopencv_imgproc.so.3.1lrwxrwxrwx  1 root root         24 1011 22:33 libopencv_imgproc.so -> libopencv_imgproc.so.3.1lrwxrwxrwx  1 root root         26 1011 22:33 libopencv_imgproc.so.3.1 -> libopencv_imgproc.so.3.1.0-rw-r--r--  1 root root   26370776 1011 22:32 libopencv_imgproc.so.3.1.0

查看是否加进了环境变量:

echo $LD_LIBRARY_PATH

结果

/usr/lib/x86_64-linux-gnu:/lib/x86_64-linux-gnu:/home/huhui/anaconda2/lib:

没有/usr/local/lib目录,于是跟之前方法一样加上。注意要在同一个窗口操作,我之前在另一个窗口操作的,结果没有添加成功。

sudo vim ~/.bashrcexport LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATHsource ~/.bashrc

再次编译这个错误没有了,是另外的错误:
这里写图片描述
找不到google的库。
原来是makefile里写链接的时候把-lglog写成了-glog(好傻)。改过来之后,还差blas的库找不到,于是一样的方法,发现它在/usr/lib/里,所以加到环境变量里。发现还有错,就在g++编译选项中加一条-lblas就可以了。终于编译成功!

12. 运行自己写的python代码

代码在./caffe/python/generate_my_models.py
首先加入环境变量:

sudo vim ~/.bashrcexport PYTHONPATH=/home/huhui/caffe/python

注意后面没有caffe。

import caffe时:

ImportError: No module named _caffe

我直接make pycaffe就解决了。
然后报错:

ImportError: No module named google.protobuf.internal

以下是之前试过的解决方法,没有用。

//============================================================
/*********************************************************************************
*还是这样靠谱:http://blog.csdn.net/wuzuyu365/article/details/52431062
*我装的是anaconda2, 解决方法是在其中安装protobuf最新版本
*
*
*sudo chmod 777 -R anaconda2
*conda install protobuf
*

*
*这样就解决了
*原来是没有装python版本的protobuf。
*
*
*
*参考文章http://blog.sina.com.cn/s/blog_7948610e0100rwux.html
*http://www.cnblogs.com/empty16/p/4828476.html
*
*
*sudo pip install --upgrade protobuf
*pip install -U scikit-image
*

*现在import caffe时报错Intel MKL FATAL ERROR: Cannot load libmkl_avx2.so or *libmkl_def.so.。参考https://github.com/BVLC/caffe/issues/3884:
*(Are you using Anaconda? The problem might not be related with caffe. Try
*
*python -c ‘import sklearn.linear_model.tests.test_randomized_l1’
*
*If you can reproduce the error, that means the problem is not related with caffe but anaconda.
*The latest version of numpy and scipy uses mkl by default. If you want to disable that, you can *execute
*
*conda install nomkl
*
*that solves my problem. Hope that can solve yours, too.
*More details:
*scikit-learn/scikit-learn#5046
*https://www.continuum.io/blog/developer-blog/anaconda-25-release-now-mkl-optimizations
*)
*
*
*python -c 'import sklearn.linear_model.tests.test_randomized_l1'
*conda install nomkl
*

*重新进入caffe文件夹下编译,发现编不过了:
*
*
*In file included from src/caffe/util/signal_handler.cpp:7:0:
*./include/caffe/util/signal_handler.h:4:34: fatal error: caffe/proto/caffe.pb.h: No such file or *directory
*compilation terminated.
*Makefile:576: recipe for target '.build_debug/src/caffe/util/signal_handler.o' failed
*make: *** [.build_debug/src/caffe/util/signal_handler.o] Error 1
*make: *** Waiting for unfinished jobs....
*In file included from ./include/caffe/util/hdf5.hpp:9:0,
* from src/caffe/util/hdf5.cpp:1:
*./include/caffe/blob.hpp:9:34: fatal error: caffe/proto/caffe.pb.h: No such file or directory
*compilation terminated.
*Makefile:576: recipe for target '.build_debug/src/caffe/util/hdf5.o' failed
*make: *** [.build_debug/src/caffe/util/hdf5.o] Error 1
*
*

*看来是protobuf的版本没安装对。
*执行
*
*
* sudo apt-get remove libprotobuf-dev
*

*卸载旧版本,再重试。
******************************************************************************/
//=================================================================================

//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
以下是该问题的正确解决方法:

第一个碰到的问题就是旧版本和新版本都卸载不干净,编译的时候完全通不过,报错如下:
proto/caffe.pb.h:17:2: error: #error This file was generated by an older version of protoc
解决方法:
1. 先查找libprotobuf
find / -name “libprotobuf
发现

huhui@huhui-ubuntu1604:~/Downloads/protobuf-2.6.1$ la -al /usr/lib/x86_64-linux-gnu/ | grep proto-rw-r--r--   1 root root   395968 330  2016 libmirprotobuf.so.3-rw-r--r--   1 root root  2362284 1024  2015 libprotobuf.a-rw-r--r--   1 root root   395748 1024  2015 libprotobuf-lite.alrwxrwxrwx   1 root root       25 1024  2015 libprotobuf-lite.so -> libprotobuf-lite.so.9.0.1lrwxrwxrwx   1 root root       25 1011 15:46 libprotobuf-lite.so.9 -> libprotobuf-lite.so.9.0.1-rw-r--r--   1 root root   199176 1024  2015 libprotobuf-lite.so.9.0.1lrwxrwxrwx   1 root root       20 1024  2015 libprotobuf.so -> libprotobuf.so.9.0.1lrwxrwxrwx   1 root root       20 1011 15:46 libprotobuf.so.9 -> libprotobuf.so.9.0.1-rw-r--r--   1 root root  1170328 1024  2015 libprotobuf.so.9.0.1lrwxrwxrwx   1 root root       18 1024  2015 libprotoc.so.9 -> libprotoc.so.9.0.1-rw-r--r--   1 root root  1036544 1024  2015 libprotoc.so.9.0.1huhui@huhui-ubuntu1604:~/Downloads/protobuf-2.6.1$ huhui@huhui-ubuntu1604:~/Downloads/protobuf-2.6.1$ huhui@huhui-ubuntu1604:~/Downloads/protobuf-2.6.1$ la -al /home/huhui/anaconda2/lib/ | grep proto-rw-r--r--  1 huhui huhui 15062152 731 04:07 libprotobuf.a-rwxr-xr-x  1 huhui huhui      983 1012 19:12 libprotobuf.la-rw-r--r--  1 huhui huhui  1277358 731 04:07 libprotobuf-lite.a-rwxr-xr-x  1 huhui huhui     1018 1012 19:12 libprotobuf-lite.lalrwxrwxrwx  1 huhui huhui       26 1012 19:12 libprotobuf-lite.so -> libprotobuf-lite.so.10.0.0lrwxrwxrwx  1 huhui huhui       26 1012 19:12 libprotobuf-lite.so.10 -> libprotobuf-lite.so.10.0.0-rwxr-xr-x  1 huhui huhui   753692 731 04:07 libprotobuf-lite.so.10.0.0lrwxrwxrwx  1 huhui huhui       21 1012 19:12 libprotobuf.so -> libprotobuf.so.10.0.0lrwxrwxrwx  1 huhui huhui       21 1012 19:12 libprotobuf.so.10 -> libprotobuf.so.10.0.0-rwxr-xr-x  1 huhui huhui  7313964 731 04:07 libprotobuf.so.10.0.0-rw-r--r--  1 huhui huhui 13617312 731 04:07 libprotoc.a-rwxr-xr-x  1 huhui huhui     1010 1012 19:12 libprotoc.lalrwxrwxrwx  1 huhui huhui       19 1012 19:12 libprotoc.so -> libprotoc.so.10.0.0lrwxrwxrwx  1 huhui huhui       19 1012 19:12 libprotoc.so.10 -> libprotoc.so.10.0.0-rwxr-xr-x  1 huhui huhui  4591133 731 04:07 libprotoc.so.10.0.0

发现目前存在两个 protobuf 版本,分别是 /home/huhui/anaconda2/lib/libprotoc.so.10 与 /usr/lib/x86_64-linux-gnu/libprotoc.so.9。
因此需要删除新版本的 /home/huhui/anaconda2/lib/libprotoc.so.10
sudo rm -rf /home/huhui/anaconda2
然后按照前面步骤,重装 python,问题解决;

现在是第二个问题,就是回到了开始的状态,caffe内部编译都可以通过,但运行python会报protobuf版本不一样的错。(其实如果不是之前按照错误的方法解决问题,全部搞乱了,前面一步是不需要的。)以下是正确解决方法:
(1)执行protoc --version查看原始protobuf版本,发现是2.6.1。
(2)从https://github.com/google/protobuf/tree/v2.6.1上下载protobuf-2.6.1.zip,解压并进入protobuf-2.6.1/python目录。(如果是刚开始就遇到这个问题可能是不需要下载的,可以找找看,当然我不确定,因为没试过。)
(2)按照 README.txt 中步骤执行以下操作,安装python 版本的 protobuf, 具体如下:

python setup.py buildpython setup.py google_testpython setup.py install

结果:
这里写图片描述
Finished processing dependencies for protobuf==2.6.1
python版本的protobuf与C++版本的版本号相同,都为2.6.1。

再回去编译,就可以通过了!

还有问题,就是opencv的库cv2调不了。
原因是没装python-opencv package.
sudo apt-get install python-opencv
现在再运行,发现还是找不到cv2,所以我们找下这个库在哪里:

find / -name "*cv2*so"

有用的就是这两个:

/usr/lib/python2.7/dist-packages/cv2.x86_64-linux-gnu.so/usr/local/lib/python2.7/dist-packages/cv2.so

但是我不知道是哪个。我就先把这两个路径先加到PYTHON文件中去:

sys.path.append('/usr/lib/python2.7/dist-packages/')sys.path.append('/usr/local/lib/python2.7/dist-packages/')

发现可以找到了。然后分别注释掉这两句发现起作用的是后面一个路径,即

sys.path.append('/usr/local/lib/python2.7/dist-packages/')

所以只需要保留这一句就好了。(当然一眼就能看出来的同学就不用这么试啦)

现在再运行python的程序,发现调不了cv。

ImportError: No module named cv

import numpy的时候出现:
AttributeError: ‘module’ object has no attribute ‘bool_’

这个问题是把PYTHONPATH配置到了caffe-master/python/caffe底下,应该配置到caffe-master/python里就好了。一定要谨慎配置PYTHONPATH,否则容易导致其他的问题

2 0