caffe編譯參考:http://blog.csdn.net/cym1990/article/details/72630584
1.數據格式轉換
Caffe採用leveldb或者lmdb的數據格式。
第一步就是數據的格式轉換了。
編譯如下圖所示工程,可以生成文件convert_imageset.exe
本次訓練是使用的車牌數據,只分2類,有車牌,無車牌。
在caffe根目錄下新建data文件夾,在data文件夾下新建plate文件夾,plate文件夾有如下文件:
train和test文件夾存放原始數據,trainldb和testldb文件夾存放格式轉換後的leveldb數據,mean存放均值文件,實驗數據是車牌和非車牌二分類數據。部分數據大概如下:
有車牌:
無車牌:
在train圖像數據文件夾中建立train.txt文件
在命令行中,cd到train圖像數據文件夾中執行下面批處理命令:
dir /b/s/p/w *.jpg > train.txt
可以實現將文件夾中的所有文件的文件名和路徑提取到train.txt中
生成如圖所示:
然後使用替換功能調整爲以下格式,圖像後面的爲標籤,每個類別使用同一個標籤表示(多個類別必須從0開始),可以通過查找替換功能,將jpg替換爲jpg 0,這樣可以快速加標籤。
利用convert_imageset.exe生成對應的leveldb格式數據,注意參數和路徑,參數部分可以查看conver_imageset.cpp文件中的定義。
我們可以寫一個convert_imageset.bat文件,來執行數據格式轉換,文件內容如下:
SET GLOG_logtostderr=1
D:\WorkSpace\caffe\caffe\Build\x64\Release\convert_imageset.exe --backend=leveldb --resize_width=64 --resize_height=64 D:\WorkSpace\caffe\caffe\data\plate\ D:\WorkSpace\caffe\caffe\data\plate\train\train.txt D:\WorkSpace\caffe\caffe\data\plate\train_ldb
pause
D:\WorkSpace\caffe\caffe\Build\x64\Release\convert_imageset.exe --backend=leveldb --resize_width=64 --resize_height=64 D:\WorkSpace\caffe\caffe\data\plate\ D:\WorkSpace\caffe\caffe\data\plate\test\test.txt D:\WorkSpace\caffe\caffe\data\plate\test_ldb
pause
可以看到我們在轉換數據的時候,將所有數據大小統一調整爲64*64,這樣方便數據處理。
上面的命令先轉換train數據格式,然後轉換測試數據格式。
在命令行中的這個需要注意:
D:\WorkSpace\caffe\caffe\data\plate\ D:\WorkSpace\caffe\caffe\data\plate\train\train.txt
前面的文件夾加上後面文件train.txt中每行的內容,需要保證是一個合法的絕對路徑,這個路徑就是需要尋找到每個文件的路徑。同理測試數據一樣。
生成成功後得到以下信息:
以上命令運行成功後,在train_ldb文件夾下生成對應的文件:
其他格式的數據轉換,比如binary等可以參考examples下cifar10和mnist下的樣例。這部分早晚要自己寫的,可以多熟悉一下。
2.數據預處理
SET GLOG_logtostderr=1
D:\WorkSpace\caffe\caffe\Build\x64\Release\compute_image_mean.exe --backend=leveldb D:\WorkSpace\caffe\caffe\data\plate\train_ldb D:\WorkSpace\caffe\caffe\data\plate\mean\train_mean.binaryproto
pause
D:\WorkSpace\caffe\caffe\Build\x64\Release\compute_image_mean.exe --backend=leveldb D:\WorkSpace\caffe\caffe\data\plate\test_ldb D:\WorkSpace\caffe\caffe\data\plate\mean\test_mean.binaryproto
pause
以上命令會在mean文件夾中生成文件train_mean.binaryproto和test_mean.binaryproto3.定義網絡結構並訓練
layer {
name: "data"
type: "Data"
top: "data"
top: "label"
include {
phase: TRAIN
}
transform_param {
mirror: true
#crop_size: 227
mean_file: "D://WorkSpace//caffe//caffe//data//plate//mean//train_mean.binaryproto"
}
data_param {
source: "D://WorkSpace//caffe//caffe//data//plate//train_ldb"
batch_size: 256
backend: LEVELDB
}
}
layer {
name: "data"
type: "Data"
top: "data"
top: "label"
include {
phase: TEST
}
transform_param {
mirror: false
#crop_size: 227
mean_file: "D://WorkSpace//caffe//caffe//data//plate//mean//test_mean.binaryproto"
}
data_param {
source: "D://WorkSpace//caffe//caffe//data//plate//test_ldb"
batch_size: 50
backend: LEVELDB
}
}
test_iter: 100
test_interval: 100
base_lr: 0.01
lr_policy: "step"
gamma: 0.1
stepsize: 100000
display: 20
max_iter: 450000
momentum: 0.9
weight_decay: 0.0005
snapshot: 200
snapshot_prefix: "D://WorkSpace//caffe//caffe//data//plate//"
solver_mode: GPU
D:\WorkSpace\caffe\caffe\Build\x64\Release\caffe.exe train --solver=D:\WorkSpace\caffe\caffe\data\plate\solver.prototxt
pause
可能會遇到的文件:
(1)caffe訓練數據時出現了Check failed: data_怎麼辦?
(2)路徑文件,找不到數據,這個一般仔細檢查文件都可以找出來,還有就是如果路徑中包含有/t,也會導致路徑不可用,可以在路徑中使用//來代替\
(3)http://blog.csdn.net/zr459927180/article/details/51001536,參考此文章,遇到的文件有下面幾個,可以參考:
1. caffe訓練時遇到loss一直居高不下時:http://blog.sina.com.cn/s/blog_141f234870102w941.html
另外,均值一般都是訓練集的均值,測試集正常是不知道,無法求出來的。
參考以下文章:
2.如何快糙好猛地在Windows下編譯CAFFE並使用其matlab和python接口
3.http://blog.csdn.net/zr459927180/article/details/51001536
4.caffe windows訓練測試自己的圖片http://www.jianshu.com/p/607f1e51e3ab