做的标签文件如下:(无打乱)
image/Audi/000001.jpg 0
image/Audi/000002.jpg 0
image/Audi/000003.jpg 0
image/Audi/000004.jpg 0
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文件:
根据train.txt和val.txt生成训练集和验证集的lmdb文件,具体过程请看:基于caffe的图像分类(2)——制作lmdb和计算均值