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文件大;