Pascal Voc数据集格式详细分析

VOC数据集结构如下

└── VOCdevkit
	└── VOC2012   #不同年份的数据集,自己构造数据集时可以修改名字
		├── Annotations        #存放xml文件,与JPEGImages中的图片一一对应,解释图片的内容等等
		├── ImageSets          #该目录下存放的都是txt文件,txt文件中每一行包含一个图片的名称
		│   ├── Main
		├── JPEGImages         #存放源图片
		├── labels         #存放标签
		├── Test         #存放测试集 有没有内容无所谓

Annotations (注释)

以xml格式存放图片信息 (以车牌识别为例)

  1. 目标物体 label : name ,如下例子为 person
  2. 图片尺寸: depth, height, width
  3. 目标物体 bbox的坐标信息: bndbox 下 xmax, xmin, ymax, ymin
    举例如下:
<annotation>
  <folder>JPEGImages</folder>	//训练时这里必须正确
  <filename>0001</filename>	//训练时这里必须正确,path不必精准
  <path>H:\labelImg-master\windows_v1.2.2\data\voc\VOCdevkit\VOC2019\JPEGImages\0001.jpg</path>
  <source>
    <database>Unknown</database>	//默认为Unknown
  </source>
  <size>	//图片尺寸
    <width>361</width>
    <height>306</height>
    <depth>3</depth>
  </size>
  <segmented>0</segmented>
  <object>	//目标信息
    <name>plate</name>	//目标的label
    <pose>Unspecified</pose>	//拍摄角度 默认值Unspecified
    <truncated>0</truncated>	//是否被截断(默认0表示完整)
    <difficult>0</difficult>	//目标是否难以识别(默认0表示容易识别)
    <bndbox>	//目标位置信息
      <xmin>109</xmin>
      <ymin>125</ymin>
      <xmax>260</xmax>
      <ymax>194</ymax>
    </bndbox>
  </object>
  <object>
    <name>粤</name>
    <pose>Unspecified</pose>
    <truncated>0</truncated>
    <difficult>0</difficult>
    <bndbox>
      <xmin>123</xmin>
      <ymin>141</ymin>
      <xmax>141</xmax>
      <ymax>171</ymax>
    </bndbox>
  </object>
  <object>
    <name>A</name>
    <pose>Unspecified</pose>
    <truncated>0</truncated>
    <difficult>0</difficult>
    <bndbox>
      <xmin>143</xmin>
      <ymin>141</ymin>
      <xmax>163</xmax>
      <ymax>173</ymax>
    </bndbox>
  </object>
  <object>
    <name>A</name>
    <pose>Unspecified</pose>
    <truncated>0</truncated>
    <difficult>0</difficult>
    <bndbox>
      <xmin>161</xmin>
      <ymin>141</ymin>
      <xmax>179</xmax>
      <ymax>172</ymax>
    </bndbox>
  </object>
  <object>
    <name>7</name>
    <pose>Unspecified</pose>
    <truncated>0</truncated>
    <difficult>0</difficult>
    <bndbox>
      <xmin>176</xmin>
      <ymin>142</ymin>
      <xmax>196</xmax>
      <ymax>171</ymax>
    </bndbox>
  </object>
  <object>
    <name>5</name>
    <pose>Unspecified</pose>
    <truncated>0</truncated>
    <difficult>0</difficult>
    <bndbox>
      <xmin>194</xmin>
      <ymin>142</ymin>
      <xmax>211</xmax>
      <ymax>172</ymax>
    </bndbox>
  </object>
  <object>
    <name>1</name>
    <pose>Unspecified</pose>
    <truncated>0</truncated>
    <difficult>0</difficult>
    <bndbox>
      <xmin>210</xmin>
      <ymin>143</ymin>
      <xmax>226</xmax>
      <ymax>172</ymax>
    </bndbox>
  </object>
  <object>
    <name>警</name>
    <pose>Unspecified</pose>
    <truncated>0</truncated>
    <difficult>0</difficult>
    <bndbox>
      <xmin>225</xmin>
      <ymin>142</ymin>
      <xmax>244</xmax>
      <ymax>173</ymax>
    </bndbox>
  </object>
</annotation>

ImageSets (我理解为 数据集划分信息)

./ImageSets/Main 下存放的都是txt文件,根据需要可以选择是否设置验证集,标准的4个文件如下
file

  • train.txt 是用来训练的图片文件的文件名列表
  • val.txt是用来验证的图片文件的文件名列表
  • trianval.txt是用来训练和验证的图片文件的文件名列表
  • test.txt 是用来测试的图片文件的文件名列表
    (上面4个文件需要自己写脚本生成,本文涉及相关代码会在最后给出)

labels

存放每张图的标签信息(类别,x,y,w,h,c) 同样是txt文件 通过脚本生成。

2个脚本源代码:

链接: https://pan.baidu.com/s/1Dx_BPq01fxgimkQ8SclYCQ 提取码: qwd1