Caffe | 你的第一个分类网络之数据准备

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

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

yuanCruise

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值