【Caffe實踐】如何利用Caffe訓練ImageNet分類網絡

orgr8337 8年前發布 | 91K 次閱讀 圖形/圖像處理

來自: http://blog.csdn.net//chenriwei2/article/details/38735891


源文章:https://github.com/BVLC/caffe/tree/master/examples/imagenet


由于要使用Caffe進行深度學習的二次開發,所以找到上面這個如何訓練網絡的一些操作過程,不是每一句都翻譯過來,但是終究不是原創,權當做自己的學習筆記。



==========================================



      1.下載好來自ImageNettrainingvalidation數據集合;分別存放在如下的格式:
    /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.txtval.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.運行網絡,其中設置
    每批batch256個,運行450000次迭代,接近90epoch
   1000次迭代,就在用測試集進行測試;
   設置初始的學習率為0.01,并且每100000次迭代中進行學習率下降,大概進行20epoch
   20epoch就顯示出一些數據信息;
   網絡訓練的動量為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可以很方便進行通過設置文件的方式來進行設置不同的網絡結構。


??

 本文由用戶 orgr8337 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!