135、超分模型中的损失函数设计:从L1到感知损失的演进
一个让我失眠的夜晚
去年做某个超分项目,模型训练了三天,PSNR刷到了38.2dB,在公开测试集上吊打了好几个baseline。我兴高采烈地拿给产品经理看,他盯着放大后的图像沉默了十秒,说:“这脸怎么像蜡像?”
那一刻我意识到,PSNR高≠人眼看舒服。这个教训让我花了整整两周重新审视损失函数的设计。今天这篇笔记,就聊聊我在这个过程中踩过的坑和积累的经验。
L1/L2损失:最朴素的起点
最早的超分模型几乎清一色用MSE(L2损失)。代码写起来很简单:
# 别这样写!L2对异常值惩罚太重mse_loss=torch.nn.MSELoss()loss=mse_loss(sr