首页 > 解决方案 > 如何理解/调试/可视化 U-Net 分割结果

问题描述

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

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

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

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

我知道有一些方法可以可视化各个层的学习内容(例如,如 F. Chollets 书中所讨论的,请参见此处),我应该能够将这些应用于完全卷积的 U-Net。

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

所以我的问题是:

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

标签: pythontensorflowcomputer-visionconv-neural-networksemantic-segmentation

解决方案


我建议您在 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/

让我知道你的进展情况,如果有任何公开回购,很高兴看看


推荐阅读