生成分类标签文件.txt

xiaoxiao2021-02-28  137

caffe对于训练数据格式,支持:lmdb、h5py……,其中lmdb数据格式常用于单标签数据,像分类等,经常使用lmdb的数据格式。对于回归等问题,或者多标签数据,一般使用h5py数据的格式。本文介绍两种生成caffe特定格式文件所需的标签文件train.txt和val.txt的方法。

1、用matlab语言编写

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

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');  2、用python语言编写 原文地址:http://m.blog.csdn.net/article/details?id=52149743 路径与标签之间是一个空格标签最好从0开始。 将代码保存为.py的Python文件,运行该Python代码生成 txt 文件。

:图像存储路径和代码.py文件的位置。

<pre class="python" name="code">#coding:utf-8   '''''  Created on Jul 29, 2016    @author: sgg  '''      "<span style=""font-family:Arial;font-size:18px;"">"   "<span style=""font-size:18px;"">"   "<span style=""font-size:18px;"">"    import os      def IsSubString(SubStrList,Str):       flag=True       for substr in SubStrList:           if not(substr in Str):               flag=False              return flag      #扫面文件   def GetFileList(FindPath,FlagStr=[]):       FileList=[]       FileNames=os.listdir(FindPath)       if len(FileNames)>0:           for fn in FileNames:               if len(FlagStr)>0:                   if IsSubString(FlagStr,fn):                       fullfilename=os.path.join(FindPath,fn)                       FileList.append(fullfilename)               else:                   fullfilename=os.path.join(FindPath,fn)                   FileList.append(fullfilename)              if len(FileList)>0:           FileList.sort()                  return FileList            train_txt=open('train.txt','w')   #制作标签数据,如果是狗的,标签设置为0,如果是猫的标签为1   imgfile=GetFileList('train/train_cat')#将数据集放在与.py文件相同目录下   for img in imgfile:       str1=img+' '+'1'+'\n'        #用空格代替转义字符 \t        train_txt.writelines(str1)             imgfile=GetFileList('train/train_dog')   for img in imgfile:       str2=img+' '+'0'+'\n'       train_txt.writelines(str2)   train_txt.close()         #测试集文件列表   test_txt=open('val.txt','w')   #制作标签数据,如果是男的,标签设置为0,如果是女的标签为1   imgfile=GetFileList('val/test_cat')#将数据集放在与.py文件相同目录下   for img in imgfile:       str3=img+' '+'1'+'\n'       test_txt.writelines(str3)             imgfile=GetFileList('val/test_dog')   for img in imgfile:       str4=img+' '+'0'+'\n'       test_txt.writelines(str4)   test_txt.close()      print("成功生成文件列表"

转载请注明原文地址: https://www.6miu.com/read-27011.html

最新回复(0)