Linux(RedHat)上离线安装cmake3.3.2+Caffe-SSD+Opencv2.4.10+Python2.7.11+CUDA9.0+cudnn7.0.5过程记录

由于学校linux服务器不能联网,安装各种软件包时不能用apt-get等命令自动下载安装,不管缺什么包都得在本地下载好源码包,然后上传到服务器上。过程比较痛苦,找软件包也很费劲,安装期间还有各种因为版本、路径等问题报错。本文将详细列出安装过程、其间出现的错误和解决方法、需要的依赖包等。
本文主要分为六个部分:1.总体概述 2.安装cmake和python3.安装caffe环境 4.安装caffe 5.安装pycaffe依赖包 6.ssd实测相关

一、总体概述
我的linux系统是Red Hat Enterprise Linux Server 7.4 x64,gcc版本4.8.5,CPU型号为Intel Xeon®。这里gcc版本会影响后面opencv的编译,而CPU型号会影响OpenBlas编译。具体的:
1.关于gcc版本。我同时下载了opencv-3.3.0和opencv-2.4.10,3.3.0版本编译时会出未定义名字的错误,根据网上说法是这个版本是按gcc5以上的命名规则写的,和gcc4.8.5有些不同。楼主没有深究,但是确实用opencv2.4.10没有出现问题。所以如果你的gcc版本较高,可以尝试用opencv3以上。
2.关于CPU型号。caffe需要BLAS依赖,不同的BLAS实现对支持的cpu型号有要求。主流的BLAS实现有OpenBLAS、Atlas、Intel MKL。其中OpenBlas不支持楼主的Intel Xeon®,所以楼主安装的Intel MKL。具体的会在后面讲。
另外,某些安装包需要用cmake实现,所以如果你的系统没有安装cmake,请安装cmake。楼主安装了cmake3.3.2。同时cmake可以安装gui接口,但要安装额外包依赖,具体在后面讲。
另外,关于python版本。建议安装2.7.x,x建议高一点。楼主装的Python2.7.11。其实楼主机器上本来装的Python3.6.5,最开始装pycaffe时指定的关联python也是这个,安装也没有出错,但是最后在python中import caffe时报了未定义名字的错误。最后选择重装了低版本的Python2.7.11。毕竟Caffe原版支持的就是2.7。如果你的Python版本较高,建议再装一个2.7版本的。不过需要注意的是:caffe要求你的python编译成动态链接库,所以即便你的python版本符合也不一定能用,具体在后面讲。
最后,整个caffe配置顺序为:安装python->安装caffe环境 -> 安装caffe ->安装pycaffe依赖包。

二、安装caffe环境

1.安装cmake-3.3.2
正常安装即可。但是要注意,如果你的系统中没有安装curses库(这个库是用来实现控制台gui的),那么安装的cmake不能使用ccmake命令进行gui下的编译设置。如果安装了curses库,那么在生成的bin文件夹下除了cmake还有一个ccmake。可以查看bin文件夹下是否生成ccmake来判断是否安装了curses。楼主安装了ncurses。
如果你安装了curses,那么可以跳过这一段。
下载ncurses-6.0.tat.gz并解压

tar -zxvf ncurses-6.0.tar.gz
cd ncurses-6.0
./configure --prefix=你要安装的目录
make
make install

为了cmake能搜索到ncurses,并且方便别的程序使用这个包,将其include和lib路径分别添加到环境变量,在.bashrc中添加行:

export LD_LIBRARY_PATH=ncurses安装路径/lib:$LD_LIBRARY_PATH
export CPLUS_INCLUDE_PATH=ncurses安装路径/include:$CPLUS_INCLUDE_PATH

记得执行. ~/.bashrc使配置生效。

然后可以安装cmake
下载cmake-3.3.2.tar.gz并解压:

tar -zxvf cmake-3.3.2.tar.gz
cd cmake-3.3.2
./bootstrap
make
make install

安装好cmake后,将bin文件夹所在的路径添加进环境变量。
用vi编辑.bashrc文件

vi ${HOME}/.bashrc

或者

vi ~/.bashrc

在里面添加行

export PATH=你的cmake安装绝对路径/bin:${PATH}

编辑好后退出,并执行

. ~/.bashrc

使配置生效。

2.安装python2.7.11
建议安装python2.7。楼主先使用3.6.5版本安装pycaffe,在import caffe时出现了如下错误:
Linux(RedHat)上离线安装cmake3.3.2+Caffe-SSD+Opencv2.4.10+Python2.7.11+CUDA9.0+cudnn7.0.5过程记录_第1张图片
其中的"dynamic module"即是 ._caffe.so文件,该文件是编译pycaffe时生成的,和编译时指定的python版本相关。所以如果你使用python3.6.x编译pycaffe,即使编译不报错,也未必就安装成功了。你要在python解释器里运行import caffe试一下,如果不报错则没关系,否则你需要用python2.7.x来编译pycaffe。以下过程基于python2.7.11
下载Python2.7.11.tgz并解压:

tar -xvf Python2.7.11.tgz
cd Python2.7.11
#安装动态链接版本的python
./configure --prefix=你要安装python的目录 --enable-shared
make
make install

因为生成的是动态链接库,所以要把lib目录加入LD_LIBRARY_PATH环境变量,以便caffe搜索到。方法参考上述。
同时把python解释器所在路径加入环境变量:

export python=你的python安装目录/bin/python2.7

这样当你在命令行输入python时指向的解释器就是你刚刚安装的python版本。这很重要!!!如果你还安装着其他版本的python,那么建议你区别两者的名字,避免冲突。
至此,python安装完成。
注意:python2.7.x不会自动安装pip,如果需要pip,请手动安装。

三、安装caffe环境
以下除了cmake之外,都是caffe在编译时需要依赖的包。caffe编译时要在其Makefile.config文件中指定这些包的include和lib路径,为了方便,建议将所有依赖安装在同一个文件夹下,这样只要指定这个文件夹路径就行了。比如楼主新建了一个caffe_depend文件夹,所以依赖都放在这个目录的include或lib子目录下。
另外,caffe编译后,对有些依赖包是动态链接的,也就是说caffe执行时需要搜索这些包的库文件。所以需要把依赖包的库目录加入 LD_LIBRARY_PATH环境变量。在.bashrc文件中加入行(如果不知道怎么使用.bashrc,请看下面“安装cmake-3.3.2”):

export LD_LIBRARY_PATH=你的依赖包安装目录/lib:$LD_LIBRARY_PATH

1.安装ProtoBuffer
下载protobuf-2.5.0.tar.gz并解压

tar -zxvf protobuf-2.5.0.tar.gz
cd protobuf.2.5.0
#共同文件夹就是上述公共依赖包安装路径
./configure --prefix=共同文件夹/
make
make install

2.安装Boost
下载boost_1_56_0.tar.bz2并解压:

tar jxvf boost_1_56_0.tar.bz2
cd boost_1_56_0/

编译之前需要指定关联的python版本和需要生成哪些库。这需要在编译脚本中指定参数,执行以下脚本

./bootstrap.sh --with-libraries=system,thread,python --with-python=你的python目录/bin/python2.7 --with-python-root=你的python目录 --with-python-version=2.7

其中第一个参数指定需要生成system/thread/python的boost库,后三个参数分别是指定python执行程序的位置、python根目录位置和python版本。
如果没有问题,执行

. ./b2

执行完,在stage/lib文件夹下生成了库文件。将include和lib拷贝到依赖包共同文件夹

cp -r boost 共同文件夹/include/
cp stage/lib/* 共同文件夹/lib/

3.安装GFLAGS
这里要用cmake编译。下载gflags-2.1.1.zip并解压:

unzip gflags-2.1.1.zip
cd gflags-2.1.1
mkdir build; cd build
cmake ..
ccmake ..

这里会弹出ccmake配置界面。如果执行ccmake …命令提示找不到ccmake命令,那就是安装cmake时没有安装ccmake,需要先安装curses库,具体请看1.安装cmake-3.3.2
将两处修改为以下:

BUILD_SHARED_LIBS                ON
CMAKE_INSTALL_PREFIX         共同文件夹路径

修改完成后,先按C键,再按G键,生成Makefile

make
make install

4.安装GLOG
参考2.安装protobuff

5.安装BLAS
根据自己的CPU型号可以选择OpenBlas、Atlas、Intel MKL中的任意一种,只要能支持自己的CPU就行。
(1).如何查看CPU型号:

cat /proc/cpuinfo | grep name

执行完后这是楼主的cpu型号
Linux(RedHat)上离线安装cmake3.3.2+Caffe-SSD+Opencv2.4.10+Python2.7.11+CUDA9.0+cudnn7.0.5过程记录_第2张图片
(2).OpenBlas支持的CPU类型
下载OpenBlas解压,在解压文件夹下找到TargetList.txt,里面罗列了所有的CPU信息。
用vi打开后如下:
Linux(RedHat)上离线安装cmake3.3.2+Caffe-SSD+Opencv2.4.10+Python2.7.11+CUDA9.0+cudnn7.0.5过程记录_第3张图片
或者可以直接尝试安装,如果不报错,说明正常。
(4).Intel MKL
由于OpenBlas不支持Intel Xeon®的CPU,楼主只能选择安装Intel MKL。在Intel MKL的官网可以看到安装需要的配置要求:https://software.intel.com/en-us/mkl/choose-download/linux
打开如下:
Linux(RedHat)上离线安装cmake3.3.2+Caffe-SSD+Opencv2.4.10+Python2.7.11+CUDA9.0+cudnn7.0.5过程记录_第4张图片
需要的依赖是MPI,选择安装其中任意一种即可。楼主安装的是OpenMPI。
安装Intel MKL的步骤:
1.从官网下载源码包。需要你先注册一个Intel账号,然后可以免费使用MKL。解压至某个文件夹。
2.进入解压后的文件夹,找到 install.sh,执行该脚本将进入安装设置页面。

. ./install.sh

Linux(RedHat)上离线安装cmake3.3.2+Caffe-SSD+Opencv2.4.10+Python2.7.11+CUDA9.0+cudnn7.0.5过程记录_第5张图片
程序有默认安装路径,但是我们希望自定义路径,所以输入3,然后按回车进入自定义设置页面。
Linux(RedHat)上离线安装cmake3.3.2+Caffe-SSD+Opencv2.4.10+Python2.7.11+CUDA9.0+cudnn7.0.5过程记录_第6张图片
这是条款页面。。一直按空格键拉到最后,输入accept,表示接受条款,回车。
Linux(RedHat)上离线安装cmake3.3.2+Caffe-SSD+Opencv2.4.10+Python2.7.11+CUDA9.0+cudnn7.0.5过程记录_第7张图片
选择2,自定义,回车。
Linux(RedHat)上离线安装cmake3.3.2+Caffe-SSD+Opencv2.4.10+Python2.7.11+CUDA9.0+cudnn7.0.5过程记录_第8张图片
这里选择默认,回车进入下一页。
Linux(RedHat)上离线安装cmake3.3.2+Caffe-SSD+Opencv2.4.10+Python2.7.11+CUDA9.0+cudnn7.0.5过程记录_第9张图片
这里就是我们要修改安装路径的地方,改成自己想要安装的目录即可,输入2,修改路径。
其余按照提示一步步安装即可。
(5)Atlas
不了解

6.安装HDF5
参考protobuf

7.安装OpenCV
编译OpenCV用到了cmake。需要注意的是,楼主用gcc4.8.5编译opencv3.3.2时报了未定义名字的错误,改用2.4.10则没问题。
下载opencv-2.4.10.zip并解压:

unzip opencv-2.4.10.zip
cd opencv-2.4.10
mkdir build
cd build
cmake ..
ccmake ..

caffe对opencv的使用仅限其cpu模块,所以编译时直接禁用CUDA。将WITH_CUDA设为off。
按C,再按G生成Makefile

make
make install

8.安装LMDB和LevelDB
下载LMDB源码。无需配置,直接编译:

make

编译成功后,将lmdb.h和libimdb.so分别拷贝到共同目录的include和lib文件夹下
下载leveldb-1.7.zip,解压:

unzip leveldb-1.7.zip
cd leveldb-1.7
cp -r include/leveldb 共同文件夹/include
cp libleveldb.so* 共同文件夹/lib

9.安装Snappy
参考protobuf

三、安装CUDA9.0和cudnn7.0.5

如果不需要GPU支持,可以跳过这一部分。
CUDA的安装本文不赘述,请参考网上教程。楼主的CUDA版本是9.0,cudnn7.0.5。cudnn可以在nvidia官网下载,是预编译好的,解压后就能用。要说明的是,网上有些教程要求把cudnn的lib和include加入相应的cuda目录中,其实没必要这样,而且这可能造成版本混乱。实际上只要将cudnn的include和lib目录分别加入CPLUS_INCLUDE_PATH和LD_LIBRARY_PATH环境变量即可。这样的好处是随时可以关联别的cudnn版本,清理简单。

四、安装caffe

至此,caffe的基本环境依赖已经配置好。对于cpu-only的caffe,此时已经可以编译了;如果要支持GPU加速,则需要安装CUDA和cudnn。根据不同的要求,修改Makefile.config文件即可。该文件只需要将Makefile.config.example文件去掉.example后缀即可,建议先备份。
(1)CPU或GPU选项
对于cpu-only,打开Makefile.config,搜索CPU_ONLY,将注释去掉即可:
在这里插入图片描述
不加修改则默认编译成GPU版本。
如果你要求生成GPU版本,并且配置好了CUDA和cudnn,你需要:
找到CUDA_DIR
在这里插入图片描述
检查这个路径和你安装的cuda路径是否一样,如果不一样,则修改成你的安装目录

如果你的cuda版本>=9.0,你需要找到CUDA_ARCH
在这里插入图片描述
将compute_2x,code=sm_2x的行删掉。原因是cuda9.0不再支持这些版本。
(2)BLAS选项
找到BLAS:
Linux(RedHat)上离线安装cmake3.3.2+Caffe-SSD+Opencv2.4.10+Python2.7.11+CUDA9.0+cudnn7.0.5过程记录_第10张图片
根据自己安装的blas版本选择合适的设置
(3)添加依赖包include/lib路径
编译caffe前要根据自己的依赖包安装路径、pycaffe关联的python版本等修改caffe根目录下的Makefile.config文件。
找到INCLUDE_DIRS和LIBRARY_DIRS
Linux(RedHat)上离线安装cmake3.3.2+Caffe-SSD+Opencv2.4.10+Python2.7.11+CUDA9.0+cudnn7.0.5过程记录_第11张图片
在等号后面分别添加上依赖包共同文件夹的目录(inlcude、lib),注意不同路径之间要空一格。
如果你有任何一个依赖包没有放在共同文件夹中,那就需要在这里手动添加。比如楼主的Intel MKL就是。
(4)pycaffe相关:设置关联python版本、路径等
Linux(RedHat)上离线安装cmake3.3.2+Caffe-SSD+Opencv2.4.10+Python2.7.11+CUDA9.0+cudnn7.0.5过程记录_第12张图片
修改成上述,把我的python安装目录改成你自己的。

完成上述的设置之后,保存并退出Makefile.config
然后执行:

#编译caffe
make -j
#编译pycaffe
make py 
make test -j
make runtest -j

如果runtest所有测试通过,那么原则上caffe已经可以用了。
但是对于重新安装的python,如果打开解释器import cafffe会报缺少模块错误。所以需要根据提示安装缺少的第三方包才行。

五、安装pycaffe依赖包
需要说明的是,楼主是离线安装的依赖包,所以需要事先下载好,再手动安装,如果你可以联网,那么会方便很多。
联网情况下,你只需要先安装好pip和setuptools,将pip加入环境变量,然后通过pip安装缺少的包即可。如果你也是离线安装,楼主会列出所有可能需要的依赖包。你也可以根据import caffe时的提示,找到自己缺少的包。手动安装时,对于whl文件和压缩包文件的安装方法如下:
1.whl文件
进入文件所在文件夹执行:

pip install 文件名

2.压缩包文件
解压文件,进入解压后的文件夹,执行:

python setup.py install

下面列出安装的python第三方包:
Linux(RedHat)上离线安装cmake3.3.2+Caffe-SSD+Opencv2.4.10+Python2.7.11+CUDA9.0+cudnn7.0.5过程记录_第13张图片

最后打开python测试:
在这里插入图片描述
配置成功!

六、SSD实测
在执行create_list.sh等脚本时,你可能遇到格式错误。此时,将文件格式从dos改成unix即可。
在vi命令模式下,输入:

:set ff=unix

按回车,然后保存退出,再次执行就没问题了。

参考内容:
《深度学习21天实战caffe》,作者 赵永科
https://www.cnblogs.com/Tommy-Yu/p/6144512.html
https://blog.csdn.net/damotiansheng/article/details/40106249
https://www.cnblogs.com/freeweb/p/5788729.html
https://blog.csdn.net/quantum7/article/details/83475300
https://www.cnblogs.com/freeweb/p/9209362.html
https://blog.csdn.net/sinat_35406909/article/details/84198140
https://www.cnblogs.com/chegnshi-coding/p/4457738.html
https://github.com/weiliu89/caffe/tree/ssd
https://github.com/BVLC/caffe/issues/3834

你可能感兴趣的:(caffe,ssd,linux,pycaffe)