基于caffe的图像分类(1)——制作train.txt和val.txt文件

做的标签文件如下:(无打乱)

image/Audi/000001.jpg 0
image/Audi/000002.jpg 0
image/Audi/000003.jpg 0
image/Audi/000004.jpg 0

image文件夹下是各类别文件夹,如下:


Audi等文件夹内放的是该类别的图片,最好先对这些图片重命名为统一格式,如000001.jpg,000002.jpg这种格式,重命名代码

参考http://blog.csdn.net/sinat_30071459/article/details/50723212

下面的代码只做了训练集和验证集,没有做测试集,可以自己修改代码做测试集。

clc;
clear;
%%下面生成顺序的trainval.txt和labels文件
%先设置train占数据集的百分比,余下部分为val
maindir='image\';
wf = fopen('trainval.txt','w');
lbf=fopen('labels.txt','w');
train_percent=0.9;%val_percent=1-train_percent

subdir = dir(maindir);
ii=-1;
numoffile=0;
for i = 1:length(subdir)%第一层目录
  if ~strcmp(subdir(i).name ,'.') && ~strcmp(subdir(i).name,'..')
     ii=ii+1;
     label = subdir(i).name;
     fprintf(lbf,'%s\n',label);
     label=strcat(label,'/');
     subsubdir = dir(strcat(maindir,label));
    for j=1:length(subsubdir)
         if ~strcmp(subsubdir(j).name ,'.') && ~strcmp(subsubdir(j).name,'..')
           fprintf(wf,'%s%s%s %d\n','image/',label,subsubdir(j).name,ii);
           numoffile=numoffile+1;
           fprintf('处理标签为%d的第%d张图片\n',ii,j-2);
         end
    end
   
  end
end
fclose(wf);
fclose(lbf);

%%
%下面将trainval的顺序打乱
file=cell(1,numoffile);
fin=fopen('trainval.txt','r');
i=1;
while ~feof(fin)
    tline=fgetl(fin);
    file{i}=tline;
    i=i+1;
end
fclose(fin);

fprintf('\ntrainval.txt共%d行,开始打乱顺序....\n',numoffile);
pause(1);
rep=randperm(numoffile);
fout=fopen('trainval.txt','w');
for i=1:numoffile
    fprintf(fout,'%s\n',file{rep(i)});
end
fprintf('生成的trainval.txt已打乱顺序.\n');
fclose(fout);

%%
%下面根据打乱顺序的trainval.txt生成train.txt和val.txt
fprintf('开始生成train.txt和val.txt...\n');
pause(1);
train_file=fopen('train.txt','w');
text_file=fopen('val.txt','w');
trainvalfile=fopen('trainval.txt','r');

num_train=sort(randperm(numoffile,floor(numoffile*train_percent)));
num_test=setdiff(1:numoffile,num_train);
i=1;
while ~feof(trainvalfile)
    tline=fgetl(trainvalfile);
    if ismember(i,num_train)
        fprintf(train_file,'%s\n',tline);
    else
        fprintf(text_file,'%s\n',tline);
    end
    i=i+1;
end
fclose(train_file);
fclose(text_file);
fclose(trainvalfile);
fprintf('共有图片%d张!\n',numoffile);
fprintf('Done!\n');

代码将操作分成几个步骤做,如果不希望打乱顺序,可以将打乱顺序部分代码注释掉。

最后,得到四个txt文件:

基于caffe的图像分类(1)——制作train.txt和val.txt文件_第1张图片

根据train.txt和val.txt生成训练集和验证集的lmdb文件,具体过程请看:基于caffe的图像分类(2)——制作lmdb和计算均值

你可能感兴趣的:(caffe)