pascal voc目标检测数据集格式如下:
其中:
- Annotations为图像标注信息xml文件
- ImageSets为训练集、测试集、验证、训练验证集图像名的txt文件
- JPEGImages为原始的图片
pascal voc或yolo格式的数据可以使用labelimg进行标注:下载地址:
链接:https://pan.baidu.com/s/1r8x7tu0sdO_UUuCXKVfELQ 提取码:l325
操作挺简单的,就不介绍了。
标注好的xml文件类似如下:
代码语言:javascript复制<annotation>
<folder>JPEGImages</folder>
<filename>test_00000002.jpg</filename>
<path>E:detectionpascal vocmaskornotJPEGImagestest_00000002.jpg</path>
<source>
<database>Unknown</database>
</source>
<size>
<width>480</width>
<height>600</height>
<depth>3</depth>
</size>
<segmented>0</segmented>
<object>
<name>mask</name>
<pose>Unspecified</pose>
<truncated>0</truncated>
<difficult>0</difficult>
<bndbox>
<xmin>112</xmin>
<ymin>7</ymin>
<xmax>352</xmax>
<ymax>325</ymax>
</bndbox>
</object>
</annotation>
其对应的图像如下:
然后划分训练集、测试集、验证集、训练验证集:在原始VOC2007数据集中,trainval大约占整个数据集的50%,test大约为整个数据集的50%;train大约是trainval的50%,val大约为trainval的50%
代码语言:javascript复制import os
import random
trainval_percent = 0.5
train_percent = 0.5
xmlfilepath = '/content/drive/My Drive/pytorch_ssd/data/maskornot/Annotations'
txtsavepath = '/content/drive/My Drive/pytorch_ssd/data/maskornot/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()
运行之后:
其中tranval.txt的部分结果为:
代码语言:javascript复制test_00000002
test_00000003
test_00000006
test_00000009
test_00000008
test_00000012
test_00000013
test_00000014
test_00000020
至此,目标检测数据集的创建就完成了。
下一节,使用pytorch-ssd训练自己创建的数据集。