gpt4 book ai didi

computer-vision - 如何保存和复用语义分割结果?

转载 作者:行者123 更新时间:2023-12-02 19:41:00 25 4
gpt4 key购买 nike

我使用 detectron2 对图像进行语义分割。 Detectron2 具有用于可视化结果的预置函数。我有兴趣保存分割结果并在需要时解析它们。因此,我回溯了代码,发现 instances_to_coco_json 函数是输出分割结果的函数。我尝试保存结果。

结果格式如下:

 {
"image_id": 1,
"segmentation": {
"counts": "R[W<=Sf0001O000000000000000000000000000000000000000^_\\?",
"size": [
720,
1280
]
},
"category_id": 1,
"score": 0.992115
},

我期望得到分割结果作为分割点的坐标,如下所示:

 "segmentation": [
[
662.1764705882352,
387,
686,
386.5882352941176,
686,
398,
662.7647058823529,
399
]

鉴于输出是 coco 格式,我该如何理解它?

最佳答案

要理解这个问题,您需要知道在 COCO 协议(protocol)中有两种不同的存储掩码格式。一种是使用多边形,例如您的第二个示例,另一种是使用名为 RLE 的二进制数据压缩格式。 ,这是您的第一个示例的情况。

在 COCO 中,如果掩码以 RLE 格式存储,则分割将是一个具有 "counts""size" 键的对象。如果你检查 detectron2/detectron2/utils/visualizer.py ,您将在 class GenericMask 的构造函数中找到处理不同掩码格式的代码。

您可以轻松地将 RLE 格式转换为二进制掩码或多边形,您还会在 detectron2/tools/visualize_json_results.py 找到一个可视化脚本。非常有帮助。

TLDR:

简而言之,要将 RLE 分割转换为二进制掩码,只需运行以下脚本(假设您已经安装了 COCO python api,这是 detection2 的先决条件):

import pycocotools.mask as mask_util

# Using the segment provided by your first example
segment = {'counts': 'R[W<=Sf0001O000000000000000000000000000000000000000^_\\?',
'size': [720, 1280]}
# Decode a binary mask of shape (720, 1280) from segment
mask = mask_util.decode(segment)[:, :]

如果您对将二进制掩码转换为多边形感兴趣,还有另一个名为 imantics 的包可以帮助您实现这一目标:

import numpy as np
from imantics import Polygons, Mask

# This can be any array
array = np.ones((100, 100))

polygons = Mask(array).polygons()

print(polygons.points)
print(polygons.segmentation)

希望对您有所帮助。

关于computer-vision - 如何保存和复用语义分割结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60143143/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com