制作自己的目标检测数据集

制作自己的目标检测数据集

一、下载Voc数据集

在官网下载Voc2012数据集:
http://host.robots.ox.ac.uk/pascal/VOC/voc2012/index.html#devkit
找到–>Development Kit–>Download the training/validation data (2GB tar file)点击下载。
在这里插入图片描述
下载好的文件目录如下,目标检测主要用到的数据包括:

  • Annotations(用来存放图像的标注信息)
  • ImageSetes->Main文件夹下的
    train.txt(训练集)
    val.txt(验证集)
    traincal.txt(训练+验证集)
    txt文件中存放的是图像名称,其中train和val中的数据是互斥的。
  • JPEGImages(存放所有的图像信息)
    在这里插入图片描述

二、安装标注工具labelimg

  • 图像标注的软件很多,在Github上有很多开源的项目:https://github.com/tzutalin/labelImg
    官方文档有安装和使用的教程。
  • Win+R打开命令提示符输入cmd,在命令窗口输入pip install labelImg进行安装
    在这里插入图片描述
    安装完成后直接输入labelimg就可以了
    在这里插入图片描述
    在这里插入图片描述

三、制作图像标签

下面是一个制作图像标注的一个实例:

1.创建一个文件夹

vocdata

  • Annotations(存放生成的标注文件xml)
  • image(存放自己的数据集图像)
  • classes.txt(写入自己要检测的目标类别)
    在这里插入图片描述

2.在当前文件夹下打开命令提示符

1.Shift+鼠标右键,选择在此处打开Powershell(S)
2.点击左上角的文件选择打开Windows PowerShell®
在这里插入图片描述
打开的命令提示符窗口是蓝色的
在这里插入图片描述

3.打开标注软件

在命令窗口输入:

labelimg ./image ./classes.txt

在这里插入图片描述
./image图像路径(表示对当前文件夹下的图像进行标注)
./classes.txt类别标签路径
这样在对图像进行标注时,类别是固定的,是提前写在classes.txt文件中的类别。
在这里插入图片描述
在这里插入图片描述

  • Open Dir添加要标注的存放图像的文件夹
  • Change Save Dir将标注信息存放的问价夹,选择自己创建的Annotations文件夹
  • Create RectBox对图像中的目标进行框选
  • 右上角的difficult表示检测目标的困难程度,如果目标比较难检测就勾选上,如果目标检测比较容易就不勾选
    在这里插入图片描述

使用下面的代码,将数据集分成训练集,验证集,训练+验证集和测试集。

import os
import random 
 
xmlfilepath=r'Annotations'
saveBasePath=r"ImageSets/Main/"
 
trainval_percent=1  # 训练+验证集的比例
train_percent=1     # 训练集的比例

temp_xml = os.listdir(xmlfilepath)
total_xml = []
for xml in temp_xml:
    if xml.endswith(".xml"):
        total_xml.append(xml)

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)  
 
print("train and val size",tv)
print("traub suze",tr)
ftrainval = open(os.path.join(saveBasePath,'trainval.txt'), 'w')  
ftest = open(os.path.join(saveBasePath,'test.txt'), 'w')  
ftrain = open(os.path.join(saveBasePath,'train.txt'), 'w')  
fval = open(os.path.join(saveBasePath,'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()

  • 8
    点赞
  • 69
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值