PASCAL VOC是一个国际的计算机视觉挑战赛,数据集包含了20个分类的3万多张图片。挑战赛及其数据集基础上涌现不少知名的目标检测模型如R-CNN,YOLO,SSD等。可以通过下载和读取的方法载入PASCAL VOC数据集。

1 数据集下载
PASCAL VOC数据集可以从官方网站下载
http://host.robots.ox.ac.uk/pascal/VOC/

常用的是2007版和2012版,下载后是一个tar文件包
http://host.robots.ox.ac.uk/pascal/VOC/voc2012/VOCtrainval_11-May-2012.tar

从外网下载速度较慢,如果用迅雷等下载,会自动从国内镜像下载,可以取得较快的速度
下载之后解压,出现VOCdevkit目录,里面包含VOC2012目录,下面包含Annotations,JPEGImages等目录

VOCdevkit                            #根目录VOC2012                         #2012版Annotations                   #标注ImageSets                    #分类信息JPEGImages                 #jpeg图像目录SegmentationClass          #类别分割信息SegmentationObject           #物体分割信息

2 数据集读取
首先载入需要的模块

import os
import matplotlib.pyplot as plt
import matplotlib.image as mpimgimport xml.dom.minidom as minidom

xml模块用来读取Annotations目录中的xml文件,VOC数据集的标注用xml文件来表示。
定义数据目录变量如下

data_path = '../data/PASCAL_VOC/VOCdevkit/VOC2012'
anno_path = f'{data_path}/Annotations'
image_path = f'{data_path}/JPEGImages'

然后从Annotations目录读取一个图片信息的列表,这里读取100张

# collect 100 samples from files in anno_path
sample_list = []for xml in os.listdir(annotation_path):file_id = os.path.splitext(xml)[0]xml_file = f'{anno_path}/{file_id}.xml'jpg_file = f'{image_path}/{file_id}.jpg'sample = {'id':file_id, 'xml_file':xml_file, 'jpg_file':jpg_file}sample_list.append(sample)if len(sample_list) >= 100:break

生成一个列表,每一个元素包含图片的id,对应的xml标注文件和图像文件(jpeg)。

然后定义一个从xml文件读取目标信息的函数。xml的文件格式大致如下

<?xml version="1.0"?>
-<annotation><folder>VOC2012</folder><filename>2007_000333.jpg</filename>-<source><database>The VOC2007 Database</database><annotation>PASCAL VOC2007</annotation><image>flickr</image></source>-<size><width>500</width><height>333</height><depth>3</depth></size><segmented>1</segmented>-<object><name>train</name><pose>Unspecified</pose><truncated>1</truncated><difficult>0</difficult>-<bndbox><xmin>1</xmin><ymin>39</ymin><xmax>367</xmax><ymax>270</ymax></bndbox></object>
</annotation>

其中包含<annotation>的主节点,主节点下面包含了<object>信息,即图片所包含的目标的名称、位置等信息。如果有多个目标,则会在其中列出多项。
读取目标信息的代码如下

# get information of objects from xml file
def get_objects(xml_file):dom = minidom.parse(xml_file)anno = dom.documentElementobjects = anno.getElementsByTagName('object')obj_names = []for obj in objects:obj_name = obj.getElementsByTagName('name')[0].childNodes[0].dataobj_names.append(obj_name)return obj_names

即从根节点出发,寻找object子节点,遍历所有子节点,把对应的目标名称加入到object_names,最后返回这张图片所包含的所有目标的名称。

然后,显示数据集中的图片和对应的分类目标信息,限于屏幕大小,这里显示最前面的25张图片

# lines and columns of subplots
m = 5
n = 5
num = m*n# size of figure
plt.figure(figsize=(14,13))# plot first 25 pictures
for i in range(num):plt.subplot(m,n,i+1)objects = get_objects(sample_list[i]['xml_file'])img = mpimg.imread(sample_list[i]['jpg_file'])plt.imshow(img)plt.xticks([])plt.yticks([])plt.xlabel(','.join(objects))plt.show()

结果如下,每一个位置显示数据集中包含的图片以及图片中所包含的目标。

人工智能学习:PASCAL VOC数据集读取(6)相关推荐

  1. 图像处理基本库的学习笔记5--公共数据集,PASCAL VOC数据集,NYUD V2数据集的简介与提取,COCO2017,医学影像数据集汇总

    目录 公共数据集 计算机视觉标准数据集整理-PASCAL VOC数据集 数据集文件结构 Annotation JPEGImages SegmentationClass SegmentationObje ...

  2. Ubuntu上用caffe的SSD方法训练Pascal VOC数据集

    实验目的 继caffe和ssd搭建完成,demo也演示完毕,了解一些基本知识后,现在开始训练自己的数据集,在给自己的训练集处理之前,先跟着官方的示例将Pascal VOC数据集训练走一遍,把可能会踩坑 ...

  3. RCNN系列实验的PASCAL VOC数据集格式设置

    我们在做RCNN系列的实验时,往往需要把数据集的格式设置为和PASCAL VOC数据集一样的格式,其实当然也可以修改读取数据的代码,只是这样更为麻烦,自己的数据格式变了又得修改.  首先以VOC200 ...

  4. Deep Learning---py-faster-rcnn基于PASCAL VOC数据集训练模型

    0 说明 系统环境为Ubuntu14.04, 已经安装好了CUDA和cuDNN以及Python等基础包. 1 设置和编译py-faster-rcnn 1.1 下载py-faster-rcnn $ gi ...

  5. 目标检测数据集-Pascal VOC 数据集介绍

    个人微信公众号:AI研习图书馆 ID:(Art-Intelligence) 欢迎关注,交流学习,共同进步~ 1.引言 PASCAL VOC数据集,为图像识别和分类提供了一整套标准化的优秀数据集,从20 ...

  6. Pascal VOC 数据集介绍(tensorflow model zoo)

    Pascal VOC 数据集的下载 # 下载2007年的训练数据 wget http://host.robots.ox.ac.uk/pascal/VOC/voc2007/VOCtrainval_06- ...

  7. PASCAL VOC 数据集的标注格式

    PASCAL VOC 数据集的标注格式 PASCAL VOC 挑战赛 ( **The PASCAL Visual Object Classes )是一个世界级的计算机视觉挑战赛. PASCAL的全称是 ...

  8. 对PASCAL VOC 数据集进行数据增强

    对PASCAL VOC 数据集进行数据增强 1.GitHub仓库位置 目的:对VOC数据集的对象检测的数据进行数据增强.如果能帮到您请给本人一颗⭐,拜托了!!!!! https://github.co ...

  9. pascal行人voc_在Pascal VOC 数据集上训练YOLOv3模型

    上节介绍了<从零开始在Windows10中编译安装YOLOv3>,本节介绍在Pascal VOC 数据集上训练YOLOv3. 第一步,下载并安装YOLOv3训练依赖项. a.下载Pasca ...

最新文章

  1. ArcGIS.Server.9.3和ArcGIS API for Flex的GeometryService和buffer分析(十)
  2. dirver时区_JDBD连接MySQL中的驱动与时区问题
  3. (web前端笔记)2020-12-23(ajax)
  4. JDK的快速排序算法实现DualPivotQuicksort
  5. 如何成批导入数据到 kitten编程猫 类型为列表的变量中
  6. halcon trainf_ocr_class_svm 训练OCR分类器
  7. Git之如何解决Error:pathspec ‘/layout/radar_chart.xml‘ did not match any file(s) known to
  8. Hbase rowkey设计原则,热点问题
  9. 输入引脚时钟约束_最强干货分享 | 时钟树例外(exclude pin、stop pin、non_stop pin、float pin)...
  10. Docker的save和export命令的区别
  11. 奶块1月25日服务器维护时间,奶块1月25更新公告 | 手游网游页游攻略大全
  12. Linux下使用nohup运行python脚本报错:Import error: No module named numpy问题解决
  13. 性能(八)Postman汉化踩坑
  14. 关于深度森林的一点理解
  15. 最好的 6 款 React 后台管理系统模板和框架
  16. JavaFx之Ikonli图标库大全(十五)
  17. “AI四小龙”神话破灭?依图终止IPO,云从大裁员,旷视巨亏不止
  18. 今天的码农女孩学习了关于python元祖和字典的知识以及结合前面学的知识做了四个小练习
  19. openwrt多wan限上下行速脚本,基于qosv4,imq模块替换成ifb模块
  20. iphone7plus启动时icon被拉伸放大的原因

热门文章

  1. 调查研究论文的描述性统计结果该如何分析讨论?
  2. 泛微oa流程表单之意见栏字数限制
  3. 在MATLAB中手动安装MinGW64详细教程
  4. io口模拟spi,stm32f103与MS5611基于spi总线的温度压力高度数据读取
  5. 三员之三权分立BMB20-2007
  6. 华为USG防火墙-建立安全策略禁止上班时间访问其他网站
  7. 如何让你的App永远在后台存活:对Android进程守护、闹钟后台被杀死的研究
  8. mint ui tabbar选中后怎么改变icon图标_微信朋友圈怎么转发 微信里面的朋友圈发的怎样再转发一次?...
  9. log4j2的介绍与使用(配置文件,路径等)
  10. 讨教大学|2022年中质协六西格玛考试报名通知