1

例如,在使用 U-Net 进行语义分割时,将标签数据提供为 one-hot-encoded 张量似乎是一种常见的做法。在另一个 SO question中,一位用户指出这是由于标签通常代表分类值。将它们作为仅一层内的类标签(作为灰度强度值)馈送到网络会带来困难。

然而,在另一篇博文中,作者解释说标签

“[...] 有时 [get] 打包为灰度图像,其中像素强度表示类 id [...]。这种方法可能是最容易使用的。它允许分发较小的文件,并且 [ ...] 一种热向量表示 [使用] 比 [灰度编码格式] 更多的内存。”

我的硬件非常有限,我希望将标签编码为 1 层灰度张量,而不是 n 层(n 是要分段的类数),从而降低内存使用率。但是,该博客的作者随后还指出:

“即使您使用的深度学习框架接受标签数据作为类 id,如 [灰度格式],它也会在后台将该数据转换为 one-hot 编码。”

这是否意味着,毕竟在内存方面不会有任何节省?

如果值得,我将如何继续在数据集阅读器中实现它?我也没有遇到任何实现,实际上已经实践了灰度标签。因此,我还要感谢任何指向使用灰度标签进行语义分割的实现的链接!

我正在使用 PyTorch,我的代码基于此实现,不同之处在于我有 3 个类要分段。

非常感谢任何建议/链接!

4

1 回答 1

2

这可以帮助您节省磁盘内存,因为您可以将标签、ground truth 存储为灰度图像(宽度、高度、1),而不是更大的 3D 形状张量(宽度、高度、n)。但是,在训练过程中,您必须将灰度地面实况图像转换为 3D 张量才能训练您的网络。因此,它不会帮助您降低进程的 RAM 成本。

如果您确实需要减少 RAM 使用量,您可以减少训练批量大小或图像大小。

于 2019-02-27T15:39:37.967 回答