口罩
掩码是用于深度学习中图像分割的源数据。掩码URI是SingleFrame的一个属性。
ClearML 以两种模式之一应用掩码:
在WebApp的帧查看器中,您可以选择如何在帧上应用遮罩。
像素分割掩码
对于像素分割,掩码RGB像素值被映射到标签。
掩码标签映射在数据集级别定义,通过版本元数据中的mask_labels
属性。
mask_labels
是一个字典列表,其中每个字典包含以下键:
value
- 掩码的RGB像素值labels
- 与值关联的标签。
了解如何以Python方式管理数据集版本掩码标签 这里。
在用户界面中,您可以在数据集版本的Metadata标签页中查看映射。
当查看一个带有与版本掩码标签映射相对应的掩码的帧时,用户界面会随意为每个标签分配一种颜色。颜色分配可以自定义。
例如:
-
原始帧图像:
-
启用语义分割掩码的帧图像。标签根据数据集版本的掩码标签映射应用:
框架的源数组包含一个字典的掩码列表,看起来像这样:
{
"id": "<framegroup_id>",
"timestamp": "<timestamp>",
"context_id": "car_1",
"sources": [
{
"id": "<source_id>",
"content_type": "<type>",
"uri": "<image_uri>",
"timestamp": 1234567889,
...
"masks": [
{
"id": "<mask_id>",
"content_type": "video/mp4",
"uri": "<mask_uri>",
"timestamp": 123456789
}
]
}
]
}
masks 字典包括帧的掩码的 URIs 和 IDs。
Alpha通道遮罩
对于alpha通道,遮罩的RGB像素值被解释为不透明度值,因此当应用遮罩时,只有源图像的所需部分可见。
例如:
-
原始框架:
-
相同的帧带有alpha通道遮罩,强调巨魔娃娃:
框架的源数组包含一个字典的掩码列表,看起来像这样:
{
"sources" : [
{
"id" : "321"
"uri" : "https://i.ibb.co/bs7R9k6/troll.png"
"masks" : [
{
"id" : "troll",
"uri" : "https://i.ibb.co/TmJ3mvT/troll-alpha.png"
}
]
"timestamp" : 0
}
]
}
请注意,对于alpha通道掩码,不使用标签。
用法
使用掩码注册帧
要使用遮罩注册帧,请创建一个帧并指定帧的遮罩文件的URI。
# create dataset version
version = DatasetVersion.create_version(
dataset_name="Example",
version_name="Registering frame with mask"
)
# create frame with mask
frame = SingleFrame(
source='https://s3.amazonaws.com/allegro-datasets/cityscapes/leftImg8bit_trainvaltest/leftImg8bit/val/frankfurt/frankfurt_000000_000294_leftImg8bit.png',
mask_source='https://s3.amazonaws.com/allegro-datasets/cityscapes/gtFine_trainvaltest/gtFine/val/frankfurt/frankfurt_000000_000294_gtFine_labelIds.png'
)
# add frame to version
version.add_frames([frame])
要使用掩码进行像素分割,请为DatasetVersion定义像素标签映射:
version.set_masks_labels(
{(0,0,0): ["background"], (1,1,1): ["person", "sitting"], (2,2,2): ["cat"]}
)
根据版本的掩码标签映射字典,相关标签被应用于版本中的所有掩码。
使用多个掩码注册帧
帧可以包含多个掩码。要添加多个掩码,请使用 SingleFrame 的 masks_source
属性。输入以下之一:
- 一个字典,包含掩码字符串ID键和掩码URI值
- A list of mask URIs. Numeric IDs are automatically assigned to the masks ("00", "01", etc.).
frame = SingleFrame(source='https://s3.amazonaws.com/allegro-datasets/cityscapes/leftImg8bit_trainvaltest/leftImg8bit/val/frankfurt/frankfurt_000000_000294_leftImg8bit.png',)
# add multiple masks
# with dictionary
frame.masks_source={"ID 1 ": "<mask_URI_1>", "ID 2": "<mask_URI_2>"}
# with list
frame.masks_source=[ "<mask_URI_1>", "<mask_URI_2>"]