【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

 

同样的,注意路径就好。保存之后,双击运行即可。

转载于:https://www.cnblogs.com/TensorSense/p/6744075.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值