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

Posted

技术标签:

【中文标题】如何保存和复用语义分割结果?【英文标题】:How to save and reuse semantic segmentation results? 【发布时间】:2020-05-25 08:13:57 【问题描述】:

我使用 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 格式,我该如何理解它?

【问题讨论】:

我也有你的需要。基本上instances_to_coco_json 将detectron2.structures.instances.Instances 对象转换为json 文件。你知道如何从 json 转换回 Instances 对象吗?谢谢 【参考方案1】:

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

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

您可以轻松地将 RLE 格式转换为二进制掩码或多边形,您还会发现位于 detectron2/tools/visualize_json_results.py 的可视化脚本非常有用。

TLDR:

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

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)

希望对您有所帮助。

【讨论】:

你知道如何从 json 转换回 Instances 对象吗?谢谢

以上是关于如何保存和复用语义分割结果?的主要内容,如果未能解决你的问题,请参考以下文章

用于语义分割的分层多尺度注意力

语义分割专题语义分割相关工作--Fully Convolutional DenseNet

语义分割评价指标(Dice coefficient, IoU)

深度学习之图像分割—— 前言(霹雳吧啦wz)

语义分割学习

一块GPU就能训练语义分割网络,百度PaddlePaddle是如何优化的?