本文詳細介紹,如何用caffe跑自己的圖像數據用於分類。
1 首先需要安裝過程見 http://www.cnblogs.com/love6tao/p/5706830.html 同時依據上面教程,生成了caffe.exe
2 構建自己的數據集。分為train和val 兩個數據集,本次實驗為2分類任務,一個是包含汽車的圖像,一個是不包含汽車圖像,其中train 為訓練數據集,該文件夾中圖像命名格式為trainpos0000.jpg和trainneg0000.jpg,圖像通過該命名方式連續編碼,val為驗證數據集或者叫測試數據,該文件夾中圖像命名格式為test0000.jpg,和testneg0000.jpg。如下圖所示
圖像可以用過opencv中cvresize函數就行縮放到256*256.
然后需要准備標簽數據,通過新建train.txt val.txt和test.txt就行設置。通過windows命令行進行自動生成,首先在運行中輸入cmd ,出現DOS窗口,輸入d: 切換到D盤,
再輸入cd D:\caffe\caffe-master\caffe-master\mydata\train 切換到train文件夾下 ,輸入命令“dir/s/on/b>d:/train.txt”,則會在D盤生成一個名為train的文本文件,里面存放着全部圖像的路徑。 通過查找替換,最終生成的 train.txt val.txt和test.txt 。其中val.txt和test.txt 相比,test沒有標簽.注意標簽從0開始,如果是二分類,應該是0和1,而不是下圖的1和2.
3 講數據集轉化為caffe的數據類型
caffe的數據類型為LMDB和leveldb,caffe並不處理原始數據,而是轉化為LMDB或者LEVELDB格式,這樣可以保持較高的IO效率。
怎么轉換呢?在caffe工程中有convert_imageset的工程,對其進行編譯,形成convert_imageset.exe即可。
然后利用create_imagenet.sh使數據集生成leveldb格式的文件。create_imagenet.sh放在examples/imagenet中,將它拷貝到數據集的路徑下,本文數據集
關鍵的是修改create_imagenet.sh中的路徑使之能夠進行數據轉換
example設定為數據集的路徑 data也設定為數據集路徑 tools為convert_imageset.exe的路徑
train_data_root 訓練數據集路徑 val_data_root 測試數據集路徑
后面resize為false則其不需要轉換為256*256
由於本文是轉為leveldb文件類型 添加了這一句代碼 ”--backend=leveldb\ “ 同時注意train.txt val.txt的路徑是data路徑下,
運行該程序,生成了兩個leveldb文件夾,ilsvrc12_train_leveldb和ilsvrc12_val_leveldb
4 計算圖像的均值
首先生成compute_image_mean.exe文件,該文件在caffe工程中也存在對應程序,對其進行編譯,形成compute_image_mean.exe即可。
然后在examples/imagenet下有一個sh文件make_imagenet_mean.sh,將它拷貝到個人數據文件夾mydata中,然后打開這個文件進行編輯。
example是數據集路徑 data 為數據集路徑 tools為compute_image_mean.exe路徑
第9行為利用exe 對train_leveldb 數據生成 imagenet_mean.binaryproto
運行make_imagenet_mean.sh后,會生成了 imagenet_mean.binaryproto
5 開始設計網絡
5.1 設置train_val.prototxt文件
從caffe-root\models\bvlc_reference_caffenet中拷貝train_val.prototxt進行修改。
設置 mean_file: 和數據source:
5.2 設置solver.prototxt文件
從caffe-root\models\bvlc_reference_caffenet中拷貝solver.prototxt進行修改。net的路徑為上面設置的路徑 ,后面迭代的參數按照實際情況修改。
5-3 訓練網絡,運行train_caffenet.sh文件
從caffe-root\\examples\imagenet中拷貝train_caffenet.sh進行修改。
設置caffe.exe路徑 和上述solver.prototxt文件路徑
訓練結果:運行train_caffenet.sh文件效果
本機配置是win7+cude8.0+1080的顯卡,可以看到loss在不斷的降低。這是在設置好solve參數的情況下。
生成的model 為 mydata_iter_100.caffemodel
5-4 測試網絡
在數據目錄下新建一個文本文件,然后將后綴名改成sh。填入以下語句:
首先設置caffe.exe的路徑 然后設置網絡的路徑,最后設置載入的訓練參數路徑。運行該sh文件,得到最后的分類正確率為:95%
到處,整個訓練和測試過程走通了,后續就是調節參數的問題了。