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

文章目录

  • 制作自己的目标检测数据集
  • 一、下载Voc数据集
  • 二、安装标注工具labelimg
  • 三、制作图像标签
    • 1.创建一个文件夹
    • 2.在当前文件夹下打开命令提示符
    • 3.打开标注软件

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

一、下载Voc数据集

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

  • Annotations(用来存放图像的标注信息)
  • ImageSetes->Main文件夹下的
    train.txt(训练集)
    val.txt(验证集)
    traincal.txt(训练+验证集)
    txt文件中存放的是图像名称,其中train和val中的数据是互斥的。
  • JPEGImages(存放所有的图像信息)
    制作自己的目标检测数据集_第2张图片

二、安装标注工具labelimg

  • 图像标注的软件很多,在Github上有很多开源的项目:https://github.com/tzutalin/labelImg
    官方文档有安装和使用的教程。
  • Win+R打开命令提示符输入cmd,在命令窗口输入pip install labelImg进行安装
    制作自己的目标检测数据集_第3张图片
    安装完成后直接输入labelimg就可以了
    制作自己的目标检测数据集_第4张图片
    制作自己的目标检测数据集_第5张图片

三、制作图像标签

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

1.创建一个文件夹

vocdata

  • Annotations(存放生成的标注文件xml)
  • image(存放自己的数据集图像)
  • classes.txt(写入自己要检测的目标类别)
    制作自己的目标检测数据集_第6张图片

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

1.Shift+鼠标右键,选择在此处打开Powershell(S)
2.点击左上角的文件选择打开Windows PowerShell®
制作自己的目标检测数据集_第7张图片
打开的命令提示符窗口是蓝色的
制作自己的目标检测数据集_第8张图片

3.打开标注软件

在命令窗口输入:

labelimg ./image ./classes.txt

在这里插入图片描述
./image图像路径(表示对当前文件夹下的图像进行标注)
./classes.txt类别标签路径
这样在对图像进行标注时,类别是固定的,是提前写在classes.txt文件中的类别。
制作自己的目标检测数据集_第9张图片
制作自己的目标检测数据集_第10张图片

  • 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()

你可能感兴趣的:(github)