caffe——訓練本身的模型

step1:將圖片數據轉化爲lmdb格式

caffe中建議將圖片轉化爲lmdb格式,咱們能夠利用caffe提供的工具中的convert_imageset,這個工具是須要使用open cv,所以在配置caffe中須要注意。我使用的OPENCV的2.4。html

## Refer to http://caffe.berkeleyvision.org/installation.html
# Contributions simplifying and improving our build system are welcome!

# cuDNN acceleration switch (uncomment to build with cuDNN).
# USE_CUDNN := 1

# CPU-only switch (uncomment to build without GPU support).
# CPU_ONLY := 1

# uncomment to disable IO dependencies and corresponding data layers
  USE_OPENCV := 1
#  USE_LEVELDB := 1
  USE_LMDB := 1

# uncomment to allow MDB_NOLOCK when reading LMDB files (only if necessary)
#    You should not set this flag if you will be reading LMDBs with any
#    possibility of simultaneous read and write
# ALLOW_LMDB_NOLOCK := 1

# Uncomment if you're using OpenCV 3
# OPENCV_VERSION := 3
linux

convert_imageset須要設定相關參數,能夠參考http://www.cnblogs.com/denny402/p/5082341.html。數組

須要帶四個參數:網絡

FLAGS: 圖片參數組函數

{ 工具

-gray: 是否以灰度圖的方式打開圖片。程序調用opencv庫中的imread()函數來打開圖片,默認爲falsepost

-shuffle: 是否隨機打亂圖片順序。默認爲false學習

-backend:須要轉換成的db文件格式,可選爲leveldb或lmdb,默認爲lmdb測試

-resize_width/resize_height: 改變圖片的大小。在運行中,要求全部圖片的尺寸一致,所以須要改變圖片大小。 程序調用opencv庫的resize()函數來對圖片放大縮小,默認爲0,不改變ui

-check_size: 檢查全部的數據是否有相同的尺寸。默認爲false,不檢查

-encoded: 是否將原圖片編碼放入最終的數據中,默認爲false

-encode_type: 與前一個參數對應,將圖片編碼爲哪個格式:‘png','jpg'......

}

ROOTFOLDER/: 圖片存放的絕對路徑,從linux系統根目錄開始

LISTFILE: 圖片文件列表清單,通常爲一個txt文件,一行一張圖片

DB_NAME: 最終生成的db文件存放目錄

寫成一個腳本convertlmdb.sh,因爲我打算用AlexNet,因此對圖片進行了一下resize。

 1 IMAGE=/home/caffe-master/trainimage/
 2 LABEL=/home/caffe-master/train_label.txt
 3 CAFFE_PATH=/home/caffe-master
 4 LMDB_PATH=/home/train_lmdb
 5 rm -rf $LMDB_PATH
 6 $CAFFE_PATH/build/tools/convert_imageset \
 7 --backend=lmdb \
 8 --resize_height=227 --resize_width=227 \
 9 $IMAGE \
10 $LABEL \
11 $LMDB_PATH

 step2:計算均值

 在模型的輸入中,須要計算訓練數據中的均值,caffe一樣提供了工具來進行計算。

 

1 CAFFE-MASTER
2 LMDB_PATH=/home/caffe-master/data/pedestrian/test_lmdb
3 MEAN_PATH=/home/caffe-master/data/pedestrian/testmean.binaryproto
4 $CAFFE-MASTER/build/tools/compute_image_mean \
5 $LMDB_PATH \
6 $MEAN_PATH

 

 

 

  step3:定義模型和solver

關於模型的參數能夠參考個人caffe——經常使用layer參數咱們使用CAFFENET,這個網絡是對Alexnet的實現,protottxt能夠在/caffe-master/models/bvlc_reference_caffenet中找到。對於訓練策略,咱們能夠將文件中的solver.prototxt文件進行修改,使用了隨機梯度降低的方法,訓練策略能夠參考http://caffe.berkeleyvision.org/tutorial/solver.html

#網絡定義
net: "models/bvlc_reference_caffenet/train_val.prototxt" #測試集測試時迭代的次數
test_iter:
1000
#測試間隔 test_interval: 1000 #起始學習率
base_lr:
0.01
#學習率變化策略,step是遞減的 lr_policy: "step" gamma: 0.1
#學習率遞減的間隔 stepsize: 100000 #顯示loss的次數
display:
20 #最大訓練次數
max_iter:
450000 momentum: 0.9 weight_decay: 0.0005 #保存參數的次數
snapshot:
10000 #參數保存位置
snapshot_prefix:
"models/bvlc_reference_caffenet/caffenet_train" #使用CPU或GPU
solver_mode: GPU

 

step4:開始訓練

訓練能夠使用tools中的caffe,在命令行輸入caffe咱們能夠看到相關的參數提示。

編寫一個訓練腳本,solver參數是必須給定的,model能夠使用已經訓練好的模型進行繼續訓練,設定--snapshot能夠繼續未完成的訓練。

1 ./build/tools/caffe train \
2 --solver=/home/caffe-master/models/cifar10/solver.prototxt \
相關文章
相關標籤/搜索