如何更改分割掩码中的 类 标签顺序
How to change classes labels order in a segmentation mask
我想知道是否可以更改分割蒙版中的 class 标签。假设我有面具,其中 classes 顺序是这样的:0 - class A,1 - class B,2 - 背景。有没有办法将其更改为:0 - 背景,1 - class A,2 - class B?
这是我的代码:
现在我的面罩是这样的:0 - 背景,1 - 毛玻璃,2 - 实变,3 - 其他肺。我想要的:0 - 毛玻璃,1 - 实变,2 - 肺其他,3 - 背景。
更改前:
i = 31
fig, axes = plt.subplots(2, 2, figsize=(10, 8))
axes[0, 0].imshow(mask_four[i, :, :, 0])
axes[0, 0].set_title('Background')
axes[0, 1].imshow(mask_four[i, :, :, 1])
axes[0, 1].set_title('Ground glass')
axes[1, 0].imshow(mask_four[i, :, :, 2])
axes[1, 0].set_title('Consolidation')
axes[1, 1].imshow(mask_four[i, :, :, 3])
axes[1, 1].set_title('Lung other')
输出:
变化中:
lut = torch.tensor([1, 2, 3, 0])
test_mask = mask_four[31]
test_mask2 = lut[test_mask.long()]
fig, axes = plt.subplots(2, 2, figsize=(10, 8))
axes[0, 0].imshow(test_mask2[:, :, 0])
axes[0, 1].imshow(test_mask2[:, :, 1])
axes[1, 0].imshow(test_mask2[:, :, 2])
axes[1, 1].imshow(test_mask2[:, :, 3])
输出 2:
这是test_mask:
tensor([[[1., 0., 0., 0.],
[1., 0., 0., 0.],
[1., 0., 0., 0.],
...,
[1., 0., 0., 0.],
[1., 0., 0., 0.],
[1., 0., 0., 0.]],
[[1., 0., 0., 0.],
[1., 0., 0., 0.],
[1., 0., 0., 0.],
...,
[1., 0., 0., 0.],
[1., 0., 0., 0.],
[1., 0., 0., 0.]],
[[1., 0., 0., 0.],
[1., 0., 0., 0.],
[1., 0., 0., 0.],
...,
[1., 0., 0., 0.],
[1., 0., 0., 0.],
[1., 0., 0., 0.]],
...,
这是test_mask2:
tensor([[[2, 1, 1, 1],
[2, 1, 1, 1],
[2, 1, 1, 1],
...,
[2, 1, 1, 1],
[2, 1, 1, 1],
[2, 1, 1, 1]],
[[2, 1, 1, 1],
[2, 1, 1, 1],
[2, 1, 1, 1],
...,
[2, 1, 1, 1],
[2, 1, 1, 1],
[2, 1, 1, 1]],
[[2, 1, 1, 1],
[2, 1, 1, 1],
[2, 1, 1, 1],
...,
[2, 1, 1, 1],
[2, 1, 1, 1],
[2, 1, 1, 1]],
...,
我认为您正在寻找的是将 lookup table 应用于目标标签。
这可以很容易地完成:
In []: orig_target = torch.randint(0, 3, (3,4)); orig_target
Out[]:
tensor([[2, 1, 2, 1],
[2, 2, 1, 2],
[1, 2, 0, 0]])
# define the lookup table: 0 -> 2, 1 -> 0, 2 -> 1:
In []: lut = torch.tensor([2, 0, 1])
# apply the lookup table
In []: lut[orig_target]
Out[]:
tensor([[1, 0, 1, 0],
[1, 1, 0, 1],
[0, 1, 2, 2]])
更新:
如果你想对遮罩的通道进行peemute:
per_target = orig_target[..., lut]
我想知道是否可以更改分割蒙版中的 class 标签。假设我有面具,其中 classes 顺序是这样的:0 - class A,1 - class B,2 - 背景。有没有办法将其更改为:0 - 背景,1 - class A,2 - class B?
这是我的代码: 现在我的面罩是这样的:0 - 背景,1 - 毛玻璃,2 - 实变,3 - 其他肺。我想要的:0 - 毛玻璃,1 - 实变,2 - 肺其他,3 - 背景。
更改前:
i = 31
fig, axes = plt.subplots(2, 2, figsize=(10, 8))
axes[0, 0].imshow(mask_four[i, :, :, 0])
axes[0, 0].set_title('Background')
axes[0, 1].imshow(mask_four[i, :, :, 1])
axes[0, 1].set_title('Ground glass')
axes[1, 0].imshow(mask_four[i, :, :, 2])
axes[1, 0].set_title('Consolidation')
axes[1, 1].imshow(mask_four[i, :, :, 3])
axes[1, 1].set_title('Lung other')
输出:
变化中:
lut = torch.tensor([1, 2, 3, 0])
test_mask = mask_four[31]
test_mask2 = lut[test_mask.long()]
fig, axes = plt.subplots(2, 2, figsize=(10, 8))
axes[0, 0].imshow(test_mask2[:, :, 0])
axes[0, 1].imshow(test_mask2[:, :, 1])
axes[1, 0].imshow(test_mask2[:, :, 2])
axes[1, 1].imshow(test_mask2[:, :, 3])
输出 2:
这是test_mask:
tensor([[[1., 0., 0., 0.],
[1., 0., 0., 0.],
[1., 0., 0., 0.],
...,
[1., 0., 0., 0.],
[1., 0., 0., 0.],
[1., 0., 0., 0.]],
[[1., 0., 0., 0.],
[1., 0., 0., 0.],
[1., 0., 0., 0.],
...,
[1., 0., 0., 0.],
[1., 0., 0., 0.],
[1., 0., 0., 0.]],
[[1., 0., 0., 0.],
[1., 0., 0., 0.],
[1., 0., 0., 0.],
...,
[1., 0., 0., 0.],
[1., 0., 0., 0.],
[1., 0., 0., 0.]],
...,
这是test_mask2:
tensor([[[2, 1, 1, 1],
[2, 1, 1, 1],
[2, 1, 1, 1],
...,
[2, 1, 1, 1],
[2, 1, 1, 1],
[2, 1, 1, 1]],
[[2, 1, 1, 1],
[2, 1, 1, 1],
[2, 1, 1, 1],
...,
[2, 1, 1, 1],
[2, 1, 1, 1],
[2, 1, 1, 1]],
[[2, 1, 1, 1],
[2, 1, 1, 1],
[2, 1, 1, 1],
...,
[2, 1, 1, 1],
[2, 1, 1, 1],
[2, 1, 1, 1]],
...,
我认为您正在寻找的是将 lookup table 应用于目标标签。
这可以很容易地完成:
In []: orig_target = torch.randint(0, 3, (3,4)); orig_target
Out[]:
tensor([[2, 1, 2, 1],
[2, 2, 1, 2],
[1, 2, 0, 0]])
# define the lookup table: 0 -> 2, 1 -> 0, 2 -> 1:
In []: lut = torch.tensor([2, 0, 1])
# apply the lookup table
In []: lut[orig_target]
Out[]:
tensor([[1, 0, 1, 0],
[1, 1, 0, 1],
[0, 1, 2, 2]])
更新:
如果你想对遮罩的通道进行peemute:
per_target = orig_target[..., lut]