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
在模型的輸入中,須要計算訓練數據中的均值,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 \