制作自己的目标检测数据集
原文链接:https://blog.csdn.net/weixin_42111393/article/details/83383720
1.制作数据集的工具
我利用数据集标注工具是精灵标注助手,我认为很好用。奉劝一句标注数据集时不要随便找人给你标,如果他没有用心给你标注,你在后面训练会出现很多问题。在一开始标注数据集的时候不要一下子给他标注完,先标注几十张图片,然后用在你的网络里,看看有没有错误,如果没有问题就按这种方式标,如果有,再找出原因,在后面标注的过程中注意。
2.数据集结构
Annotations:存放检测物体在图片上的坐标位置xml文件
JPEGImages:存放训练和验证的图片
ImageSets:文件下有三个子文件夹,Layout、Main和Segmentation,其中我们关注Main文件夹就OK了,Main文件夹里train.txt,val.txt,trainval.txt,test.txt这四个txt文件,存放不带后缀的图片名
(1)JPEGImages文件件
图片名称建议重命名成000001.jpg这样的格式``
# 重命名图片的名称
import osdef image_rename(img_path):
imglist=os.listdir(img_path)
i=1
for file in imglist:
Oldname=os.path.join(img_path,file)
filename=os.path.splitext(file)[0]
filetype=os.path.splitext(file)[1]
Newname=os.path.join(img_path,str(i).zfill(6)+filetype) #用字符串函数zfill 以0补全所需位数
os.rename(Oldname,Newname)
i=i+1if __name__ == "__main__":
imgs_path = "C:/Users/Administrator/Desktop/VOC2007/img"
image_rename(imgs_path)
(2)Annotations
这个文件夹是JPEGImages文件夹中对应图片的.xml格式(由标注精灵助手生成),打开可以看到:
xml文件内容:
(3)ImageSets
Main文件夹里train.txt,val.txt,trainval.txt,test.txt这四个txt文件的制作方法。
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()