windows 訓練、微調caffenet 訓練測試自己的數據

下載caffeNet模型

下載的caffe-master文件中,/models/bvlc_reference_caffenet 文件夾不包含bvlc_reference_caffenet.caffemodel,下載地址:http://dl.caffe.berkeleyvision.org/bvlc_reference_caffenet.caffemodel 也可以用腳本方式下載。

 

準備數據—生成lmdb/leveldb

我在這裏使用的是bat命令行的方式,也有很多博主上使用shell文件(create_imagenet.sh)。使用sh文件網上也已經有很多的代碼,在Windows系統命令行中,可在命令行執行sh create_imagenet.sh

如果要使用.bat文件,代碼:

SET GLOG_logtostderr=1
D:/CAFFE/caffe-master/Build/x64/Release/convert_imageset.exe --resize_width=200 --resize_height=200 --shuffle --backend=lmdb D:/CAFFE/caffe-master/examples/hello_caffe/data/train/ D:/CAFFE/caffe-master/examples/hello_caffe/train.txt  D:/CAFFE/caffe-master/examples/hello_caffe/train_lmdb
D:/CAFFE/caffe-master/Build/x64/Release/convert_imageset.exe --shuffle --backend=lmdb D:/CAFFE/caffe-master/examples/hello_caffe/data/val/ D:/CAFFE/caffe-master/examples/hello_caffe/val.txt  D:/CAFFE/caffe-master/examples/hello_caffe/val_lmdb 
pause


這裏我使用的是絕對路徑,需要的東西有:(按順序)

convert_imageset.exe轉換圖像爲lmdb/leveldb格式

訓練數據集位置:D:/CAFFE/caffe-master/examples/hello_caffe/data/train/

訓練數據集標籤:D:/CAFFE/caffe-master/examples/hello_caffe/train.txt

訓練數據集lmdb文件存放位置:D:/CAFFE/caffe-master/examples/hello_caffe/train_lmdb

同理,測試數據集轉換需要:convert_imageset.exe、測試數據集位置、lmdb文件存放位置。

 

--resize_width –resize_height設置圖像的寬度和高度

--shuffle 打亂數據順序,不然lossaccuracy曲線會震盪

--backend 生成數據的格式,代碼中爲生成lmdb格式,如果要生成leveldb也可以改爲leveldb

  

注:如果生成失敗,需要將已經生成的lmdb文件夾刪除,不然會報錯

計算圖像均值

計算圖像均值使用的是compute_image_mean.exe

D:/CAFFE/caffe-master/Build/x64/Release/compute_image_mean.exe --backend=lmdb D:/CAFFE/caffe-master/examples/hello_caffe/train_lmdb D:/CAFFE/caffe-master/examples/hello_caffe/mean.binaryproto
Pause

compute_image_mean.exe 計算圖像均值

訓練數據集的位置: D:/CAFFE/caffe-master/examples/hello_caffe/train_lmdb

生成均值文件及位置: D:/CAFFE/caffe-master/examples/hello_caffe/mean.binaryproto

--backend 輸入文件類型

網絡定義

選擇你要用的網絡模型,我這裏用的是caffenet,複製原來的train_val.prototext、solver.prototxt、deploy.prototxt到你要建模型的位置,修改相應參數:

train_val.prototext修改:




設置訓練數據和測試數據的相應位置以及全連接層輸出。

原來的caffenet能夠輸出1000個類別,但我只需要輸出9個類別。在num_output位置設爲9,即網絡輸出類別數量。(TIPS:修改輸出標籤數量,需要修改全連接層的名稱,在這裏我加上了_new,例如fc6改爲fc6_new。否則會在自己分類時,出現<9 vs 1000>之類的錯誤)

訓練模型

D:/CAFFE/caffe-master/Build/x64/Release/caffe.exe train -solver=D:/CAFFE/caffe-master/examples/hello_caffe/caffemodel/solver.prototxt --weights D:/CAFFE/caffe-master/models/bvlc_reference_caffenet/bvlc_reference_caffenet.caffemodel
Pause

Caffe.exe 調用caffe

solver.prototxt 設置輸入網絡配置

bvlc_reference_caffenet.caffemodel 需要調整的網絡模型 

solver.Prototxt修改net和snapshot_prefix兩個位置,根據需要修改迭代次數、訓練模式等等,以下爲solver.prototxt文件:

net: "D:/CAFFE/caffe-master/examples/hello_caffe/caffemodel/train_val.prototxt"
test_iter: 6
test_interval: 20
base_lr: 0.001
lr_policy: "fixed"
gamma: 0.1
stepsize: 100000
display: 20
max_iter: 4000
momentum: 0.9
weight_decay: 0.0005
snapshot: 1000
snapshot_prefix: "D:/CAFFE/caffe-master/models/bvlc_reference_caffenet/caffenet_train"
solver_mode: GPU

運行bat文件後,就生成了model文件:


測試生成的模型

D:/CAFFE/caffe-master/Build/x64/Release/classification.exe D:/CAFFE/caffe-master/examples/hello_caffe/caffemodel/deploy.prototxt D:/CAFFE/caffe-master/examples/hello_caffe/caffemodel/11.20/caffenet_train_iter_4000.caffemodel D:/CAFFE/caffe-master/examples/hello_caffe/mean.binaryproto D:/CAFFE/caffe-master/examples/hello_caffe/label.txt D:/CAFFE/dataset/12class_tif/water/0186.tif
Pause


我是參照mnist數據集的分類寫出來的,其中:

classification.exe爲分類器

deploy.Prototxt文件: 將caffe-master/models/bvlc_reference_caffenet目錄下的deploy.Prototxt複製修改,這裏改了輸出層的標籤數量(num_output)和全卷積層名稱(與前面的train_val.prototxt文件全卷積層名稱一致)。

caffenet_train_iter_4000.caffemodel:爲訓練生成的模型

label.txt:類別對應的標籤,輸出了9個類別,分別設置每一個類別對應的標籤(根據自己需要,可以爲字符串)

0186.tif:測試的圖像

結果展示


分類結果,得到該圖像爲水體的概率爲0.9999,爲harbor的概率爲0.0001

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章