目标检测数据集制作(VOC2007格式数据集制作和处理教程)

  • VOC2007数据集结构(目标检测+图像分割)
  • #VOC2007数据集结构如下:
    VOC2007
    	|-Annotations#里面存放的是每一张图片对应的标注结果,为XML文件,
    				 #标注完成后JPEGImages每张图片在此都有一一对应的xml文件
    	|-ImageSets#存放的是每一种类型对应的图像数据,为txt文件
    		|-Layout#存放的是具有人体部位的数据(如人的head、hand、feet等等)
    		|-Main#存放的是图像物体识别的数据
    		|-Segmentation#存放的是可用于分割的数据
    	|-JPEGImages#存放的是原图片
    	|-SegmentationClass#按类别进行图像分割,同一类别的物体会被标注为相同颜色
    	|-SegmentationObject#按对象进行图像分割,即使是同一类别的物体会被标注为不同的颜色。

    本次的是目标检测,对应的如下结构

  • #VOC2007数据集结构如下:
    VOC2007
    	|-Annotations#里面存放的是每一张图片对应的标注结果,为XML文件,
    				 #标注完成后JPEGImages每张图片在此都有一一对应的xml文件
    	|-ImageSets#存放的是每一种类型对应的图像数据,为txt文件
    		|-Main#存放的是图像物体识别的数据
    	|-JPEGImages#存放的是原图片

    1、安装工具

此次数据标注使用labelImg工具,我是在pycharm终端中进行pip安装的,安装方式很多,就不一一列举了,还需要安装lxml库和pytq可以,安装步骤如下:

pip3 install labelImg

pip install lxml

pip install pytq

进入标注工具,只需要在pycharm终端处输入LabelImg,LabelImg工具自动弹出打开,如下:

2、数据集准备

在VOC2007文件夹下创建这三个文件夹:

  • Annotations文件夹该文件下存放的是xml格式的标签文件,每个xml文件都对应于JPEGImages文件夹的一张图片。
  • JPEGImages文件夹:该文件夹下存放的是数据集图片(原图),包括训练和测试图片。把原图数据放到此文件夹下
  • ImageSets文件夹该文件夹下存放了三个文件,分别是Layout、Main、Segmentation。在这里我们只用存放图像数据的Main文件

ImageSets下创建Main文件夹,在该文件夹下创建如下4个txt文件:

  • test.txt:测试集
  • train.txt:训练集
  • val.txt:验证集
  • trainval.txt:训练和验证集

对数据重命名

  • 处理代码:
import os

path = r"D:\pythonProject\ssd-pytorch\VOCdevkit\VOC2007\JPEGImages"  # JPEGImages文件夹所在路径
filelist = os.listdir(path)  # 该文件夹下所有的文件(包括文件夹)
count = 0
for file in filelist:
    print(file)
for file in filelist:  # 遍历所有文件
    Olddir = os.path.join(path, file)  # 原来的文件路径
    if os.path.isdir(Olddir):  # 如果是文件夹则跳过
        continue
    filename = os.path.splitext(file)[0]  # 文件名
    filetype = '.jpg'  # 文件扩展名
    Newdir = os.path.join(path, str(count).zfill(6) + filetype)  # 用字符串函数zfill 以0补全所需位数
    os.rename(Olddir, Newdir)  # 重命名
    count += 1

4、数据标注

  • 添加标注数据集

安装好的工具,输入LabelImge打开标注工具,然后添加需要标注的数据文件夹,数据原图是放在JPEGImages‘文件夹中的,操作如下图:
在这里插入图片描述

  • 标注方式选择
    标注方式选择Create rectBox矩形标注,或者选择快捷键w键快速标注:

在这里插入图片描述

  • 标注及标签设置
    用框框住标注目标,标注完成后,弹出标签值框,输入需要添加的标签,点击ok:
  • 标注结果保存
    标注结果默认方式每一次保存都需要选择保存文件夹,快捷键选择默认保存文件夹,使用快捷键Ctrl+r键,选择默认保存的文件夹为Annotation:
  • 在这里插入图片描述第一次标注设置好后,接下来就是快速标注,快捷键:
    w键选择标注,Ctrl+s键保存,d键切换下一张图片直到标注完成。
  • 标注结果展示
    标注好后,标注结果保存在VOC2007下的Annotation文件内,内容展示如下:

5、数据处理

  • 对标注结果xml文件夹进行数据处理
    import os
    import random
    
    trainval_percent = 0.9  # 验证集和训练集占的百分比
    train_percent = 0.7  # 训练集占的百分比
    xmlfilepath = r'D:\pythonProject\ssd-pytorch\VOCdevkit\VOC2007\Annotations'  # Annotation文件夹所在位置
    txtsavepath = r'D:\pythonProject\ssd-pytorch\VOCdevkit\VOC2007\ImageSets\Main'  # 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)
    # Main文件夹下所对应的四个txt文件夹路径
    ftrainval = open(r'D:\pythonProject\ssd-pytorch\VOCdevkit\VOC2007\ImageSets\Main\trainval.txt', 'w')
    ftest = open(r'D:\pythonProject\ssd-pytorch\VOCdevkit\VOC2007\ImageSets\Main\test.txt', 'w')
    ftrain = open(r'D:\pythonProject\ssd-pytorch\VOCdevkit\VOC2007\ImageSets\Main\train.txt', 'w')
    fval = open(r'D:\pythonProject\ssd-pytorch\VOCdevkit\VOC2007\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()

    至此,VOC2007格式数据集制作完成。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/355958.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

uniapp v3组合式语法-项目创建

打开uni编译器HbuildX,右键新建项目,出现如下界面 输入完项目名称和地址后.选择红色箭头所指处的vue版本3 然后点击确认,即可创建uniapp,v3项目 创建完项目后,可以看到如下项目结构 项目结构uniapp官网上已经写的很详细了,这里就使用uniapp官网的介绍 一个uni-app工程&…

用BufferedReader快速输入有巨坑!!大佬们都是这么输入的

刷洛谷题单第二天,今天第一道题还是挺简单的,但是又被现实给了一级大逼兜子,做这题关键还是想熟悉Java的快速输入。还有做这道题很容易出现RE错误,下面总结了常见的RE错误导致情况(点击跳转下文) 我的上篇…

增存量市场大爆发!国产通信中间件「反攻」

梳理2023年智能驾驶的发展脉络可见,消费者对智能驾驶的认可度和接受度越来越高,带动高速NOA迈向了规模化普及新阶段,城市NOA初露锋芒。 从更长远的行业变革周期来看,智能驾驶的技术迭代还在继续,叠加电子电气架构的深…

软件测试人员常用的功能测试方法分享

功能测试就是对产品的各功能进行验证,根据功能测试用例,逐项测试,检查产品是否达到用户要求的功能。 常用的测试方法如下: 1. 页面链接检查 每一个链接是否都有对应的页面,并且页面之间切换正确。 2. 相关性检查 删除/…

基于springboot的房屋交易系统

文章目录 项目介绍主要功能截图:部分代码展示设计总结项目获取方式 🍅 作者主页:超级无敌暴龙战士塔塔开 🍅 简介:Java领域优质创作者🏆、 简历模板、学习资料、面试题库【关注我,都给你】 &…

工业自动化步进电机用电机驱动芯片TMC5160

TMC5160 数据手册 TMC5160 集成了完整的运动控制功能、高质量的电流调节功能和强大的外部 MOSFET 驱动,涵盖了多种从电池供电的高效系统到 20 安培电机线圈电流的嵌入式应用。TMC5160 包含驱动电机所需的全部智能。配置 TMC5160 目 标 位 置 就 可 以 驱 动 电 机 。…

C++初阶:C/C++内存管理、new与delete详解

之前结束了类与对象:今天进行下面部分内容的学习 文章目录 1.C/C内存分布2.C语言中动态内存管理方式:malloc/calloc/realloc/free3.C动态内存管理方式3.1new/delete操作内置类型3.2new和delete操作自定义类型 4.operator new与operator delete函数5.new和…

题目:冒险者公会(蓝桥OJ 3611)

问题描述: 解题思路: 官方: 注意点: 在前期的排序操作,因为需要找到如样例所示的每轮最大,因此我们需要用0代替没有的委托(即样例斜杠)。如何用0代替:将村庄委托数量默认…

基于springboot校园交友网站源码和论文

随着信息技术和网络技术的飞速发展,人类已进入全新信息化时代,传统管理技术已无法高效,便捷地管理信息。为了迎合时代需求,优化管理效率,各种各样的管理系统应运而生,各行各业相继进入信息管理时代&#xf…

ArcgisForJs快速入门

文章目录 0.引言1.前端代码编辑工具2.使用ArcgisForJs创建一个简单应用3.切片地图服务图层4.动态地图服务图层5.地图事件 0.引言 ArcGIS API for JavaScript是一款由Esri公司开发的用于创建WebGIS应用的JavaScript库。它允许开发者通过调用ArcGIS Server的REST API&#xff0c…

C++笔记之RTTI、RAII、MVC、MVVM、SOLID在C++中的表现

C++笔记之RTTI、RAII、MVC、MVVM、SOLID在C++中的表现 —— 杭州 2024-01-28 code review! 文章目录 C++笔记之RTTI、RAII、MVC、MVVM、SOLID在C++中的表现1.RTTI、RAII、MVC、MVVM、SOLID简述2.RAII (Resource Acquisition Is Initialization)3.RTTI (Run-Time Type Informat…

ABeam Insight | 大语言模型系列 (1) : 大语言模型概览

大语言模型系列 引入篇 ABeam Insight 自从图灵测试在20世纪50年代提出以来,人类一直不断探索机器如何掌握语言智能。语言本质上是一个由语法规则支配的错综复杂的人类表达系统。 近年来,具备与人对话互动、回答问题、协助创作等能力的ChatGPT等大语…

江科大stm32学习笔记6——GPIO输入准备

一、按键消抖 由于按键内部使用的是机械式弹簧片,所以在按下和松开时会产生5~10ms的抖动,需要通过代码来进行消抖。 二、滤波电容 在电路中,如果见到一端接在电路中,一端接地的电容,则可以考虑它的作用为滤波电容&am…

python爬虫实战——获取酷我音乐数据

嗨喽,大家好呀~这里是爱看美女的茜茜呐 开发环境: 版 本: python 3.8 编辑器:pycharm 2022.3.2 模块使用: requests >>> pip install requests 如何安装python第三方模块: win R 输入 cmd 点击确定, 输入安装命令 pip install…

职业身份来认同自己对吗?

人们常常以自己的职业身份来认同自己。这是一个巨大的错误。 你的职业身份只是一个外壳;它不能定义你是一个人。你可以期待你的职业媒介会随着时间而改变,但是你传达的信息会应该更加稳定。你的信息就是回答你是谁,你应该通过三十几年的工作…

linux中常用的命令

一:tree命令 (码字不易,关注一下吧,w~~w) 以树状形式查看指定目录内容。 tree --树状显示当前目录下的文件信息。 tree 目录 --树状显示指定目录下的文件信息。 注意: tree只能查看目录内容,不能…

【Axure高保真原型】随机抽取案例

今天和大家分享随机抽取点餐案例的原型模板,包括2种效果,第一种是手动暂停效果,点击开始后随机抽取食物,手动点击暂停按钮后停止;第二种是自动暂停效果,点击开始按钮后随机抽取食物,并且开始倒计…

webassembly003 whisper.cpp的python绑定实现+Cython+Setuptools的GUI程序

CODE python端的绑定和本文一样,还需要将cdef char* LANGUAGE b’en’改为中文zh(也可以在函数中配置一个参数修改这个值)。ps:本来想尝试cdef whisper_context* whisper_init_from_file_with_params_no_state(char*, whisper_full_params)…

Gitlab7.14 中文版安装教程

Gitlab7.14 中文版安装教程 注: 本教程由羞涩梦整理同步发布,本人技术分享站点:blog.hukanfa.com转发本文请备注原文链接,本文内容整理日期:2024-01-28csdn 博客名称:五维空间-影子,欢迎关注 …

部署LNMP、Nginx+FastCGI、Nginx地址重写语法,地址重写应用案例

1 案例1:部署LNMP环境 1.1 问题 安装部署LNMP环境实现动态网站解析 静态网站 在不同环境下访问,网站内容不会变化 动态网站 在不同环境下访问,网站内容有可能发生变化 安装部署Nginx、MariaDB、PHP、PHP-FPM;启动Nginx、Mari…