caffe是一个开源的深度学习框架,其实现依赖于许多其他的库,下面将分别介绍caffe所需的依赖库。

(1)OpenCV

OpenCV的全称是Open Source Computer Vision Library,是一个跨平台的计算机视觉库。OpenCV是由intel公司发起并参与开发,以BSD许可授权发行,可以在商业和研究领域中免费使用。OpenCV可用于开发实时的图像处理、计算机视觉以及模式识别程序。

(2)Boost

Boost C++库是一个经过千锤百炼、可移植、提供源代码的C++库,作为标准库的后备,是C++标准化进程的发动机之一。Boost库是由C++标准委员会库工作组成员发起,在C++社区中影响甚大。Boost库为我们带来了最新、最酷、最实用的技术,是不折不扣的“准”标准库。Boost作为一个准标准库,相当于STL的延续和扩充,他的设计理念和STL比价接近,都是利用范型让服用达到最大化。不过相比于STL,Boost更加实用。STL集中在算法部分,而Boost包含来不少工具类,可以完成比较具体的工作。Boost主要包含以下几个大类:字符串及文本处理、容器、迭代器(Iterator)、算法、函数对象和高阶编程、范型编程、模板元编程、预处理元编程、并发编程、数学相关、纠错和测试、数据结构、输入/输出、跨语言支持、内存相关、语法分析、杂项。

(3)CUDA

CUDA(Compute Unified Device Architecture, 统一计算架构)是由NVIDIA所退出的一种集成技术,是NVIDIA推出的运算平台。CUDA是NVIDIA推出的通用并行计算架构,该架构使GPU能够解决复杂的计算问题。它包含来CUDA指令集架构(ISA)以及GPU内部的并行计算引擎。从CUDA体系结构的组成来说,包含了三个部分:开发库、运行期环境和驱动。开发库是基于CUDA技术所提供的应用开发库。运行期环境提供了应用开发接口和运行期组件,包括基本数据类型的定义和各类计算、类型转换、内存管理、设备访问和执行调度等函数。驱动部分基本上可以理解为是CUDA-enable的GPU的设备抽象层,提供硬件设备的抽象访问接口。CUDA提供运行期环境也是通过这一层实现各种功能的。

(4)BLAS

BLAS(Basic Linear Algebra Subprograms,基础线性代数程序集)是一个应用程序接口(API)标准,用以规范发布基础线性代数操作的数值库(如矢量或矩阵乘法)。在高性能计算领域,BLAS被广泛使用。Caffe推荐的BLAS(Basic Linear Algebra Subprograms)有三个选择ATLAS,Intel MKL,OpenBLAS。其中ATLAS是caffe默认选择的,其开源免费,如果没有安装CUA的不太推荐使用,因为对CPU多线程的支持不太好;Intel MKL是商业库收费,学生可申请试用,贾扬清安装的是MKL,估计效果应该是最好的;OpenBLAS开源免费,支持CPU多线程。

(5)LevelDB

LevelDB是一个由Google公司所研发的键/值对(key/value Pair)嵌入式数据库管理系统编程库,以开源的BSD许可证发布,是Caffe支持的数据格式之一。LevelDB有如下一些特点:

首先,LevelDB是一个持久化存储的KV系统,和Redis这种内存型的KV系统不同,LevelDB不会像Redia一样狂吃内存,而是将大部分数据存储到磁盘上。

其次,LevelDB在存储数据时,是根据记录的key值有序存储的,就是说相邻的key值在存储文件中依次顺序存储的,而应用可以自定义key大小比较函数,LevleDB会按照用户定义的比较函数依序存储这些记录。

再次,像大多数KV系统一样,LevelDB的操作接口很简单,基本操作包括写记录,读记录以及删除记录。也支持针对多条操作的原子批量操作。

另外,LevelDB支持数据快照(snapshot)功能,使得读取操作不受写操作影响,可以在读操作过程中始终看到一致的数据。

(6)LMDB

LMDB是一种小型的键值对数据库,具有一些非常优异的特性:

有序的映射接口(键一直是按字典排序的)

读写事务:读不会锁住写,写也不会锁住读

读取数据代价很低

内存映射,允许零拷贝查找和迭代

维护不需要外部进程和后台线程

虽然LMDB的内存消耗LevelDB的1.1倍,但是LMDB的速度比LevelDB快10%至15%,更重要的是LMDB允许多种训练模型同时读取同一组数据集,因此LMDB取代了LevelDB成为Caffe默认的数据集生成格式。

(7)GLog

Google的Glog是一个应用程序的日志库。它提供基于C++风格的流的日志API,以及各种辅助的宏。打印日志只需以流的形式传给LOG(level)。

(8)GFlags

GFlags是Google的一个开源的处理命令行参数,使用C++开发,具备Python接口,可以替代getopt。GFags使用起来比getopt方便,但是不支持参数的简写。

(9)Protobuff

Google Protocol Buffer(简称Protobuf)是Google公司内部的混合语言数据标准,它提供来一种灵活、高校、自动序列化结构数据的机制,但是比XML更小、更快、更简单。仅需要自定义一次你所需要的数据格式,然后用户就可以使用Protobuff编译器自动生成各种语言的源码,方便的读写用户自定义的格式化数据。与语言无关、与平台无关,还可以在不破坏原数据格式的基础上,依据老的数据格式,更新现有的数据格式。他们用于RPC系统和持续数据存储系统。Protobuf是一种轻便高效的结构化数据存储格式,可以用于结构化数据串行化,或者说序列化。它很适合做数据存储或RPC数据交换格式。可用于通讯协议、数据存储等领域的语言无关、平台无关、可扩展的序列化结构数据格式。目前提供了C++、Java、Python三种语言的API。

(10)HDF5

HDF(英语:Hierarchical Data Format)是一种为存储和处理大容量科学数据设计的文件格式及相应库文件。HDF最早由NCSA开发,目前在非盈利组织HDF小组维护下继续发展。当前流行的版本是HDF5。

HDF5文件包含两种基本数据对象:

群组(group):类似文件夹,可以包含多个数据集或下级群组。

数据集:数据内容,可以是多维数组,也可以是更复杂的数据类型。

群组和数据集都支持元数据,用户可以自定义其属性,提供附加信息。HDF现在被众多商业与非商业平台支持,包括Java,MATLAB/Scilab,Octave,IDL,Python和R。

(11)Snappy

Snappy(以前称Zippy)是Google基于LZ77的思路用C++语言编写的快速数据压缩与解压程序库,并在2011年开源。它的目标并非最大压缩率或其他压缩程序库的兼容性,而是非常高的速度和合理的压缩率。LevelDB需要Snappy的支持。

 

参考:https://blog.csdn.net/haoji007/article/details/81669057