一、VOC2007数据集简介
一般来说,对于目标检测任务来讲,我们只需要如此啊三个文件夹JPEGImages、Annatations、ImageSets,下面分别来讲。
1)JPEGImages文件夹
文件夹里包含了训练图片和测试图片,混放在一起
2)Annatations文件夹
文件夹存放的是xml格式的标签文件,每个xml文件都对应于JPEGImages文件夹的一张图片
3)ImageSets文件夹
Action存放的是人的动作,暂时不用
Layout存放的人体部位的数据,暂时不用
Main存放的是图像物体识别的数据,Main里面有test.txt , train.txt, val.txt ,trainval.txt.这四个文件我们后面会生成
Segmentation存放的是可用于分割的数据
4)其他的文件夹不解释了,分割XXX等用的
如果你下载了VOC2007数据集,那么把它解压,把各个文件夹里面的东西删除,保留文件夹名字。如果没下载,那么就仿照他的文件夹格式,自己建好空文件夹就行。
二、制作自己的VOC2007数据集
第一 步:搞定JPEGSImages文件夹
1)把你的图片放到JPEGSImages里面,在VOC2007里面,人家的图片文件名都是000001.jpg类似这样的,我们也统一格式,把我们的图片名字重命名成这样的。上python代码:
# -*- coding:utf8 -*- import os class BatchRename(): def __init__(self): self.path = '/home/xxx/桌面/backup/nut_b' def rename(self): filelist = os.listdir(self.path) total_num = len(filelist) i = 0#设置标号 for item in filelist: if item.endswith('.png'): src = os.path.join(os.path.abspath(self.path), item) dst = os.path.join(os.path.abspath(self.path), 'nocrack'+str(i+1)+ '.png') try: os.rename(src, dst) print 'converting %s to %s ...' % (src, dst) i = i + 1 except: continue print 'total %d to rename & converted %d jpgs' % (total_num, i) if __name__ == '__main__': demo = BatchRename() demo.rename()
第二步:搞定Annatations文件夹
手动标注,会自动生成图片信息的xml文件
1)在这里下载:https://github.com/tzutalin/labelImg,至于怎么用相信你打开就知道了
2)保存的路径就是我们的Annatations文件夹,别保存别的地方去了,,,
3)一张张的慢慢画框............,继续下一步
第三步:搞定ImageSets文件夹中的Main文件夹中的四个文件
命名为generate_Main_txt.py,直接上一个代码:
import os import random trainval_percent = 0.66 train_percent = 0.5 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('ImageSets/Main/trainval.txt', 'w') ftest = open('ImageSets/Main/test.txt', 'w') ftrain = open('ImageSets/Main/train.txt', 'w') fval = open('ImageSets/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()
ok,完成。
鸣谢:
[1]https://blog.csdn.net/gaohuazhao/article/details/60871886