【问题标题】:Input labels for semantic segmentation with U-Net as single layer使用 U-Net 作为单层进行语义分割的输入标签
【发布时间】:2019-07-19 01:23:49
【问题描述】:

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

然而,在another blog post,作者解释说标签

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

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

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

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

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

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

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

【问题讨论】:

    标签: python pytorch data-processing one-hot-encoding semantic-segmentation


    【解决方案1】:

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

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

    【讨论】:

    • 感谢您的回答!你知道为什么网络需要将灰度标签转换为 n 通道张量吗?也非常感谢任何对此进行解释的参考!
    猜你喜欢
    • 2022-08-04
    • 2022-09-23
    • 2020-06-14
    • 2017-10-04
    • 2020-09-30
    • 2019-11-12
    • 2018-10-18
    • 2019-01-08
    • 2021-09-27
    相关资源
    最近更新 更多