Caffe实战Day1-准备训练数据

来源:互联网 发布:网络管理系统组成部分 编辑:程序博客网 时间:2024/05/17 10:09
1、准备数据集
这一步就是想方设法搞来训练数据,可以是图像,可以是语音文件、视频等等。
ok,现在假设你找到了所需的数据集(本教程就以图片为例),数据集需要进行预处理,这部分工作量比较大,需要将庞大的数据集人工分类好。

每个文件夹下就是相应的图片,然后将每一类的图片重命名,切记:不同类的图片要有区别,比如bus类的图片命名为300-399(因为我这里每一类的图片不超过100张,所以用三位数表示,一般命名为六位数数字串),dinosaur类图片为400-499....以此类推,命名完所有类别图片。

2、制作训练集(train)及验证集(val)
第一步当然是新建两个文件夹train和val用来存放训练集、验证集。

第二步确定训练集大小和验证集大小,比如在本教程,我使用了一共五类图片共500张,每种100张,我的选择是每类图片中20张用于验证,80张用于训练,即train文件夹里面共有400张图片,val文件夹下共有100张图片。
下图是train文件夹下的图片:

下图时val文件夹下的图片:

如图所示我是把每类中的*00-*19号丢进val文件夹里面,*20-*99丢进train文件夹里。
第三步整理图片
这一步实现方法很多,C++/Python/sh脚本等等,我们这里使用python,原因是代码简洁且简单。
不过要先新建两个txt文件train.txt和val.txt用来保存图片名称和对应标签。
get_data.py
# -*- coding: UTF-8 -*-# Author:dasuda# Date:2017.8.18import osimport repath_train = "train文件夹路径" #建议是用绝对路径path_val = "val文件夹路径"if not os.path.exists(path_train):print "path_train not exist!!!"ox._exit()else:print "path_train exist!!!"if not os.path.exists(path_val):print "path_val not exist!!!"ox._exit()else:print "path_val exist!!!"file_train = open('train.txt的路径','wt')file_val = open('val.txt的路径','wt')file_train.truncate()file_val.truncate()pa = r".+(?=\.)"pattern = re.compile(pa)print "now,creating train.txt..."for filename in os.listdir(path_train):#print filename#abspath = os.path.join(path_train,filename);group_lable = pattern.search(filename)str_label = str(group_lable.group())if str_label[0]=='3':train_lable = '0'elif str_label[0]=='4':train_lable = '1'elif str_label[0]=='5':train_lable = '2'elif str_label[0]=='6':train_lable = '3'elif str_label[0]=='7':train_lable = '4'else:print "error data!!!"ox._exit()#print abspath,train_lable.group()file_train.write(filename+' '+train_lable+'\n')print "train.txt created!!!"print "-----------------------------------"print "now,creating val.txt..."for filename in os.listdir(path_val):#print filename#abspath = os.path.join(path_val,filename);group_lable = pattern.search(filename)str_label = str(group_lable.group())if str_label[0]=='3':val_lable = '0'elif str_label[0]=='4':val_lable = '1'elif str_label[0]=='5':val_lable = '2'elif str_label[0]=='6':val_lable = '3'elif str_label[0]=='7':val_lable = '4'else:print "error data!!!"ox._exit()#print abspath,train_lable.group()file_val.write(filename+' '+val_lable+'\n')print "val.txt created!!!"print "function over!!!"
执行完之后,若路径都正确,命令行输出为:

接下来查看一下train.txt和val.txt的内容(乱序排列)

这里提一下:网上各种各样的教程txt文件格式可谓是五花八门,谁也没说清楚,为什么是这样的格式,为什么不是那样的格式,在这里澄清一下,这里的txt格式没有固定的格式,他只是生成lmdb的中间文件,他这里的格式只与生成lmdb时有关,等到下一节讲解怎样生成lmdb文件时候,你就会恍然大悟。我的建议是:txt里面命名尽可能简单,最好是像我这样,直接-文件名 标签。
原创粉丝点击