【数据集显示标注】VOC文件结构+数据集标注可视化+代码实现

一、效果图:

效果前


显示:代码+常见报错===》正文开始↓

一、Pascal VOC数据集介绍

Pascal VOC网址:http://host.robots.ox.ac.uk/pascal/VOC/

训练/验证数据集下载(2G):host.robots.ox.ac.uk/pascal/VOC/voc2012/VOCtrainval_11-May-2012.tar

数据下载镜像网站(实测迅雷教育网速度很快):https://pjreddie.com/projects/pascal-voc-dataset-mirror/

VOCdevkit文件夹

数据集下载后解压得到一个名为VOCdevkit的文件夹,该文件夹结构如下:

└── VOCdevkit     #根目录
    └── VOC2012   #不同年份的数据集,这里只下载了2012的,还有2007等其它年份的
        ├── Annotations        #存放xml文件,与JPEGImages中的图片一一对应,解释图片的内容等等
        ├── ImageSets          #该目录下存放的都是txt文件,txt文件中每一行包含一个图片的名称,末尾会加上±1表示正负样本
        │   ├── Action
        │   ├── Layout
        │   ├── Main
        │   └── Segmentation
        ├── JPEGImages         #存放源图片
        ├── SegmentationClass  #存放的是图片,语义分割相关
        └── SegmentationObject #存放的是图片,实例分割相关

1、JPEGImages

主要提供的是PASCAL VOC所提供的所有的图片信息,包括训练图片,测试图片
这些图像就是用来进行训练和测试验证的图像数据。 

2、Annotations

 主要存放xml格式的标签文件,每个xml对应JPEGImage中的一张图片

<annotation>  <folder>VOC2012</folder>                             <filename>2007_000392.jpg</filename>               //文件名  <source>                                           //图像来源(不重要)  <database>The VOC2007 Database</database>  <annotation>PASCAL VOC2007</annotation>  <image>flickr</image>  </source>  <size>                              //图像尺寸(长宽以及通道数)                        <width>500</width>  <height>332</height>  <depth>3</depth>  </size>  <segmented>1</segmented>            //是否用于分割(在图像物体识别中01无所谓)  <object>                              //检测到的物体  <name>horse</name>                //物体类别  <pose>Right</pose>                //拍摄角度  <truncated>0</truncated>          //是否被截断(0表示完整)  <difficult>0</difficult>          //目标是否难以识别(0表示容易识别)  <bndbox>                          //bounding-box(包含左下角和右上角xy坐标)  <xmin>100</xmin>  <ymin>96</ymin>  <xmax>355</xmax>  <ymax>324</ymax>  </bndbox>  </object>  <object>              //检测到多个物体  <name>person</name>  <pose>Unspecified</pose>  <truncated>0</truncated>  <difficult>0</difficult>  <bndbox>  <xmin>198</xmin>  <ymin>58</ymin>  <xmax>286</xmax>  <ymax>197</ymax>  </bndbox>  </object>  
</annotation> 

3、ImageSets 

  • Action // 人的动作
  • Layout // 人体的具体部位
  • Main // 图像物体识别的数据,总共20类, 需要保证train val没有交集
    • train.txt
    • val.txt
    • trainval.txt
  • Segmentation // 用于分割的数据

4、SegmentationObject【实例分割相关】

5、SegmentationClass【语义分割相关】

二、VOC可视化数据集

1、作用

在做目标检测时,首先要检查标注数据。一方面是要了解标注的情况,另一方面是检查数据集的标注和格式是否正确,只有正确的情况下才能进行下一步的训练。

2、代码实现

import os
# import sys
import cv2
import random
from tqdm import tqdm
# import numpy as np
import argparse
import xml.etree.ElementTree as ETdef xml_reader(filename):""" Parse a PASCAL VOC xml file """tree = ET.parse(filename)objects = []for obj in tree.findall('object'):obj_struct = {}obj_struct['name'] = obj.find('name').textbbox = obj.find('bndbox')obj_struct['bbox'] = [int(bbox.find('xmin').text),int(bbox.find('ymin').text),int(bbox.find('xmax').text),int(bbox.find('ymax').text)]objects.append(obj_struct)return objectsdef get_image_list(image_dir, suffix=['jpg', 'png']):'''get all image path ends with suffix'''if not os.path.exists(image_dir):print("PATH:%s not exists" % image_dir)return []imglist = []for root, sdirs, files in os.walk(image_dir):if not files:continuefor filename in files:filepath = os.path.join(root, filename)if filename.split('.')[-1] in suffix:imglist.append(filepath)return imglistif __name__ == "__main__":parser = argparse.ArgumentParser(description='check data')parser.add_argument('--input', dest='input', help='The input dir of images', type=str)parser.add_argument('--output', dest='output', default='temp', help='The output dir of images', type=str)parser.add_argument('--num', dest='num', default=50, help='The number of images you want to check', type=int)args = parser.parse_args()if not os.path.exists(args.output):os.makedirs(args.output)img_list = get_image_list(args.input)img_list = random.sample(img_list, args.num)for img_path in tqdm(img_list):img = cv2.imread(img_path)if img is None or not img.any():continuexml_path = img_path.replace("JPEGImages", "Annotations").replace(".jpg", ".xml").replace(".png", ".xml")objects = xml_reader(xml_path)if len(objects) == 0:continue# draw box and namefor obj in objects:name = obj['name']box = obj['bbox']p1 = (box[0], box[1])p2 = (box[2], box[3])p3 = (max(box[0], 15), max(box[1], 15))cv2.rectangle(img, p1, p2, (0, 0, 255), 2)cv2.putText(img, name, p3, cv2.FONT_ITALIC, 1, (0, 255, 0), 2)img_name = os.path.basename(img_path)cv2.imwrite(os.path.join(args.output, img_name), img)

3、使用方法

python Visual_dataset.py --input VOCdevkit/JPEGImages --output ./Result_imgs --num 3408python 上述代码的文件名称 --input 图片地址 --output 输出文件夹地址 --num 图片数量

4、常见报错

(python38) D:\pythontorch\VOC>python Visual_dataset.py --input VOCdevkit/ImageSets --output Result_imgs --num 3408
Traceback (most recent call last):
  File "Visual_dataset.py", line 55, in <module>
    img_list = random.sample(img_list, args.num)
  File "C:\ProgramData\Anaconda3\envs\python38\lib\random.py", line 363, in sample
    raise ValueError("Sample larger than population or is negative")
ValueError: Sample larger than population or is negative

原因 你的路径写错了
 

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

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

相关文章

tinyxml2遍历所有节点_Python实现二叉树的遍历

Outline&#xff1a;二叉树概念二叉树遍历&#xff08;前序、中序、后序、宽度优先遍历&#xff09;的迭代实现和递归实现&#xff1b;二叉树的深度&#xff0c;二叉树到leaf的所有路径。树&#xff08;Tree&#xff09;是一种抽象数据类型&#xff08;ADT&#xff09;&#xf…

如何监控NVIDIA Jetson的的运行状态和使用情况

一、NVIDIA Jetson介绍 NVIDIA Jetson是NVIDIA为新一代自主机器设计的嵌入式系统&#xff0c;是一个AI平台&#xff0c;所提供的性能和能效可提高自主机器软件的运行速度。每个系统都是一个完备的模块化系统&#xff0c;具备CPU、GPU、PMIC、DRAM和闪存。Jetson具备可扩展性&a…

atm取款机的简单程序代码_LeNet:一个简单的卷积神经网络PyTorch实现

前两篇文章分别介绍了卷积层和池化层&#xff0c;卷积和池化是卷积神经网络必备的两大基础。本文我们将介绍一个早期用来识别手写数字图像的卷积神经网络&#xff1a;LeNet[1]。LeNet名字来源于论文的第一作者Yann LeCun。1989年&#xff0c;LeNet使用卷积神经网络和梯度下降法…

【数据集转换】VOC数据集转COCO数据集·代码实现+操作步骤

在自己的数据集上实验时&#xff0c;往往需要将VOC数据集转化为coco数据集&#xff0c;因为这种需求所以才记录这篇文章&#xff0c;代码出处未知&#xff0c;感谢开源。 在远程服务器上测试目标检测算法需要用到测试集&#xff0c;最常用的是coco2014/2017和voc07/12数据集。 …

idea spring tomcat启动失败_技术篇 | 实用IDEA插件和工具系列

前 言本章主要分享一些工作中常用的IDEA插件(Maven Helper、Lombok、Mybatis Log Plugin、RestfulToolkit、JRebel And XRebel)和实用工具arthas。01Maven Helper作用&#xff1a;能清晰的查看当项目的Maven依赖版本、依赖关系、依赖冲突等情况。使用步骤&#xff1a;①安装后,…

【数据集可视化】VOC数据集标注可视化+代码实现

二、VOC可视化数据集 1、作用 在做目标检测时&#xff0c;首先要检查标注数据。一方面是要了解标注的情况&#xff0c;另一方面是检查数据集的标注和格式是否正确&#xff0c;只有正确的情况下才能进行下一步的训练。 2、代码实现 import os # import sys import cv2 import…

串口UART串行总线协议

串口UART 串行端口是异步的&#xff08;不传输时钟相关数据&#xff09;&#xff0c;两个设备在使用串口通信时&#xff0c;必须先约定一个数据传输速率&#xff0c;并且这两个设备各自的时钟频率必须与这个速率保持相近&#xff0c;某一方的时钟频率相差很大都会导致数据传输…

基于Springboot外卖系统01:技术构成+功能模块介绍

外卖系统是专门为餐饮企业&#xff08;餐厅、饭店&#xff09;定制的一款软件产品&#xff0c;包括 系统管理后台 和 移动端应用 两部分。其中系统管理后台主要提供给餐饮企业内部员工使用&#xff0c;可以对餐厅的分类、菜品、套餐、订单、员工等进行管理维护。移动端应用主要…

HTML5本地图片裁剪并上传

最近做了一个项目&#xff0c;这个项目中需要实现的一个功能是&#xff1a;用户自定义头像&#xff08;用户在本地选择一张图片&#xff0c;在本地将图片裁剪成满足系统要求尺寸的大小&#xff09;。这个功能的需求是&#xff1a;头像最初剪切为一个正方形。如果选择的图片小于…

嵌入式就应该这样学!!

嵌入式就应该这样学&#xff01;&#xff01; 1、Linux内核 Linux 内核定时器 Linux进程上下文和中断上下文内核空间和用户空间 Linux内核链表 Linux 内核模块编译 Linux内核使用Gdb调试 Linux动态打印kernel日志 Linux的中断可以嵌套吗 Linux内核定时器 Linux 驱动之Ioctl Lin…

基于Springboot外卖系统02:数据库搭建+Maven仓库搭建

1 数据库环境搭建 1.1 创建数据库 可以通过以下两种方式中的任意一种, 来创建项目的数据库: 1).图形界面 注意: 本项目数据库的字符串, 选择 utf8mb4 2).命令行 1.2 数据库表导入 项目的数据库创建好了之后, 可以直接将 资料/数据模型/db_reggie.sql 直接导入到数据库中, …

margin 负边距应用

margin-right:负值&#xff0c;在没有设置DOM元素宽度的前提下&#xff0c;DOM元素宽度变宽。 1 <!DOCTYPE html>2 <html lang"zh-CN">3 4 <head>5 <meta charset"UTF-8">6 <meta http-equiv"X-UA-Co…

基于Springboot外卖系统03:pom.xml导入依赖+数据库配置文件+Boot启动类+静态资源映射

1).在pom.xml中导入依赖 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apache…

写给过得很辛苦很迷茫的你~一定要看啊

#前面的话 我是一个农村的孩子&#xff0c;我家很穷&#xff0c;小时候过得非常苦&#xff0c;每次开学是我最害怕的时候&#xff0c;我害怕我爸妈拿不出学费&#xff0c;我害怕我爸妈会让我辍学在家帮忙干活&#xff0c;每次跟我妈吵架的时候&#xff0c;当我妈跟我说不让我读…

flatpickr功能强大的日期时间选择器插件

flatpickr日期时间选择器支持移动手机&#xff0c;提供多种内置的主题效果&#xff0c;并且提供对中文的支持。它的特点还有&#xff1a; 使用SVG作为界面的图标。 兼容jQuery。 支持对各种日期格式的解析。 轻量级&#xff0c;高性能&#xff0c;压缩后的版本仅6K大小。 对…

基于Springboot外卖系统04:后台系统用户登录+登出功能

登录业务流程 ① 在登录页面输入用户名和密码 ② 调用后台接口进行验证 ③ 通过验证之后&#xff0c;根据后台的响应状态跳转到项目主页 2. 登录业务的相关技术点 http 是无状态的通过 cookie 在客户端记录状态通过 session 在服务器端记录状态通过 token 方式维持状态如果前端…

排序算法时间复杂度、空间复杂度、稳定性比较

排序算法分类 排序算法比较表格填空 排序算法平均时间复杂度最坏时间复杂度空间复杂度是否稳定冒泡排序:————-::—–::—–::—–:选择排序:————-::—–::—–::—–:直接插入排序:————-::—–::—–::—–:归并排序:————-::—–::—–::—–:快速排序:———…

基于Springboot外卖系统05:用户非登陆状态的页面拦截器实现

1. 完善登录功能 1.1 问题分析 用户访问接口验证&#xff0c;如果用户没有登录&#xff0c;则不让他访问除登录外的任何接口。 1.前端登录&#xff0c;后端创建session&#xff0c;返给前端 2.前端访问其他接口&#xff0c;失效或不存在&#xff0c;则返回失效提示&#xff…

python删除指定行_关于csv:删除python中的特定行和对应文件

我想删除90%的"转向"值等于0的行。这三个图像都有一个对应的图像文件&#xff0c;中间&#xff0c;左边和右边。我也要删除它们。csv文件如下&#xff1a;我编写了以下代码&#xff0c;以至少获取转向值为0的文件。我所需要的就是随机获取90%的文件并删除它们的代码。…

I2C总线传输协议

简介 I2C&#xff08;Inter-integrated Circuit&#xff09;总线支持设备之间的短距离通信&#xff0c;用于处理器和一些外围设备之间的接口&#xff0c;它只需要两根信号线来完成信息交换。I2C最早是飞利浦在1982年开发设计并用于自己的芯片上&#xff0c;一开始只允许100kHz…