美文网首页
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