前言:
通過檢索論文、書籍、博客,繼續學習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