了解Pascal VOC

利用深度学习方法如Faster R-CNN或YOLOv3等进行目标检测时需要训练数据集,我们很少会根据自己的数据集格式修改代码,更多的是按照一定格式修改自己的数据格式,而PASCAL VOC为图像识别和分类提供了一整套标准化的数据集,为了方便我们目标检测的进行,可以先来详细的记录一下PASCAL VOC的格式。
Pascal VOC数据集下载地址:http://host.robots.ox.ac.uk/pascal/VOC/

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

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

(1)Annotations


Annotations文件夹中存放的是xml格式的标签文件,每一个xml文件都对应于JPEGImages文件夹中的一张图片,包含了图片的重要信息:图片的名称,图片中object的类别及其bounding box坐标。xml文件的解析如下:
其中:

标签 解释
filename 文件名
source 图像来源(不重要)
size 图像尺寸(长宽以及通道),包含了width,height和depth
segmented 是否用于分割
object 需检测到的物体,包含了物体名称name,拍摄角度pose,是否截断truncated,难以识别difficult,object对应的bounding box信息 bndbox
bndbox 包含左下角和右上角x,y坐标 (xmin,ymin,xmax,ymax)
<annotation><folder>VOC2007</folder><filename>000051.jpg</filename><source><database>The VOC2007 Database</database><annotation>PASCAL VOC2007</annotation><image>flickr</image><flickrid>291539949</flickrid></source><owner><flickrid>kristian_svensson</flickrid><name>Kristian Svensson</name></owner><size><width>500</width><height>375</height><depth>3</depth></size><segmented>0</segmented><object><name>motorbike</name><pose>Unspecified</pose><truncated>1</truncated><difficult>0</difficult><bndbox><xmin>352</xmin><ymin>138</ymin><xmax>500</xmax><ymax>375</ymax></bndbox></object><object><name>motorbike</name><pose>Unspecified</pose><truncated>0</truncated><difficult>0</difficult><bndbox><xmin>105</xmin><ymin>1</ymin><xmax>427</xmax><ymax>245</ymax></bndbox></object><object><name>person</name><pose>Unspecified</pose><truncated>0</truncated><difficult>1</difficult><bndbox><xmin>415</xmin><ymin>61</ymin><xmax>465</xmax><ymax>195</ymax></bndbox></object>
</annotation>

以下程序可以将XML标签中目标绘制在图像中,并返回:
具体步骤为:
1.用xml.etree.ElementTree库中的parse方法解析xml文件;
2.获取xml文件的根节点
3.寻找object节点用find() 和findall(), .text表示获取节点中的内容
4.cv2绘图,rectangle画框,putTEXT标注类别

# -*- coding: utf-8 -*-
import xml.etree.ElementTree as ET
import os,cv2xml_file='Annotations/000282.xml'
tree=ET.parse(xml_file)
root=tree.getroot()
imgfile='JPEGImages/000282.jpg'
im = cv2.imread(imgfile)
for object in root.findall('object'):object_name=object.find('name').textXmin=int(object.find('bndbox').find('xmin').text)Ymin=int(object.find('bndbox').find('ymin').text)Xmax=int(object.find('bndbox').find('xmax').text)Ymax=int(object.find('bndbox').find('ymax').text)color = (4, 250, 7)cv2.rectangle(im,(Xmin,Ymin),(Xmax,Ymax),color,2)font = cv2.FONT_HERSHEY_SIMPLEX  cv2.putText(im, object_name, (Xmin,Ymin - 7), font, 0.5, (6, 230, 230), 2)cv2.imshow('01',im)
#cv2.imwrite('02.jpg', im)

JPEGImages

存放的是数据集的原图片,像素尺寸大小不一

ImageSets

ImageSets存放的是每一种计算机视觉任务类型所对应的文件夹,各个文件夹均存放txt格式文件,txt中记录图片名:

文件夹 数据信息
Layout 具有人体部位的数据
Main 一般存放图像物体识别的数据
Segmentation 用于语义,实例分割的数据

目标检测主要用到Main文件夹中的txt文件(训练自己的数据时,我们需要自己生成):

Main中的txt文件 用途
train 训练使用的图片名称(无后缀)
val 验证使用的图片名称(无后缀)
trainval 以上两者的合并
test 测试使用的图片名称(无后缀)


以下代码可以通过统计Annotations文件夹里xml文件的数目划分各类数据集

import os
import randompath='D:/VOCtrainval_06-Nov-2007/yoloV3conf\keras-yolo3-master/VOCdevkit/VOC2007/'trainval_percent = 0.66
train_percent = 0.5xmlfilepath = path+'Annotations'
txtsavepath = path+'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)ftrainval = open(path+'ImageSets/Main/trainval.txt', 'w')
ftest = open(path+'ImageSets/Main/test.txt', 'w')
ftrain = open(path+'ImageSets/Main/train.txt', 'w')
fval = open(path+'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()

1.安装标注工具

数据标注工具labelImg,可以通过可视化的操作界面进行画框标注,就能自动生成VOC格式的xml文件,该工具是基于Python语言编写的,这样就支持在Windows、Linux的跨平台运行,Windows和Linux下载地址为:https://tzutalin.github.io/labelImg/

2.创建文件夹

按照VOC数据集的要求,创建以下文件夹
(1)Annotations:用于存放标注后的xml文件
(2)ImageSets/Main:用于存放训练集、测试集、验收集的文件列表
(3)JPEGImages:用于存放原始图像

3.标注数据

将源图片集放在JPEGImages文件夹里面,注意图片的格式必须是jpg格式的。
打开labelImg标注工具,然后点击左侧的工具栏“Open Dir”按钮,选择刚才放猫的JPEGImages文件夹。这时,主界面将会自动加载第一张猫照片。

点击左侧工具栏的“Create RectBox”按钮,然后在主界面上点击拉个矩形框,将猫圈出来。圈定后,将会弹出一个对话框,用于输入标注物体的类别,这里输入cat作为object类别。

然后点击左侧工具栏的“Save”按钮,选择刚才创建的Annotations作为保存目录,系统将自动生成VOC2007格式的xml文件保存起来。这样就完成了一张猫照片的物体标注了。

接下来点击左侧工具栏的“Next Image”进入下一张图像,按照以上步骤,画框、输入名称、保存,如此反复,直到把所有照片都标注好,保存起来。

这样就完成了数据集的准备

目标检测的数据集制作一般流程(Pascal VOC标准格式)相关推荐

  1. PASCAL VOC训练集制作(从原始视频到目标检测训练数据集)

    本文目的:实验用CCD采集到5个视频,需在5个视频中采集有效图片,并将这些图片利用LableImg软件进行标注,用来制备VOC格式的目标检测训练数据集. 第一步:有效视频截取 将采集到的视频利用ban ...

  2. 目标检测coco数据集点滴介绍

    目标检测coco数据集点滴介绍 COCO数据集介绍 MS COCO 是google 开源的大型数据集, 分为目标检测.分割.关键点检测三大任务, 数据集主要由图片和json 标签文件组成. coco数 ...

  3. 目标检测常用数据集格式

    简介 我们经常需要使用自己通过标注工具(如LabelImg.LabelMe等)生成的数据集或者一些开源数据集进行目标检测模型的训练,这些自定义数据集格式多样且不具有一致性,而目标检测的数据格式相比于其 ...

  4. coco数据集目标检测论文_目标检测coco数据集点滴介绍

    目标检测coco数据集点滴介绍 1.  COCO数据集介绍 MS COCO 是google 开源的大型数据集, 分为目标检测.分割.关键点检测三大任务, 数据集主要由图片和json 标签文件组成. c ...

  5. [数据集][目标检测]篮球数据集VOC格式7398张

    数据集格式:Pascal VOC格式(不包含分割路径的txt文件和yolo格式的txt文件,仅仅包含jpg图片和对应的xml) 图片数量(jpg文件个数):7398 标注数量(xml文件个数):739 ...

  6. 【mmdetection3d】——3D 目标检测 NuScenes 数据集

    3D 目标检测 NuScenes 数据集 本页提供了有关在 MMDetection3D 中使用 nuScenes 数据集的具体教程. 准备之前 您可以在这里下载 nuScenes 3D 检测数据并解压 ...

  7. 遥感图像目标检测常用数据集及下载链接汇总

    1.TAS数据集 2.DIOR 3.LEVIR 4.DOTA 5.RSOD 6.UCAS-AOD 7.NWPU VHR-10 8.VEDAI 9.HRSC2016 1.TAS数据集 是为航空图像中的汽 ...

  8. [数据集][目标检测]塔吊数据集VOC格式2559张

    数据集格式:Pascal VOC格式(不包含分割路径的txt文件和yolo格式的txt文件,仅仅包含jpg图片和对应的xml) 图片数量(jpg文件个数):2559 标注数量(xml文件个数):255 ...

  9. python解析xml+得到pascal voc xml格式用于目标检测+美化xml

    1.python解析xml img_path='./data/001.tif'xml_path='./xml/001.xml'img=cv2.imread(img_path)# cv2.imshow( ...

  10. 从图片到dataframe——语义分割数据集制作全流程

    分享一下从原始图片,到标记图片,再到转换为python里的数据结构语义分割数据集制作全流程. 安装labelme labelme 是一个图形界面的图像标注软件,可以很方便地划分出多边形边界. 下面在w ...

最新文章

  1. Node.js连接MySQL
  2. linux mysql 端口配置文件_Linux配置测试环境,部署项目(指定端口,数据库连接)...
  3. matplotlib - 极坐标上的散点图
  4. python字符串解释_python基础之字符串详解
  5. php 异步处理类,php异步处理类
  6. DataSet和DataTable详解
  7. Spring框架----Spring的bean之三种创建bean对象的方式
  8. 2021下半年软考网络工程师上午真题(二)
  9. 深入浅出SpringCloud
  10. 货币战争悲壮的英雄:帕潘德里欧
  11. Xilinx FPGA “打一拍”“打两拍”以及IOB含义
  12. 人脸识别学生考勤系统【2】--登录
  13. C语言—操作符和表达式
  14. fortran常见错误汇总
  15. Linux中 shell 脚本获取当前工作目录的方法
  16. 用于 Visual Studio Code 的 LaTeX Workshop
  17. RAM与ROM的原理与区别
  18. 顺时针螺旋打印二维数组
  19. 计算机考研大纲代码,2017考研大纲:计算机考研大纲文字版之计算机组成原理...
  20. [读书笔记]《Hands on Design Patterns with C++》—— CRTP

热门文章

  1. MySQL--通过mysqladmin命令修改密码提示:single quotes were not trimmed line client(Windows)
  2. win10怎么在网络里查看win7计算机,win10看不到win7共享电脑怎么办_win10共享发现不了其他电脑的解决方法...
  3. 物联网 PaaS 平台大盘点
  4. 花一个星期时间呕心沥血整理出高频软件测试/自动化测试面试题和答案
  5. 年面向大学生的 9 个最佳 Chrome 扩展程序
  6. WinSxS目录下文件的清除
  7. 网页信息抓取-如何获取延迟加载的网页数据
  8. 关于长江的题目_高中优秀议论文题目【高中关于长江的作文题目加优秀范文】...
  9. 还是gif动画的处理
  10. 0x752940B2(KernelBase.dll)(xxx.exe中有未经处理的异常:0xE0000008)