笔记2:caffe制作行人检测数据集
来源:互联网 发布:在淘宝买的机票怎么取 编辑:程序博客网 时间:2024/05/18 11:02
lmdb用于单标签数据。为了简单起见,我后面通过一个行人与非行人分类问题作为例子,进行相关数据制作讲解。
首先新建一个文件夹,本文命名为caffe_person_Detection,包含train、val文件夹。
1、数据准备
首先我们要准备好训练数据,然后新建一个名为train的文件夹和一个val的文件夹:
train文件存放训练数据,val文件存放验证数据。然后我们在train文件下面,把训练数据包含人、不包含人图片各放在一个文件夹下面:
同样的我们在val文件下面也创建文件夹:
两个文件也是分别存我们用于验证的图片数据包含人与不包含人图像文件。我们在train/person下面存放了都是包含人的图片,然后在val/person下面存放的都是验证数据包含人的图片。
2、标签文件.txt文件制作
接着我们需要制作一个train.txt、val.txt文件,这两个文件分别包含了我们上面的训练数据的图片路径,以及其对应的标签,如下所示。
我们把包含人的图片标号为1,不包含人的图片标记为0。标签数据文件txt的生成可以通过如下代码,通过扫描路径包含人、不包含人下面的图片,得到标签文件train.txt和val.txt,
注意:必须是这样的person/hah.jpg 1格式。 路径与标签之间是一个空格,标签最好从0开始。
#coding:utf-8 import os def IsSubString(SubStrList,Str): flag=True for substr in SubStrList: if not(substr in Str): flag=False return flag #扫面文件 def GetFileList(FindPath,FlagStr=[]): FileList=[] FileNames=os.listdir(FindPath) if len(FileNames)>0: for fn in FileNames: if len(FlagStr)>0: if IsSubString(FlagStr,fn): fullfilename=os.path.join(FindPath,fn) FileList.append(fullfilename) else: fullfilename=os.path.join(FindPath,fn) FileList.append(fullfilename) if len(FileList)>0: FileList.sort() return FileList train_txt=open('train.txt','w') #制作标签数据,如果是狗的,标签设置为0,如果是猫的标签为1 imgfile=GetFileList('train/person') #将数据集放在与.py文件相同目录下 for img in imgfile: str1=img[6:]+' '+'1'+'\n' #用空格代替转义字符 \t train_txt.writelines(str1) imgfile=GetFileList('train/non-person') for img in imgfile: str2=img[6:]+' '+'0'+'\n' train_txt.writelines(str2) train_txt.close() #测试集文件列表 test_txt=open('val.txt','w') #制作标签数据,如果是男的,标签设置为0,如果是女的标签为1 imgfile=GetFileList('val/person')#将数据集放在与.py文件相同目录下 for img in imgfile: str3=img[4:]+' '+'1'+'\n' test_txt.writelines(str3) imgfile=GetFileList('val/non-person') for img in imgfile: str4=img[4:]+' '+'0'+'\n' test_txt.writelines(str4) test_txt.close() print("成功生成文件列表")
上述代码保存为.py的Python文件,运行该Python代码生成 txt 文件。
执行:python create_lmdb_pedestrian_datatxt.py可生成train.txt 、val.txt,
注:本文中生成txt文件时,caffe_person_Detection文件夹与生成文件列表的代码.py文件位于同一个目录下。
3、生成lmdb数据
接着我们的目的就是要通过上面的四个文件(两个txt文件列表、train与val两个图库),把图片的数据和其对应的标签打包起来,打包成lmdb数据格式:在caffe-master创建caffe_person_Detection文件夹,然后将caffe-master下的imagenet文件夹的create_imagenet.sh复制到该文件夹下进行修改,进行训练和测试路径的设置,运行该sh.
注意:这里是对.sh文件进行修改,在终端打开该文件后进行修改并保存。修改可参考如下代码:
#!/usr/bin/env sh# Create the imagenet lmdb inputs# N.B. set the path to the imagenet train + val data dirsset -eEXAMPLE=/home/zhangjing/zj/project/deepLearning/caffe-master/caffe_person_Detection #生成模型训练数据文件夹,即create_imagenet.sh所在文件夹DATA=/home/zhangjing/zj/project/deepLearning/caffe-master/caffe_person_Detection #python脚本处理数据路径,即生成的文件列表.txt文件所在文件夹 TOOLS=/home/zhangjing/zj/project/deepLearning/caffe-master/tools #caffe的工具库,不用更改 TRAIN_DATA_ROOT=/home/zhangjing/zj/project/deepLearning/caffe-master/caffe_person_Detection/train/VAL_DATA_ROOT=/home/zhangjing/zj/project/deepLearning/caffe-master/caffe_person_Detection/val/# Set RESIZE=true to resize the images to 256x256. Leave as false if images have# already been resized using another tool.RESIZE=true // 默认是falseif $RESIZE; then RESIZE_HEIGHT=256 //可改 RESIZE_WIDTH=256 //可改else RESIZE_HEIGHT=0 RESIZE_WIDTH=0fiif [ ! -d "$TRAIN_DATA_ROOT" ]; then echo "Error: TRAIN_DATA_ROOT is not a path to a directory: $TRAIN_DATA_ROOT" echo "Set the TRAIN_DATA_ROOT variable in create_imagenet.sh to the path" \ "where the ImageNet training data is stored." exit 1fiif [ ! -d "$VAL_DATA_ROOT" ]; then echo "Error: VAL_DATA_ROOT is not a path to a directory: $VAL_DATA_ROOT" echo "Set the VAL_DATA_ROOT variable in create_imagenet.sh to the path" \ "where the ImageNet validation data is stored." exit 1fiecho "Creating train lmdb..."rm -rf $EXAMPLE/train_lmdb rm -rf $EXAMPLE/val_lmdb #删除已存在的lmdb格式文件,若在已存在lmdb格式的文件夹下再添加lmdb文件,会出现错误 GLOG_logtostderr=1 $TOOLS/convert_imageset \ --resize_height=$RESIZE_HEIGHT \ --resize_width=$RESIZE_WIDTH \ --shuffle \ $TRAIN_DATA_ROOT \ $DATA/train.txt \ $EXAMPLE/personDetection_train_lmdb //可改echo "Creating val lmdb..."GLOG_logtostderr=1 $TOOLS/convert_imageset \ --resize_height=$RESIZE_HEIGHT \ --resize_width=$RESIZE_WIDTH \ --shuffle \ $VAL_DATA_ROOT \ $DATA/val.txt \ $EXAMPLE/personDetection_val_lmdb //可改echo "Done."
执行:create_imagenet.sh 生成lmdb数据集,如下图
生成lmdb数据过程是如下:
备注:
如果不修改RESIZE为true,可能会报错:
coco@coco-OMEN-by-HP-Laptop:~/caffe/examples/myself$ ./make_imagenet_mean.shF1008 15:47:15.137737 13163 compute_image_mean.cpp:77] Check failed: size_in_datum == data_size (213180 vs. 196608) Incorrect data field size 213180
原因:上一步生成lmdb文件时,图片归一化没有成功,更改myself文件夹下的create_imagenet.sh文件,将 RESIZE=false改为RESIZE=true4、验证生成的lmdb数据
通过运行上面的脚本,我们将得到文件夹train_lmdb val_lmdb:
我们打开train_lmdb文件夹并查看一下文件data.mdb数据的大小,如果这个数据包好了我们所有的训练图片数据,查一下这个文件的大小是否符合预期大小,如果文件的大小才几k而已,那么就代表你没有打包成功,估计是因为路径设置错误。
制作完数据集文件如下:
参考文献:
http://blog.csdn.net/liuweizj12/article/details/52149743 (写的很不错的,还有出现问题解决办法
http://www.07net01.com/2017/01/1768872.html (很详细的制作数据集)
- 笔记2:caffe制作行人检测数据集
- 行人检测数据集
- caffe上手2:使用INRIA行人数据集对BVLC Caffe进行fine-tuning
- caffe制作数据集
- caffe制作数据集
- HOG_SVM_行人检测数据集合_INRIA数据集
- 行人检测资源&代码&数据
- 行人检测2
- caffe 制作lmdb数据集
- 行人检测资源(下)-源码、数据集
- HOG行人检测 如何制作样品
- caffe上手:使用INRIA行人数据集对BVLC Caffe进行fine-tuning
- 行人检测2(行人检测的发展历史)
- 行人检测(综述2)
- 行人检测(综述2)
- 行人检测(综述2)
- 对象检测之行人检测(2)
- 行人检测
- 筋斗云接口编程 / 函数型接口
- 空闲任务(Idle Task)和统计任务
- 建立外部表
- ubuntu16.04安装ibus中文输入法
- itext的学习使用
- 笔记2:caffe制作行人检测数据集
- 运算符重载 重载的两种方法 +
- SQL有时间段查询,索引的建立(非聚集索引 )
- MyEclipse2017CI注册激活
- 获取函数信息
- 筋斗云接口编程 / 常用操作(一)
- java swing selected 列表
- 筋斗云接口编程 / 常用操作(二)
- jsp页面格式化数字或时间