U-Net自监督学习任务中准确率无提升问题求助
一、准确率固定在0.4014的排查方向
类别不平衡问题
先统计真值掩码中背景(0)和前景(1)的像素占比。如果背景像素刚好占40.14%左右,说明模型在“偷懒”——直接输出全0(背景)就能稳定拿到这个准确率,而交叉熵损失会因预测接近多数类持续下降,但对实际降噪任务完全无效。解决办法:- 使用加权交叉熵(通过
class_weight参数或自定义损失函数),给少数类像素更高的权重。 - 采用过采样前景、欠采样背景的数据增强方式,平衡两类像素的数量占比。
- 使用加权交叉熵(通过
任务目标与标签匹配混乱
你的方案同时提到“还原真值图像”和“输出背景二值掩码”,两个任务目标存在冲突:图像重建适合用MSE损失,掩码预测适合用交叉熵损失,模型无法同时优化两个矛盾的目标。明确任务定位:如果核心是音频降噪(保留前景、去除背景),标签应该是原始的背景掩码,而非频谱图本身。输入为掩码后的频谱图,输出为背景掩码,任务本质是像素级二分类,而非图像重建。输出层与准确率计算逻辑问题
- 确认输出层激活函数:二分类任务必须用
sigmoid,如果误用softmax或未设置激活函数,输出值不在0-1区间,会导致准确率计算的默认阈值(0.5)完全失效。 - 检查准确率计算逻辑:如果是自定义准确率函数,需确认是否正确匹配二值掩码的对比规则;Keras的
binary_accuracy要求标签和预测值均为0-1区间的数值,若标签为整数类型而预测为浮点型,可能出现计算偏差。
- 确认输出层激活函数:二分类任务必须用
模型优化的局部最优陷阱
即便调整了学习率,模型仍可能陷入局部最优(比如一直输出背景的损失最低点)。可以尝试:- 改用AdamW优化器(带权重衰减),避免模型过度拟合到简单解。
- 切换为带动量的SGD优化器,通过梯度抖动帮助模型跳出局部最优。
二、损失与指标的合理性讨论
binary_crossentropy损失
对于像素级二分类的掩码预测任务,binary_crossentropy是合理选择,它针对每个像素的二分类概率计算损失,完全匹配任务的像素级分类目标。accuracy指标的局限性
当背景与前景像素数量不平衡时,准确率没有实际参考价值——比如背景占90%,模型全输出背景就能拿到90%准确率,但完全没学到前景特征。你的情况中准确率固定在某一数值,大概率是类别不平衡导致的准确率失效。IoU指标的合理性
IoU(交并比)是分割类任务的核心指标,它直接衡量预测掩码与真实掩码的重叠程度,不受类别不平衡影响,能准确反映模型的实际降噪效果。建议将IoU(或Dice系数)作为主要评估指标,准确率仅作为辅助参考。
内容的提问来源于stack exchange,提问作者Shamayl

