Caffe依赖包解析

1、ProtoBuffer : 从.prototxt文件读取到内存

【.proto记录了模型训练所需要的超参数(eg:solver.prototxt)】

caffe中把它当做权值和模型的载体(类似于txt、bin、图形化等);

统一的参数方案都建立在这个参数描述文件.proto中,用.protoc编译即可,便于模块集成;

跨语言(c++、java、python)

安装路径不是系统默认路径,安装到本地便于迁移;

查看build/src/caffe/proto/

caffe.pb.h和caffe.pb.cc是用于解析Caffe参数配置文件,将模型权值序列化和反序列化到磁盘的协议接口。

2、Boost

查看http://www/boost/org/

Caffe主要使用Boost中的智能指针,自带计数功能,避免共享指针造成内存泄漏或多次释放;

pycaffe使用Boost python实现c/c++和python语言的连接,方便Python调用c/c++设计模块;

不再是典型的configure、make、make install上不去,生成的库需要手动复制到安装目录下;

3、GFLAGS : 命令行参数解析作用

查看:caffe源码tools/caffe.cpp

主要起到命令行参数解析作用,与protobuffer功能类似,只是参数的输入源不同;

4、GLOG : 记录应用程序日志的库

查看:caffe源码tools/caffe.cpp

主要用于记录应用程序日志的库,可以分日志级别;

便于源码跟踪、定位问题;

5、BLAS(basic linear Algegra subprograms基于线性代数子程序):数学计算

查看:Makefile.config

主要用于数学计算,比如:矩阵、向量计算等

常用:Intel MKL(mkl)、ATLAS(atlas)、OpenBLAS(open)【主要负责cpu端数值计算】...

 cuBLAS : gpu端计算;

补充函数:查看 :include/caffe/util/math_functions.hpp

gemm:基本矩阵-矩阵乘积运算;eg:C=alpha*op(A)*op(B)+beta*(C)

gemv : 基本矩阵-向量乘积运算;eg : y = alpha*op(A)*x+beta*y 


6、HDF5 : 数据类型

查看源码:hdf5.hpp、hdf5.cpp

高效存储和分发数据类型的新型数据格式,存储不同类型的图像和数码数据的文件,并可以再不同类型机器上传输,有统一处理该文件格式的函数库;

caffe训练模型可以保存为HDF5或者ProtoBuffer;

7、opencv : 计算机视觉库,包含图像处理函数

查看:io.hpp 、io.cpp

开源计算机视觉库,caffe利用到的opencv模块有限,仅限于图片读取、图片缩放等CPU上的模块。

8、LMDB(最新) & LEVELDB(基本被LMDB取代) : 数据库管理器,主要提供数据管理,{key:calue}

查看:caffe源码db_lmdb.hpp、db_lmdb.cpp、db_levelmdb.hpp|db_levelmdb.cpp

闪电般的内存映射型数据库管理器,在caffe中主要提供数据管理,将各种原始数据(JPEG图片、二进制数据等)转换为统一的Key-Value存储,便于caffe的DataLayer获取这些数据;

9、snappy:

用来压缩和解压缩的c++库,提供较高的压缩速度和压缩率,比zlib块,比zlib文件大;


  

深度学习21天实战caffe学习笔记《4 : Caffe依赖包解析》_caffe源码