例如,当使用U-Net进行语义分割时,将标签数据提供为一热编码的张量似乎是常见的做法。 In another SO question,用户指出这是由于标签通常代表分类值。仅在一层内将它们作为类标签提供给网络(灰度强度值)会带来困难。
但是在another blog post中,作者解释了标签
“ [...]有时[打包]为灰度图像,其中像素强度表示类ID [...]。此方法可能是最容易使用的方法。它允许为分布和一种热向量表示[比] [灰度编码格式] [消耗]更多的内存。“
我的硬件非常有限,我希望将标签编码为1层灰度张量,而不是n层(n是要分割的类的数量),将导致较低的内存使用量。但是,博客的作者随后还指出:
“即使您使用的深度学习框架将标签数据作为类ID接受(如[灰度格式],它也会将这些数据转换为幕后的一键编码。”
这是否意味着在内存方面根本没有任何节省?
如果值得的话,我将如何继续在数据集读取器中实现呢?我也没有遇到过任何实施过的实施方式,其中实际上已经实施了灰度标记。因此,我也要感谢所有使用灰度标签进行语义分割的实现的链接!
我正在使用PyTorch,我的代码基于this implementation,区别在于我有3个要分割的类。
任何建议/链接都将不胜感激!
答案 0 :(得分:1)
这可以帮助您节省磁盘内存,因为您可以将标签和地面实况存储为灰度图像(宽度,高度,1),而不是更大的3D张量形状(宽度,高度,n )。但是,在训练过程中,您将必须将灰度地面真值图像转换为3D张量才能训练网络。因此,它不会帮助您减少进程的RAM成本。
如果确实需要减少RAM使用量,则可以减小训练批处理大小或图像大小。