13

如何创建一个MS COCO 风格的数据集以与 TensorFlow 一起使用?有没有人有这方面的经验?我有图像、注释以及基本事实掩码。我需要将它们转换为与 MS COCO 兼容,并感谢任何帮助。我找不到任何开源工具来创建 COCO 风格的 JSON 注释。

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

4

4 回答 4

8

我正在开发一个 python 库,它有许多有用的类和函数来执行此操作。它被称为图像语义

下面是一个添加掩码并以 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')
于 2019-01-20T00:47:39.927 回答
5

您可以尝试使用 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/

于 2018-04-17T16:03:49.050 回答
4

为了将 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 的 JSON API。除此之外,它只是简单地匹配 COCO 数据集的 JSON 文件使用的格式。

你应该看看我的COCO 风格的数据集生成器 GUI repo。我构建了一个非常简单的工具来创建 COCO 风格的数据集。

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

于 2018-03-12T12:55:10.173 回答
3

创建 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()
于 2019-05-16T06:03:56.777 回答