Caffe安装笔记二:Caffe安装过程

下面开始正题,caffe的安装过程。因为出问题很多,所以实际上我是尝试了python2和python3两种python的接口。下面一并放出来。

1. 安装build-essential

sudo apt-get install
build-essential

这个是一些基本的库,具体包括哪些,安装前确认时会显示,印象中有gcc等等。

2. boost安装

caffe官网给出的是sudo apt-get install --no-install-recommends libboost-all-dev

我不知道他特意加个--no-install-recommends干啥。另外,在installation主页上标明了Boost>=1.55,但是如果用上面那条命令的话,默认装上的是1.54。我现在还不能完全确定1.54是不是不行,但是为了保险起见,请使用

sudo apt-get install libboost1.55-all-dev

关于boost在makefile.config中的配置,这是个坑,下面详细讲讲。

2.1. python2/Anaconda2

对于python2,只要执行完上面的安装就可以了,makefile中的配置项无需做特别设置。

2.2. python3/Anaconda3

对于python3,boost安装方面没啥要留意的。需要特别注意的是makefile.config中,有一行

# Uncomment to use Python 3 (default isPython 2)
PYTHON_LIBRARIES := boost_python-py34python3.5m

这一项很有迷惑性,而且我也迷糊了很久,因为相关有一项是PYTHON_LIB,一开始我以为是相同的重复项。但是如果这句stay comment的话,make caffe和pycaffe都能成功通过,但是使用时却会报错:

ImportError: /home/zero/Documents/caffe-master/python/caffe/_caffe.so:undefined symbol:
_ZN5boost6python6detail11init_moduleER11PyModuleDefPFvvE

这个错误的意思是,boost版本不匹配。

boost.python是啥东西呢?我理解的是boost.python是一个类似翻译器的东西,所以如果你是python3的程序,却用了python2的翻译器,那语法、定义等等各方面必然会有冲突。我记得在某篇帖子中看到过,str、int等等的定义,在两者中是不同的,所以有时会有报错信息说找不到str啦int啦之类。当时没有把没一个错误都记下来。

然后,如果我们去makefile中查找这个变量PYTHON_LIBRARIES,会发现有这么一句:

PYTHON_LIBRARIES ?= boost_python python2.7

这句的意思是说,如果不出意外,使用的是2版本的python和boost.python。但是这里有个问题,如果把makefile.config里面那句uncomment,原来默认的是"PYTHON_LIBRARIES :=boost_python3 python3.5m",直接去掉的话会报错说找不到-lboost_python3。这里我无法解释原理,但是去/usr/lib/x86_64-linux-gnu/文件夹下面去找找,你会找到属于python3的boost版本,可能是33,也可能是34。确定后,把makefile中的名称换成相应名称就可以了。3.5m的,我不了解为何要加m。修改后应该是:

PYTHON_LIBRARIES := boost_python-py34python3.5m

3. protobuf安装

protobuf官方产品默认是不支持python3的,所以通过默认的apt-get命令安装的libprotobuf和protobuf complier仅适用于python2系列。

而对于python3,以前支持python3的是民间组织搞的一个protobuf-py3,似乎是基于2.5的一个改货。但是现在下不到了。试过pip3-protobuf,当时也不行。但是现在想来,我或许是之前装过protobuf2.5没卸载干净的关系,如果有兴趣的话,倒是可以试试pip3的方式。不过我这里还是建议手动安装。

有人在帖子中说protobuf-3.0.0-alpha有问题,我试过也确实不行,但是当时尝试的环境依然是protobuf2没卸干净,所以到底alpha行不行,这里说不好,不过我确定beta是可以的,所以我们直接去下载protobuf-3.0.0-beta-2。注意分别下载cpp和python两个版本的。

https://github.com/google/protobuf/releases

解压后

./configure --prefix=/path/protobuf    # 这里指定的路径可以是任意
make
make check
make install

然后配置路径,将protobuf下的lib和include加入makefile.config,同时,protobuf要加入bashrc里面。

export PATH=$PATH:/path/protobuf/bin
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/path/protobuf/lib

然后protoc–version查看版本是否正确。如果显示的是protoc2.5.0,那是有问题的。我曾经执行apt-get installlibprotobuf-dev,后来又purge卸载,但是执行protoc --version后还是能看到2.5.0的信息。如果是默认系统执行命令后会提示没有protobuf,所以最好在安装前先查一下。万一有,怎么干净的卸载,这个我真不清楚。

关于系统权限问题

这里讲一下系统权限的问题,初入手ubuntu很容易迷糊,username账户、sudo、su这是三个不同的东西。bashrc配置过的路径仅针对username账户有效,怎么样能够全局有效?理论是是修改/etc/profile,但是实际测试过不太好用。sudo的权限是不同于su账户的,所以下一步安装python依赖我宁愿用su也不要用sudo。理论上修改sudo的配置文件/etc/sudoers就能够达到不清除用户账户环境配置的效果,但是实测无效。

然后是pip,系统关联anaconda3之后,默认pip是anaconda的pip,但是如果你执行sudo pip的话执行的是系统默认python2的pip,这些地方一定要注意。所以后面很多路径配置后,执行sudo命令会提示找不到这个那个,原因是在做环境变量配置时仅针对当前用户做了配置。

另外有网优提到过,在caffemake的时候不要用sudo,不然后面会把部分文件加入权限限制,导致在make pycaffe的时候出问题。

解压protobuf的Python版本,进入目录后

cd Documents/pyprotobuf/protobuf-3.0.0-beta-2/python
python setup.py build
python setup.py test
python setup.py install

最后一步需要sudo或者su权限。我们还是把su也配置好anaconda,然后进入su账户执行安装。这里一定要注意python的版本问题,如果装了anaconda3,那么username账户下面python进去后是3.5.1,这时一定要注意,测试下su账户下python进去后是什么,如果不修改su的bashrc,那么直接python进去的是2.7.6。可以直接从username下的bashrc中把anaconda的路径配置copy过去。

安装完python的protobuf后,进入python进行测试:

Import google.protobuf
from google.protobuf.internal importenum_type_wrapper

3. hdf5

python2/3下照常安装就好,应该没什么太大问题。

sudo apt-get install libhdf5-serial-dev

anaconda自己自带hdf5,不需要安装,但是需要注意配置。在makefileconfig中,要把anaconda的lib和include加入路径配置当中,所以在make的时候,会依照该配置寻找anaconda中的动态链接库文件libhdf5.so.10,但是系统找不到,怎么办呢?这里有两种解决办法。

一种是在bashrc中加入anaconda的lib路径:

LD_LIBRARY_PATH=home/zero/anaconda3/lib:$LD_LIBRARY_PATH
exportLD_LIBRARY_PATH

但是这样会引发别的问题,make时,opencv方面会报错,

undefined reference [email protected]_4.0'

按照晋倪的文章,这就需要手动安装opencv,并在配置时设置加上-DBUILD_TIFF=ON

但是我嫌麻烦,所以开辟新路径。

第二种方式就是对hdf本身动手脚,一种办法是在/usr/lib/x86_64-linux-gnu

文件夹下面找,看有libhdf5.so.x几,就把它链接为10,然后make时就找到啦。比如

sudo ln -s libhdf5.so.7 libhdf5.so.10

但是这不就是狸猫换太子?有网友说照着这个做,报错说libhdf5版本不对。所以可能9换7可以,10换8就不行。然后有个哥们比较逗的是,直接把so文件复制到/usr/lib/x86_64-linux-gnu文件夹下面,我试了下:

sudo cp libhdf5_hl.so.10/usr/lib/x86_64-linux-gnu/
sudo cp libhdf5.so.10/usr/lib/x86_64-linux-gnu/

然后,似乎是可以的。

4. opencv

python2的我直接就禁用opencv了,所以有兴趣可以自己试试看。当时也是报错

undefined reference [email protected]_4.0‘

可能对于python2/3,真的要手动安装。

对于anaconda,直接照常安装就行了。

sudo apt-get install libopencv-dev

5.其他

sudo apt-get install libleveldb-devlibsnappy-dev
sudo apt-get install libatlas-base-dev
sudo apt-get install libgflags-devlibgoogle-glog-dev liblmdb-dev

这些似乎都不会出太大问题。

6. 安装python依赖库

anaconda用户可以跳过此步,这一步仅针对原生python而言。

首先安装一些必备的编译器:

sudo apt-get install gcc-gfortran.x86_64
sudo apt-get install gfortran

然后安装pip(针对python2):

sudo apt-get install python-pip

或者(针对python3):

sudo apt-get install python3-pip

使用的时候是pip或者pip3,分别针对两个版本的python。

然后执行caffe的python下面的requirements.txt中的模块安装。

官网给出的命令:

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

执行此命令需要su权限,你可以先进入su账户,如果不用su而用sudo的话则命令改为:

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

不过网上还是看到有人说不要用他的文档,自己一个一个装比较好。确实在安装过程中会有不能完全安装而留意不到的情况,所以最好手动安装,没装完一个看返回信息是否是安装成功。例如:

sudo pip3 install 'python-gflags>=2.0'

需要选择版本的话记得加引号。

7. 安装caffe及配置makefile文件

先下载Caffe。github上下载好caffe库:https://github.com/BVLC/caffe,复制到ubuntu下,解压。然后按照官网说法修改config

cd /home/zero/Documents/caffe-master

cp Makefile.config.example Makefile.config

直接用gedit打开

CPU_ONLY := 1 #这句要去掉comment。因为我们只用cpu
# USE_OPENCV := 0 #不用opencv的话也可以去掉,不过最好留着吧。我是在python2下面实在懒才去掉的。
PYTHON_INCLUDE := /usr/include/python2.7               /usr/lib/python2.7/dist-packages/numpy/core/include
# 这两句,如果是要用python3或者anaconda,一概去掉,如果是原生python2.7,下面的要改为/usr/local/lib/python2.7/dist-packages/numpy/core/include
ANACONDA_HOME := /home/zero/anaconda3
PYTHON_INCLUDE := $(ANACONDA_HOME)/include              $(ANACONDA_HOME)/include/python3.5m              $(ANACONDA_HOME)/lib/python3.5/site-packages/numpy/core/include# 注意是anaconda3,或者anaconda2,带了数字的
PYTHON_LIBRARIES := boost_python-py34python3.5m
# 这句前面讲过,boost版本的问题。
# PYTHON_LIB := /usr/lib
PYTHON_LIB := $(ANACONDA_HOME)/lib
# 默认就用上面的,anaconda就用下面的。
INCLUDE_DIRS := $(PYTHON_INCLUDE)/usr/local/include /usr/local/protobuf/include
LIBRARY_DIRS := $(PYTHON_LIB)/usr/local/lib /usr/lib /usr/local/protobuf/lib
# 注意后面手动添加了protobuf的库。

8. make

在caffe根目录下

make
make test
make runtest
make pycaffe
make pytest

如果测试都通过,那就没问题了。注意配置文件里面有一个

WITH_PYTHON_LAYER := 1

如果这句的注释去掉就不能pytest了。记得googlegroup上有人这么说过。

9. 配置环境变量:

export PATH=$PATH:/usr/local/protobuf/bin
exportLD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/protobuf/lib

这两句是配置protobuf的,手动安装3beta2之后,要添加这两句,不然系统找不到你安装的protobuf。如果是2系列的不需要执行这一步。

# added by Anaconda34.0.0
installer
exportPATH="/home/zero/anaconda3/bin:$PATH"

上面这个是安装anaconda3的时候自动添加的,如果在问你要不要添加时你直接回车no了,那回头自己添上这一句。否则python进去的还是系统自带的python2。前面提到过,晋倪的文章中说建议

LD_LIBRARY_PATH=home/zero/anaconda3/lib:$LD_LIBRARY_PATH
export LD_LIBRARY_PATH

说如果不加就会进不去系统。我没遇到进不去系统的情况。反而是加了这两句会导致opencv的报错。

exportPYTHONPATH=/home/zero/Documents/caffe-master/python:$PYTHONPATH

最后这句是caffe的配置,有人居然说可以配置为caffe/build/python,严重误导了我……

10. 验证

最后还是需要仔细验证一下,不然可能空欢喜一场

python进去后

import caffe

如果不报错也别急着高兴

from caffe import layers as L

如果这句也不报错,那应该是不会有问题了。

万一第一句成功了结果第二句没成功,可能是路径配错了,用dir(caffe)看看caffe都有些啥。我第一次海市蜃楼的时候只有

[‘__doc__‘, ‘__loader__‘, ‘__name__‘,‘__package__‘, ‘__path__‘, ‘__spec__‘]。说明是有问题的。

最后

虽然自己极尽所能想要做到没有遗漏,但是由于caffe安装过程本身重复了太多次,每次错误都不同,我没有时间一一记录和呈现。万一有所疏漏,请及时指出。

关于参考资料,看了太多的博文,没办法一一列出,而且根本系统、环境的不同,操作方法也有太多的不一样。这里要感谢google user group上面的两位网友,针对我的问题他们直接给出了很好的建议。

时间: 2024-08-07 02:23:10

Caffe安装笔记二:Caffe安装过程的相关文章

Hadoop 1.2.1 安装笔记02: Java安装

采用ftp 或在线wget方式获取jdk安装包 ,放置于新创建的/usr/java 目录中 ,解压安装 [[email protected] java]$ sudo tar -zxvf jdk-7u65-linux-x64.gz 配置 /etc/profile里的Java参数 # JAVA environment  export JAVA_HOME=/usr/java/jdk1.7.0_65 export CLASSPATH=.:$CLASSPATH:$JAVA_HOME/lib:$JAVA_H

MongoDB 学习笔记二:安装MongoDB

1.下载MongoDB MongoDB 提供了可用于 32 位和 64 位系统的预编译二进制包,你可以从MongoDB官网下载安装,MongoDB 预编译二进制包下载地址:https://www.mongodb.com/download-center#community.注意:在 MongoDB 2.2 版本后已经不再支持 Windows XP 系统.最新版本也已经没有了 32 位系统的安装文件. 2.安装MongoDB 我下载的是mongodb-win32-x86_64-2008plus-ss

编译安装LAMP(二)——编译安装MySQL-5.5.28

1.准备数据存放的文件系统新建一个逻辑卷,并将其挂载至特定目录即可.这里不再给出过程. 这里假设其逻辑卷的挂载目录为/mydata,而后需要创建/mydata/data目录做为mysql数据的存放目录. 2.新建用户以安全方式运行进程: # groupadd -r mysql # useradd -g mysql -r -s /sbin/nologin mysql # chown -R mysql:mysql /mydata/data 3.安装并初始化mysql-5.5.28首先下载平台对应的m

LAMP编译安装(二)——安装Mariadb-5.5.45

背景介绍 从上一篇文章了解到,当服务器架构为下图中的类型时,PHP服务器会启动php-fpm服务侦听在一个特定的套接字上来等待httpd服务器的请求,如果请求中包含对后端Mysql服务器的访问,此时分为几种情况: 1.PHP服务器是独立服务器,或PHP服务器和httpd服务器在同一台主机,并以httpd服务器的一个模块方式存在,且都为编译安装,则编译时需要通过mysqlnd参数联系后端的Mysql服务器 2.PHP服务器为独立服务器,且不是编译安装,可能需要安装php-mysql客户端来连接My

redhat6.5安装cacti监控及安装过程中的问题解决

课题描述:在redhat系统中安装cacti这款通用的监控工具. 环境描述:我的客户端使用的win7的系统,通过putty远程登录Linux服务器 客户端IP:192.168.0.23,Linux服务器IP:192.168.0.56(使用的是内网) cacti原理:cacti本身是一个PHP脚本,它的所有功能都是由其插件完成的,cacti通过snmp协议与被监控主机取得通信,被监控主机的监控参数保存在cacti目录下的一个rra文件中,通过rrdtool这个工具定时地到这个文件中读取数据,然后做

MySql5.7.11 for Windows 安装(二)

原文:MySql5.7.11 for Windows 安装(二) 安装之后,首先创建data文件夹(旧版本本来就有),管理员打开cmd,cd到bin文件夹,输入 mysqld –initialize-insecure –user=mysql,data文件夹就愉快的生成了. 安装后退出之后,再次登录时候,遇到密码处回车,就会出错 这就相当于忘记root密码 -关闭服务 net stop mysql 我们在my.ini中添加一行代码,在[mysqld]下面添加: skip-grant-tables

VMware系统运维(二)安装Microsoft .NET 3.5

1.安装vmware vSphere 5.5 之前先安装Microsoft .NET 3.5. 2.安装Microsoft .NET3.5,添加角色和功能. 3.勾选.NET Framework 3.5功能,下一步. 4.默认系统未带,需要安装从系统盘的d:\source\sxs,点击确定,下一步. 5.开始安装 6.安装完成 二.安装桌面体验即Adobe Flash Player 1.打开服务器管理器,选择“添加角色和功能“. 2.找到“用户界面和基础结构”,勾选“桌面体验”并添加所需功能,下

HBase Mac OSX 安装笔记

HBase Mac OSX 安装笔记 本次测试安装的机器为Mac Book Pro, 系统为 OS X 10.9.4.hbase版本0.98.6.1. 使用Java版本为Oracle的JDK 1.6.0_65. 1. 下载安装 hbase-0.98.6.1 此处下载的是 0.98.6.1,下载后解压缩.解压缩后的目录为 hbase-0.98.6.1-hadoop2/ 注:hbase中已经包含hadoop,所以不用另外安装hadoop了. 2. 修改配置 (1) conf/hbase-env.sh

caffe安装笔记

caffe安装笔记: 环境及安装前检查 硬件: T630 CPU32核 64G内存4G硬盘 显卡: [email protected]:~# lspci |grep -i nvidia 02:00.0 3D controller: NVIDIA Corporation GK110GL [Tesla K20Xm] (rev a1) 软件: Ubuntu14.04 server64bit版本:ubuntu-14.04.5-server-amd64.iso Python 2.7.12 [email p