VOC数据集介绍以及读取(目标检测object detection)

news2024/12/28 4:08:43

VOC(Visual Object Classes)数据集是一个广泛使用的计算机视觉数据集,主要用于目标检测、图像分割和图像分类等任务。VOC数据集最初由英国牛津大学的计算机视觉小组创建,并在PASCAL VOC挑战赛中使用。

VOC数据集包含各种不同类别的标记图像,每个图像都有与之相关联的边界框(bounding box)和对象类别的标签。数据集中包括了20个常见的目标类别,例如人、汽车、猫、狗等。此外,VOC数据集还提供了用于图像分割任务的像素级标注。

VOC数据集涵盖了多个年度的发布,每个年度的数据集包含训练集、验证集和测试集。训练集用于模型的训练和参数优化,验证集用于模型的调参和性能评估,而测试集则用于最终模型的性能评估和比较。

在这里插入图片描述

VOC数据集下载的目录如下

  1. Annotations是用于目标检测的xml标注文件
  2. ImageSets是提前分好的train val test的txt文件,如果不提交比赛,可以自己写一个
  3. JPEGImages是原本的jpg图像
  4. 剩余两个均用于图像分割中

读取VOC数据集的一般流程(目标检测)
Annotations中的xml标注文件样式如下:

<annotation>
	<folder>VOC2007</folder>
	<filename>000001.jpg</filename>
	<source>
		<database>The VOC2007 Database</database>
		<annotation>PASCAL VOC2007</annotation>
		<image>flickr</image>
		<flickrid>341012865</flickrid>
	</source>
	<owner>
		<flickrid>Fried Camels</flickrid>
		<name>Jinky the Fruit Bat</name>
	</owner>
	<size>
		<width>353</width>
		<height>500</height>
		<depth>3</depth>
	</size>
	<segmented>0</segmented>
	<object>
		<name>dog</name>
		<pose>Left</pose>
		<truncated>1</truncated>
		<difficult>0</difficult>
		<bndbox>
			<xmin>48</xmin>
			<ymin>240</ymin>
			<xmax>195</xmax>
			<ymax>371</ymax>
		</bndbox>
	</object>
	<object>
		<name>person</name>
		<pose>Left</pose>
		<truncated>1</truncated>
		<difficult>0</difficult>
		<bndbox>
			<xmin>8</xmin>
			<ymin>12</ymin>
			<xmax>352</xmax>
			<ymax>498</ymax>
		</bndbox>
	</object>
</annotation>

xml中object标签下是关于检测框的坐标信息,(xmin,ymin)表示左上角,(xmax,ymax)表示右下角

其对应的图像如下:
在这里插入图片描述

通常采取的方式是

  1. 将xml文件转换为txt文本文件,每一行代表了一张图片的坐标信息和类别信息
  2. 读取txt文本文件放入dataset中

以下是xml转换为文本的python code

import xml.etree.ElementTree as ET
import os

def parse_rec(filename):
    print(filename)
    tree = ET.parse(filename)
    objects = []
    for obj in tree.findall('object'):
        obj_struct = {}
        difficult = int(obj.find('difficult').text)
        if difficult == 1:
            continue
        obj_struct['name'] = obj.find('name').text
        bbox = obj.find('bndbox')
        obj_struct['bbox'] = [int(float(bbox.find('xmin').text)),
                              int(float(bbox.find('ymin').text)),
                              int(float(bbox.find('xmax').text)),
                              int(float(bbox.find('ymax').text))]
        objects.append(obj_struct)
        """
        obj_struct:{'name': 'dog', 'bbox': [48, 240, 195, 371]}
        """
    """
    objects: [{'name': 'dog', 'bbox': [48, 240, 195, 371]}, {'name': 'person', 'bbox': [8, 12, 352, 498]}]
    """
    return objects


VOC_CLASSES = (    # always index 0
    'aeroplane', 'bicycle', 'bird', 'boat',
    'bottle', 'bus', 'car', 'cat', 'chair',
    'cow', 'diningtable', 'dog', 'horse',
    'motorbike', 'person', 'pottedplant',
    'sheep', 'sofa', 'train', 'tvmonitor')

train_val_dataset = open('VOC_train_val.txt', 'r')
test_dataset = open('VOC_test.txt', 'r')

train_val_file = open('myDataset_train_val', 'w')
test_file = open('myDataset_test', 'w')

# 读取训练验证图像的名称
train_val_lines = train_val_dataset.readlines()
train_val_lines = [x[:-1].split(' ')[0] for x in train_val_lines]
# 读取测试图像的名称
test_lines = test_dataset.readlines()
test_lines = [x[:-1] for x in test_lines]

Annotations = r'D:/Detection/VOC2007/VOCdevkit/VOC2007/Annotations/'
xml_files = os.listdir(Annotations)

count = 0
for xml_file in xml_files:
    count += 1
    image_path = xml_file.split('.')[0] + '.jpg'
    results = parse_rec(Annotations + xml_file)
    # 理论不存在
    if len(results) == 0:
        continue
    write_line = image_path
    for result in results:
        class_name = result['name']
        name = VOC_CLASSES.index(class_name)
        bbox = result['bbox']
        write_line += ' '+str(bbox[0])+' '+str(bbox[1])+' '+str(bbox[2])+' '+str(bbox[3])+' '+str(name)
    write_line += '\n'
    if xml_file.split('.')[0] in train_val_lines:
        train_val_file.write(write_line)
    elif xml_file.split('.')[0] in test_lines:
        test_file.write(write_line)

train_val_file.close()
test_file.close()

转后的txt文件如下:

000001.jpg 48 240 195 371 11 8 12 352 498 14
000002.jpg 139 200 207 301 18
000003.jpg 123 155 215 195 17 239 156 307 205 8
000004.jpg 13 311 84 362 6 362 330 500 389 6 235 328 334 375 6 175 327 252 364 6 139 320 189 359 6 108 325 150 353 6 84 323 121 350 6
000006.jpg 187 135 282 242 15 154 209 369 375 10 255 207 366 375 8 138 211 249 375 8
000008.jpg 192 16 364 249 8
000010.jpg 87 97 258 427 12 133 72 245 284 14
000011.jpg 126 51 330 308 7
000013.jpg 299 160 446 252 9
...

第一个表示图片的名称,接下来没5个数字看成一组,前四个分别为xmin,ymin,xmax,ymax,第五个为类别编号。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

今晚打老虎:用katalon解决接口/自动化测试拦路虎--参数化

#全局变量 右侧菜单栏中打开profile&#xff0c;点击default&#xff0c;打开之后&#xff0c;在default页面点击add添加全局变量 如果你想学习接口自动化测试&#xff0c;我这边给你推荐一套视频&#xff0c;这个视频可以说是B站播放全网第一的接口自动化测试教程&#xff0c…

ux-grid实现表格排序

需求说明&#xff1a; 1、第一行不参与排序 2、实现带%排序 3、实现null值排序 4、实现值相等不排序 5、实现含有占位符‘–‘排序放到最后 表格属性说明文档 效果图如下&#xff1a; 代码如下&#xff1a; <template><div><ux-gridhighlightCurrentRow:data&…

JavaScript 使用canvas绘制随机生成图形验证码

文章目录 HTML 结构准备CSS 样式准备JavaScript 逻辑部分首先做个准备&#xff1a;声明一个空数组用来随机生成验证码封装一个为canvas标签渲染的函数&#xff0c;用来随机生成验证码还需要封装一个用来生成随机颜色的函数获取到canvas标签为其绑定点击事件为按钮绑定判断点击事…

day1-若依项目前后端分离的初步使用

响应式布局: 做好的产品能在pc端,手机,平板都能正常浏览 开发项目两种方式 1.自己从0开始写代码 2.在若依中下载拥有基础功能的源码 若依使用的mysql版本 mysql5.7 导入别人的项目如何操作 若依项目下载地址**:https://gitee.com/y_project/RuoYi-Vue.git** 可以使用揉…

数学建模——曲线拟合

一、曲线拟合简介 1、曲线拟合问题的提法 已知一组数据&#xff08;二维&#xff09;&#xff0c;即平面上n个点 (xi,yi)(i1,2,…,n)&#xff0c; xi互不相同。寻求一个函数yf(x)&#xff0c;使得f(x)在某种准则下与所有的数据点最为接近&#xff0c;即拟合得最好。 2、…

LabVIEW仿真单频脉冲信号+线性调频信号+高斯白噪声信号

文章目录 前言一、单频脉冲信号1、信号参数2、仿真图①、前面板②、程序框图 二、线性调频信号1、信号参数2、仿真图①、前面板②、程序框图 三、高斯白噪声信号1、信号参数2、仿真图①、前面板②、程序框图 四、合成信号1、前面板2、程序框图 五、代码自取 前言 本文基于 Lab…

5.1.4.8 RDD 持久化

1) RDD Cache 缓存 RDD 通过 Cache 或者 Persist 方法将前面的计算结果缓存&#xff0c;默认情况下会把数据以缓存 在 JVM 的堆内存中。但是并不是这两个方法被调用时立即缓存&#xff0c;而是触发后面的 action 算 子时&#xff0c;该 RDD 将会被缓存在计算节点的内存中&…

应用案例 | 使用tManager ControlLogix模块优化食品生产研发流程

探索tManager在食品制造应用中如何创建实时时间戳的过程数据&#xff0c;从而改善产品的开发流程。 一 背景 为了在当今以数据驱动的制造环境中取得成功&#xff0c;车间控制系统必须能够与企业计算系统进行信息交换。对此&#xff0c;事务管理器&#xff0c;像Softing的tMana…

银河麒麟服务器v10 sp1 安装 nginx

首先查询是否安装&#xff1a; rootxxx-pc:~# ps -ef |grep nginx 或 rootxzx-pc:~# dpkg -list|grep nginx 如果安装请先卸载&#xff0c;或者直接使用&#xff0c;以下步骤你就可以忽略了&#xff0c;软件包的卸载方法&#xff1a; 1、APT方式 &#xff08;1&#xff09…

牛客网Verilog刷题——VL40

牛客网Verilog刷题——VL40 题目答案 题目 设计一个同时输出7分频的时钟分频器&#xff0c;占空比要求为50%。注意rst为低电平复位。   信号示意图如下&#xff1a; 波形示意图如下。 输入输出描述&#xff1a; 信号类型输入/输出位宽描述clk_inwireIntput1系统时钟信号rs…

node.js分词搜索

背景 最近有个需求是要实现类似【搜索引擎】的功能&#xff0c;用户输入关键字&#xff0c;后台实时推送相关数据。 思路 先仿Elasticsearch做一个简单的分词效果&#xff0c;然后根据分词逐一数据库查询&#xff0c;然后以结果【出现次数由多到少】的顺序展示数据。 实现…

C++多线程学习(三、线程处理函数【get_id、sleep_for、yield、sleep_until】)

目录 线程处理函数 1.获取线程id&#xff1a;get_id 2.延时函数&#xff1a;sleep_for 3.放弃执行函数&#xff0c;调用另一个线程&#xff1a;yield 4.让当前线程休眠直到指定的时间点&#xff1a;sleep_until 线程处理函数 1.获取线程id&#xff1a;get_id #include&l…

C#基础笔记

1.1、数据类型 值类型 需得到一个类型或一个变量在特定平台上的准确尺寸&#xff0c;可以使用 sizeof 方法。表达式 sizeof(type) 产生以字节为单位存储对象或类型的存储尺寸。 using System;namespace DataTypeApplication {class Program{static void Main(string[] args){…

简单而高效的文件管理系统

随着数字化时代的不断发展&#xff0c;人们在日常生活和工作中处理的文件越来越多。如何有效地管理这些文件成为了一个亟待解决的问题。基于云的文件管理系统可以帮助用户更快地查找、组织和共享文件&#xff0c;提高工作效率。本文将介绍如何打造简单而高效的文件管理系统。 …

netty学习(2):多个客户端与服务器通信

1. 基于前面一节netty学习&#xff08;1&#xff09;:1个客户端与服务器通信 只需要把服务器的handler改造一下即可&#xff0c;通过ChannelGroup 找到所有的客户端channel&#xff0c;发送消息即可。 package server;import io.netty.channel.*; import io.netty.channel.gr…

群晖GitLab修改clone(克隆)地址

通过群晖的Docker(ContainerManager)配置好GitLab后&#xff0c;每次clone代码总要修改前面的地址&#xff0c;因此作者找到了修改的办法&#xff0c;实属不易&#xff0c;请给个关注&#xff01; 给出我的群晖配置gitlab的设置&#xff0c;如图1。 图1 Docker中GitLab的配置 按…

生成式AI筑建基石,亚马逊云科技以强大应用能力和辐射范围加快技术传播速度

众所周知&#xff0c;要把大模型转化为生产力&#xff0c;AI模型、算力和数据会是难以逾越的门槛。新的目标已经出现&#xff0c;我们是否有了足够强大的AI基础设施&#xff1f;在6月28日上海举行的峰会上&#xff0c;亚马逊云科技展示了这样的能力。 从掀起AI画图热潮的Stabil…

禁用USB接口的几个办法

本文为大家提供了四个禁用电脑USB接口的方法&#xff0c;如果企业用户建议使用方法三&#xff0c;方法三可以批量对公司内部所有电脑的usb接口进行禁用。 方法一&#xff1a;使用设备管理器禁用USB接口 步骤1&#xff1a;打开设备管理器 首先&#xff0c;我们需要打开设备管理…

玩转smardaten | 速来围观CSDN万粉博主如何零代码开发学生管理系统?

编者荐语&#xff1a; “开发软件必须写代码吗&#xff1f;有没有真正不写代码的快速开发工具&#xff1f;”这是CSDN测试开发领域的万粉博主曲鸟一直思考的问题。今年5月底接触到smardaten&#xff0c;仅用3天自学配置&#xff0c;开发出一款学生管理系统。不得不说&#xff…