因为caffe设计开发的时候遵循的是尽量复用的思路,所以使用了很多开源的库,所以在编译安装的时候需要解决一系列的依赖,本文来介绍一下主要几个依赖库以及安装方法。这里主要介绍的是源码的安装方法,适合对linux系统比较熟悉的同学,这样编译安装一遍利于对这些依赖库有一定的了解,当然也可以使用apt-get命令来安装,比较方便,缺点是版本一般会低一些。
另外,这里首先说一下caffe编译之后的形式,caffe将源码编译为一个库 : libcaffe.so和libcaffe.a库,放置于caffe/build/lib目录下。头文件在caffe/include目录下。另外利用libcaffe库写了几个常用的工具,在caffe/build/tools目录下,包括最常用的caffe.bin。
主要的依赖库有:
-
protobuf: protobuf是谷歌开发的一种可以实现内存与硬盘交换的协议接口,caffe源码中大量使用了protobuf来作为权值和模型参数的载体。protobuf可以跨平台,跨语言来实现信息的传递,并且数据是经过编码压缩过的,占用空间小。caffe的模型就是用protobuf描述语言来编写的。
使用protobuf的一个简单例子:
https://www.cnblogs.com/DswCnblog/p/6700660.html
下面开始编译protobuf库:
1.从github上下载protobuf源码:
因为我们只需要c++版本的,所以只需要下载cpp版本就可以。
https://github.com/protocolbuffers/protobuf/releases/tag/v3.8.0 下载到了tar.gz包
安装guide:
https://github.com/protocolbuffers/protobuf/blob/3.9.x/src/README.md
安装步骤:
tar -xvz -f protobuf-cpp-3.8.0.tar.gz
cd protobuf-3.8.0/
./autogen.sh
./configure
make
make check
sudo make install
sudo ldconfig
基本上按照安装guide里面的步骤。 -
boost库
熟悉c++的同学应该知道boost库,boost库是为了提高c++的开发效率而开发的一个开源库,使用很多c++ 的新技术,一般是 等到boost库中很多技术比较成熟了,就会被c++标准库来收录,像智能指针,并发编程等。c++11之后的modern c++就将智能指针等收录到标准库中。因为caffe开发比较早,没有使用modern c++标准库的一些新feature,而是用到了boost库的智能指针等,所以需要安装boost库
a. 从github来下载源码
b. ./bootstrap.sh --with-libraries=system,thread,python,filesystem 后面的是要编译的模块
c. ./b2
d. sudo cp -r boost/ /usr/local/include/ 没有提供install脚本,所以需要手动将头文件copy到/usr/local/include文件中
e. sudo cp stage/lib/* /usr/local/lib/ 将编译好的库copy到/usr/local/lib文件夹下
也可以利用apt-get工具来安装,更简单,不过版本一般比较低, 命令为:
sudo apt-get install libboost-all-dev
- GFLAGS
主要用于命令行参数的解析。
a.从github来下载源码
b.mkdir build && cd build
c.cmake ../
d. ccmake ..来配置,将BUILD_SHARED_LIBS 打开,修改安装目录
e. make && sudo make install
-
GLOG
用于记录应用程序的日志。
a.从github来获取源码
b. ./autogen.sh
c. ./configure --prefix=/usr/local
d. make && sudo make install -
BLAS
blas是基本线性代数库,我们这里使用开源的openBLAS, 这是在cpu端的计算库,如果在gpu计算,则需要cuBLAS。
a. 从github来获取源码
b. make
c. sudo make PREFIX=/usr/local install -
HDF5
hdf5是美国国家高级计算应用中心研制的一种能高效存储和分发科学数据的新型数据格式。可以存储不同类型的图像和数码数据文件,caffe训练模型可以选择保存为hdf5格式或者protobuf格式,默认为protobuf格式。
a. 从github来获取源码
b. ./configure
c. make -j8 && sudo make install -
LMDB和LEVELDB
这两个是数据管理库,在caffe中将形形色色的原始数据(jpeg,二进制数据)转换为统一的key-value存储,便于caffe的data layer获取这些数据。主要使用lmdb,为了前向兼容,leveldb也需要安装。
lmdb从github下载源码,解压后直接make,然后将lmdb.h和liblmdb.so拷贝到/usr/local/include 和/usr/local/lib目录下就可以了
leveldb:需要用cmake来安装
a.github获取源码
b. mkdir build && cd build
c. cmake -DBUILD_SHARED_LIBS=ON -DCMAKE_BUILD_TYPE=Release …/ && cmake --build .
d. sudo make install -
Snappy
snappy是一个用来压缩和解压的c++库,比zlib快,但压缩出来的文件比zlib的大一些
a. github获取源码
b. mkdir build && cd build 也是用cmake安装
c. vim …/CMakeLists.txt将build_shared_libs 设置为on
d. cmake …/
e. make && sudo make install
最后就可以编译caffe了,
从github下载caffe源码,
a. cd caffe/
b. cp Makefile.config.example Makefile.config
c. vim Makefile.config, 打开CPU_ONLY :=1,如果使用的是opencv3, 还需要打开opencv3选项
d. make -j8就可以编译完成了。