136、感知损失与对抗损失:如何提升超分结果的视觉真实性
136、感知损失与对抗损失:如何提升超分结果的视觉真实性
去年做某个工业质检项目时,客户反馈我们的超分模型把金属表面的纹理“磨平”了,虽然PSNR指标漂亮得很,但人眼一看就觉得假。这让我意识到一个残酷的事实:像素级损失(L1/L2)训练出来的模型,本质上是在做“像素平均”,它会把高频细节当成噪声抹掉。后来我们在模型里加入了感知损失和对抗损失,效果立竿见影——客户终于不再说“像塑料”了。
为什么L1/L2损失会让图像“糊”
先说说最基础的L1损失。假设你有一张真实的高清图,模型输出一张重建图,L1就是逐像素算绝对值差。这个损失函数有个隐藏的“坏习惯”:它倾向于生成所有可能结果的“平均值”。比如某个像素在真实图中可能是白色也可能是黑色,L1损失会让模型输出灰色——因为灰色在数值上离黑白都近,总损失最小。这就是为什么纯L1训练的超分模型,边缘总是模糊的,纹理总是丢失的。
L2损失(MSE)更糟糕,它平方了误差,对离群点惩罚更大,结果就是模型更倾向于输出平滑的、没有锐利边缘的图像。PSNR指标恰恰是基于MSE计算的,所以PSNR高不代表视觉好——这个坑我踩过,当年为了刷PSNR调参调了两个月,结果评审一眼就说“这图没细节”。
感知损失:让模型学会“看”而不是“数像素”
感知损失的核心思路很简单:别在像素空间比,去特征空间比。具体做法是拿一个预训练好的VGG网络(通常是VGG-16或VGG-19),把真实图和重建图都送进去,提取中间层的特征图,然后算这些特征图之间的L2距离。