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

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 osdef 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:continueobj_struct['name'] = obj.find('name').textbbox = 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 objectsVOC_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 += 1image_path = xml_file.split('.')[0] + '.jpg'results = parse_rec(Annotations + xml_file)# 理论不存在if len(results) == 0:continuewrite_line = image_pathfor 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.hqwc.cn/news/13048.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java安全——安全提供者

Java安全 安全提供者 在Java中&#xff0c;安全提供者&#xff08;Security Provider&#xff09;是一种实现了特定安全服务的软件模块。它提供了一系列的加密、解密、签名、验证和随机数生成等安全功能。安全提供者基础设施在Java中的作用是为开发人员提供一种扩展和替换标准…

ChatGPT 提示词设置

提示词 Prompt&#xff08;提示词&#xff09;&#xff1a;当我们询问GPT时&#xff0c;发送的消息就是Prompt。 通过给出合适的Prompt&#xff0c;可以让GPT了解我们的想法&#xff0c;在根据我们的想法做出更加合适的判断&#xff0c;帮助我们完成任务&#xff0c;提高效率。…

2023测试开发,需要具备的9项能力

作为一名测试开发&#xff0c;需要具备多项能力才能胜任测试开发工作。这些能力涵盖了技术和软技能两个方面。这些能力是相互关联的&#xff0c;相辅相成的&#xff0c;只有不断提升这些能力&#xff0c;才能更好地胜任测试开发工作&#xff0c;本篇文章就分享下我个人的理解 1…

(30)精准降落和悬停(IRLock)

文章目录 30.1 概述 30.2 哪里可以买到 30.3 连接到自动驾驶仪 30.4 安装到框架上 30.5 通过任务规划器进行设置 30.6 飞行和测试 30.1 概述 Copter 支持使用 IR-LOCK 传感器(IR-LOCK sensor)和声纳或激光雷达(sonar or lidar)进行精确着陆。使用该系统&#xff0c;当飞行…

NXP文档AN13000解读-基于S32K116的无感BLDC六步换相控制策略(预定位/开环启动/反电动势过零点检测)

目录 六步换相控制 单极性PWM 反电动势过零点检测技术 反电动势的测量 总线电流的测量 电机状态切换 Alignment Start-up Run 算法用到的各模块 各模块间的连接 ADC触发顺序 芯片的初始化 时钟配置与电源管理 FTM Trigger MUX Control (TRGMUX) PDB ADC LPS…

设计团队管理秘籍:打造高效团队的必备技巧!

一个成功的设计团队取决于正确的人员、良好的沟通和高效的流程。作为设计团队的经理&#xff0c;你有责任确保团队的所有成员都能很好地合作&#xff0c;并有效地产生预期的结果。这里有一些关于如何管理好一个设计团队的技巧。 1、雇佣正确的人: 当你组建你的设计团队时&#…

依次判断数组中的各元素是否以指定后缀作为结尾numpy.char.endswith()

【小白从小学Python、C、Java】 【计算机等考500强证书考研】 【Python-数据分析】 依次判断数组中的各元素 是否以指定后缀作为结尾 numpy.char.endswith() [太阳]选择题 下列代码最后输出的结果是&#xff1f; import numpy as np s np.array([teacher, student]) print(&…

【雕爷学编程】Arduino动手做(154)---AFMotor电机扩展板模块

37款传感器与执行器的提法&#xff0c;在网络上广泛流传&#xff0c;其实Arduino能够兼容的传感器模块肯定是不止这37种的。鉴于本人手头积累了一些传感器和执行器模块&#xff0c;依照实践出真知&#xff08;一定要动手做&#xff09;的理念&#xff0c;以学习和交流为目的&am…

创建台虚拟机并安装上window10系统(NETBASE 第一课)

虚拟机&#xff08;Virtual Machine&#xff09;是一种基于软件的模拟技术&#xff0c;它可以将一台物理计算机模拟成多个虚拟计算机运行不同的操作系统和应用程序&#xff0c;从而实现资源的虚拟化和隔离。在虚拟机中&#xff0c;每个虚拟计算机都拥有自己的独立的操作系统和应…

aidl原理

aidl 流程 为了方便理解&#xff0c;先将binder看做是一个黑盒子 aidl的流程图如下 demo连接添加链接描述 Androidstudio 会帮我们生成emotionAidlService&#xff0c;具体目录在n\build\generated\aidl_source_output_dir\debug\out\com\example\emotion\emotionAidlServic…

web安全php基础_php之string对象详解

PHP 字符串 字符串变量用于包含有字符的值。 在创建字符串之后&#xff0c;我们就可以对它进行操作了。您可以直接在函数中使用字符串&#xff0c;或者把它存储在变量中。 在下面的实例中&#xff0c;我们创建一个名为 txt 的字符串变量&#xff0c;并赋值为 “Hello world!…

【数据仓库】Apache Doris介绍

Apache Doris介绍 Apache Doris应用场景 Apache Doris核心特性 Apache Doris架构 Doris数据模型三种 Aggregate模型介绍 Uniq模型介绍 在某些多维分析场景下,用户更关注的是如何保证Key的唯一性Key 唯一性约束。因此&#xff0c;我们引入了 Unig 的数据模型。该模型本质上是聚…