Caffe下自己的数据训练和测试
在caffe提供的例程當中,例如mnist與cifar10中,數據集的準備均是通過調用代碼自己完成的,而對于ImageNet1000類的數據庫,對于高校實驗室而言,常常面臨電腦內存不足的尷尬境地。而對于應用者而言,用適合于自己條件的的數據集在caffe下訓練及測試才是更重要的。所以我們有必要自己做數據庫以及在caffe上訓練及測試。
1,數據準備
在data中新建文件夾myself,我們截取了ImageNet1000類中的兩類—panda與sea_horse,訓練panda的圖片24張,測試panda的圖片6張,訓練sea_horse的圖片38張,測試sea_horse的圖片7張。如圖所示:
培訓和測試的輸入是用train.txt和val.txt描述的,這些文檔列出所有文件和他們的標簽。注意,在imagenet1000類中,我們分類的名字是ASCII碼的順序,即0-999,對應的分類名和數字的映射在synset_words.txt(自己寫)中。
運行以下指令:
注意路徑
然后,因為自己的數據庫樣本數比較少,可以自行手動做分類標簽。在train.txt的每個照片后用1-2分類。如圖:
當樣本過多,就自己編寫指令批量處理。
同理,獲得val.txt。matlab(windows下)批量處理代碼如下:
Test.txt不能標簽,全部設置成0。
我們還需要把圖片的大小變成256X256,官網上提供了下面的命令:
但是我自己并沒有成功,就只好用matlab(windows下)代碼處理了一下:
for n=1:length(file)temp=imread(['F:\animal\panda\' file(n).name]);temp=imresize(temp,2);temp=imresize(temp,[256 256]);imwrite(temp,['F:\animal\panda\' file(n).name]); end然后在caffe-master/examples中新建myself文件夾,然后將caffe-maester/examples/imagenet的create_imagenet.sh復制到該文件夾下,將其名改為create_animal.sh,修改訓練和測試路徑的設置,運行該sh.如圖:
最后得到myself_train_lmdb和myself_val_lmdb:
2 計算圖像均值
模型需要我們從每張圖片減去均值,所以我們必須獲得訓練的均值,用
tools/compute_image_mean.cpp實現,這個cpp是一個很好的例子去熟悉如何操作多個組建,例如協議的緩沖區,leveldbs,登錄等。我們同樣復制caffe-maester/examples/imagenet的
./make_imagenet_mean到examples/myself中,將其改名為make_animal_mean.sh,加以修改路徑。
3 網絡的定義
把caffe-master/models/bvlc_reference_caffenet中所有文件復制到caffe-master/examples/myself文件夾中,修改train_val.prototxt,注意修改數據層的路徑。如圖:
如果你細心觀察train_val.prototext,你會發現他們除了數據來源不同和最后一層不同,其他基本相同。在訓練中,我們用一個softmax——loss層計算損失函數和初始化反向傳播,而在驗證,我們使用精度層檢測我們的精度。
我們還有一個運行的協議solver.prototxt,復制過來,將第一行路徑改為我們的路徑net: “examples/myself/train_val.prototxt”,從里面可以觀察到,我們將運行256批次,迭代4500000次(90期),每1000次迭代,我們測試學習網絡驗證數據,我們設置初始的學習率為0.01,每100000(20期)次迭代減少學習率,顯示一次信息,訓練的weight_decay為0.0005,每10000次迭代,我們顯示一下當前狀態。
以上是教程的,實際上,以上需要耗費很長時間,因此,我們稍微改一下
test_iter: 1000是指測試的批次,我們就10張照片,設置10就可以了。
test_interval: 1000是指每1000次迭代測試一次,我們改成500次測試一次。
base_lr: 0.01是基礎學習率,因為數據量小,0.01就會下降太快了,因此改成0.001
lr_policy: “step”學習率變化
gamma: 0.1學習率變化的比率
stepsize: 100000每100000次迭代減少學習率
display: 20每20層顯示一次
max_iter: 450000最大迭代次數,
momentum: 0.9學習的參數,不用變
weight_decay: 0.0005學習的參數,不用變
snapshot: 10000每迭代10000次顯示狀態,這里改為2000次
solver_mode: GPU末尾加一行,代表用GPU進行
4 訓練
把caffe-master/examples/imagenet中的train_caffenet.sh復制過來并修改名為train_myself.sh運行,修改里面的路徑,如圖:
當然,只有兩類,正確率還是相當的高,例如迭代到2000次的時候,正確率是0.924,即13張var樣本只有1張預測錯了。
如圖:
5 恢復數據
把caffe-master/examples/imagenet中的resume_training.sh復制過來并運行。
我們用指令./即可。
參照材料:學習筆記3 用自己的數據訓練和測試“CaffeNet” 2014.7.22 薛開宇
Caffe官網 ImageNet tutorial
總結
以上是生活随笔為你收集整理的Caffe下自己的数据训练和测试的全部內容,希望文章能夠幫你解決所遇到的問題。

- 上一篇: 拷贝控制
- 下一篇: 一二三维矩阵的拼接问题