Предположим, у вас уже есть (512,512) маска.Сначала вы можете использовать mask.unique()
, чтобы получить значения пикселей всех классов.Тогда для каждого значения класса torch.where(mask==cls_val, torch.tensor(1), torch.tensor(0))
вернет маску одного определенного класса.В конце вы складываете все выходные данные.
mask = torch.tensor([[1,2,3],
[2,4,5],
[1,2,3]])
cls = mask.unique()
res = torch.stack([torch.where(mask==cls_val, torch.tensor(1), torch.tensor(0)) for cls_val in cls])
#tensor([[[1, 0, 0],
# [0, 0, 0],
# [1, 0, 0]],
#
# [[0, 1, 0],
# [1, 0, 0],
# [0, 1, 0]],
#
# [[0, 0, 1],
# [0, 0, 0],
# [0, 0, 1]],
#
# [[0, 0, 0],
# [0, 1, 0],
# [0, 0, 0]],
#
# [[0, 0, 0],
# [0, 0, 1],
# [0, 0, 0]]])