Pytorch图像去噪实战(十七):混合损失函数图像去噪实战,解决MSE导致图像发糊的问题
Pytorch图像去噪实战(十七):混合损失函数图像去噪实战,解决MSE导致图像发糊的问题
一、问题场景:loss很低,但图像看起来还是糊
做图像去噪时,我遇到过一个很反直觉的问题:
训练loss下降得很好,PSNR也不低,但输出图像看起来不够清晰。
尤其在文字、边缘、纹理区域,经常出现:
- 文字边缘发虚
- 头发纹理消失
- 布料纹理变平
- 图像有塑料感
- 看起来干净但不真实
最开始我以为是模型不够强,于是换了UNet、ResUNet、Attention UNet。
效果有提升,但问题仍然存在。
后来发现核心原因之一是:
损失函数设计太单一。
很多入门代码默认使用 MSELoss。
但 MSELoss 在图像恢复任务中很容易导致过度平滑。
二、为什么MSE会导致图像发糊?
MSE公式本质上对大误差惩罚更强。
在不确定区域,模型倾向输出平均值。
举个例子:
同一个位置可能是细纹理,也可能是噪点。
如果模型不确定,MSE会鼓励它输出一个平均结果。
这个平均结果在数值上可能不错,但视觉上就是:
糊。
