0.准备数据集
将每个类别的图片存放到对应的文件夹中,如下图所示。需要注意的是每个图片的名称不要有空格和括号,否则会导致生成lmdb文件的时候路径读入错误。
1.生成train.txt和test.txt
- train.txt:存的是训练集数据路径和类别
- test.txt:存的是测试集数据路径和类别
(1)生成绝对路径
利用如下的LoadAbsoluteName.py得到指定格式的(当前实例中的.jpg格式的图片)文件的绝对路径。该路径用于之后caffe训练数据集的生成。生成如下图所示的绝对路径。
#LoadAbsoluteName.py
#提取指定文件夹下对应格式文件的绝对路径
import os
def ListFilesToTxt(dir,file,wildcard,recursion,NeedAbsolutePath):
exts = wildcard.split(" ")
files = os.listdir(dir)
for name in files:
fullname = os.path.join(dir,name)
if(os.path.isdir(fullname) & recursion):
ListFilesToTxt(fullname,file,wildcard,recursion,NeedAbsolutePath)
else:
for ext in exts:
if (name.endswith(ext)):
if NeedAbsolutePath:
file.write(fullname+"\n")
else:
file.write(name+"\n")
break
def Test():
dir = r"D:\\DataSet\\苹果"
outfile = u"苹果.txt"
wildcard = ".jpg"
file = open(outfile,"w")
if not file:
print("can not open the file")
ListFilesToTxt(dir,file,wildcard,1,1)
file.close()
if __name__ == "__main__":
Test()
(2)添加类别号
利用如下的AddSthInTail.py将每个路径后添加上指定的类别。这个步骤和上一个步骤若是在Windows下操作一定要注意编码以及中文问题,建议大家不要在任何的地方出现中文。本文为了便于理解才使用中文,所以代码段中才会出现各种奇怪的标号如"u"等等。
#-*-coding:utf8-*-
#AddSthInTail.py
#该代码能够对txt文件中每一行最后加上一个空格和数值
#用于caffe分类时,末尾类别号的添加(注意从零开始)
with open(u"Add香蕉.txt","w") as fout:
with open(u"香蕉.txt","r") as fin:
flines = fin.readlines()
for line in flines:
old = line.strip()
add = " "+"2"+"\n"
new = old + add
fout.write(new)
(3)拆分训练集和测试集
本例将数据集简单的拆分为9:1。就是每一类中将90%数据作为训练集,10%为测试集。新建train和test两个文件夹,并把利用下述CutTrainTestForOneClass.py代码生成的四种train和test的txt分别放入对应文件夹,如下图。
#-*-coding:utf8-*-
#CutTrainTestForOneClass.py
#把某一个类别的txt按照90%的比例切分训练集和测试集
with open(u"香蕉train.txt","w") as fout1:
with open(u"香蕉test.txt","w") as fout2:
with open(u"Add香蕉.txt") as fin:
flines = fin.readlines()
TotalNum = len(flines)
for i in range(TotalNum):
if(i>=(TotalNum*0.9)):
fout2.write(flines[i])
else:
fout1.write(flines[i])
(4)合并文件,生成train.txt和test.txt
利用CombineTxt.py代码,将上述的各个类别的txt合成两个:train.txt和test.txt。至此文件准备工作完成,就可以进入caffe的操作阶段了,我们下一篇接着讲~。
#-*-coding:utf8-*-
#CombineTxt.py
#把当前文件夹中的几个txt文件合并成一个
import os
filedir = r"D:\\DataSet\\test"
filenames= os.listdir(filedir)
with open("test.txt","w") as fin:
i=0
for filename in filenames:
filepath = filedir + "\\"+filename
for line in open(filepath):
i+=1
fin.writelines(line)
print i
网友评论