生成训练所需标签的工具
creat_labels.m
clc;
clear;
%%下面生成顺序的trainval.txt和labels文件
%先设置train占数据集的百分比,余下部分为val
maindir='E:\FaceAligned\Aligned\';
wf = fopen('trainval.txt','w');
lbf=fopen('labels.txt','w');
train_percent=0.9;%val_percent=1-train_percent
subdir = dir(maindir);
k = 1;
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','Aligned/',label,subsubdir(j).name,ii);
numoffile=numoffile+1;
% im = strcat(maindir,label,subsubdir(j).name);
%
% img = imread(im);
% img = imresize(img,[64,64]);
%
% if length(size(img)) == 2
% gray = img;
% else
% gray = rgb2gray(img);
% end
%
% gray = double(gray) / 255;
%
% file = [];
% file = ['test\',num2str(k),'.bmp'];
% imwrite(gray,file);
%
fprintf('处理标签为%d的第%d张图片\n',ii,j-2);
k=k+1;
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');