BCELoss二进制像素级分割pytorch

2024-06-23 03:20:31 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用Sigmoid和BCELoss实现一个用于二值分割的UNet。问题是,经过几次迭代之后,网络试图预测非常小的每像素值,而对于某些区域,它应该预测接近一个的值(对于地面真实遮罩区域)。对错误的行为有什么直觉吗?在

此外,还存在用于像素级丢失的NLLLoss2d。目前,我忽略了这一点,直接使用MSELoss()。我应该使用带有Sigmoid激活层的NLLLoss2d吗?在

谢谢


Tags: 网络区域unet错误像素地面二值直觉
2条回答

在我看来,你的乙状结肠已经饱和了。图像未正确标准化或缺少一些批次的归一化层。如果您有一个正在处理其他图像的实现,请检查图像加载器并确保它不会使像素值饱和。这通常发生在16位信道上。你能分享一些输入图像吗?在

很抱歉在回答中发表评论。这是一个新帐户,我还不能评论。在

您可能需要使用torch.nn.BCEWithLogitsLoss(),替换Sigmoid和BCELoss函数。在

docs中摘录的内容告诉您为什么使用这种丢失函数实现总是更好。在

This loss combines a Sigmoid layer and the BCELoss in one single class. This version is more numerically stable than using a plain Sigmoid followed by a BCELoss as, by combining the operations into one layer, we take advantage of the log-sum-exp trick for numerical stability.

相关问题 更多 >

    热门问题