如何理解/调试/可视化U-Net分割结果



我正在训练一个U-Net架构来执行分段任务。这是在Python中使用Keras的。我现在遇到了一个问题,我试图理解:

我有两个来自显微镜图像系列的非常相似的图像(这些是连续图像(,我目前的U-Net模型在其中一个上表现非常好,但在紧随其后的一个上表现极差。然而,两者在肉眼上几乎没有区别,直方图看起来也非常相似。同样在其他测量中,该模型在整个帧范围内表现良好,但对于其他测量,则会出现此问题。

我在训练期间使用数据增强(直方图拉伸、仿射变换、噪声加法(,我很惊讶模型仍然如此脆弱。

由于U-Net对我来说仍然是一个黑匣子,我想找出我可以采取的步骤来更好地理解问题,然后相应地调整训练/模型。

我知道有一些方法可以可视化各个层学习的内容(例如,正如F. Chollets书所讨论的那样(,我应该能够将这些应用于U-Nets,这是完全卷积的。

然而,这些方法实际上总是在分类网络领域讨论 - 而不是语义分割。

所以我的问题是:

这是了解U-Net模型如何获得分割结果的最佳/最直接的方法吗?如果没有,有什么更好的方法来理解/调试U-Nets?

我建议你在NGC上使用U-Net容器 https://ngc.nvidia.com/catalog/resources/nvidia:unet_industrial_for_tensorflow 我还建议您阅读以下内容: 混合精度训练:https://arxiv.org/abs/1710.03740 https://developer.nvidia.com/blog/mixed-precision-training-deep-neural-networks/

让我知道您的进展如何,如果有公共回购,很高兴看看

最新更新