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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM