Caffe代码梳理笔记

1. caffe目录结构

在caffe根目录下执行tree命令可以查看caffe目录结构:

root@cl-Lenovo-G480:/home/cl/caffe# tree -d
.
├── build -> .build_release     //编译结果存放处,子目录结构与主目录类似

├── cmake                            //使用Cmake编译时会用到,不关注
│   ├── External     
│   ├── Modules
│   └── Templates
├── data                               //用于存放原始数据及数据获取脚本
│   ├── cifar10                      //存放CIFAR10小图片原始数据
│   ├── ilsvrc12                     //存放ImageNet Meta数据,原始数据需要下载
│   └── mnist                        //存放MNIST手写体数字数据
├── distribute                       //编译后生成发布包的位置,用于迁移
│   ├── bin
│   └── lib
├── docker                        //同样是为了便于迁移,使用了Docker工具
│   ├── standalone
│   │   ├── cpu
│   │   └── gpu
│   └── templates
├── docs                          //doxygen工程文件放在这里,可生成caffe ref_man.pdf
│   ├── images
│   ├── _layouts
│   ├── stylesheets
│   └── tutorial
│       └── fig
├── examples              //存放简单例程
│   ├── cifar10            //CIFAR10例程
│   │   ├── cifar10_test_lmdb      
│   │   └── cifar10_train_lmdb
│   ├── 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
│   ├── net_surgery
│   ├── pycaffe
│   │   └── layers
│   ├── siamese
│   └── web_demo
│       └── 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                    //proto描述文件,学习数据结构先从这开始
│   │   ├── solvers
│   │   ├── test
│   │   │   └── test_data
│   │   └── util
│   └── gtest
└── tools                                 //常用工具源码
    └── extra

79 directories

2. 如何有效阅读Caffe代码

1.从src/caffe/proto/caffe.proto开始,了解基本数据结构内存对象和磁盘文件的一一映射关系(ProtoBuffer工具自动完成);

2.看头文件;

3.有针对性的看cpp和cu文件;

4.可以编写各类工具,集成在Caffe内部。

tips:使用Linux grep命令快速追踪某个关键词:

root@cl-Lenovo-G480:/home/cl/caffe# grep -n -H -R "REGISTER_LAYER_CREATOR" *


include/caffe/layer_factory.hpp:34: * REGISTER_LAYER_CREATOR(MyAwesome, GetMyAwesomeLayer)
include/caffe/layer_factory.hpp:127:#define REGISTER_LAYER_CREATOR(type, creator)                                  \
include/caffe/layer_factory.hpp:137:  REGISTER_LAYER_CREATOR(type, Creator_##type##Layer)
src/caffe/layer_factory.cpp:74:REGISTER_LAYER_CREATOR(Convolution, GetConvolutionLayer);
src/caffe/layer_factory.cpp:112:REGISTER_LAYER_CREATOR(Pooling, GetPoolingLayer);
src/caffe/layer_factory.cpp:150:REGISTER_LAYER_CREATOR(LRN, GetLRNLayer);
src/caffe/layer_factory.cpp:174:REGISTER_LAYER_CREATOR(ReLU, GetReLULayer);
src/caffe/layer_factory.cpp:198:REGISTER_LAYER_CREATOR(Sigmoid, GetSigmoidLayer);
src/caffe/layer_factory.cpp:222:REGISTER_LAYER_CREATOR(Softmax, GetSoftmaxLayer);
src/caffe/layer_factory.cpp:246:REGISTER_LAYER_CREATOR(TanH, GetTanHLayer);
src/caffe/layer_factory.cpp:262:REGISTER_LAYER_CREATOR(Python, GetPythonLayer);
命令行参数解释:

-n -显示行号,便于定位

-H -显示文件名,便于定位

-R -递归查找每个子目录,适合工程较大,分多个目录存放的场景

在caffe.hpp中的内容如下:(caffe.hpp中包含了caffe中所有核心头文件)

// caffe.hpp is the header file that you need to include in your code. It wraps
// all the internal caffe header files into one for simpler inclusion.

#ifndef CAFFE_CAFFE_HPP_
#define CAFFE_CAFFE_HPP_

#include "caffe/blob.hpp"
#include "caffe/common.hpp"
#include "caffe/filler.hpp"
#include "caffe/layer.hpp"
#include "caffe/layer_factory.hpp"
#include "caffe/net.hpp"
#include "caffe/parallel.hpp"
#include "caffe/proto/caffe.pb.h"
#include "caffe/solver.hpp"
#include "caffe/solver_factory.hpp"
#include "caffe/util/benchmark.hpp"
#include "caffe/util/io.hpp"
#include "caffe/util/upgrade_proto.hpp"

#endif  // CAFFE_CAFFE_HPP_



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值