【Caffe實踐】如何利用Caffe訓練ImageNet分類網絡
來自: http://blog.csdn.net//chenriwei2/article/details/38735891
源文章:https://github.com/BVLC/caffe/tree/master/examples/imagenet
由于要使用Caffe進行深度學習的二次開發,所以找到上面這個如何訓練網絡的一些操作過程,不是每一句都翻譯過來,但是終究不是原創,權當做自己的學習筆記。
==========================================
1.下載好來自ImageNet的training和validation數據集合;分別存放在如下的格式:
/path/to/imagenet/train/n01440764/n01440764_10026.JPEG
/path/to/imagenet/val/ILSVRC2012_val_00000001.JPEG
2. 進行一些預處理操作:
cd $CAFFE_ROOT/data/ilsvrc12/
./get_ilsvrc_aux.sh
3.訓練數據和測試數據分別放在train.txt和val.txt中,里面有他們的文件和相對應的標簽;
4. 最后作者把1000類的類名用0--999表示,他們相對應的類別名稱則用synset_words.txt 來存儲他們之間的映射。
5.作者提到怎么去是否應該先把圖像都歸一化到256*256中,作者提到用Mapreduce去加快這種過程;
也可以直接這么做:
for name in /path/to/imagenet/val/*.JPEG; do
convert -resize 256x256\! $name $name
Done
6.在 create_imagenet.sh中設置訓練的參數,并在里面指定訓練和測試的數據庫路徑,如果圖像沒有提前歸一化到相同的大小,則需要加”RESIZE=true“,設置”GLOG_logtostderr=1 “表示了可以參考更多的信息,
在執行 ./create_imagenet.sh 之后會有新的數據文件生成:
ilsvrc12_train_leveldb 和 ilsvrc12_val_leveldb
7. 因為模型需要我們減去圖像的均值,所以我們需要計算圖像均值,在工具
tools/compute_image_mean.cpp 實現了這種操作,
或者可以直接用:
./make_imagenet_mean.sh 腳本來進行計算圖像均值,并生成:
data/ilsvrc12/imagenet_mean.binaryproto 文件
8.定義網絡的結構:imagenet_train_val.prototxt .
里面有兩行指定了數據庫和圖像的路徑
source: "ilvsrc12_train_leveldb"
mean_file:"../../data/ilsvrc12/imagenet_mean.binaryproto"
并且指定了 include { phase: TRAIN } or include { phase: TEST } .來區分訓練和測試
9.關于輸入層的不同:
訓練數據中,,data項來自 ilsvrc12_train_leveldb 并且進行了隨機鏡像操作,測試數據中data項來自于ilsvrc12_val_leveldb 而沒有進行隨機鏡像操作;
10.輸出層的不同:
輸出層都為 softmax_loss 層,在訓練網絡當中,用來計算損失函數,并且用來初始化BP過程,測試網絡同樣有一個第二個輸出層,accuracy,它用來報告測試的精度,在訓練的過程中,測試網絡將實例化并且測試準確率,產成的命令行為:Test score #0: xxx and Test score #1: xxx 等。
11.運行網絡,其中設置
每批batch為256個,運行450000次迭代,接近90次epoch;
每1000次迭代,就在用測試集進行測試;
設置初始的學習率為0.01,并且每100000次迭代中進行學習率下降,大概進行20次epoch;
每20次epoch就顯示出一些數據信息;
網絡訓練的動量為0.9,權重衰減因子為0.0005,
每10000次迭代中,就生成當前狀態的快照;
這些設置在 examples/imagenet/imagenet_solver.prototxt .中進行設置,并且同樣我們需要指定文件的路徑:
net: "imagenet_train_val.prototxt"
12.開始訓練網絡:
./train_imagenet.sh
13. 在K20中,每20個迭代花費36s,所以,一幅圖像的一次前饋+反饋(FW+BW)大概需要7ms,前饋花費2.5ms,剩下的是反饋,
可以在 examples/net_speed_benchmark.cpp 中進行時間的查看;
14.因為我們有保存了快照,所以我們可以通過
./resume_training.sh 來進行resume恢復,腳本caffe_imagenet_train_1000.solverstate 保留了要恢復的所有信息,
15.總結,Caffe可以很方便進行通過設置文件的方式來進行設置不同的網絡結構。