生成分类标签文件.txt


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


1、用matlab语言编写

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

  1. image/Audi/000001.jpg 0  
  2. image/Audi/000002.jpg 0  
  3. image/Audi/000003.jpg 0  
  4. image/Audi/000004.jpg 0 
image文件夹下是各类别文件夹,如下:

(Audi等文件夹内放的是该类别的图片,最好先对这些图片重命名为统一格式,如000001.jpg,000002.jpg这种格式,重命名代码 ,参考http://blog.csdn.net/sinat_30071459/article/details/50723212)

生成分类标签文件.txt_第1张图片

 
  
  1. clc;  
  2. clear;  
  3. %%下面生成顺序的trainval.txt和labels文件  
  4. %先设置train占数据集的百分比,余下部分为val  
  5. maindir='image\';  
  6. wf = fopen('trainval.txt','w');  
  7. lbf=fopen('labels.txt','w');  
  8. train_percent=0.9;%val_percent=1-train_percent  
  9.   
  10. subdir = dir(maindir);  
  11. ii=-1;  
  12. numoffile=0;  
  13. for i = 1:length(subdir)%第一层目录  
  14.   if ~strcmp(subdir(i).name ,'.') && ~strcmp(subdir(i).name,'..')  
  15.      ii=ii+1;  
  16.      label = subdir(i).name;  
  17.      fprintf(lbf,'%s\n',label);  
  18.      label=strcat(label,'/');  
  19.      subsubdir = dir(strcat(maindir,label));  
  20.     for j=1:length(subsubdir)  
  21.          if ~strcmp(subsubdir(j).name ,'.') && ~strcmp(subsubdir(j).name,'..')  
  22.            fprintf(wf,'%s%s%s %d\n','image/',label,subsubdir(j).name,ii);  
  23.            numoffile=numoffile+1;  
  24.            fprintf('处理标签为%d的第%d张图片\n',ii,j-2);  
  25.          end  
  26.     end  
  27.      
  28.   end  
  29. end  
  30. fclose(wf);  
  31. fclose(lbf);  
  32.   
  33. %%  
  34. %下面将trainval的顺序打乱  
  35. file=cell(1,numoffile);  
  36. fin=fopen('trainval.txt','r');  
  37. i=1;  
  38. while ~feof(fin)  
  39.     tline=fgetl(fin);  
  40.     file{i}=tline;  
  41.     i=i+1;  
  42. end  
  43. fclose(fin);  
  44.   
  45. fprintf('\ntrainval.txt共%d行,开始打乱顺序....\n',numoffile);  
  46. pause(1);  
  47. rep=randperm(numoffile);  
  48. fout=fopen('trainval.txt','w');  
  49. for i=1:numoffile  
  50.     fprintf(fout,'%s\n',file{rep(i)});  
  51. end  
  52. fprintf('生成的trainval.txt已打乱顺序.\n');  
  53. fclose(fout);  
  54.   
  55. %%  
  56. %下面根据打乱顺序的trainval.txt生成train.txt和val.txt  
  57. fprintf('开始生成train.txt和val.txt...\n');  
  58. pause(1);  
  59. train_file=fopen('train.txt','w');  
  60. text_file=fopen('val.txt','w');  
  61. trainvalfile=fopen('trainval.txt','r');  
  62.   
  63. num_train=sort(randperm(numoffile,floor(numoffile*train_percent)));  
  64. num_test=setdiff(1:numoffile,num_train);  
  65. i=1;  
  66. while ~feof(trainvalfile)  
  67.     tline=fgetl(trainvalfile);  
  68.     if ismember(i,num_train)  
  69.         fprintf(train_file,'%s\n',tline);  
  70.     else  
  71.         fprintf(text_file,'%s\n',tline);  
  72.     end  
  73.     i=i+1;  
  74. end  
  75. fclose(train_file);  
  76. fclose(text_file);  
  77. fclose(trainvalfile);  
  78. fprintf('共有图片%d张!\n',numoffile);  
  79. fprintf('Done!\n');  
2、用python语言编写 原文地址:http://m.blog.csdn.net/article/details?id=52149743 路径与标签之间是一个空格标签最好从0开始。
将代码保存为.py的Python文件,运行该Python代码生成 txt 文件。

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

  1. class="python" name="code">#coding:utf-8  
  2. ''''' 
  3. Created on Jul 29, 2016 
  4.  
  5. @author: sgg 
  6. '''  
  7.   
  8. ""font-family:Arial;font-size:18px;"">"  
  9. ""font-size:18px;"">"  
  10. ""font-size:18px;"">"   
  11. import os  
  12.   
  13. def IsSubString(SubStrList,Str):  
  14.     flag=True  
  15.     for substr in SubStrList:  
  16.         if not(substr in Str):  
  17.             flag=False  
  18.       
  19.     return flag  
  20.   
  21. #扫面文件  
  22. def GetFileList(FindPath,FlagStr=[]):  
  23.     FileList=[]  
  24.     FileNames=os.listdir(FindPath)  
  25.     if len(FileNames)>0:  
  26.         for fn in FileNames:  
  27.             if len(FlagStr)>0:  
  28.                 if IsSubString(FlagStr,fn):  
  29.                     fullfilename=os.path.join(FindPath,fn)  
  30.                     FileList.append(fullfilename)  
  31.             else:  
  32.                 fullfilename=os.path.join(FindPath,fn)  
  33.                 FileList.append(fullfilename)  
  34.       
  35.     if len(FileList)>0:  
  36.         FileList.sort()  
  37.           
  38.     return FileList  
  39.   
  40.   
  41.   
  42. train_txt=open('train.txt','w')  
  43. #制作标签数据,如果是狗的,标签设置为0,如果是猫的标签为1  
  44. imgfile=GetFileList('train/train_cat')#将数据集放在与.py文件相同目录下  
  45. for img in imgfile:  
  46.     str1=img+' '+'1'+'\n'        #用空格代替转义字符 \t   
  47.     train_txt.writelines(str1)  
  48.       
  49.   
  50. imgfile=GetFileList('train/train_dog')  
  51. for img in imgfile:  
  52.     str2=img+' '+'0'+'\n'  
  53.     train_txt.writelines(str2)  
  54. train_txt.close()  
  55.   
  56.   
  57. #测试集文件列表  
  58. test_txt=open('val.txt','w')  
  59. #制作标签数据,如果是男的,标签设置为0,如果是女的标签为1  
  60. imgfile=GetFileList('val/test_cat')#将数据集放在与.py文件相同目录下  
  61. for img in imgfile:  
  62.     str3=img+' '+'1'+'\n'  
  63.     test_txt.writelines(str3)  
  64.       
  65.   
  66. imgfile=GetFileList('val/test_dog')  
  67. for img in imgfile:  
  68.     str4=img+' '+'0'+'\n'  
  69.     test_txt.writelines(str4)  
  70. test_txt.close()  
  71.   
  72. print("成功生成文件列表"


你可能感兴趣的:(图像分类)