VOC2007数据集制作-进行自己数据集的训练,可用于目标检测、图像分隔等任务

一、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


展开阅读全文

没有更多推荐了,返回首页