caffe-Windows:训练自己的数据

以下流程是根据博客http://blog.csdn.net/zb1165048017/article/details/52447567;并根据自己的实际经验而成,亲测可用。基本上以上博客的一些补充和简化。零基础可以先看上面的博客。

以下路径多是绝对路径,需要自己更改为自己的路径

所有文件所在目录均在cifar-10-batches-mat

步骤一:cifar数据可视化(已有原始数据可忽略此步骤)

将原始的.mat文件转化为.png文件,并放入各自的标签目录下(目录要提前建好)

生成的文件:D:\Caffe\caffe-master\examples\cifar10\cifar-10-batches-mat\test_cifar

D:\Caffe\caffe-master\examples\cifar10\cifar-10-batches-mat\train_cifar可执行文件:read_train.mread_train.m

%cifar转image,可视化
%N*3072维度,每1024分别代表RGB,图像大小32*32
clc;clear;close all;
load batches.meta.mat
numpic=0;
fp=fopen('./train/train_labels.txt','wt');

for i=1:5
    count=0;
    str=['data_batch_' num2str(i) '.mat'];
    fprintf('load %s\n',str);
    load(str)
%     figure(1)
%     set(gcf,'Position',[50,50,900,900],'color','w')
    for j=1:size(data,1)
        count=count+1;
        numpic=numpic+1;
        image=ReadImage(data(j,:));
        label=label_names{labels(j,1)+1};
%         subplot(10,10,count)
        image=uint8(image);
%         imshow(image);
%         title(label)
%         if mod(count,100)==0
%             count=0;
%             pause(0.1);
%         end
        picture_name=['./train_cifar/' label '/' num2str(numpic) label '.png'];
        name=[num2str(numpic) label '.png'];
        imwrite(image,picture_name,'png');
        fprintf(fp,'%s %s\n',name,num2str(labels(j,1)));
    end
end
fclose(fp);

2,建立标签文件
生成文件:test_label.txtD:\Caffe\caffe-master\examples\cifar10\cifar-10-batches-mat
train_label.txtD:\Caffe\caffe-master\examples\cifar10\cifar-10-batches-mat
可执行文件:test_label.mtrain_label.m

%读取图片,制作cifar测试集
fprintf(2,'Reading test data.... \n');
rt_data_dir = './test_cifar';    %测试集的根目录
data_dir='test_cifar'; %标签txt中不需要根目录前面的./,所以新建一个变量存储
subfolders = dir(rt_data_dir); %根目录结构
totalclass=0;%用于存储有类别数
fp=fopen('test_label.txt','wt');  
for ii = 1:length(subfolders),
    subname = subfolders(ii).name;%获取根目录下的所有文件夹名称
    %有两个隐藏文件夹,用于./和../跳转,读取数据集不需要它俩
    if ~strcmp(subname, '.') && ~strcmp(subname, '..'),
        totalclass=totalclass+1;%每一个文件夹都是一个类别
        label_name{totalclass} = subname; %读取此文件夹的名称,也可以自己建立一个标签集,依次取
        data = dir(fullfile(rt_data_dir, subname, '*.png'));  %dir:获取指定文件夹下的所有子文件夹和文件,取出所有后缀为png的数据
        c_num=length(data);%当前类别有多少个数据
        for jj=1:c_num
          name=fullfile(data_dir, subname, data(jj).name);  %fullfile:由磁盘符,目录和文件名生成完整的文件路径
          fprintf(fp,'%s %s\n',name,num2str(totalclass-1));%从0开始编号
        end
        fprintf(1,'正在处理类别:%s\n',label_name{totalclass});
    end
end


3,文件转化,转化为leveldb,并可以改变文件大小
生成的文件:train_leveldbD:\Caffe\caffe-master\examples\cifar10\cifar-10-batches-mat
test_leveldbD:\Caffe\caffe-master\examples\cifar10\cifar-10-batches-mat

可执行文件:convert.bat 

D:\Caffe\caffe-master\Build\x64\Release\convert_imageset.exe --shuffle .\ test_label.txt test_leveldb -backend=leveldb

D:\Caffe\caffe-master\Build\x64\Release\convert_imageset.exe --shuffle .\ train_label.txt train_leveldb -backend=leveldb

这一步关键是--shuffle 参数,由于上面生成的数据标签都是顺序的,没有--shuffle参数训练了好多次都没能够收敛,同时可选的参数还有resize等。

D:\Caffe\caffe-master\Build\x64\Release\convert_imageset.exe --resize_width=32 --resize_height=32 .\ test_label.txt test_leveldb -backend=leveldb

4,计算均值
生成文件:mean.binaryproto
可执行文件:mean.bat
D:\Caffe\caffe-master\Build\x64\Debug\compute_image_mean.exe .\train_leveldb mean_train.binaryproto --backend=leveldb

D:\Caffe\caffe-master\Build\x64\Debug\compute_image_mean.exe .\test_leveldb mean_test.binaryproto --backend=leveldb

5,训练样本

可执行文件:train.bat

D:\Caffe\caffe-master\Build\x64\Release\caffe.exe train --solver=cifar10_quick_solver.prototxt
这一步需要更改cifar10_quick_solver.prototxt 中的路径

以及cifar10_quick_train_test.prototxt中TRAIN和TEST中mean_file及source的路径




没有更多推荐了,返回首页