创建MS COCO样式数据集

时间:2017-08-07 10:54:25

标签: python json tensorflow annotations mscoco

如何创建与TensorFlow一起使用的MS COCO style数据集?有没有人有这方面的经验?我有图像和注释,以及地面真相面具。我需要将它们转换为与MS COCO兼容,任何帮助表示赞赏。我找不到任何开源工具来创建COCO样式的JSON注释。

TensorFlow MS COCO读取我不熟悉的JSON文件。

4 个答案:

答案 0 :(得分:3)

为了将0和1的掩码数组转换为类似于COCO样式数据集的多边形,请使用skimage.measure.find_contours,感谢代码waleedka

import numpy
from skimage.measure import find_contours 

mask = numpy.zeros(width, height) # Mask
mask_polygons = [] # Mask Polygons

# Pad to ensure proper polygons for masks that touch image edges.
padded_mask = np.zeros(
(mask.shape[0] + 2, mask.shape[1] + 2), dtype=np.uint8)
padded_mask[1:-1, 1:-1] = mask
contours = find_contours(padded_mask, 0.5)
for verts in contours:
    # Subtract the padding and flip (y, x) to (x, y)
    verts = np.fliplr(verts) - 1
    pat = PatchCollection([Polygon(verts, closed=True)], facecolor='green', linewidths=0, alpha=0.6)
    mask_polygons.append(pat) 

要为COCO样式的数据集生成JSON文件,您应该查看Python's JSON API。除此之外,它只是简单地匹配COCO数据集的JSON文件使用的格式。

你应该看看我的COCO style dataset generator GUI repo。我构建了一个非常简单的工具来创建COCO样式的数据集。

您感兴趣的特定文件是create_json_file.py,它为每个多边形注释采用形式(x1,y1,x2,y2 ...)的matplotlib多边形坐标,并将其转换为JSON注释文件与COCO的默认格式非常相似。

答案 1 :(得分:2)

我正在研究一个python库,该库具有许多有用的类和函数来执行此操作。称为Image Semantics

以下是添加遮罩并将其以COCO格式导出的示例:

from imantics import Mask, Image, Category

image = Image.from_path('path/to/image.png')
mask = Mask(mask_array)
image.add(mask, category=Category("Category Name"))

# dict of coco
coco_json = image.export(style='coco')
# Saves to file
image.save('coco/annotation.json', style='coco')

答案 2 :(得分:0)

您可以尝试使用pycococreator,其中包括一组工具,可将二进制掩码转换为COCO使用的多边形和RLE格式。

https://github.com/waspinator/pycococreator/

以下是如何使用它从二进制掩码创建注释信息的示例:

annotation_info = pycococreatortools.create_annotation_info(
                    segmentation_id, image_id, category_info, binary_mask,
                    image.size, tolerance=2)

您可以在此处阅读有关如何使用pycococreator的更多详细信息: https://patrickwasp.com/create-your-own-coco-style-dataset/

答案 3 :(得分:0)

创建COCO样式数据集并使用其API评估指标

让我们假设我们要为对象检测任务创建注释和结果文件(因此,我们仅对边界框感兴趣)。这是一个简单而轻巧的示例,显示了如何创建注释和结果文件,以使用COCO API指标进行适当的格式设置。

注释文件:ann.json

{"images":[{"id": 73}],"annotations":[{"image_id":73,"category_id":1,"bbox":[10,10,50,100],"id":1,"iscrowd": 0,"area": 10}],"categories": [{"id": 1, "name": "person"}, {"id": 2, "name": "bicycle"}, {"id": 3, "name": "car"}]}

结果文件:res.json

[{"image_id":73,"category_id":1,"bbox":[10,10,50,100],"score":0.9}]

现在,您只需使用以下脚本即可评估COCO指标:

from pycocotools.coco import COCO
from pycocotools.cocoeval import COCOeval

annFile = './ann.json'
resFile='./res.json'

cocoGt=COCO(annFile)

cocoDt=cocoGt.loadRes(resFile)

annType = 'bbox'
cocoEval = COCOeval(cocoGt,cocoDt,annType)
cocoEval.evaluate()
cocoEval.accumulate()
cocoEval.summarize()