本文介紹如何使用caffe對自己的圖像數據進行分類。
1 圖片數據庫准備
由於圖片數據收集比較費時,為了簡單說明,我用了兩類,dog和bird,每種約300張。train200張,val100張。
新建一個文件夾mine,放自己的數據,在mine文件夾下新建train和val文件夾,train文件夾下新建bird和dog兩個文件夾分別存放200張bird和200張dog,val文件夾里存放其他的圖片用於驗證。注意,圖片的size要歸一到相同尺寸。(256*256)
2 轉換成leveldb格式
在mine文件夾下新建兩個txt文件:train.txt和val.txt,列出對應圖片名及其標簽。
數據量較少的可以手動標簽,數據量較大的話,可以寫批處理命令,比較方便。
一定要注意,train列表中的圖片帶相對路徑名bird/*.jpg dog/*.jpg。標簽1代表bird,標簽2代表dog。
生成列表后,編譯convert_imageset.cpp.
在bin文件夾中將剛剛生成的MainCaller.exe重命名為convert_imageset.exe。做一個批處理命令將圖片數據轉換成leveldb格式。
在caffe-windows文件夾下新建convertimage2ldb.bat。
雙擊運行,在mine文件夾下就會出現mtrainldb文件夾。
同理可得到mvalldb。這兩個就是caffe需要的數據。
注意,我的mine文件夾是放在data文件夾下的,在寫convertimage2ldb.bat時注意你自己路徑。
3 計算mean
這個比較簡單,上篇文章也說了。編譯comput_image_mean.cpp
在bin文件夾中將剛剛生成的MainCaller.exe重命名為comput_image_mean.exe。做一個computeMean.bat方便以后使用。
雙擊運行之后在mine里面出現mimg_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改為2,因為我只有兩類。
imagenet_solver.prototxt里面的網絡參數修改:
注意最后加上solver_mode:GPU。
開始訓練:
5 實驗結果
由於數據量較小,訓練比較快。正確率最高能達到0.87。但是最后並不收斂,4500次迭代正確率時高時低。本文只是介紹方法,還有很多參數值得推敲。
原文地址:http://blog.csdn.net/u012878523/article/details/41698209