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

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

作者: yuanCruise | 来源:发表于2019-01-05 23:11 被阅读22次

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

相关文章

网友评论

      本文标题:Caffe | 你的第一个分类网络之数据准备

      本文链接:https://www.haomeiwen.com/subject/yibdrqtx.html