生成分類標籤檔案.txt
阿新 • • 發佈:2019-01-27
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
- 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');
注:影象儲存路徑和程式碼.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:
- ifnot(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("成功生成檔案列表")