zoukankan      html  css  js  c++  java
  • Caffe学习系列(二)Caffe代码结构梳理,及相关知识点归纳

    前言:

    通过检索论文、书籍、博客,继续学习Caffe,千里之行始于足下,继续努力。将自己学到的一些东西记录下来,方便日后的整理。

    正文:

    1、代码结构梳理

    在终端下运行如下命令,可以查看caffe代码结构,我将其梳理了一下:

    root@ygh:/home/ygh/caffe# tree -d
    .
    ├── build -> .build_release  //编译结果存放处,子目录结构与主目录类似
    ├── cmake                    //使用CMake编译时会用到
    │   ├── External
    │   ├── Modules
    │   └── Templates
    ├── data                   //用于存放原始数据及数据获取的脚本sh文件
    │   ├── cifar10
    │   ├── ilsvrc12
    │   └── mnist
    ├── distribute             //编译后生成发布包的位置,用于迁移
    │   ├── bin
    │   └── lib
    ├── docker                 //同样为了便于迁移,使用了Docker工具
    │   ├── cpu
    │   └── gpu
    ├── docs                   //doxygen工程文件放在这里,可生成Caffe ref_man.pdf
    │   ├── images
    │   ├── _layouts
    │   ├── stylesheets
    │   └── tutorial
    │       ├── fig
    │       └── layers
    ├── 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
    │   ├── net_surgery
    │   ├── pycaffe
    │   │   └── layers
    │   ├── siamese
    │   └── web_demo         //一个Web Server + 分类例程
    │       └── templates
    ├── include               //Caffe头文件集中存放此目录
    │   └── caffe
    │       ├── layers
    │       ├── test
    │       └── util
    ├── Install-OpenCV
    │   ├── ArchLinux
    │   ├── RedHat
    │   └── Ubuntu
    │       ├── 2.3
    │       └── 2.4
    ├── 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模型  https:github.com/rbgirshick/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

     

    2、相关知识点

    训练网络时,需要由数据读取层(DataLayer)不断地从LMDB读取数据,送入后续卷积、下采样等计算层。
    数据读取层声明位于 include/caffe/data_layer.hpp中
    数据变换器(DataTransformer)主要提供了对原始输入图像的预处理方法,包括随机切块、随机镜像、幅度缩放、去均值、灰度/色度变换等。声明头文件位于 include/Caffe/data_transformer.hpp中



    求解器实现:
    Caffe中的求解器有以下几种:
    1、随机梯度下降法(Stochastic Gradient Descent,SGD),最常用
    2、AdaDelta
    3、自适应梯度法(Adaptive Gradient,ADAGRAD)
    4、Adam
    5、Nesterov加速梯度法(Nesterov's Accelerated Gradient,NAG)
    6、RMSprop

    solver.prototxt中格式
    base_lr:0.01          //基准学习速率为0.01,另外每个Layer会在基准上进行细调
    lr_policy:"step"      //学习速率衰减策略,step为步进方式,即每进行step次迭代,学习速率更新一次
    gamma:0.1            //学习速率衰减常数,每次更新学习速率都是乘上这个固定常数
    stepsize:100000      //每10万次迭代,对学习速率进行一次更新
    max_iter:350000    //训练总共需要35万次迭代
    momentum:0.9      //遗忘因子为0.9

  • 相关阅读:
    Monkey界面版测试工具
    手游兼容性测试
    周版本制度
    08 | 事务到底是隔离的还是不隔离的?
    jackson
    localDateTime和Date
    服务器被攻击后数据库密码被破解
    GC收集器
    linux安装nginx,设置代理,负载均衡
    微信(公众,商户,开放)平台的区别
  • 原文地址:https://www.cnblogs.com/ygh1229/p/6541266.html
Copyright © 2011-2022 走看看