我的编程空间,编程开发者的网络收藏夹
学习永远不晚

YOLOV5损失函数

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

YOLOV5损失函数

yolov5的损失函数包括:

classification loss 分类损失

localization loss 定位损失,预测框和真实框之间的误差

confidence loss 置信度损失,框的目标性

总损失函数为三者的和

 classification loss + localization loss + confidence loss

也可以在三个损失前乘上不同的权重系数,已达到不同比重的结果。

在yolov5中的置信度损失和分类损失用的是二元交叉熵来做的,而定位损失是用的CIOU Loss来做的

类别预测(Class Prediction)

在传统的多分类任务中,一般使用的是softmax函数,将预测得分转换为综合为1的概率,就有点二极管那种感觉,不是动物,那就是人,再不行就是背景,就会导致有极强的排他性。

而在yolov3/v4/v5当中,在计算分类损失进行训练时,对每个标签使用二元交叉熵,去替换了softmax函数,降低了计算复杂度,以计算输入特定的标签的可能性,可以输出的标签是行人+儿童这种类型,输出的总分可以大于1。

边界框损失(localization loss)

IoU Loss

早先的对于边界框的损失使用的IoU损失去做的,去看真实框和预测框的交并比,来计算损失。但是会出现一个问题,就是当真实框和预测框不重叠时,IoU值将为0,并不会反应两个形状彼此之间的距离,会造成梯度为0并且无法优化。

GIoU Loss

后来在在CVPR2019时,出现了一个叫GIoU的损失他引入了一个最小包围框的概念。如图

  将绿色框A和土黄色框B,完全包围起来,这个框我们称为C框

 那么GIoU损失就为,两框的交并比IoU — (|C ÷ (A ∪ B)|  ÷  |C|)

 但是GIoU也有一些问题:

当检测框和真实框出现包含现象(一个完全套住了另一个,没有并集了)的时候GIoU退化成IoU

两个框相交时,在水平和垂直方向上收敛慢

DIoU Loss

这时候时又出现了一个DIoU Loss

 这时候引入了两框中心点的距离d 对角线C 的概念

 b和 bgt代表预测框的中心点和gt框的中心点。 ρ2() 代表的是欧式距离,c代表包含这两个框的最小矩形的对角线长度。这样的话,对于包含这种情况,中心点的距离也成为了一个评判标准,也能有一个优化的方向。从而解决了两个框相交时,在水平和垂直方向上收敛慢,这个问题。

原论文中作者给出了训练过程

 

第一排是 GIoU 第二排是DIoU,中心点的绿框是真实框,这图片可以清楚的看出,GIoU的收敛需要400次,而DIoU只需要120次,而且DIoU收敛的效果更好。原因就是DIoU考虑了两框中心点的距离,当两框中心点的距离为0或接近0时,可以判断是拟合的状态

CIoU Loss 

CIoU 又加入了一个长宽比这个条件,比较两个框宽高比的吻合度

 最后的αv就是相较于 GIoU增加的部分。

总结

DIoU相比于IoU和GIoU有更快的收敛速度。

CIoU考虑的范围更多,包括了重叠的面积,中心点距离,宽高比。这样的话对于框的回归会更充分,所以Yolov5当中默认的矩形框损失是CIoU Loss。

参考:

DIOU-loss - 知乎

来源地址:https://blog.csdn.net/qq_35326529/article/details/128208740

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

YOLOV5损失函数

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

机器学习之损失函数

深度学习中常用的损失函数多种多样,具体选择取决于任务类型和问题的性质。以下是一些常见的深度学习任务和相应的常用损失函数: 分类任务: 交叉熵损失函数(Cross-Entropy Loss):用于二分类和多类别分类任务,包括二元交叉熵
2023-08-30

Pytorch损失函数torch.nn.NLLLoss()的使用

这篇文章主要介绍了Pytorch损失函数torch.nn.NLLLoss()的使用,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
2023-02-01

PyTorch中的损失函数有哪些

PyTorch中常用的损失函数有:nn.CrossEntropyLoss:多分类问题中常用的交叉熵损失函数。nn.MSELoss:用于回归问题的均方误差损失函数。nn.BCELoss:二分类问题中常用的二元交叉熵损失函数。nn.NLL
PyTorch中的损失函数有哪些
2024-03-05

tensorflow2中怎么自定义损失函数

tensorflow2中怎么自定义损失函数,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。Keras的核心原则是逐步揭示复杂性,可以在保持相应的高级便利性的同时,对操作细节进行更
2023-06-20

机器学习之损失函数(Loss Function)

损失函数(Loss Function)是机器学习和深度学习中的关键概念,它用于衡量模型的预测与实际目标之间的差异或误差。损失函数的选择对于模型的训练和性能评估至关重要,不同的任务和问题通常需要不同的损失函数。 以下是一些常见的损失函数以及它
2023-08-30

Torch中怎么定义一个损失函数

在Torch中定义一个损失函数,一般是通过继承nn.Module类来实现的。以下是一个示例:import torchimport torch.nn as nnclass CustomLoss(nn.Module):def __init_
Torch中怎么定义一个损失函数
2024-03-07

PyTorch中怎么实现自定义损失函数

要实现自定义损失函数,可以按照以下步骤在PyTorch中实现:创建一个继承自torch.nn.Module的类,该类用于定义自定义损失函数的计算逻辑。import torchimport torch.nn as nnclass Custo
PyTorch中怎么实现自定义损失函数
2024-03-05

如何在PyTorch中定义一个损失函数

在PyTorch中定义损失函数非常简单。你可以使用torch.nn模块中提供的各种损失函数,也可以自定义自己的损失函数。下面是一个简单的示例,展示如何在PyTorch中定义一个自定义的损失函数:import torch# 自定义损失函数
如何在PyTorch中定义一个损失函数
2024-03-14

PyTorch中怎么选择合适的损失函数

在PyTorch中选择合适的损失函数取决于你的任务类型和模型架构。以下是一些常见的损失函数及其适用场景:交叉熵损失函数(CrossEntropyLoss):适用于多分类问题,特别是在分类问题中标签是离散的情况下。均方误差损失函数(MSELo
PyTorch中怎么选择合适的损失函数
2024-03-05

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录