0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

L2损失函数的效果是否真的那么好呢?其他损失函数表现如何?

zhKF_jqr_AI 来源:未知 作者:李倩 2018-06-29 11:59 次阅读

尽管早在上世纪80年代末,神经网络就在手写数字识别上表现出色。直到近些年来,随着深度学习的兴起,神经网络才在计算机视觉领域呈现指数级的增长。现在,神经网络几乎在所有计算机视觉和图像处理的任务中都有应用。

相比各种层出不穷的用于计算机视觉和图像处理的新网络架构,这一领域神经网络的损失函数相对而言并不那么丰富多彩。大多数模型仍然使用L2损失函数(均方误差)。然而,L2损失函数的效果是否真的那么好呢?其他损失函数表现如何?下面我们将简单介绍常用的图像处理损失函数,并比较其在典型图像处理任务上的表现。

L1、L2损失函数

最容易想到的损失函数的定义,就是逐像素比较差异。为了避免正值和负值相互抵消,我们可以对像素之差取绝对值或平方。

取绝对值就得到了L1损失函数:

取平方则得到了L2损失函数:

和L1相比,L2因为取平方的关系,会放大较大误差和较小误差之间的差距,换句话说,L2对较大误差的惩罚力度更大,而对较小误差更为容忍。

除此之外,L1和L2基本上差不多。

实际上,Nvidia的研究人员Hang Zhao等尝试过交替使用L1和L2损失函数训练网络(arXiv:1511.08861v3),发现随着训练的进行,在测试集上的L2损失都下降了。

橙:前半段L1、后半段L2;蓝:前半段L2、后半段L1

顺便提下,从上图可以看到,前半段L2损失陷入了局部极小值。

不管是L1损失函数,还是L2损失函数,都有两大缺陷:

假定噪声的影响和图像的局部特性是独立的。然而,人类的视觉系统对噪声的感知受局部照度、对比、结构的影响。

假定噪声接近高斯白噪声,然而这一假定并不总是成立。

SSIM、MS-SSIM损失函数

为了将人类视觉感知纳入考量,可以使用基于SSIM或MS-SSIM的损失函数。SSIM、MS-SSIM是综合了人类主观感知的指标。

SSIM(structural similarity,结构相似性)的直觉主要是:人眼对结构(structure)信息很敏感,对高亮度区域(luminance)和“纹理”比较复杂(contrast)的区域的失真不敏感。MS-SSIM(Multi-Scale SSIM,多尺度SSIM)则额外考虑了分辨率这一主观因素(例如,高分辨率的视网膜显示器上显而易见的失真,在低分辨率的手机上可能难以察觉)。

相应地,基于SSIM的损失函数的定义为:

不过,由于损失函数通常配合卷积网络使用,这就意味着计算损失函数的时候其实只用计算中央像素的损失,即:

通过上述中央像素损失函数训练所得的卷积核,仍将应用于图像中的每个像素。

同理,基于MS-SSIM的损失函数为:

另外,我们知道,损失函数除了要准确地表达模型的目标之外,还需要是可微的,这样才能通过基于梯度下降的方法在反向传播阶段训练。显然,L1和L2是可微的。

事实上,基于SSIM和MS-SSIM的损失函数也同样是可微的。这里省略具体的推导过程,直接给出结论。

对基于SSIM的损失函数而言:

其中,l和cs分别为SSIM的第一项和第二项,其梯度为:

其中,Gσ_G为像素的高斯系数。这里我们看到,尽管之前的损失函数只考虑了中央像素,但因为在计算梯度的时候,实际上需要像素的高斯系数,因此误差仍然能够反向传播至所有像素。

相应地,基于MS-SSIM的损失函数的梯度计算公式为:

不过,由于基于MS-SSIM的损失函数需要在每个尺度上都重复算一遍梯度,会大大拖慢训练速度(每一次迭代都相当于M次迭代),因此实践中往往转而采用某个逼近方法计算。例如,使用M组不同的Gσ_G值作为替代,每组值为前一组的1/2.

评测

Hang Zhao等在JPEG去噪、去马赛克,超分辨率重建,JPEG去区块效应等场景对比了不同损失函数的效果。

去噪、去马赛克

上图中的BM3D代表CFA-BM3D,为当前最先进的降噪算法。我们看到,在天空这样的平坦区域(d),L2损失函数出现了污迹失真(splotchy artifact)。

超分辨率

仔细观察下图蝴蝶翅膀的黑带处,可以看到L2出现了光栅失真(grating artifacts)。

同样,下图女孩的面部,也可以观察到L2的光栅失真。

去区块

仔细观察建筑物边缘的区块,可以看到L1比L2去区块效果要好。

天空区域的区块效应更明显,相应地,L1在去区块方面表现优于L2这点就更明显了。

更多去区块的例子印证了我们上面的观察。

混合损失函数

你应该已经注意到了,上面的对比图中有一个“Mix”,而且事实上它是看起来效果最好的那个。这个“Mix”其实是Hang Zhao等提出的混合了MS-SSIM和L1得到的损失函数:

这个混合损失函数的定义很简单,基本上就是MS-SSIM和L1的加权和,只不过因为MS-SSIM反向传播误差时需要用到G高斯分布参数,因此在L1部分也分素相乘相应的分布参数而已。

Hang Zhao等经过一些试验,将α定为0.84,使两部分损失的贡献大致相等(试验发现,α的微小变动对结果的影响不显著)。

以上我们已经从视觉上演示了MS-SSIM+L1混合损失函数效果最佳。定量测试也表明,在多种图像处理任务上,基于多种图像质量指标,总体而言,混合损失函数的表现最好。

网络架构

上述试验所用的网络架构为全卷积神经网络(CNN):

输入为31x31x3.

第一个卷积层为64x9x9x3.

第二个卷积层为64x5x5x64.

输出卷积层为3x5x5x64.

内卷积层的激活函数为PReLU。

数据集

训练集取自MIT-Adobe FiveK数据集,共700张RGB图像,尺寸调整为999x666. 测试集取自同一数据集,共40张图像。

结语

总结一下以上评测:

在很多场景下,L2损失函数的表现并不好。有时可以尝试下同样简单的L1损失函数,说不定能取得更好的效果。

由于未考虑到主观感知,很多场景下,基于SSIM或MS-SSIM的损失函数能取得比L1、L2更好的效果。

结合MS-SSIM和L1通常会有奇效。

总之,虽然L2损失函数是用于图像处理的神经网络事实上的标准,但也不可迷信,不假思索地选用L2可能会错过更优的选择。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 神经网络
    +关注

    关注

    42

    文章

    4762

    浏览量

    100537
  • 函数
    +关注

    关注

    3

    文章

    4306

    浏览量

    62430
  • cnn
    cnn
    +关注

    关注

    3

    文章

    351

    浏览量

    22169

原文标题:CNN图像处理常用损失函数对比评测

文章出处:【微信号:jqr_AI,微信公众号:论智】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    对象检测边界框损失函数–从IOU到ProbIOU介绍

    目标检测损失函数的选择在目标检测问题建模中至关重要。通常,目标检测需要两个损失函数,一个用于对象分类,另一个用于边界框回归(BBR)。
    的头像 发表于 01-24 10:50 2574次阅读
    对象检测边界框<b class='flag-5'>损失</b><b class='flag-5'>函数</b>–从IOU到ProbIOU介绍

    TensorFlow损失函数(定义和使用)详解

    的情况下,损失函数定义为交叉熵。输出 Y 的维数等于训练数据集中类别的数量,其中 P 为类别数量:如果想把 L1 正则化加到损失上,那么代码
    发表于 07-28 14:38

    keras常用的损失函数Losses与评价函数Metrics介绍

    当使用MSE。另一方面,如果我们认为异常值仅表示损坏数据而已,那么我们应当选择MAE作为损失函数。 3 mean_absolute_percentage_error (MAPE) 平均绝对值百分比误差
    发表于 08-18 06:31

    神经网络中的损失函数层和Optimizers图文解读

    对于许多机器学习算法来说,最终要解决的问题往往是最小化一个函数,我们通常称这个函数损失函数。在神经网络里面同样如此,损失
    的头像 发表于 11-30 16:09 8251次阅读

    机器学习经典损失函数比较

    所有的机器学习算法都或多或少的依赖于对目标函数最大化或者最小化的过程。我们常常将最小化的函数称为损失函数,它主要用于衡量模型的预测能力。
    的头像 发表于 06-13 17:53 8530次阅读
    机器学习经典<b class='flag-5'>损失</b><b class='flag-5'>函数</b>比较

    机器学习实用指南:训练和损失函数

    这个损失函数是合理的,因为当 $t$ 接近 0 时,$-log(t)$ 变得非常大,所以如果模型估计一个正例概率接近于 0,那么损失函数将会
    的头像 发表于 06-29 15:02 8506次阅读
    机器学习实用指南:训练和<b class='flag-5'>损失</b><b class='flag-5'>函数</b>

    三种常见的损失函数和两种常用的激活函数介绍和可视化

    从上面阐释的步骤可以看出,神经网络中的权重由损失函数的导数而不是损失函数本身来进行更新或反向传播。因此,损失
    的头像 发表于 05-05 11:42 7083次阅读
    三种常见的<b class='flag-5'>损失</b><b class='flag-5'>函数</b>和两种常用的激活<b class='flag-5'>函数</b>介绍和可视化

    深度学习的19种损失函数你了解吗?带你详细了解

    损失函数通过torch.nn包实现基本用法 criterion = LossCriterion() #构造函数有自己的参数loss = criterion(x, y) #调用标准时也有参数19种
    的头像 发表于 09-14 10:34 1.1w次阅读

    计算机视觉的损失函数是什么?

    损失函数在模型的性能中起着关键作用。选择正确的损失函数可以帮助你的模型学习如何将注意力集中在数据中的正确特征集合上,从而获得最优和更快的收敛。
    的头像 发表于 03-13 16:30 3540次阅读
    计算机视觉的<b class='flag-5'>损失</b><b class='flag-5'>函数</b>是什么?

    损失函数的简要介绍

    例如,你有一个神经网络,通过该网络可以获取一些与房屋有关的数据并预测其价格。在这种情况下,你可以使用MSE(均方误差)损失。基本上,在输出为实数的情况下,应使用此损失函数
    的头像 发表于 04-17 10:01 3600次阅读

    机器学习和深度学习中分类与回归常用的几种损失函数

    本文将介绍机器学习、深度学习中分类与回归常用的几种损失函数,包括均方差损失 Mean Squared Loss、平均绝对误差损失 Mean Absolute Error Loss、Hu
    的头像 发表于 10-09 16:36 6191次阅读
    机器学习和深度学习中分类与回归常用的几种<b class='flag-5'>损失</b><b class='flag-5'>函数</b>

    表示学习中7大损失函数的发展历程及设计思路

    表示学习的目的是将原始数据转换成更好的表达,以提升下游任务的效果。在表示学习中,损失函数的设计一直是被研究的热点。损失指导着整个表示学习的过程,直接决定了表示学习的
    的头像 发表于 07-08 14:23 1892次阅读

    训练深度学习神经网络的常用5个损失函数

    被称为损失函数损失函数的选择与神经网络模型从示例中学习的特定预测建模问题(例如分类或回归)有关。在本文中我们将介绍常用的一些损失
    的头像 发表于 10-19 11:17 819次阅读
    训练深度学习神经网络的常用5个<b class='flag-5'>损失</b><b class='flag-5'>函数</b>

    语义分割25种损失函数综述和展望

    本综述提供了对25种用于图像分割的损失函数的全面且统一的回顾。我们提供了一种新颖的分类法,并详细审查了这些损失函数如何在图像分割中被定制和利用,强调了它们的重要特征和应用,并进行了系统
    的头像 发表于 10-22 08:04 132次阅读
    语义分割25种<b class='flag-5'>损失</b><b class='flag-5'>函数</b>综述和展望

    RNN的损失函数与优化算法解析

    RNN的损失函数 RNN(循环神经网络)在处理序列数据的过程中,损失函数(Loss Function)扮演着重要的角色,它可以测量模型在训练中的表现
    的头像 发表于 11-15 10:16 221次阅读