在配置好Windows版的Caffe之後,可以使用Windows Caffe訓練ImageNet網絡,主要有4個步驟:
(1)準備圖片數據庫
(2)將圖片數據轉換爲Caffe可以使用的LMDB或者LevelDB類型
(3)取數據庫均值
(4)開始用Caffe訓練網絡
1 準備圖片數據庫
可以從網上找到ImageNet的數據,選擇幾個圖片類別下載下來。我是從ilsvrc2012的數據中找了幾個類別。我找到的數據庫是這樣的:
上面每個文件中都是如下的一堆圖片:
任意選擇幾個類別作爲訓練數據。我選瞭如下的三類。每個類別中有1300張圖片,在每個類別中抽取100張圖片作爲驗證集,餘下的1200張作爲訓練集。將訓練集和驗證集存儲在相應的路徑下。
運行如下兩個matlab腳本(腳本來自“http://blog.csdn.net/u013657981/article/details/49497753”),可以生成製作數據庫所需要的train.txt和val.txt。
clear all
clc
foodDir='F:\caffe-windows\data\ilsvrc12\train';
numClasses=3
classes=dir(foodDir)
classes = classes([classes.isdir]) ;
classes = {classes(3:numClasses+2).name}
imageName={};
fp = fopen('train.txt','a');
for ci = 1:length(classes)
ims = dir(fullfile(foodDir, classes{ci}, '*.JPEG'))
for ii=1:length(ims)
fprintf(fp,classes{ci});
fprintf(fp,'/');
fprintf(fp,ims(ii).name);
fprintf(fp,' ');
fprintf(fp,'%d',ci);
fprintf(fp,'\r\n');
end
end
fclose(fp);
clear all
clc
foodDir='F:\caffe-windows\data\ilsvrc12\val';
numClasses=3
classes=dir(foodDir)
classes = classes([classes.isdir]) ;
classes = {classes(3:numClasses+2).name}
imageName={};
fp = fopen('val.txt','a');
for ci = 1:length(classes)
ims = dir(fullfile(foodDir, classes{ci}, '*.JPEG'))
for ii=1:length(ims)
fprintf(fp,classes{ci});
fprintf(fp,'/');
fprintf(fp,ims(ii).name);
fprintf(fp,' ');
fprintf(fp,'%d',ci);
fprintf(fp,'\r\n');
end
end
fclose(fp);
然後把生成的train.txt和val.txt拷貝到合適的路徑下以備使用(我是把它們拷貝到了F:\caffe-windows\data\ilsvrc12 路徑下)。兩個文件內容如下所示。
2 生成數據庫
數據庫可以選擇LMDB或者LevelDB兩種類型。
使用如下批處理命令,可以實現訓練集的轉化,生成LMDB數據庫。
F:\caffe-windows\Build\x64\Release\convert_imageset.exe --resize_height=256 --resize_width=256 --shuffle --backend="lmdb" F:\caffe-windows\data\ilsvrc12\train\ F:\caffe-windows\data\ilsvrc12\train.txt F:\caffe-windows\examples\imagenet\ilsvrc12_train_lmdb
Pause
在使用如下命令,可以實現驗證集的數據庫轉化。
F:\caffe-windows\Build\x64\Release\convert_imageset.exe --resize_height=256 --resize_width=256 --shuffle --backend="lmdb" F:\caffe-windows\data\ilsvrc12\val\ F:\caffe-windows\data\ilsvrc12\val.txt F:\caffe-windows\examples\imagenet\ilsvrc12_val_lmdb
Pause
3 數據庫均值
F:\caffe-windows\Build\x64\Release\compute_image_mean.exe --backend="lmdb" F:\caffe-windows\examples\imagenet\ilsvrc12_train_lmdb F:\caffe-windows\examples\imagenet\train_mean.binaryproto
Pause
4 訓練網絡
我們採用的是caffe自帶的一些網絡,一些參數如下,有些我們可以根據自己的需要修改。比如,我將最大迭代次數改爲了30000。“train_val.prototxt”文件位於F:\caffe-windows\models\bvlc_alexnet 路徑中(我的caffe的根目錄是F:\caffe-windows)。
在同一個目錄下還有文件“solver.prototxt”。網絡結構參數中,要把數據庫文件和均值文件路徑寫對。用了相對路徑的地方,默認是從caffe的根目錄執行。
由於上面文件中有的參數使用了相對路徑,所以我們需要打開Windows命令行窗口,cd到caffe的根目錄,執行以下命令:
F:\caffe-windows\Build\x64\Release\caffe.exe train --solver=F:\caffe-windows\models\bvlc_alexnet\solver.prototxt
pause
或者把它寫到一個批處理文件中,在caffe根目錄下執行該文件。運行中截圖如下:
運行完成後截圖如下。在使用了GPU的前提下,我的電腦總共花了2個半小時來完成這個任務。