【caffe-windows】 caffe-master 之圖片轉換成lmdb or leveldb


前期准備: 
文件夾train:此文件夾中按類別分好子文件夾,各子文件夾里存放相應圖片 
文件夾test:同train,有多少類就有多少個子文件夾 
trainlabels.txt : 存的是訓練集的標簽 
testlables.txt: 存的是測試集的標簽 
(特別注意:文件的路徑以及文件名要對應)

第一步

生成train文件夾和test文件夾以及標簽文件。本文用的是matlab對數據集進行讀取,然后輸出圖片到相應文件夾中,並且生成標簽文件。此處給出matlab的代碼,請自行分析。 

%% 實現圖片的輸出,將圖片輸出到train和test兩個文件夾下,並且對圖片進行重命名
%  同時給所有圖片打標簽,存於test_labels.txt   trainlabels.txt
%
%

clear
rand('seed',1);
datadir = ('D:\matconvnet-beta23\data\chars74K\Fnt');   % 原數據集所在路徑
catedir=dir(datadir);                                   % 獲取數據集下信息
trainratio = 0.8;                                       % 百分之八十訓練
train_labels= fopen('train_labels.txt','wt');           % 創建標簽文件
test_labels = fopen('test_labels.txt','wt'); 
class_num = 0 ;                                         % 記錄類別
for i =3:length(catedir)
    sampdir=dir(fullfile(datadir,catedir(i).name,'\*.png'));             %    獲取類文件夾下 png圖片,
    disp(['category ',  num2str(i-2) , ' have ', num2str(length(sampdir)),'instance.']); 

        new_folder_train = ['./train/',catedir(i).name];  % 創建各類文件夾,按第i類創建 
        new_folder_test = ['./test/',catedir(i).name];
        mkdir(new_folder_train);                              
        mkdir(new_folder_test);  
        class_num =class_num + 1;
        for j = 1:length(sampdir) 
            if j==1 
              krand = randperm(length(sampdir));   % 隨機選取圖片,防止過擬合
            end
            kk = krand(j);            
            img = imread(fullfile(datadir,catedir(i).name,sampdir(j).name)); %  讀取            
            name = [catedir(i).name,'\',sampdir(kk).name];      % 輸出每張圖片的名稱 

            if j < length(sampdir) *trainratio                 % j是讀取的第j個樣本(子類中),j小於**時,設置為1,1是表示訓練
                imwrite(img,[new_folder_train,'/',sampdir(kk).name]); %  注 :‘.png’
                fprintf(train_labels,'%s %s\n',name,num2str(class_num-1));      % 從0開始編號,寫label的txt文件
                else
                imwrite(img,[new_folder_test,'/',sampdir(kk).name]);
                fprintf(test_labels,'%s %s\n',name,num2str(class_num-1));       % 從0開始編號
            end
            disp(['category ',  num2str(i-2) , ' have ', num2str(length(sampdir)-2),' sample.  '  ... 
                  'sample ',  ' ------ ', num2str(j) ]); 
        end
end
fclose(train_labels);
fclose(test_labels);

  

 

來看看生成的文件,此處將數據存於caffe-master\data\Chars74k下,因此train和test文件夾是在caffe-master\data\Chars74k下。 
123 
如圖所示,train文件夾里有62個子文件夾,分別代表62個類別,每個子文件夾里就是圖片。Test文件夾同理。


這里寫圖片描述

如圖所示,這訓練集的標簽文件,分兩個部分。第一部分是路徑,此處要注意, “Sample001\img001-00051.png ” 要與train文件夾里的圖片的文件名一一對應,否則在用convert_imageset.exe進行轉換格式時候會出現 找不到文件的提示。 
(PS:我直接就是在matlab中輸出圖片時,多加了’.png’,導致圖片的文件名是 Sample001\img001-00051.png.png 最終導致找不到文件) 
第二部分就是標簽了,這里的標簽是從0開始表示第一個類別。特別注意,txt文件中,文件路徑和標簽中有一個空格。

  • 第二步

有了train和test以及對應標簽文件,就可以利用 convert_imageset.exe將圖片轉換成LMDB或者LEVELDB的格式,這里采用批處理的方式。首先在caffe-master\data\Chars74k 文件夾下創建txt文件重命名為:convert_chars74k_LMDB.bat 
一定要把后綴改成 .bat ,然后將以下代碼復制到文本中,保存。

D:\caffe-master\Build\x64\Release\convert_imageset.exe --resize_width=28 --resize_height=28   ./train/ train_labels.txt  train_lmdb -backend=lmdb  
D:\caffe-master\Build\x64\Release\convert_imageset.exe --resize_width=28 --resize_height=28   ./test/ test_labels.txt  test_lmdb -backend=lmdb
Pause

 

這里的每行包含七個部分,第一個部分:D:\caffe-master\Build\x64\Release\convert_imageset.exe 表示 convert_imageset.exe所在路徑(PS,若是用Debug生成的,則在將Release改成Debug即可) 
第二、三部分,是對原始圖片進行了resize,第四部分: 
./train/ 是訓練圖片文件所在路徑,此處用了相對路徑的形式(不了解相對路徑的同學,請度娘 ./ ../的作用) 第五部分,train_labels.txt是訓練集的標簽 
第六部分:train_lmdb 是生成LMDB格式文件的文件名 
第七部分:-backend=lmdb 是所要轉成的格式(要轉成 leveldb的則改成 -backend=leveldb) 
然后雙擊運行convert_chars74k_LMDB.bat

運行正常的話,在文件夾caffe-master\data\Chars74k下會出現 
test_lmdb 和train_lmdb 兩個文件夾。至此,已經將自己的數據集轉換成為LMDB格式的數據了,即caffe可讀的數據格式。

  • 第三步

訓練 
此處和訓練Mnist和Cifar-10一樣可參考(http://blog.csdn.net/u011995719/article/details/53998331) 
訓練需要寫兩個prototxt文件,一個是描述網絡結構的,一個是超參數的設定。 
這里寫圖片描述 這里寫圖片描述

如圖所示,一個是網絡模型描述,一個是超參數設置,特別注意路徑。

寫好這兩個文件之后,就可以利用caffe.exe進行訓練啦。 
在文件夾caffe-master\data\Chars74k下,創建txt文件,重命名為caffe_train_Chars74k.bat(注意改后綴),然后復制以下代碼:

..\..\Build\x64\Release\caffe.exe train --solver=./Chars74k_solver.prototxt
Pause

 

同樣的,注意路徑就好。保存之后,雙擊運行即可。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM