制作VOC数据集

一、VOC数据集的格式
1.Annotations
存放xml格式的标签文件,xml文件中存放了标定框的位置、大小、类别等信息
2.ImageSets
Action: 存放人体的动作数据。
Layout: 存放人体的部位数据
Main: 存放目标检测的数据,是一些txt文件,把数据集分成训练集、验证集和测试集。
Segmentation: 存放图像分割的数据
3.JPEGImages
存放jpg文件,图片数据,训练集和测试集都在里面。
还有两个文件夹:SegmentationClass和SegmentationObject,都是图像分割用到的
数据集文件夹
1、重命名JPG文件
代码:

# -*- coding:utf8 -*-

import os

class BatchRename():
    '''
    批量重命名文件夹中的图片文件
    '''

    def __init__(self):
        # 我的图片文件夹路径
        self.path = 'E:/Pythonworkspace/datas/tfclight'

    def rename(self):
        filelist = os.listdir(self.path)
        total_num = len(filelist)
        i = 1       # 设置第一个文件名
        n = 6       # 设置文件名长度,如000001,长度为6
        for item in filelist:
            # 这里修改的是jpg文件,如果要修改其他类型的文件,请手动将下面两个'.jpg'修改为对应的文件后缀
            if item.endswith('.jpg'):
                n = 6 - len(str(i))
                src = os.path.join(os.path.abspath(self.path), item)
                dst = os.path.join(os.path.abspath(self.path), str(0) * n + str(i) + '.jpg')
                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()

若之后想加图片,只需要把i改了

第二步:labelImg打标签,把图片保存到Annotations文件夹

第三步:生成Main文件夹下面的txt文件
代码:

import os
import random

trainval_percent = 0.7      # 训练集和验证集 占 数据集 的比例
train_percent = 0.6         # 训练集 占 训练集和验证集 的比例
# 把xml路径修改为自己的Annotations文件夹路径
xmlfilepath = 'E:/Pythonworkspace/VOC2007/Annotations'
# 把保存路径修改为自己的Main文件夹路径
savepath = 'E:/Pythonworkspace/VOC2007/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(savepath + '/trainval.txt', 'w')
ftest = open(savepath + '/test.txt', 'w')
ftrain = open(savepath + '/train.txt', 'w')
fval = open(savepath + '/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()


版权声明:本文为qq_41620875原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。