前言:本文參考博客denny402
這里簡要的介紹了下如何使用自己準(zhǔn)備的圖片數(shù)據(jù)來訓(xùn)練和測試網(wǎng)絡(luò)旁振。主要的幾個(gè)步驟有帆吻,圖片數(shù)據(jù)轉(zhuǎn)換為lmdb格式,計(jì)算訓(xùn)練數(shù)據(jù)的均值崎苗,sovler文件和網(wǎng)絡(luò)的簡單修改些阅,最后caffe訓(xùn)練伞剑。
數(shù)據(jù)準(zhǔn)備
這里我照搬denny402準(zhǔn)備的數(shù)據(jù)。其中共有5個(gè)類市埋,每個(gè)類100張圖片黎泣,每個(gè)類中用于測試的是20張圖片(編號(hào)0-19),用于訓(xùn)練的是80張圖片(編號(hào)20-99)缤谎。
首先我在caffe的根目錄下的data目錄新建文件夾my抒倚,將test和train兩個(gè)目錄拷貝到其中。
然后為train和test中的數(shù)據(jù)建立了兩個(gè)txt的列表坷澡,分別是文件路徑名和對應(yīng)的label號(hào)托呕,需要注意的是label號(hào)是從0開始,至4洋访。
之后是使用convert_imageset.exe將圖片轉(zhuǎn)換為lmdb形式镣陕。如果你并沒有生成這個(gè)exe谴餐,可以打開caffe的convert_imageset這個(gè)工程姻政,右擊生成,exe會(huì)保存在.\bin文件夾中岂嗓。
然后調(diào)用下面的命令行生成兩個(gè)數(shù)據(jù)集的lmdb汁展。
//轉(zhuǎn)換訓(xùn)練數(shù)據(jù)
.\bin\convert_imageset.exe
--shuffle\ //表示打亂數(shù)據(jù)的順序
--resize_height=256\
--resize_width=256 \
.\data\my\ //存放train和test文件夾的路徑
.\data\trainlist.txt //根據(jù)trainlist.txt讀取圖片
.\data\img_train_lmdb
//轉(zhuǎn)換測試數(shù)據(jù)
.\bin\convert_imageset.exe
--shuffle\ //表示打亂數(shù)據(jù)的順序
--resize_height=256\
--resize_width=256 \
.\data\my\
.\data\testlist.txt
.\data\img_test_lmdb
這樣在data文件夾中會(huì)生成img_train_lmdb和img_test_lmdb兩個(gè)文件夾分別保存了lmdb格式的數(shù)據(jù)。
計(jì)算圖片均值
計(jì)算圖片均值使用的是前一步生成的訓(xùn)練數(shù)據(jù)的lmdb求的厌殉。
同樣如果需要使用的compute_image_mean.exe并沒有生成食绿,可以打開該工程,右擊生成即可公罕。生成后器紧,使用下面的命令行得到均值文件。
.\bin\compute_image_mean.exe .\data\img_train_lmdb .\data\mean.binaryproto
這樣就得到了訓(xùn)練數(shù)據(jù)的均值文件mean.binaryproto楼眷。
sovle.prototxt配置文件和train_val.prototxt模型修改
這里拷貝了models\bvlc_reference_caffenet\solver.prototxt和train_val.prototxt铲汪,并在其中簡單修改。
//solver.prototxt
net: "data/train_val.prototxt"
test_iter: 2
test_interval: 50
base_lr: 0.001
lr_policy: "step"
gamma: 0.1
stepsize: 100
display: 20
max_iter: 500
momentum: 0.9
weight_decay: 0.005
solver_mode: GPU
//train_val.prototxt
name: "CaffeNet"
layer {
name: "data"
type: "Data"
top: "data"
top: "label"
include {
phase: TRAIN
}
transform_param {
mirror: true
crop_size: 227
mean_file: "data/mean.binaryproto"
}
data_param {
source: "data/img_train_lmdb"
batch_size: 256
backend: LMDB
}
}
layer {
name: "data"
type: "Data"
top: "data"
top: "label"
include {
phase: TEST
}
transform_param {
mirror: false
crop_size: 227
mean_file: "data/mean.binaryproto"
}
data_param {
source: "data/img_test_lmdb"
batch_size: 50
backend: LMDB
}
}
主要的修改就是test iter和test batchsize罐柳,以及數(shù)據(jù)源的修改掌腰。前者是因?yàn)槲覀兊臄?shù)據(jù)量發(fā)生了改變。另外张吉,在FC這個(gè)layer處也要修改下齿梁,將1000改為5,因?yàn)槲覀冞@里只有5個(gè)類別。
訓(xùn)練和測試
以上最終完成了程序caffe.exe運(yùn)行的準(zhǔn)備勺择,最后在命令行中輸入
.\bin\caffe.exe train -solver=.\data\solver.prototxt
等待程序運(yùn)行結(jié)束后可以查看結(jié)果创南。我這里的accuracy大致為93%。