【深度学习】cv领域中各种loss损失介绍

文章目录

  • 前言
  • 一、均方误差
  • 二、交叉熵损失
  • 三、二元交叉熵损失
  • 四、Smooth L1 Loss
  • 五、IOU系列的loss


前言

损失函数是度量模型的预测输出与真实标签之间的差异或误差,在深度学习算法中起着重要作用。具体作用:
1、目标优化:损失函数是优化算法的目标函数,通过最小化损失函数,模型的参数可以使得预测值接近真实值。训练过程的目标就是找到使损失函数最小化的参数。
2、模型评估:损失函数也可用于评估模型的性能。
3、指导学习过程:通过损失函数,模型可以学习如何调整权重和偏置以最小化预测实际标签之间的差异。这是通过梯度下降等优化算法来实现,这些算法使用损失函数的梯度来指导参数的更新。

深度学习损失函数在训练和评估深度学习模型中发挥关键作用,直接影响模型的性能和泛化能力。选择合适的损失函数是深度学习模型设计中的一个重要决策。


一、均方误差

均方误差(Mean Squared Error,MSE)是一种用于回归问题的损失函数,它度量模型的预测值与实际标签之间的平方差的平均值。通常用在具有连续输出的回归问题中使用,结合梯度下降等优化算法,最小化模型的预测误差。
优点:由于平方的存在,能对大误差给予更大的惩罚。缺点:对离群值(异常值)非常敏感,单个异常值可能对整体损失较大影响。
在pytroch的API:参考文档
torch.nn.MSELoss(reduction=‘mean’)
reduction (str, optional) – Specifies the reduction to apply to the output: ‘none’ | ‘mean’ | ‘sum’. ‘none’: no reduction will be applied, ‘mean’: the sum of the output will be divided by the number of elements in the output, ‘sum’: the output will be summed. Note: size_average and reduce are in the process of being deprecated, and in the meantime, specifying either of those two args will override reduction. Default: ‘mean’
代码示例:

import torch
import torch.nn as nntorch.random.manual_seed(0)if __name__ == '__main__':mse = nn.MSELoss(reduction='sum')inputs = torch.randn(3, 5, requires_grad=True)outputs = torch.randn(3, 5)loss = mse(inputs, outputs)

在cv中,常用在以下几个领域:

  1. 图像配准(模板匹配):MSE用于衡量两个图像之间的差异。通过比较配准后的图像与目标之间的像素,评估二者之间的差异。
  2. 回归任务:在图像属性预测等任务中,MSE是一种常见的损失函数。
  3. 目标检测:在目标检测中,当模型需要回归目标边界框的坐标时,MSE度量预测框与真实框之间的位置差异。如yolov1等。
  4. 自监督学习:生成的目标通常是通过对原始数据应用某种变换而获得的。MSE可以用于度量模型生成的结果与变换后的原始数据之间的差异。
  5. 生成对抗网络(GAN): 在 GAN 中,生成器的输出与真实图像之间的差异通常可以通过 MSE 来度量。然而,对抗性损失(例如二元交叉熵)通常更为常见,因为它更好地促使生成器生成逼真的图像。

二、交叉熵损失

CrossEntropyLoss(交叉熵损失)是在多分类问题中常用的损失函数,用于衡量模型输出的概率分布与真实标签的差异。
在这里插入图片描述
Y代表真实值, Y-head表示预测值
交叉熵损失通过比较模型对每个类别的预测概率与真实标签的概率分布,惩罚模型对正确类别的不确定性越大的情况。在优化过程中,模型的目标是最小化交叉熵损失,以使得模型对每个样本的预测更接近真实的标签分布。参考文档
在PyTorch等深度学习框架中,CrossEntropyLoss通常与Softmax激活函数结合使用。Softmax函数能够将模型的原始输出转换成表示概率分布的形式,而CrossEntropyLoss则基于这些概率计算损失。
在这里插入图片描述
代码示例:

import torch
import torch.nn as nn# Example of target with class indices
loss = nn.CrossEntropyLoss()
input = torch.randn(3, 5, requires_grad=True)
target = torch.empty(3, dtype=torch.long).random_(5)
output = loss(input, target)
output.backward()
# Example of target with class probabilities
input = torch.randn(3, 5, requires_grad=True)
target = torch.randn(3, 5).softmax(dim=1)
output = loss(input, target)
output.backward()

在cv领域,交叉熵损失常用在图像多分类的场景中。

三、二元交叉熵损失

BCELoss是交叉熵损失在二分类问题上的一个特例。在深度学习中,会使用二元交叉熵损失函数来衡量二分类模型的性能。与一般的交叉熵损失相比,二元交叉熵只涉及两个类别,因此简化了损失函数的形式。优化算法(如梯度下降)通过最小化BCELoss来调整模型参数,使得模型在二分类任务中更准确。
表达式如下:
在这里插入图片描述
在pytorch的API:
torch.nn.BCELoss(weight=None, reduction=‘mean’)

reduction (str, optional) – Specifies the reduction to apply to the output: ‘none’ | ‘mean’ | ‘sum’. ‘none’: no reduction will be applied, ‘mean’: the sum of the output will be divided by the number of elements in the output, ‘sum’: the output will be summed. Note: size_average and reduce are in the process of being deprecated, and in the meantime, specifying either of those two args will override reduction. Default: ‘mean’
在PyTorch等深度学习框架中,BCELoss通常与Sigmoid激活函数一起使用,因为Sigmoid函数可以将模型输出映射到[0, 1]范围内的概率值。这两者的结合通常用于最后一层的模型输出。
代码示例:

import torch
import torch.nn as nnm = nn.Sigmoid()
loss = nn.BCELoss()
input = torch.randn(3, 2, requires_grad=True)
target = torch.rand(3, 2, requires_grad=False)
output = loss(m(input), target)
output.backward()

四、Smooth L1 Loss

Smooth L1 Loss,也称为 Huber Loss,是一种损失函数,通常用于回归问题。它的特点是相对于均方误差(MSE),在预测接近目标值时损失函数的增长更缓慢,这使得它对离群值(outliers)更加鲁棒。
在这里插入图片描述
beta一般等于1。
优点:

  1. 鲁棒性:Smooth L1 Loss相对于均方误差(MSE)对离群值更具鲁棒性。这使得它在处理包含噪声或异常值的数据时表现更好,尤其在回归任务中,其中存在离群值的可能性较大。
  2. 平滑性: 在 (|x| < 1) 的情况下,Smooth L1 Loss使用平方项,使得损失在预测接近目标值时增长缓慢。这种平滑性有助于训练过程的稳定性。
  3. 对于大误差的抑制效果: 对于大误差,Smooth L1 Loss的增长速率较慢,相对于MSE,它在对大误差的处理上更加温和。
    缺点:
  4. 对小误差不敏感: 对于小误差,Smooth L1 Loss的损失增长速率较快,这可能使得在某些情况下对小误差不够敏感。这也可能导致模型对于较小的误差调整得过于激烈。
  5. 非唯一性: 对于某些相同的误差,Smooth L1 Loss可能有多个最小值。这使得损失函数的形状在某些情况下变得复杂,可能对优化过程产生一定的影响。

在pytorch中的API:
torch.nn.SmoothL1Loss(reduction=‘mean’, beta=1.0)
在cv领域中,smooth L1 loss常用来代替MSE,用于边界框回归,相比较MSE,smooth L1 loss更抗干扰。

五、IOU系列的loss

IOU Loss用于衡量目标检测模型性能的损失函数。用于监督模型在生成边界框预测时与真实边界框之间的重叠程度。
总共有四种IOU相关的Loss:IOU Loss、GIOU Loss、DIOU Loss、CIOU Loss
(1)IOU Loss:衡量预测框与真实框的IOU的大小,IOU越大,损失越少。
在这里插入图片描述
优点:能够更好反应重合程度,具有尺度不变性;
缺点:当二者不相交时,Loss为0,导致损失没办法继续传播。
(2)、GIOU Loss
GIOULoss针对IOULoss的缺点,引入了Ac和u,改善了部分IOULoss的缺陷。
在这里插入图片描述
Ac表示蓝色矩形框的面积,u表示预测框与真实框的并集。
GIOULoss表达式:
GIOU Loss = 1 - GIOU
缺点是:两个边界框在同一水平线上时(Ac等于u),退化成IOU。收敛慢,收敛精度低。
(3)DIOU Loss
DIOU Loss在IOU的基础上,考虑了预测框与边界框中心的距离及最大矩形框的对角线距离。
在这里插入图片描述
DIOULoss = 1 - DIou
DIOULoss极大加快了收敛速度和收敛精度。
(4)CIOU Loss
CIOU Loss在DIOU Loss的基础上,还考虑长宽比。
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/601526.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

文件归类妙招:用关键字替换改扩展名方法,文件重命名技巧

在日常工作中&#xff0c;文件的数量会随着时间的推移不断增加。如果文件没有得到适当的归类和整理&#xff0c;就会导致很难找到所需的文件。所以文件归类是非常重要的任务。现在来看云炫文件管理器一些实用的文件归类妙招&#xff1a;用关键字替换修改文件扩展名的方法&#…

Kubernetes复习总结(二):Kubernetes容器网络

2、Kubernetes容器网络 1&#xff09;、Docker网络原理 Docker默认使用的网络模型是bridge&#xff0c;这里只讲bridge网络模型 1&#xff09;容器之间通信原理 当安装完docker之后&#xff0c;docker会在宿主机上创建一个名叫docker0的网桥&#xff0c;默认IP是172.17.0.1…

AI动作冒险电影《加勒比海盗:失落的宝藏》(下)

AI动作冒险电影《加勒比海盗&#xff1a;失落的宝藏》&#xff08;下&#xff09; 在宝藏岛屿的探险中&#xff0c;杰克船长不断遭遇铁钩胡克的追击&#xff0c;并陷入了一系列生死危机中。然而&#xff0c;当杰克终于找到宝藏所在的洞穴时&#xff0c;却发现了一个令人震惊的事…

HarmonyOS 开发基础(五)Button

HarmonyOS 开发基础&#xff08;五&#xff09;Button Entry Component struct Index {build() {Row() {Column() {// Button&#xff1a;ArkUI 的基础组件 按钮组件// label 参数&#xff1a;文字型按钮Button(我是按钮)// width&#xff1a;属性方法&#xff0c;设置组件的宽…

shell编程-分支语句和循环结构

流控制: •在一个shell脚本中的命令执行顺序称作脚本的流。大多数脚本会根据一个或多个条件来改变它们的流。 •流控制命令:能让脚本的流根据条件而改变的命令称为条件流控制命令 •exit语句:退出程序的执行&#xff0c;并返回一个返回码&#xff0c;返回码为0正常退出&#…

基于多反应堆的高并发服务器【C/C++/Reactor】(中)在EventLoop中处理被激活的文件描述符的事件

文件描述符处理与回调函数 一、主要概念 反应堆模型&#xff1a;一种处理系统事件或网络事件的模型&#xff0c;当文件描述符被激活时&#xff0c;可以检测到文件描述符&#xff1a;在操作系统中&#xff0c;用于标识打开的文件、套接字等的一种数据类型 处理激活的文件描述符…

BUUCTF--pwnable_start1

查看保护&#xff1a; 32位程序保护全没开&#xff0c;黑盒测试下效果&#xff1a; 存在栈溢出&#xff0c;那么这题的想法就是直接ret2shellcode了。IDA中看看具体流程&#xff1a; 出奇的少&#xff0c;这题不能看反汇编的代码&#xff0c;直接去看汇编&#xff1a; 主要就2个…

【设计模式之美】面向对象分析方法论与实现(一):需求分析方法论

文章目录 一. 需求举例二. 对案例进行需求分析1. 第一轮基础分析2. 第二轮分析优化3. 第三轮分析优化4. 第四轮分析优化5. 最终确定需求 三. 小结 本文主要描述&#xff1a; 面向对象的需求分析方法论 一. 需求举例 假设&#xff0c;你正在参与开发一个微服务。微服务通过 HTT…

msvcr120.dll丢失怎样修复,三种修复msvcr120.dll丢失的方法

"msvcr120.dll"是一个重要的库文件&#xff0c;用于支持Microsoft Visual C 2013 Redistributable软件包中的应用程序。在本文中&#xff0c;我们将介绍"msvcr120.dll"文件的重要性和作用&#xff0c;并探讨当msvcr120.dll丢失怎样修复的办法。以及msvcr12…

Python基础教程——90行Python代码让微信地球转起来!!(完整版,附源码)

今天我们来一个好玩儿的东西&#xff0c;使用90行Python代码就可以让【微信第地球】转起来&#xff0c;太有意思啦&#xff01; 1.微信地球 手机重启后打开微信的一瞬间&#xff0c;会看到一幅有名的图片&#xff0c;上面站着一个张小龙。 你可曾想过这样一个问题&#xff0c…

走向云原生 破局数字化

近年来&#xff0c;随着云计算概念和技术的普及&#xff0c;云原生一词也越来越热门&#xff0c;云原生成为云计算领域的新变量。行业内&#xff0c;华为、阿里巴巴、字节跳动等各个大厂都在“抢滩”云原生市场。行业外&#xff0c;云原生也逐渐出圈&#xff0c;出现在大众视野…

GUI设计基础

层次结构 要学GUI&#xff0c;大概先知道它的层次结构&#xff0c;如下图所示&#xff0c;我们要设计的就是下面这个几个东西。 菜单uimenu 建立一级菜单项的函数调用格式&#xff1a; hmuimenu(h_parent,PropertyNamel,valuel,propertyName2,value2&#xff0c;...); hm 是…

修改mariadb的默认存储路径

首先mariadb服务正常启动 安装mariadb&#xff1a; https://blog.csdn.net/qq_50247813/article/details/135402502?spm1001.2014.3001.5502 停止mariadb服务 systemctl stop mariadb创建新的数据存放目录 mkdir /data将mariadb的数据拷贝到/data目录下 mv /var/lib/mysq…

设计模式学习2

代理模式&#xff1a;Proxy 动机 “增加一层间接层”是软件系统中对许多复杂问题的一种常见解决方案。在面向对象系统中&#xff0c;直接食用某些对象会带来很多问题&#xff0c;作为间接层的proxy对象便是解决这一问题的常见手段。 2.伪代码&#xff1a; class ISubject{ pu…

AIGC学习笔记(1)——AI大模型提示词工程师

文章目录 AI大模型提示词工程师1 Prompt工程之原理1.1 AIGC的发展和产业前景前言AIGC时代的到来发展趋势和应用展望 1.2 大模型的类型和特点大模型的对比上手特点 1.3 大模型技术原理和发展成语接龙和暴力穷举ChatGPT如何理解人类语言如何存储数据图像存储电脑存数字如何让电脑…

商智C店H5性能优化实战

前言 商智C店&#xff0c;是依托移动低码能力搭建的一个应用&#xff0c;产品面向B端商家。随着应用体量持续增大&#xff0c;考虑产品定位及用户体验&#xff0c;我们针对性能较差页面做了一次优化&#xff0c;并取得了不错的效果&#xff0c;用户体验值&#xff08;UEI&…

面部识别技术的突破:IP-Adapter-FaceID实现上传照片秒变多面人生

IP-Adapter-FaceID通过上传个人照片&#xff0c;仅需几分钟即可克隆一个高度真实的个性化面部图像。IP-Adapter-FaceID的独特之处在于&#xff0c;它不仅捕捉到个体的基本外貌特征&#xff0c;更深入地嵌入了面部识别模型的面部ID&#xff0c;使生成的图像在细节上更为准确和逼…

前端--基础 常用标签-超链接标签 外部链接( herf 和 target)

目录 超链接标签 &#xff1a; 超链接的语法格式 &#xff1a; 超链接的属性 &#xff1a; 超链接的分类 &#xff1a; 外部链接 &#xff1a; 超链接标签 &#xff1a; # 在 HTML 标签中&#xff0c;<a> 标签用于定义超链接&#xff0c;作用是从一个页面…

cookie和session、请求转发和重定向

会话 分为有状态会话和无状态会话 在HTML中&#xff0c;"会话"一般指的是Web服务器与客户端&#xff08;通常是浏览器&#xff09;之间进行的一系列请求和响应。它是一种在网络上模拟人与人之间通信的方式&#xff0c;常见于Web应用程序中。 会话、Cookie和Sessio…

(Python + Selenium4)Web自动化测试自学Day2之动手尝试

目录 文章声明⭐⭐⭐让我们开始今天的学习吧&#xff01;小试牛刀关于select标签关于弹窗只有一个点击按钮的弹窗需要确认的弹窗用户可以输入的弹窗 文章声明⭐⭐⭐ 该文章为我&#xff08;有编程语言基础&#xff0c;非编程小白&#xff09;的 Python Selenium4 Web自动化测试…