1. 程式人生 > >生成分類標籤檔案.txt

生成分類標籤檔案.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資料夾下是各類別資料夾,如下:


  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. subdir = dir(maindir);  
  10. ii=-1;  
  11. numoffile=0;  
  12. for i = 1:length(subdir)%第一層目錄  
  13.   if ~strcmp(subdir(i).name ,'.') && ~strcmp(subdir(i).name,'..')  
  14.      ii=ii+1;  
  15.      label = subdir(i).name;  
  16.      fprintf(lbf,'%s\n',label);  
  17.      label=strcat(label,'/');  
  18.      subsubdir = dir(strcat(maindir,label));  
  19.     for j=1:length(subsubdir)  
  20.          if ~strcmp(subsubdir(j).name ,'.') && ~strcmp(subsubdir(j).name,'..')  
  21.            fprintf(wf,'%s%s%s %d\n','image/',label,subsubdir(j).name,ii);  
  22.            numoffile=numoffile+1;  
  23.            fprintf('處理標籤為%d的第%d張圖片\n',ii,j-2);  
  24.          end  
  25.     end  
  26.   end  
  27. end  
  28. fclose(wf);  
  29. fclose(lbf);  
  30. %%  
  31. %下面將trainval的順序打亂  
  32. file=cell(1,numoffile);  
  33. fin=fopen('trainval.txt','r');  
  34. i=1;  
  35. while ~feof(fin)  
  36.     tline=fgetl(fin);  
  37.     file{i}=tline;  
  38.     i=i+1;  
  39. end  
  40. fclose(fin);  
  41. fprintf('\ntrainval.txt共%d行,開始打亂順序....\n',numoffile);  
  42. pause(1);  
  43. rep=randperm(numoffile);  
  44. fout=fopen('trainval.txt','w');  
  45. for i=1:numoffile  
  46.     fprintf(fout,'%s\n',file{rep(i)});  
  47. end  
  48. fprintf('生成的trainval.txt已打亂順序.\n');  
  49. fclose(fout);  
  50. %%  
  51. %下面根據打亂順序的trainval.txt生成train.txt和val.txt  
  52. fprintf('開始生成train.txt和val.txt...\n');  
  53. pause(1);  
  54. train_file=fopen('train.txt','w');  
  55. text_file=fopen('val.txt','w');  
  56. trainvalfile=fopen('trainval.txt','r');  
  57. num_train=sort(randperm(numoffile,floor(numoffile*train_percent)));  
  58. num_test=setdiff(1:numoffile,num_train);  
  59. i=1;  
  60. while ~feof(trainvalfile)  
  61.     tline=fgetl(trainvalfile);  
  62.     if ismember(i,num_train)  
  63.         fprintf(train_file,'%s\n',tline);  
  64.     else  
  65.         fprintf(text_file,'%s\n',tline);  
  66.     end  
  67.     i=i+1;  
  68. end  
  69. fclose(train_file);  
  70. fclose(text_file);  
  71. fclose(trainvalfile);  
  72. fprintf('共有圖片%d張!\n',numoffile);  
  73. fprintf('Done!\n');  
2、用python語言編寫 原文地址:http://m.blog.csdn.net/article/details?id=52149743 路徑與標籤之間是一個空格標籤最好從0開始。將程式碼儲存為.py的Python檔案,執行該Python程式碼生成 txt 檔案。

:影象儲存路徑和程式碼.py檔案的位置。

  1. <pre class="python" name="code">#coding:utf-8
  2. ''''' 
  3. Created on Jul 29, 2016 
  4. @author: sgg 
  5. '''
  6. "<span style=""font-family:Arial;font-size:18px;"">"
  7. "<span style=""font-size:18px;"">"
  8. "<span style=""font-size:18px;"">"
  9. import os  
  10. def IsSubString(SubStrList,Str):  
  11.     flag=True
  12.     for substr in SubStrList:  
  13.         ifnot(substr in Str):  
  14.             flag=False
  15.     return flag  
  16. #掃面檔案
  17. def GetFileList(FindPath,FlagStr=[]):  
  18.     FileList=[]  
  19.     FileNames=os.listdir(FindPath)  
  20.     if len(FileNames)>0:  
  21.         for fn in FileNames:  
  22.             if len(FlagStr)>0:  
  23.                 if IsSubString(FlagStr,fn):  
  24.                     fullfilename=os.path.join(FindPath,fn)  
  25.                     FileList.append(fullfilename)  
  26.             else:  
  27.                 fullfilename=os.path.join(FindPath,fn)  
  28.                 FileList.append(fullfilename)  
  29.     if len(FileList)>0:  
  30.         FileList.sort()  
  31.     return FileList  
  32. train_txt=open('train.txt','w')  
  33. #製作標籤資料,如果是狗的,標籤設定為0,如果是貓的標籤為1
  34. imgfile=GetFileList('train/train_cat')#將資料集放在與.py檔案相同目錄下
  35. for img in imgfile:  
  36.     str1=img+' '+'1'+'\n'#用空格代替轉義字元 \t 
  37.     train_txt.writelines(str1)  
  38. imgfile=GetFileList('train/train_dog')  
  39. for img in imgfile:  
  40.     str2=img+' '+'0'+'\n'
  41.     train_txt.writelines(str2)  
  42. train_txt.close()  
  43. #測試集檔案列表
  44. test_txt=open('val.txt','w')  
  45. #製作標籤資料,如果是男的,標籤設定為0,如果是女的標籤為1
  46. imgfile=GetFileList('val/test_cat')#將資料集放在與.py檔案相同目錄下
  47. for img in imgfile:  
  48.     str3=img+' '+'1'+'\n'
  49.     test_txt.writelines(str3)  
  50. imgfile=GetFileList('val/test_dog')  
  51. for img in imgfile:  
  52.     str4=img+' '+'0'+'\n'
  53.     test_txt.writelines(str4)  
  54. test_txt.close()  
  55. print("成功生成檔案列表"