在caffe-windows下跑自己的資料集leveldb格式 或者lmdb
文介紹如何使用caffe對自己的影象資料進行分類。
1 圖片資料庫準備
由於圖片資料收集比較費時,實驗室資料庫分為5類,1 2 3 4 5類,train150張,val256張。
新建一個資料夾leveldb,放自己的資料,在leveldb資料夾下新建train和val資料夾,train資料夾下新建1、2、3、4、5資料夾分別存放150張類別圖片,val資料夾同樣如此。注樣如此。
train資料夾
val資料夾
1 2 3 4 5類資料夾記憶體儲的是每類的圖片,比如我的1資料夾中為
2 轉換成leveldb格式
在leveldb資料夾下新建兩個txt檔案:train.txt和val.txt,列出對應圖片名及其標籤。
資料量較少的可以手動標籤,資料量較大的話,可以寫批處理命令,比較方便。
批處理的方式可以使用.bat命令列,
注意:標籤一定要從零開始標起
開啟新件的文字文件,並輸入DIR *.* /B > 檔名稱列表.txt
儲存後關閉。然後使用word開啟txt,替換那種方式更改名稱
請注意前面檔名稱的路徑問題,這些如果在轉換格式的命令列中,若報錯找不到該圖片的話就是名稱路徑問題,根據報錯的路徑更改txt中圖片的名稱,0 1 2 3 4代表五類資料
生成列表後,編譯convert_imageset.cpp
在\caffe-master\Build\x64\Release\convert_imageset.exe。做一個批處理命令將圖片資料轉換成leveldb格式。
在caffe-windows資料夾下新建convertimage2ldb.bat。
.bat命令可以由txt改字尾得到,前面是命令,中間是resize大小,--shuffle --backend="leveldb"是leveldb資料格式,對應的--shuffle --backend="lmdb"是lmdb資料格式 ,F:\caffe-master\data\leveldb\train F:\caffe-master\data\leveldb\train.txt是之前定義的train的檔案路徑,F:\caffe-master\data\leveldb\mtrainldb是儲存轉換好的訓練資料的路徑。
雙擊執行,在leveldb資料夾下就會出現mtrainldb資料夾。
同理可得到mvalldb。這兩個就是caffe需要的資料。
注意,我的leveldb資料夾是放在data資料夾下的,在寫convertimage2ldb.bat時注意你自己路徑。
3 計算mean
這個比較簡單,編譯comput_image_mean.cpp
利用comput_image_mean.exe。做一個computeMean.bat方便以後使用。
注意資料格式型別
然後搜尋
caffe db_lmdb.hpp:14] Check failed: mdb_status == 0 (2 vs. 0) No such file or directory
找到https://github.com/happynear/caffe-windows/issues/91連結 解決問題文字中加入 --backend=leveldb成功執行
雙擊執行之後在leveldb資料夾裡面出現*_mean.binaryproto,這就是caffe需要的圖片均值檔案。
4 訓練自己的網路
資料集和均值檔案都生成之後,訓練和前面兩篇文章類似。這次我直接使用的是imagenet的網路結構,幾乎沒怎麼修改,所以我將imagenet裡面的imagenet_train.prototxt、imagenet_val.prototxt、imagenet_solver.prototxt直接拷過來修改一下。
imagenet_val.prototxt、imagenet_train.prototxt裡面的
source: "mtrainldb"
mean_file:"mimg_mean.binaryproto"
batch_size: 10
還有最後一層的output改為5,因為我只有五類。
imagenet_solver.prototxt裡面的網路引數修改:
注意最後根據自己電腦的配置選擇 solver_mode:GPU 還是CPU
開始訓練:
找到自己存放的路徑就可以跑起來了
參考文獻:http://blog.csdn.net/u012878523/article/details/41698209
https://github.com/happynear/caffe-windows/issues/91
http://jingyan.baidu.com/article/9158e0004080baa2541228b6.html