创建自己的VOC2007数据集
一:VOC2007数据集简介
PASCAL VOC为图像识别和分类提供了一整套标准化的优秀的数据集,从2005年到2012年每年都会举行一场图像识别challenge。
VOC2007数据集是衡量图像分类识别能力的基准,faster-rcnn,yolo -v1, yolo-v2都以此数据集作为演示样例。
VOC2007数据格式如下:
- Annotations ——xml标注文件
- ImageSets ——类别标签
- JPEGImages ——jpg图像文件
- SegmentationClass
- SegmentationObjec
训练自己的数据时只需要修改Annotations、ImageSets、JPEGImages 三个文件夹。
二:数据就制作流程
1:把所有ipg文件放入JPEGImages文件夹中(此处可以使用批量命名工具重新命名)下载链接:http://cl.wxyngq.com/download/%E6%89%B9%E9%87%8F%E4%BF%AE%E6%94%B9%E6%96%87%E4%BB%B6%E5%90%8D_48@93774.exe
2:使用labelimg标注文件,可以直接下载exe可执行工具或者下载源码执行(此处百度一下有很多)。该工具可实现手动标注后生成XML文件中含有目标位置:name为目标分类,bndbox中为目标左上和右下两个点的坐标信息。
一般模型,比如YOLO网络就是通过读取所有xml文件的信息来生成模型需要的label文件。
3:将标注好的xml文件放到Annotations文件夹下
4:生成ImageSets\Main文件夹下4个txt文件test.txt , train.txt , trainval.txt , val.txt。
这四个文件夹中存储的时上一步中xml文件的文件名。trainval和 test内容相加为所有xml文件,train和val内容相加为trainval。
可使用下面脚本生成,运行将该文件与ImageSets和Annotations放在同一目录下。
Python代码:
import os
import random
trainval_percent = 1 # trainval数据集占所有数据的比例
train_percent = 0.5 # train数据集占trainval数据的比例
xmlfilepath = 'Annotations'
txtsavepath = 'ImageSets\Main'
total_xml = os.listdir(xmlfilepath)
num=len(total_xml)
list=range(num)
tv=int(num*trainval_percent)
tr=int(tv*train_percent)
trainval= random.sample(list,tv)
train=random.sample(trainval,tr)
ftrainval = open('ImageSetsMini/Main/trainval.txt', 'w')
ftest = open('ImageSetsMini/Main/test.txt', 'w')
ftrain = open('ImageSetsMini/Main/train.txt', 'w')
fval = open('ImageSetsMini/Main/val.txt', 'w')
for i in list:
name=total_xml[i][:-4]+'\n'
if i in trainval:
ftrainval.write(name)
if i in train:
ftrain.write(name)
else:
fval.write(name)
else:
ftest.write(name)
ftrainval.close()
ftrain.close()
fval.close()
ftest .close()
5:用修改了Annotations、ImageSets、JPEGImages\Main 三个文件夹的数据替换原来的数据,就可以跑自己的数据啦,当然可能该需要修改一些模型参数。