目标检测之VOC2007格式数据集制作

1.前序

前几天师弟问我如何做自己的VOC2007数据集的事情,当时跟他说网上资料很多,让他自己查查,但不知道什么原因和我说还是没搞好。自己想想也是,不熟悉的东西即便在别人眼里看似很简单,到了自己跟前也变得深奥到天际。所以这里方便大家一起学习就写了这篇博客,供大家和师弟参考,如有错误的地方还请大家指教。
在做目标检测时,我们需要准备好自己的数据集,将其制作为VOC2007格式的数据集,这里可以下载原始VOC2007数据集:VOC2007数据集,我们来看看这个数据集到底是什么样的。

解压VOC2007数据集后可以看到VOC2007文件夹下有以下5个文件夹:

  • Annotations文件夹
    该文件下存放的是xml格式的标签文件,每个xml文件都对应于JPEGImages文件夹的一张图片。
  • JPEGImages文件夹
    改文件夹下存放的是数据集图片,包括训练和测试图片。
  • ImageSets文件夹
    该文件夹下存放了三个文件,分别是Layout、Main、Segmentation。在这里我们只用存放图像数据的Main文件,其他两个暂且不管。
  • SegmentationClass文件和SegmentationObject文件。
    这两个文件都是与图像分割相关。
2.开始制作

制作自己的VOC2007格式数据集其实不需要上述那么多内容,我们只要做三个部分即可:Annotations文件夹、JPEGImages文件夹、ImageSets文件夹下的Main文件。


第一步:我们参照原始VOC2007数据集的文件层次创建上述四个文件夹,也就是创建一个VOCdevkit文件夹,下面再创建Annotations、JPEGImages、ImageSets三个文件夹,最后在ImageSets文件夹下再创建一个Main文件夹。
创建好所有文件夹后,我们将自己的数据集图片都放到JPEGImages文件夹下。按照习惯,我们将图片的名字修改为000001.jpg这种格式的(参照原始数据集图片命名规则),统一命名方法网络上有很多,网上很多,这里就不多赘述了。
另外强调两点:第一点是图片的格式,图片需是JPEG或者JPG格式,其他格式需要转换一下。第二点是图片的长宽比,图片长宽比不能太大或太小,这个参考原始VOC2007数据集图片即可。


第二步:我们来制作Annotations文件夹下所需要存放的xml文件。这里我们需要借助大神带给我们的福利了:LabelImg工具,可以按照上面的说明进行安装和使用。看到满篇的英文是不是很晕,那这里有个简单的方法可以帮助到大家!当然lxml 库文件还是要装的,但如果你用的是Anaconda环境,那么你什么都不用做,只需要点击这里:LabelImg标注工具,根据自己的情况选择下载window版本还是linux版本,然后解压使用就行了!
关于如何使用,这里以window版本的为例说明。下载解压后会得到一个exe可执行文件,另一个是data文件夹,这里面有个txt文件,内容是预定义的分类标签名,里面的标签可以根据自己的需要进行修改。执行exe文件打开标注界面就可以进行操作了,操作方法可以参考这篇文章:使用方法
这里给张标注工具的参考图:
这里写图片描述
下面就进行漫长的标注工作吧。。。
说明:每标注完一张图片后进行保存,保存的xml文件名要与对应图片名一致,大家可以参考原始VOC2007数据集中JPEGImages文件夹下图片的命名和Annotations文件夹中的xml文件命名规则。
备注:这里还有个制作工具VOC2007数据格式制作工具 也很好用,大家也可以试一试。这个是在网上看到的,忘记作者了,在这里表示感谢。


第三步:我们来制作ImageSets文件夹下Main文件夹中的4个文件(test.txt、train.txt、trainval.txt、val.txt)。
首先我们先来了解下这四个文件到底是干什么用的,当然从文件的命名上我们也都能大体猜得上来他们的作用,不过这里还是简单的说明一下吧。
test.txt:测试集
train.txt:训练集
val.txt:验证集
trainval.txt:训练和验证集

在原始VOC2007数据集中,trainval大约占整个数据集的50%,test大约为整个数据集的50%;train大约是trainval的50%,val大约为trainval的50%。所以我们可参考以下代码来生成这4个txt文件:

import os  
import random  
  
trainval_percent = 0.5  
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(txtsavepath+'/trainval.txt', 'w')  
ftest = open(txtsavepath+'/test.txt', 'w')  
ftrain = open(txtsavepath+'/train.txt', 'w')  
fval = open(txtsavepath+'/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()

注意:上述代码中涉及到的路径要写全,另外各个数据集所占比例根据实际数据集的大小调整比例。

至此,我们自己的VOC2007格式数据集就全部制作完成了。

  • 17
    点赞
  • 163
    收藏
    觉得还不错? 一键收藏
  • 25
    评论
VOC格式数据集制作涉及到对图像和标注信息的整理和组织。首先,需要准备图像数据集,这些图像应该包含你感兴趣的目标物体。可以使用不同的方法来获取这些图像,包括从互联网上下载或者自己采集。然后,需要对图像进行标注,标注的方式可以是使用矩形框标注物体的位置或者进行像素级的标注。接下来,需要将图像和标注信息整理成VOC格式数据集。 VOC格式数据集的文件夹结构如下所示: - VOCdevkit/ - VOC2007/ 或者 VOC2012/ (根据你使用的数据集年份选择一个) - Annotations/ (包含所有图像的标注XML文件) - ImageSets/ (包含用于训练、验证和测试的图像索引文件) - Main/ (包含训练、验证和测试集的图像索引文件) - JPEGImages/ (包含所有的图像文件) 在VOC格式数据集中,每个图像都有一个对应的XML文件,用于存储标注信息。XML文件包含物体的类别、边界框的坐标等信息。图像索引文件用于指示哪些图像用于训练、验证和测试。 要制作VOC格式数据集,你需要按照上述的文件夹结构组织你的数据集。对于每个图像,你需要创建一个对应的XML文件来存储标注信息。在XML文件中,你需要指定物体的类别和边界框的位置。 为了训练和测试模型,还需要创建图像索引文件,将图像分为训练、验证和测试集。 在制作VOC格式数据集时,需要保持文件格式和组织形式的统一,以确保后续的代码处理的统一性。可以根据自己的需求和任务对数据集进行定制和重构。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [【机器学习】 - 目标检测 - VOC格式数据集介绍与自己制作](https://blog.csdn.net/qq_41289920/article/details/105940011)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论 25
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值