当前位置:首页 > 话题广场 > 攻略专题 > 游戏问答

Detection学习之二-pascal_voc和coco数据读取

pascal_voc和coco数据集是深度学习中最常用的两个数据集,提供了包括检测、分割、人体关键点等多个不同任务的标注数据。然而,两个数据集在存储架构和标注数据存储上存在比较大的差异,下面分别对两个数据集文件夹结构及标注数据的读取进行简单介绍。

pascal_voc

1、数据集存储架构

pascal_voc数据集分为2007年和2012年两个版本,07版中的图像数据为12版子集,两个版本的数据集在指标计算方面也略有不同(见上一篇Detection学习之一-评价指标mAP的计算)。不失一般性,本文以07版数据集为例进行讲解,12版数据集与此类似。

下载后得到一个名为VOCdevkit的文件,进入到名为VOC2007的子文件夹中,即进入到pascal_voc 2007数据集中。该文件夹又包含Annotations、ImageSets、JPEGImages、SegmentationClass、SegmentationObject几个子文件夹,包含了图像数据、标注数据及训练数据集和验证数据集的划分等信息。

  • JPEGImages 文件夹

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

  • Annotations文件夹

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

  • ImageSets文件夹

又分为以下几个子文件夹

Action-人的动作

Layout-人体部位

Main-图像物体识别的数据,总共20类

Segmentation-用于分割的数据。

以上每个文件夹包括、val.txt、、文件,包括了数据集中训练集、验证集和测试集的划分,需要何证train和val中没有交集。

  • SegmentationObject & SegmentationClass

保存的是物体分割后的数据,在物体识别中没有用到

2、标注数据的读取

filename = os., 'Annotations', index + '.xml') tree = ET.parse(filename) objs = ('object') # if not ['use_diff']: # # Exclude the samples labeled as difficult # non_diff_objs = [ # obj for obj in objs if in('difficult').text) == 0] # # if len(non_diff_objs) != len(objs): # # print 'Removed {} difficult objects'.format( # # len(objs) - len(non_diff_objs)) # objs = non_diff_objs num_objs = len(objs) boxes = np.zeros((num_objs, 4), dtype=np.uint16) gt_classes = np.zeros((num_objs), dtype=np.int32) overlaps = np.zeros((num_objs, ), dtype=np.float32) # "Seg" area for pascal is just the box area seg_areas = np.zeros((num_objs), dtype=np.float32) ishards = np.zeros((num_objs), dtype=np.int32) # Load object bounding boxes into a data frame. for ix, obj in enumerate(objs): bbox = obj.find('bndbox') # Make pixel indexes 0-based x1 = floa('xmin').text) - 1 y1 = floa('ymin').text) - 1 x2 = floa('xmax').text) - 1 y2 = floa('ymax').text) - 1 diffc = obj.find('difficult') difficult = 0 if diffc == None else in) ishards[ix] = difficult cls = [obj.find('name').().strip()] boxes[ix, :] = [x1, y1, x2, y2] gt_classes[ix] = cls overlaps[ix, cls] = 1.0 seg_areas[ix] = (x2 - x1 + 1) * (y2 - y1 + 1) overlaps = (overlaps) return {'boxes': boxes, 'gt_classes': gt_classes, 'gt_ishard': ishards, 'gt_overlaps': overlaps, 'flipped': False, 'seg_areas': seg_areas}

以上函数.xml文件中导入index标号对应的图像的标注数据。针对于每一幅图像,对应的是一个dict,具有以下属性:

  • 属性 'boxes',矩阵boxes,大小为图像中物体个数(num_objs)×4,每一行为一个物体的bounding box
  • 属性 'gt_classes',列向量gt_classes,大小为物体个数num_objs,每一个元素为boxes对应行所表示物体的对应index
  • 属性 'gt_overlaps',矩阵overlaps,大小为图像中物体个数(num_objs)×物体类别个数(num_classes),矩阵中物体对应类别元素值为1,其他为0
  • 属性 'flipped',表示当前图像是否是翻转的(True or False),实际读取的物体为false,基类中进行翻转形成的物体为true
  • 属性 'seg_areas',列向量seg_areas,大小为物体个数num_objs,每一个元素为物体所占据面积,即长*宽。

coco

1、数据存储架构

COCO数据集按照年份来区分,有2014、2015和2017版本。根据用途不同,数据集分为目标检测、目标分割(对应标注信息为'bbox'和'segmentation'),图像语义理解('captions')、人体关节点('keypoints')。

下载完COCO2014后进行解压后,目录如下:

  • train2014
  • val2014
  • test2014
  • annotations

其中,images中的文件夹各自放置了训练、验证和测试的数据集图片。annotations文件夹中放置了标签文件。

为了更好的使用数据集,COCO对数据集的标注信息做了统一管理。其中,图像检测数据集的标注数据保存在.json文件中。例如,2017_val的标注数据就保存在in文件中。如下图所示。

可以看到, 标注文件中有 image 和 annotations 域, annotations 中保存的就是标注信息. 根据不同的应用场景, 标注信息又可分为: 目标的边界框 bbox 和图像分割区域 segmentation.

2、标注数据的读取

介绍如何用 COCO 提供的 Python API 来提取这些信息.

1) 加载json文件,并解析其中的标注信息

from import COCO dataDir='/path/to/your/coco_data' dataType='val2017' annFile='{}/annotations/instances_{}.json'.format(dataDir,dataType) # 初始化标注数据的 COCO api coco=COCO(annFile)

COCO 是一个类, 因此, 使用构造函数创建一个 COCO 对象, 构造函数首先会加载 json 文件, 然后解析图片和标注信息的 id, 根据 id 来创建其关联关系.

COCO 对象创建完毕后会输出如下信息

loading annotations into memory... Done (t=0.81s) creating index... index created!

2) 显示 COCO 数据集中的具体类和超类

# display COCO categories and supercategories cats = coco.loadCa()) nms=[cat['name'] for cat in cats] print('COCO categories: n{}n'.format(' '.join(nms))) nms = set([cat['supercategory'] for cat in cats]) print('COCO supercategories: n{}'.format(' '.join(nms)))

输出如下

COCO categories: person bicycle car motorcycle airplane bus train truck boat traffic light fire hydrant stop sign parking meter bench bird cat dog horse sheep cow elephant bear zebra giraffe backpack umbrella handbag tie suitcase frisbee skis snowboard sports ball kite baseball bat baseball glove skateboard surfboard tennis racket bottle wine glass cup fork knife spoon bowl banana apple sandwich orange broccoli carrot hot dog pizza donut cake chair couch potted plant bed dining table toilet tv laptop mouse remote keyboard cell phone microwave oven toaster sink refrigerator book clock vase scissors teddy bear hair drier toothbrush COCO supercategories: outdoor food indoor appliance sports person animal vehicle furniture accessory electronic kitchen
  • 函数loadCats(self, ids=[]),返回的是从 json 文件加载进来的 80 类对象. 这个函数接收一个 id list 作为参数, 如果没有指定 id 参数, 那么函数返回也为一个空 list. 本例中使用 getCatIds(self, catNms=[], supNms=[], catIds=[]) 函数获取 id 作为参数。
  • 函数getCatIds(self, catNms=[], supNms=[], catIds=[]) 如果不指定参数, 则返回所有类的 id, 否则, 返回指定类的 id ( 类可以通过 'name', 'supercategory' 或 'id' 指定)

3) 加载并显示指定 id 的图片

# get all images containing given categories, select one at random catIds = coco.getCatIds(catNms=['person','dog','skateboard']); imgIds = coco.getImgIds(catIds=catIds ); imgIds = coco.getImgIds(imgIds = [324158]) // loadImgs() 返回的是只有一个元素的列表, 使用[0]来访问这个元素 // 列表中的这个元素又是字典类型, 关键字有: ["license", "file_name", // "coco_url", "height", "width", "date_captured", "id"] img = coco.loadImgs(imgIds[np.random.randint(0,len(imgIds))])[0] # 加载并显示图片,可以使用两种方式: 1) 加载本地图片, 2) 在线加载远程图片 # 1) 使用本地路径, 对应关键字 "file_name" # I = io.imread('%s/images/%s/%s'%(dataDir,dataType,img['file_name'])) # 2) 使用 url, 对应关键字 "coco_url" I = io.imread(img['coco_url']) ('off') (I) ()

5)加载并将 “segmentation” 标注信息显示在图片上

(I); ('off') annIds = coco.getAnnIds(imgIds=img['id'], catIds=catIds, iscrowd=None) anns = coco.loadAnns(annIds) coco.showAnns(anns)

getAnnIds() 函数会根据 image id 来获取这张图对应的标注信息的 id, 然后 loadAnns() 函数会显示指定 id 的标注信息到图片上.

1.《Detection学习之二-pascal_voc和coco数据读取》援引自互联网,旨在传递更多网络信息知识,仅代表作者本人观点,与本网站无关,侵删请联系页脚下方联系方式。

2.《Detection学习之二-pascal_voc和coco数据读取》仅供读者参考,本网站未对该内容进行证实,对其原创性、真实性、完整性、及时性不作任何保证。

3.文章转载时请保留本站内容来源地址,https://www.lu-xu.com/gl/2237935.html

上一篇

关于( 1)负3.35是什么意思,你需要知道这些拜登称“保卫台湾”,中方回应【三分钟法治新闻全知道】

下一篇

如何成为中华骄傲600字看这里!无悔生入华夏,成为中国人而骄傲

0.seg是什么文件?总结很全面速看!如何在 Linux 服务器上设置 ulimit 和文件描述符数限制

0.seg是什么文件?总结很全面速看!如何在 Linux 服务器上设置 ulimit 和文件描述符数限制

0.seg是什么文件相关介绍,在生产环境中遇到打开的文件数等挑战现在是司空见惯的事情。 -- Shashidhar Soppin(作者) 简介:在生产环境中遇到打开文件数这类的挑战如今已是司空见惯的事情了。因为许多应用程序是基于...

0.seg是什么文件?总结很全面速看!Detection学习之二-pascal_voc和coco数据读取

0.seg是什么文件?总结很全面速看!Detection学习之二-pascal_voc和coco数据读取

0.seg是什么文件相关介绍,pascal_voc和coco数据集是深度学习中最常用的两个数据集,提供了包括检测、分割、人体关键点等多个不同任务的标注数据。然而,两个数据集在存储架构和标注数据存储上存在比较大的差异,下面分别对两个...

0.seg是什么文件看这里!Detection学习之二-pascal_voc和coco数据读取

0.seg是什么文件看这里!Detection学习之二-pascal_voc和coco数据读取

0.seg是什么文件相关介绍,pascal_voc和coco数据集是深度学习中最常用的两个数据集,提供了包括检测、分割、人体关键点等多个不同任务的标注数据。然而,两个数据集在存储架构和标注数据存储上存在比较大的差异,下面分别对两个...

0.seg是什么文件看这里!如何在 Linux 服务器上设置 ulimit 和文件描述符数限制

0.seg是什么文件看这里!如何在 Linux 服务器上设置 ulimit 和文件描述符数限制

0.seg是什么文件相关介绍,在生产环境中遇到打开文件数这类的挑战如今已是司空见惯的事情了。 -- Shashidhar Soppin(作者) 简介:在生产环境中遇到打开文件数这类的挑战如今已是司空见惯的事情了。因为许多应用程序是...

关于0.seg是什么文件,你需要知道这些Detection学习之二-pascal_voc和coco数据读取

关于0.seg是什么文件,你需要知道这些Detection学习之二-pascal_voc和coco数据读取

0.seg是什么文件相关介绍,pascal_voc和coco数据集是深度学习中最常用的两个数据集,提供了包括检测、分割、人体关键点等多个不同任务的标注数据。然而,两个数据集在存储架构和标注数据存储上存在比较大的差异,下面分别对两个...

关于0.seg是什么文件,你需要知道这些如何在 Linux 服务器上设置 ulimit 和文件描述符数限制

关于0.seg是什么文件,你需要知道这些如何在 Linux 服务器上设置 ulimit 和文件描述符数限制

0.seg是什么文件相关介绍,(9500.163.com) 在生产环境中遇到打开文件数这类的挑战如今已是司空见惯的事情了。 达到当天最大量API KEY 超过次数限制 -- Shashidhar Soppin(作者) 简介:在生产...

0.seg是什么文件?终于找到答案了数码管的参数选型,应用,问题分析,以及编程思路讲解

0.seg是什么文件?终于找到答案了数码管的参数选型,应用,问题分析,以及编程思路讲解

0.seg是什么文件相关介绍,数码管,只要是电子开发设计工程师,一定是会有了解或者使用过这类元件,它可以满足电子产品的 数字,特定字符,或部分字母的显示,是实现机与人的信息交互的重要途径。 达到当天最大量API KEY 超过次数限...

0.seg是什么文件?我来告诉你答案如何在 Linux 服务器上设置 ulimit 和文件描述符数限制

0.seg是什么文件?我来告诉你答案如何在 Linux 服务器上设置 ulimit 和文件描述符数限制

0.seg是什么文件相关介绍,在生产环境中遇到打开的文件数等挑战现在是司空见惯的事情。 -- Shashidhar Soppin(作者) 简介:在生产环境中遇到打开文件数这类的挑战如今已是司空见惯的事情了。因为许多应用程序是基于...