如何创建一个MS COCO 风格的数据集以与 TensorFlow 一起使用?有没有人有这方面的经验?我有图像、注释以及基本事实掩码。我需要将它们转换为与 MS COCO 兼容,并感谢任何帮助。我找不到任何开源工具来创建 COCO 风格的 JSON 注释。
TensorFlow MS COCO 读取我不太熟悉的 JSON 文件。
如何创建一个MS COCO 风格的数据集以与 TensorFlow 一起使用?有没有人有这方面的经验?我有图像、注释以及基本事实掩码。我需要将它们转换为与 MS COCO 兼容,并感谢任何帮助。我找不到任何开源工具来创建 COCO 风格的 JSON 注释。
TensorFlow MS COCO 读取我不太熟悉的 JSON 文件。
我正在开发一个 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')
您可以尝试使用 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/
为了将 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 的格式。
创建 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()