1.1 简介
PASCAL Visual Object Classes (VOC) 2012 数据集是计算机视觉领域中一个广泛使用的标准数据集,用于评估和促进对象识别、分类、目标检测、图像分割以及其他视觉理解任务的算法性能。PASCAL VOC项目起始于2005年,并且每年都会更新数据集,直到2012年最后一次正式更新。PASCAL VOC2012是这一系列数据集中最著名的一个版本,它提供了丰富的标注图像资源,对于推动机器学习和深度学习领域的发展起到了重要作用。
数据集特点
-
多样性:PASCAL VOC2012包含20类常见的日常物体,如人、猫、狗、车、自行车等,这些类别覆盖了动物、交通工具和室内物品等多种类型,能够很好地反映实际应用场景的多样性。
-
标注详细:每张图片都经过精心标注,包括了物体的边界框(Bounding Box)信息用于目标检测任务,以及像素级标注(Segmentation Mask)用于语义分割任务,这使得该数据集适用于多种不同的视觉任务研究。
-
数据划分:数据集被划分为训练集、验证集和测试集。训练集和验证集的图像及其详细的标注信息是公开的,而测试集的完整标注在挑战赛期间不公开,以确保公正的性能评估。这种划分有助于算法的开发和调优。
-
规模适中:相比于后来的一些大规模数据集如COCO(Common Objects in Context),PASCAL VOC2012的规模较小,大约有数千张图像,这使得它成为一个入门级数据集,适合快速原型设计和初步算法测试。
-
社区支持:由于其历史地位和广泛的应用,PASCAL VOC2012拥有强大的社区支持,许多开源工具和框架(如TensorFlow, PyTorch)都直接或间接支持该数据集的加载和处理。
数据集结构
PASCAL VOC2012的数据通常以以下结构组织:
JPEGImages
:存放所有图像文件。Annotations
:存放每张图像对应的XML文件,记录了图像中每个物体的类别、位置(边界框坐标)等信息。ImageSets
:包含分割好的数据集索引文件,如train.txt
、val.txt
和test.txt
,分别对应训练集、验证集和测试集的图像列表。SegmentationClass
和SegmentationObject
:存储语义分割任务的像素级标注图。
应用与挑战
PASCAL VOC2012常被用于评估目标检测和语义分割算法的性能基准。尽管随着时间的推移,更大、更复杂的数据集如MS COCO已经出现,但PASCAL VOC2012依然是初学者学习目标检测和图像分割技术的经典起点,也是算法初步测试的有效平台。
获取数据集
数据集可以从官方网站下载,地址为:The PASCAL Visual Object Classes Challenge 2012 (VOC2012)。请注意,访问时应查看网站的具体条款和条件,以及最新的数据集获取方式。
1.2 类别分布
数据集一共有4个大类,20个类别。
1.3 文件结构
概览
下图右半部分是train.txt的内容,左边是xml文件,是每张图片的标注信息。
XML
随便打开两张看看:变量也很好理解就不多解释了,目标是人,里面蕴含了目标的行为,boundingbox的坐标,检测是否困难(difficult)。
<annotation>
<filename>2012_002143.jpg</filename>
<folder>VOC2012</folder>
<object>
<name>person</name>
<actions>
<jumping>0</jumping>
<other>0</other>
<phoning>0</phoning>
<playinginstrument>0</playinginstrument>
<reading>0</reading>
<ridingbike>0</ridingbike>
<ridinghorse>0</ridinghorse>
<running>0</running>
<takingphoto>0</takingphoto>
<usingcomputer>1</usingcomputer>
<walking>0</walking>
</actions>
<bndbox>
<xmax>288</xmax>
<xmin>88</xmin>
<ymax>375</ymax>
<ymin>98</ymin>
</bndbox>
<difficult>0</difficult>
<pose>Unspecified</pose>
<point>
<x>151</x>
<y>227</y>
</point>
</object>
<segmented>0</segmented>
<size>
<depth>3</depth>
<height>375</height>
<width>500</width>
</size>
<source>
<annotation>PASCAL VOC2012</annotation>
<database>The VOC2012 Database</database>
<image>flickr</image>
</source>
</annotation>
truncated代表目标是否被截断。
<annotation>
<folder>VOC2012</folder>
<filename>2007_000123.jpg</filename>
<source>
<database>The VOC2007 Database</database>
<annotation>PASCAL VOC2007</annotation>
<image>flickr</image>
</source>
<size>
<width>500</width>
<height>375</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>26</ymin>
<xmax>358</xmax>
<ymax>340</ymax>
</bndbox>
</object>
</annotation>
有的图片有多个目标。
有一点需要注意:VOC12的test测试集未公开,但是voc07的测试集公开了。
TXT
现在我们再点开一个txt文件,比如boat_train.txt,这里只截取的一小部分
2008_000008 -1
2008_000015 -1
2008_000019 -1
2008_000023 -1
2008_000028 -1
2008_000033 -1
2008_000036 1
2008_000037 -1
2008_000041 -1
2008_000045 -1
2008_000053 -1
2008_000060 -1
2008_000066 -1
2008_000070 -1
2008_000074 -1
2008_000085 -1
2008_000089 -1
2008_000093 -1
2008_000095 -1
2008_000096 -1
2008_000097 -1
2008_000099 -1
2008_000103 -1
2008_000105 -1
2008_000109 -1
2008_000112 -1
2008_000128 -1
2008_000131 -1
2008_000132 -1
2008_000141 -1
2008_000142 -1
2008_000143 -1
2008_000144 -1
2008_000148 1
2008_000151 -1
2008_000154 -1
2008_000162 -1
2008_000176 -1
2008_000181 -1
2008_000185 -1
2008_000187 -1
2008_000188 -1
2008_000189 -1
2008_000191 0
第一列是图片的名称,第二列的1表示在这行代表的图片中有船这个目标,-1代表没有船这个目标,0代表检测该目标有困难。
我们现在以:2008_000036、2008_000008 -1、2008_000191 0、为例看看这三张图片。
可以看到,分别代表:有、没有、有困难。
1.4 如何利用文件载入图像信息
先在train.txt文件找到图片名称,然后找到对应的xml和jpg图片载入内存。
1.5 如何标注图片整合自己的数据集
在目标检测领域,有几款广泛推荐的图像标注软件,它们支持创建和管理用于训练目标检测模型的数据集。以下是一些常用的图像标注工具:
-
LabelImg: 这是一个开源的图像标注工具,特别适合于目标检测任务。用户可以通过简单的界面绘制边界框来标注图像中的对象。它支持多种标注格式,包括Pascal VOC、YOLO和COCO。LabelImg具有跨平台性,可在Windows、Linux和macOS上运行。
-
LabelMe: 另一款开源工具,不仅支持目标检测的边界框标注,还适用于图像分割任务。它源自MIT的一个项目,提供了丰富的交互功能,允许用户在图像上进行细致的标注。
-
Labelbox: 虽然不是完全免费的工具,Labelbox提供了一个功能全面的平台,支持图像分类、分割、文本、音频和视频注释。它适用于需要大规模标注工作的团队,提供了云服务和团队协作功能。
-
RectLabel: 这是一个带有图形用户界面的图像标注工具,适用于目标检测和图像分割。它提供了一种直观的方式来添加边界框和多边形分割,并可以直接导出为多种流行的标注格式。
-
CVAT (Computer Vision Annotation Tool): 开源的基于Web的视频和图像标注工具,由OpenCV团队维护。CVAT设计用于处理大规模数据集,支持多种标注任务,包括目标检测、跟踪、分割等。它的用户界面友好,适合团队协作,并能处理复杂的标注需求。
-
yolo_mark: 特别为YOLO系列目标检测模型设计的标注工具。它简化了为YOLO训练集创建标注的过程,适用于Linux和Windows环境,依赖于OpenCV库。
-
LC's Finder: 一个高效图像标注与目标检测工具,适合于需要高效处理图像标注任务的用户。它提供了便捷的界面和功能来加速标注过程。
LabelImg下载地址:https://github.com/HumanSignal/labelImg
LabelImg标注图片流程:
详细流程请从15分钟观看:PASCAL VOC2012数据集讲解与制作自己的数据集_哔哩哔哩_bilibili
标记完毕后,设置val.txt和train.txt。可以遍历annotations和image文件夹获取图片名称来划分训练集和验证集。