1、Boost库
Boost库是一个可移植、提供源代码的C++库,作为标准库的后备,是C++标准化进程的开发引擎之一,Boost库由C++标准委员会库工作组成员发起,其中有些内容有望成为下一代C++标准库内容,它在C++社区中影响甚大,是不折不扣的“准”标准库。Boost由于其对跨平台的强调,与编译平台无关。Caffe采用C++作为主开发语言,其中大量的代码依赖于Boost库。
2、CFlags库
CFlags库是Google的一个开源的处理命令行参数的库,使用C++开发,可以替代getopt函数。CFlags与getopt函数不同,在CFlags中,标记的定义分散在代码中,不需要列举在一个地方。Caffe采用CFlags库开发Caffe的命令行。
3、GLog库
GLog是一个应用程序的日志库,提供基于C++风格的流日志API,以及各种辅助的宏。它的使用方式与C++的stream操作类似。Caffe运行时的日志输出依赖于GLog库。
4、LevelDB库
LevelDB是Google实现的一个非常高效的Key-Value数据库。它是单进程的服务,性能非常高。它是一个C/C++编程语言的库。Caffe支持两种语言库,其中之一为LevelDB。
5、LMDB库
它是一个超级快、超级小的Key-Value数据存储服务,是由OpenLDAP项目的Symas开发的。使用内存映射文件,因此读取数据的性能跟内存数据库一样,其大小受限于虚拟地址空间的大小。Caffe支持两种数据库,其中之一为LMDB。
6、Protobuf库
Google Protocol Buffer(简称Protobuf)是一种轻便高效的结构化数据存储格式,可以用于结构化数据的串行化,或者说序列化。它和适合做数据存储或RPC数据交换格式。可以用于通信协议、数据存储等领域的语言无关、平台无关、可扩展的序列化结构数据格式。
要使用Protobuf库,首先需要自己编写一个.proto文件,定义程序中需要处理的结构化数据,在Protobuf中,结构化数据被称为Message。在一个.proto文件中可以定义多个消息类型。用Protobuf编译器(protoc.exe)将.proto文件编译成目标语言,会生成对应的.h文件和.cc文件,.proto文件中的每一个消息有一个对应的类。
Caffe使用起来非常简洁,很大程度上是由于Caffe采用.proto文件作为用户的输入接口。用户通过编写.proto文件定义网络模型和Solver.
7、HDF5库
HDF(Hierarchical Data File)是美国国家高级计算应用中心(NCSA)为了满足各种领域研究的需求而研制的一种能高效存储和分发科学数据的新型数据格式。它可以存储不同类型的图像和数码数据的文件格式,并且可以在不同类型的机器上传输,同时还有统一处理这种文件格式的函数库。Caffe支持HDF5格式。
8、snappy库
它是一个C++库,用来压缩和解压缩的开发包。它旨在提供高速压缩速度和合理的压缩率。snappy比zlib更快,但文件相对要大20%到100%。Caffe在数据处理时依赖于snappy库。
参考:《深度学习——caffe之经典模型详解与实战》