Windows環境下使用 Caffe在ImageNet上訓練網絡

在配置好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個半小時來完成這個任務。




發佈了65 篇原創文章 · 獲贊 268 · 訪問量 56萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章