caffe源码剖析(一)--整体目录结构

来源:互联网 发布:手机编写c语言的软件 编辑:程序博客网 时间:2024/04/30 21:37

从今天开始,我们来细致的分析一下caffe的源代码。(此系列仅分析caffe原始版本,对于caffe2不涉及,并且只分析各类实现的cpu版,对于gpu实现笔者精力和能力有限,暂不作分析)

分析源码之前,我们需要对caffe的代码结构有一定的了解,只有充分了解了源码的组织层次,我们才能有的放矢的阅读我们需要研究的部分。笔者之前也尝试过阅读caffe源码,但是那时候对于目录结构不甚了解,读起来犹如无头苍蝇,效果十分不好。直到最近先把代码的结构层次弄清楚了以后读起来才比较顺利,因此我先给大家详细的介绍一下caffe的代码结构。

1.整体结构

caffe的整体结构如下图所示

其中最重要的三个文件夹:include(各类头文件的存放,即.hpp部分),src(头文件对应的实现,即.cpp及.cu部分),tools(caffe提供的工具文件)。其中include文件下的目录组织和src下的目录组织基本一致。我们下面仅分析include部分以及tools部分

2.include文件夹

include文件夹下的目录组织如下图所示

layer文件夹下存放了各种layer的头文件,其中包括我们熟悉的ConvolutionLayer(卷积层),InnerProductLayer(全连接层),PoolingLayer(池化层)等一系列基本的层结构,这些层是layer.hpp中定义的类Layer的子类

test文件夹是和测试相关,不在我们的分析范围之内

util文件夹下是一些计算和训练时需要用到的工具,具体结构如下图所示

其中包括了IO处理相关(io.hpp),数据库相关(db.hpp,db_leveldb.hpp,db_lmdb.hpp),图像变换相关(im2col.hpp,此文件的内容相当重要,它实现的主要功能是将图片的卷积运算转化成矩阵运算),数学函数相关(math_functions.hpp,这个文件的内容组成了caffe数学计算的核心部分,包括矩阵,向量的各类运算,caffe处理数学运算的主要思路是借助第三方库,在第三方库的基础上进一步封装)

与这几个子目录独立的还有一系列.hpp文件,其中blob.hpp,layer.hpp,net.hpp这三个文件是caffe的三大基本组件,分别对应神经网络模型中的数据模型、层模型以及网络模型,三者呈现出逐级包含的关系

3.tools文件夹

tools文件夹的文件组织如下图所示

extra文件夹下大多为Python相关,这里暂且不理会

在tools文件夹下定义了caffe的一些工具,诸如生成数据库文件(convert_imageset.cpp),计算生成均值文件(compute_image_mean.cpp),训练和测试网络(train_net.cpp和test_net.cpp)

4.总结

caffe的总体源码组织形式就是这样,下一次我们将从blob.hpp和blob.cpp开始探索caffe的源码



0 0
原创粉丝点击