您的位置:首页 > Web前端

Caffe相关知识记录

2016-03-31 22:18 260 查看

Caffe相关知识

目录

Caffe相关知识
目录

前言

安装依赖包

相关包说明

安装CUDABLAS

其它依赖

一些坑

前言

今天确定要开始研究CNN,用来做图像识别。以后,就要每天跟深度学习这些东西打交到了。而且,这是工作。嘿嘿。

搜索了一下网上的信息,结合同事的建议,决定先学习一下Caffe。主要原因是:

开源。开源的东西就是好,避免各种可能的法律问题。

C++编写。倒不是说为了快就用它,而是考虑到将来要用到嵌入式里的,不用C++,会带来一些列的性能和兼容问题。

支持的人数众多。作者已经在谷歌就职了,而且在社区有很多的人直至,人多力量大,将来有了bug,也方便定位解决。如果发展得好,只需要百度就行了。

1. 安装依赖包

在Ubuntu上,安装比较简单。http://caffe.berkeleyvision.org/ 提供了很好地在各个系统上的安装说明。当前这个时间的命令如下:

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


2. 相关包说明

这里需要了解的是安装的各个包的相关知识。

protobuf :谷歌的一个高效的数据交换协议,序列化编解码速度超快,序列化后信息冗余度小,传输的效率也极高。故而在一些特定领域很受欢迎。

LevelDB是Google开源的持久化KV单机数据库,具有很高的随机写,顺序读/写性能,但是随机读的性能很一般,也就是说,LevelDB很适合应用在查询较少,而写很多的场景。

Snappy同样是谷歌开源的一个压缩/解压开发包。主要是着重速度快,对压缩比要求放在第二位。

HDF 是一种功能强大 ,广泛运用于科学领域的文件格式。研究它的组织结构特别是HDF5 的组织结构对于处理和管理地理信息系统的海量图形数据和属性数据具有一定的借鉴作用。掌握和运用NCSA提供的API 提取影像数据 ,可以节省时间, 提高程序编写效率。

安装CUDA、BLAS

CUDA是英伟达推出的基于GPU的并行架构计算平台,擅长做数组和矩阵计算。如果只需要CPU模式,这一步可以跳过不装。

我这里也跳过去了,毕竟刚刚开始,还没到这么远。真用到时再说。

BLAS 是向量与矩阵科学运算的库。Basic Linear Algebra Subprograms。搜到了一个网站http://www.netlib.org/blas/ 专门介绍接口使用。有了这个库,我们就可以利用这个库来编写自己的算法,这个很不错。

另外,http://www.tuicool.com/articles/AneUzq 这篇文章,对比了OpenBLAS,Intel MKL和Eigen三者的矩阵乘积性能,Intel的还是最牛,但在核数少时,OpenBLAS足够好。当然,如果用GPU,这个是用不太上的。http://www.openblas.net/ OpenBLAS的优势时开源。

Atlas是BLAS的一个实现,与MKL等并列。需要指出的是,貌似Atlas是apache支持的,性能吗还行,稳定。至于为什么,你懂得。

http://www.netlib.org/lapack/ 提供了更加高级的矩阵计算接口定义。将来有可能会用到,先记录到这里。

这个步骤,先来个atlas用着吧。

其它依赖

sudo apt-get install libgflags-dev libgoogle-glog-dev liblmdb-dev


LMDB,openLDAP项目开发的嵌入式(作为一个库嵌入到宿主程序)存储引擎。Caffe默认的数据集生成格式。

基于文件映射IO(mmap)

基于B+树的key-value接口

基于MVCC(Multi Version Concurrent Control)的事务处理

类bdb(berkeley db)的api

gflags是google的一个开源的处理命令行参数的库,使用c++开发,具备python接口,可以替代getopt。gflags使用起来比getopt方便,但是不支持参数的简写(例如getopt支持–list缩写成-l,gflags不支持)。

一些坑

ake all的时候,抛出:

./include/caffe/data_layers.hpp:9:18: fatal error: hdf5.h: Aucun fichier ou dossier de ce type

#include “hdf5.h”

后在Makefile.config中,增加“/usr/include/hdf5/serial/”,通过。增加后如下所示:

×× Whatever else you find you need goes here.
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/hdf5/serial /usr/include/hdf5/serial 再次添加到 LIBRARY_DIRS 处,

终于编译完成。

其中x86_64目录是自己搜索出来的包含hdf5的lib的路径。需要先clean掉再遍才能过。

=====================================================================================

抛出:

/usr/bin/ld: cannot find -lhdf5_hl

/usr/bin/ld: cannot find -lhdf5

collect2: error: ld returned 1 exit status

Makefile:563: recipe for target ‘.build_release/lib/libcaffe.so.1.0.0-rc3’ failed

===================================================================================

下载数据库,验证是否装好了:

在检验数据,创建标准库的过程中,需要执行example的一些脚本。

在最近的版本中,需要从CAFFE_ROOT下开始执行,否则会抛出如下错误:

/create_mnist.sh: build/examples/mnist/convert_mnist_data.bin: not found
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: