U-Net训练验证集IOU恒定极低 图像掩码缩放预处理问题排查
问题根因
1. 掩码增强逻辑错误
当前你将包含像素值变换的增强策略同时应用于图像和掩码,掩码作为标注数据仅可使用几何变换(翻转、旋转等),你用到的高斯模糊、对比度调整、锐化、边缘检测等操作会破坏二值掩码的标签正确性,导致模型无法学习到正确的映射关系。
2. 掩码数值范围错误
你的掩码被转换为uint8类型,通常这类掩码的正样本像素值为255,未归一化到0-1区间,而模型sigmoid层输出范围为0-1,计算二元交叉熵损失时标签和预测值范围不匹配,导致损失计算失效,模型收敛到输出全背景的局部最优解,刚好匹配你观察到的79%左右固定准确率(对应数据集背景占比约79%)。
3. 路径拼写错误
掩码加载代码y_train = np.load('/y_train.npy')开头多了斜杠,若本地文件路径不对也会导致加载错误。
修复方案
- 拆分图像和掩码的增强逻辑:图像保留原有增强策略,掩码单独编写增强函数,仅保留水平翻转、垂直翻转两类几何变换,且保证图像和掩码增强时使用相同随机种子,确保变换后二者对齐。
- 修正掩码数值范围:加载掩码后添加归一化逻辑:
y_train = (y_train > 127).astype('float32')
将二值掩码统一转换为0、1取值,适配损失计算要求。
- 统一输入缩放逻辑:当前生成器已为图像配置
rescale=1.0/255,保持Lambda缩放层注释即可,不要同时开启两处缩放。 - 训练前做数据校验:从生成器中取出一组图像和对应掩码可视化,确认图像取值范围为0-1、掩码仅含0/1两个值、掩码和图像目标位置对齐。
- (可选)优化损失函数:分割任务推荐使用二元交叉熵+Dice损失的组合损失,缓解类别不平衡问题,提升IOU指标表现。
内容的提问来源于stack exchange,提问作者George
相关产品推荐
相关产品推荐

