如何在 AWS Sagemaker 中检索分段掩码中使用的标签

How to retrieve the labels used in a segmentation mask in AWS Sagemaker

我试图从分割掩码中检索掩码中表示的标签。

这是我 运行 通过 AWS Sagemaker 中的语义分割模型得到的图像。

进行预测和显示mask的代码。

from sagemaker.predictor import json_serializer, json_deserializer, RealTimePredictor
from sagemaker.content_types import CONTENT_TYPE_CSV, CONTENT_TYPE_JSON

%%time
ss_predict = sagemaker.RealTimePredictor(endpoint=ss_model.endpoint_name, 
                                     sagemaker_session=sess,
                                    content_type = 'image/jpeg',
                                    accept = 'image/png')

return_img = ss_predict.predict(img)

from PIL import Image
import numpy as np
import io

num_labels = 21
mask = np.array(Image.open(io.BytesIO(return_img)))
plt.imshow(mask, vmin=0, vmax=num_labels-1, cmap='jet')
plt.show()

这张图片是创建的分割蒙版,它代表摩托车,其他一切都是背景。

[

正如您从代码中看到的那样,有 21 种可能的标签,其中 2 种用于面具,一种用于摩托车,另一种用于背景。我现在想弄清楚的是如何从 21 种可能的选项中打印出哪些标签实际用于此面具?

如果您需要任何进一步的信息,请告诉我,非常感谢您的帮助。

在某处你应该有一个从标签整数到标签 类 的映射,例如

label_map = {0: 'background', 1: 'motorbike', 2: 'train', ...}

如果您使用的是 Pascal VOC 数据集,那将是(1=飞机,2=自行车,3=鸟,4=船,5=瓶子,6=公共汽车,7=汽车,8=猫, 9=椅子,10=牛,11=餐桌,12=狗,13=马,14=摩托车,15=人,16=盆栽,17=羊,18=沙发,19=火车,20=tv/monitor) - 看这里:http://host.robots.ox.ac.uk/pascal/VOC/voc2012/segexamples/index.html

那么你可以简单地使用那个地图:

used_classes = np.unique(mask)
for cls in used_classes:
    print("Found class: {}".format(label_map[cls]))