【深度学习】Loss Functions for Neural Networks for Image Processing
在目前的深度学习中,业界主流主要还是把调整深度学习网络结构作为主要的工作重心,即使损失函数(loss functions)对整个网络的训练起着十分重要的作用。
Nvidia和MIT最近发了一篇论文《loss functions for neural networks for image processing》则详细探讨了损失函数在深度学习起着的一些作用。通过对比L1,L2,SSIM,MS-SSIM四种损失函数,作者也提出了自己的损失函数(L1+MS-SSIM)。
在目前研究中,L2范数基本是默认的损失函数,因为好处太多了。比较直观的就是L2损失函数可微,且凸。而且L2损失函数的网络往往会对峰值性噪比PSNR有针对性的提升。然而PSNR跟人类对图像感知(HVS)的关系其实并不紧密。当然,事实也存在着一些跟HVS更加紧密的损失函数,但是他们往往不可导,这使得在程序上处理起来不是那么的容易。于是在本文实验中,作者仅选取了两种与HVS相关的损失函数:SSIM 与 MS-SSIM。
L1损失函数
L1损失函数可简单表示如下:
他的微分形式也很简单:
L1损失函数与L2损失函数有着显著的差别,他不会对large errors进行惩罚,而且他们的收敛曲线也不同。然而出乎意料的是,L1损失函数的结果比其他几种方法都有明显的改善。
SSIM损失函数
SSIM可定义如下:
SSIM越大,图像的视觉效果一般来说越好。
因此为了做成minimize,作者将ssim的损失函数定义为:
因此,则有:
但是SSIM是必要需要neighborhood pixel进行参与计算求取均值和标准差的,这就导致边界的pixel都无法进行计算,因此,作者重新定义SSIM的损失函数:
其中p^hat是指patch P 中的center pixel。
则SSIM的反向微分为:
MS-SSIM损失函数
避免去调节高斯核, 作者又提出了multi-scale version of SSIM – MS-SSIM。
(关于这个SSIM中的高斯核,可以去看SSIM的相关文献)
MS-SSIM定义如下
则其损失函数则为:
微分形式:
Mix: L1+MS-SSIM 损失函数
作者对alpha设置为0.84
实验
联合训练L1+L2的收敛曲线