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的源码
- caffe源码剖析(一)--整体目录结构
- spring源码剖析(一)整体 框架
- jdk源码剖析一:OpenJDK-Hotspot源码包目录结构
- Mybatis源码分析一(SqlsessionFactory及源码整体结构)
- (Caffe)目录结构
- Reids源码分析(一)——整体结构分析
- Launcher3 源码分析(一) 整体结构及核心类
- Spring源码阅读(一)——整体结构
- [Caffe源码解析]1.整体结构&附带番外
- Android源码目录结构详解(一)
- caffe目录结构 及 caffe源码文件说明
- caffe 12 caffe源码 windows分支目录结构
- Caffe源码解读(一):代码组织结构
- Redis源码剖析和注释(一)---链表结构
- Android平台整体结构剖析
- jquery源码--整体结构
- android 源码学习(一) 源码目录结构
- caffe源码剖析(二)--SyncedMemory解析
- CSS样式排版
- 关于unity build后的unity_builtin_extra很大的问题
- 微信小程序之绑定点击事件
- css禁止选中文本
- js 定时器
- caffe源码剖析(一)--整体目录结构
- 有序数组的二分查找
- 关于框架的一些问题
- Java基础回顾
- maven环境搭建
- 二叉树的最小深度
- hdu2045
- 高精度加法
- 机器学习&数据挖掘笔记(常见面试之机器学习算法思想简单梳理)