本文是专题 深入探究COCO数据集标签 的第三部分,主要讲解如何加载COCO style的数据集。其他部分链接:
深入探究COCO数据集(一)——COCO标签格式
深入探究COCO数据集(二)——制作COCO style的数据集
pycocotools
pycocotools提供了COCO数据集交互的接口,加载COCO
style的数据集通常使用其完成,更准确地说,是通过pycocotools.coco中的COCO类实现。标签加载过程如下:
1 | from pycocotools.coco import COCO |
得到一个COCO对象之后呢?别急,先来说几个COCO类中常用的接口:
属性
常用属性的类型均为字典。
| 名称 | 键 | 值 | 说明 |
|---|---|---|---|
anns |
ann_id |
字典,标注文件中对应的标注信息 | 由ann_id快速索引标注 |
imgs |
image_id |
字典,标注文件中对应的图像信息 | 由image_id快速索引图像 |
cats |
category_id |
字典,标注文件中对应的类别信息 | 由category_id快速索引类别 |
imgToAnns |
image_id |
列表,元素为字典形式的标注信息 | 由image_id快速索引该图像全部标注 |
catToImgs |
category_id |
列表,元素为image_id |
由category_id索引有该类别标注的全部图像的id |
方法
getAnnIds()
参数:
imgIds:待查询image_id(可选)、catIds:待查询category_id(可选)。返回值:符合全部筛选条件的
ann_id列表,如果没有入参返回包含全部ann_id的列表。示例:
1
2coco.getAnnIds(imgIds=100)
[246, 247]
getImgIds()
参数:
imgIds:待查询image_id(可选)、catIds:待查询category_id(可选)。返回值:符合全部筛选条件的
image_id列表,如果没有入参返回包含全部image_id的列表。示例:
1
2coco.getImgIds(imgIds=[1, 10, 100], catIds=6) # 三张图中包含category_id=6标注的图
[100]
getCatIds()
参数:
catNms:类别名字(可选)、supNms:父类名字(可选)、catIds:category_id(可选)。返回值:符合全部筛选条件的
category_id列表,如果没有入参返回包含全部category_id的列表。示例:
1
2coco.getCatIds(catNms="chairs", catIds=6)
[6]
loadAnns()
参数:
ids:ann_id(可选)。返回值:标注文件中对应传入
ann_id的标注信息列表,如果没有入参返回包含全部标注的列表。机制:通过
anns属性实现。示例:
1
>>> coco.loadAnns(ids=[2, 3])
loadImgs()
参数:
ids:image_id(可选)。返回值:标注文件中对应传入
image_id的图像信息列表,如果没有入参返回包含全部图像信息的列表。机制:通过
imgs属性实现。示例:
1
>>> coco.loadImgs(ids=0)
loadCats()
参数:
ids:category_id(可选)。返回值:标注文件中对应传入
category_id的类别信息列表,如果没有入参返回包含全部类别信息的列表。机制:通过
cats属性实现。示例:
1
>>> coco.loadCats(ids=6)
annToMask()
参数:
ann:标注信息字典。返回值:
ann['segmentation']中的多边形对应的掩膜,类型为np.ndarray示例:
1
mask = coco.annToMask(coco.anns[0])
COCO style数据加载
其实加载COCO数据集的过程无非就是运用上述属性和方法获得对应信息的过程,掌握了上述接口加载数据就很简单了。
由于很多开源代码中都写有COCO的数据加载类,大多数情况下我们无须自己重写,但是在一些特殊情况下需要根据需求重写或修改,个人比较推荐参考YOLACT代码中的数据加载,因为代码逻辑比较简单清晰。
这里放一个简单的目标检测数据加载模板:
1 | import cv2 |
至此,深入探究COCO数据集标签这一专题就结束了,COCO数据集被广泛使用于检测和分割领域,即使我们不直接使用COCO数据集本身,掌握其标签格式进而能够创建和加载自己的COCO style数据集在使用相关模型的时候也很有益。希望本专题能抛砖引玉,给读者提供一些参考。