【发布时间】:2021-04-14 15:13:04
【问题描述】:
我有一批大小不同的分割图像
seg --> [batch, channels, imsize, imgsize] --> [16, 6, 50, 50]
这个张量中的每个标量都指定了一个分割类。
我们共有2000 个细分类别。
现在的目标是转换
[16, 6, 50, 50] --> [16, 2000, 50, 50]
每个类都以一种热门方式编码。
我如何使用 pytorch api 做到这一点? 我只能想到低效的循环构造。
例子
这里我们将只有 2 个初始通道(而不是 6 个)、4 个标签(而不是 2000 个)、大小批量 1(而不是 16 个)和 4x4 图像而不是 50x50。
0, 0, 1, 1
0, 0, 0, 1
1, 1, 1, 1
1, 1, 1, 1
3, 3, 2, 2
3, 3, 2, 2
3, 3, 2, 2
3, 3, 2, 2
现在变成4通道输出
1, 1, 0, 0
1, 1, 1, 0
0, 0, 0, 0
0, 0, 0, 0
0, 0, 1, 1
0, 0, 0, 1
1, 1, 1, 1
1, 1, 1, 1
1, 1, 0, 0
1, 1, 0, 0
1, 1, 0, 0
1, 1, 0, 0
0, 0, 1, 1
0, 0, 1, 1
0, 0, 1, 1
0, 0, 1, 1
关键观察是特定标签仅出现在单个输入通道上。
【问题讨论】:
-
6代表什么?您的目标是将 16 6-通道 50x50 图像转换为 16 2000-频道 50x50 图像。您从 15,000 点/图像变为 5,000,000 点/图像。你确定这是你要找的吗? -
@Ivan 6 只是一些标签从 0 到 2000 的频道。这不是那么重要的细节......在频道 0 上只能存在标签子集,在频道 1 上是另一个标签子集,等等。因此,通道零分区图像在对应于对象的标签上,通道 1 分区图像在对应于部分的标签上,等等。现在,由于总共有 2000 个标签,因此一次热编码需要 2000 x imgsize x imgsize。有意义吗
-
好的,在给定的频道上,比如 channel=0,你怎么知道它对应的标签?我不清楚您将如何将 6 通道图像转换为相同大小的 2000 通道图像。
-
@Ivan 它将由标签编号给出...假设通道零具有标签 10 和其他一些标签。现在 [:, 10, :, :] 将在同一位置有 1 ,而在其他任何地方都有 10 和 0 。有意义吗
-
@Ivan 当然,完成了!