caffe的文件夹目录结构

caffe--2--一文详细了解caffe的文件夹目录结构

这里,最重要的三个文件夹就是include, tools, src。

include:caffe的实现代码的头文件

tools:保存的源码是用于生成二进制处理程序的,caffe在训练时实际是直接调用这些二进制文件。

src:实现Caffe的源文件

在源码解读中会对里面的文件代码一一介绍,这里给出src文件的结构:

caffe--2--一文详细了解caffe的文件夹目录结构

src中的每个.cpp文件对应include文件中的头文件。

在caffe教程中,介绍了caffe的三级结构(http://caffe.berkeleyvision.org/tutorial/net_layer_blob.html ):Blobs, Layers,Nets.如下图所示:(更多内容可以看caffe的官网:http://caffe.berkeleyvision.org/tutorial/) 

caffe--2--一文详细了解caffe的文件夹目录结构

在编译完成后,会生成build文件夹。这个文件的目标文件指向一个debug或者release文件夹。这里建议用debug编译,这样在调试代码时可以跟到caffe的内部。只要在Makefile.config中改一下就好。

我做的图如下:

caffe--2--一文详细了解caffe的文件夹目录结构

 

blob类(blob.hpp和blob.cpp)源码解析:blob类源码解析

syncedmem类(syncedmem.hpp和syncedmem.cpp)源码解析:syncedmem类源码解析

 

在src/caffe/layers文件夹下存在如下函数——

Relu_layer.cpp 源码解析:Relu层源码解析

Dropout_layer.cpp源码解析:dropout层源码解析

Solver.cpp源码解析:solver源码解析

Conv_layer.cpp和Base_conv_layer.cpp源码解析:conv卷积层源码解析

Data_layer.cpp和Base_Data_layer.cpp源码解析:Data数据层源码解析

Pooling_layer.cpp和其hpp文件源码解析:Pooling池化层源码解析

 

其他:

caffe源码依赖的一些库解析:levelDB、LMDB、ProtoBuf、HDF、GFlags、GLog、CUDA、Blas、BOOST、
boost::thread、boost::mutex、boost::posix_time、boost::python、boost::split、boost::shared_ptr
以上依赖库源码解析

 

Caffe是用C++编写的深度学习框架,大量使用类的封装,继承,多态

Caffe根目录下执行tree命令查看caffe目录结构

$ cd /home/name/Documents/caffe-master

$ tree -d

.
├── build -> .build_release  //编译结果存放处,.build_release不是一个目录找不到
├── cmake             //cmake编译用
│   ├── External
│   ├── Modules
│   └── Templates
├── data               //存放原始数据以及数据获取脚本
│   ├── cifar10      //存放cifar10小图片原始数据
│   ├── ilsvrc12    //存放ImageNet Meta数据,原始数据要另外下载
│   ├── mnist      //存放MNIST手写数字图像数据
│   └── myself    //存放我的数据,自己建立的
├── distribute     //编译后生成发布包的位置,用于迁移
│   ├── bin
│   └── lib
├── docker        //用于迁移的工具
│   ├── standalone
│   │   ├── cpu
│   │   └── gpu
│   └── templates
├── docs        //doxygen工程文件放这里,可生成Caffe ref_man.pdf
│   ├── images
│   ├── _layouts
│   ├── stylesheets
│   └── tutorial
│       └── fig
├── examples     //存放Caffe简单例程
│   ├── cifar10   //存放cifar10例程 
│   ├── cpp_classification   //图像分类例程
│   ├── feature_extraction  //特征提取例程
│   ├── finetune_flickr_style   //finetune例程
│   ├── finetune_pascal_detection  //finetune例程
│   ├── hdf5_classification     //使用HDF5的分类例程
│   ├── imagenet           //Imagenet例程,使用bvlc_reference_caffenet
│   ├── images      
│   ├── mnist     //mnist手写字符识别例程
│   │   ├── mnist_test_lmdb
│   │   └── mnist_train_lmdb
│   ├── myself
│   │   ├── ilsvrc12_train_lmdb
│   │   └── ilsvrc12_val_lmdb
│   ├── net_surgery
│   ├── pycaffe
│   │   └── layers
│   ├── siamese
│   ├── _temp
│   │   └── features
│   └── web_demo   //一个Web Server +分类例程
│       └── templates
├── include            //Caffe头文件集中存放目录
│   └── caffe
│       ├── layers
│       ├── test
│       └── util
├── matlab      //Matlab做Wrapper,具体参考RCNN源码
│   ├── +caffe
│   │   ├── imagenet
│   │   ├── private
│   │   └── +test
│   ├── demo
│   └── hdf5creation
├── models   //存放示例模型
│   ├── bvlc_alexnet   //Alexnet模型
│   ├── bvlc_googlenet  //GoogleNet
│   ├── bvlc_reference_caffenet  //caffe模拟的Alexnet模型
│   ├── bvlc_reference_rcnn_ilsvrc13 //Rcnn模型
│   └── finetune_flickr_style
├── python               //用于Python wrapper
│   └── caffe
│       ├── imagenet
│       ├── proto
│       └── test
├── scripts     //一些文档和数据用到的脚本
│   └── travis
├── src          //caffe源码
│   ├── caffe   
│   │   ├── layers  //各个层具体实现
│   │   ├── proto   //即所谓的“Protobuf”,帮助caffe提速描述文集,学习数据结果先从这里开始
│   │   ├── solvers //优化方法类Solver
│   │   ├── test
│   │   │   └── test_data
 
│   │   └── util  //数据转换时用的一些代码。caffe速度快,很大程度得益于内存设计上的优化(blob数据结构采用proto)
 
                          //  和对卷积的优化(部分与im2col相关)及cudnn加速
│   └── gtest
└── tools       //常用学习源码
    └── extra

 

参考:

https://blog.csdn.net/ture_dream/article/details/53348301

https://blog.csdn.net/c20081052/article/details/80585888