制作自己的VOC数据集

       真的是好久没有写些东西了,最近正在搞机器学习,想留下点东西,作为自己这段时间研究的总结,如果能对他人有些帮助就更好了。

        本文主要是制作自己的物体检测的训练集,以VOC数据集举例。

        1. 背景

            要制作自己的VOC数据集,首先要先了解VOC数据集的目录结构。其下主要包含以下几个目录:Annotations、ImageSets、JPEGImages、SegmentationClass和SegmentationObject几个目录。我们主要关注的是Annotations、ImageSets和JPEGImages目录。

          Annotations:存放检测物体在图片上的坐标位置

          JPEGImages:存放训练和验证的图片

          ImageSets:文件下有三个子文件夹,Layout、Main和Segmentation,其中我们关注Main文件夹就OK了

       2.步骤

          2.1 :首先将训练用的图片放在JPEGImages文件夹下,图片名称建议命名成0000001.jpg这样的

          2.2 :第二,在Annotations文件夹生成图片的中物体坐标的xml文件,xml文件的名称与图片名称相同。此步建议利用大牛们提供的软件LabelImage,软件的操作方法很简单,这里不介绍了。保存的时候,把xml文件保存到Annotations文件夹中

         3.3 :第三,在漫长的坐标标注之后,就可以生成Main文件夹下的四个文件了(test.txt , train.txt, val.txt ,trainval.txt),这里可以在写相关的脚本来生成,网上也可以搜到。这里我贴一个。

import os
import random

trainval_percent = 0.8
train_percent = 0.7
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()

       3:结语

          经过上面几步,就生成自己的VOC数据集,可以进行下一步训练了。

  

猜你喜欢

转载自bangerla.iteye.com/blog/2411875