关于Loss的简单总结

Dice Loss

参考:https://blog.csdn.net/l7H9JA4/article/details/108162188

Dice系数: 是一种集合相似度度量函数,通常用于计算两个样本的相似度,取值范围为[0,1]。

s=2∣X∩Y∣∣X∣+∣Y∣s = \frac{2|X ∩ Y|}{|X|+|Y|} s=X+Y2XY
|X⋂Y| 是指 X 和 Y 之间的交集;|X| 和 |Y| 分别表示 X 和 Y 的元素个数. 分子乘为了保证分母重复计算后取值范围在[0,1]之间

因此Dice Loss可写作

Ldisc=2∣X∩Y∣∣X∣+∣Y∣L_{disc} = \frac{2|X∩Y|}{|X|+|Y|} Ldisc=X+Y2XY

对于二分类问题,一般预测值分为以下几种:

  • TP: true positive,真阳性,预测是阳性,预测对了,实际也是正例。
  • TN: true negative,真阴性,预测是阴性,预测对了,实际也是负例。
  • FP: false positive,假阳性,预测是阳性,预测错了,实际是负例。
  • FN: false negative,假阴性,预测是阴性,预测错了,实际是正例

image

公式可改写为

dics=2TP2TP+FP+FNdics = \frac{2TP}{2TP+FP+FN} dics=2TP+FP+FN2TP

公式的论文形式

Ldice=1−I+aU−I+aL_{dice} = 1 - \frac{I+a}{U-I+a} Ldice=1UI+aI+a
a为一个极小的数,一般称为平滑系数,有两个作用:

  • 防止分母预测为0。值得说明的是,一般分割网络输出经过sigmoid 或 softmax,是不存在输出为绝对0的情况。这里加平滑系数主要防止一些极端情况,输出位数太小而导致编译器丢失数位的情况。
  • 平滑系数可以起到平滑loss和梯度的操作。

Dicc loss应用于语义分割,是区域相关的loss,因此更适合针对多点的情况进行分析。
这也意味着某像素点的loss以及梯度值不仅和该点的label以及预测值相关,和其他点的label以及预测值也相关。

IOU、GIOU、DIOU、CIOU损失函数汇总

参考:
https://zhuanlan.zhihu.com/p/159209199
https://zhuanlan.zhihu.com/p/94799295

IOU

IOU俗称交并比,是目标检测中最常用的指标。

IoU=∣A∩B∣∣A∪B∣IoU = \frac{|A ∩ B|}{|A ∪ B|} IoU=ABAB
优点
1、他可以反映预测检测框真实检测框的检测效果。
2、具有尺度不变性,也就是对尺度不敏感(scale invariant), 在regression任务中,判断predict box和gt的距离最直接的指标就是IoU。(满足非负性;同一性;对称性;三角不等性)

缺点
1、若两框无法相交,由定义得IoU=0,也就不能反映两者的重合度。同时因为loss为零,没有梯度回归,无法进行学习的训练
2、IoU无法精确的反映两者之间的重合度大小。如下图,IoU相同,但可以看出重合度不一样,左边最好,右边最差。
image

GIOU

GIoU=IoU−Ac−UAcGIoU = IoU - \frac{A_{c}-U}{A_{c}} GIoU=IoUAcAcU
公式的解释如下:
先计算两个框的最小闭包区域面Ac(同时包含预测框和真实框的最小框面积),在计算IoU,然后在计算闭包区域中不属于两个框的区域占闭包区域的比重,最后用IoU减去这个比重,得到GIoU。

优点:

  • 与IoU相似,GIoU也是一种距离度量,作为损失函数的话
    LGIoU=1−GIoUL_{GIoU} = 1 - GIoU LGIoU=1GIoU
    ,满足损失函数的基本要求
  • GIoU对scale不敏感,可以解决检测框非重叠造成的梯度消失问题
  • GIoU是IoU的下界,在两个框无限重合的情况下,IoU=GIoU=1
  • IoU取值[0,1],但GIoU有对称区间,取值范围[-1,1]。在两者重合的时候取最大值1,在两者无交集且无限远的时候取最小值-1,因此GIoU是一个非常好的距离度量指标。
  • 与IoU只关注重叠区域不同,GIoU不仅关注重叠区域,还关注其他的非重合区域,能更好的反映两者的重合度。

DIoU

DIoU要比GIou更加符合目标框回归的机制,将目标与anchor之间的距离,重叠率以及尺度都考虑进去,使得目标框回归变得更加稳定,不会像IoU和GIoU一样出现训练过程中发散等问题。

DIoU=IoU−ρ2(b,bgt)c2DIoU = IoU - \frac{ρ^2(b,b^{gt})}{c^2} DIoU=IoUc2ρ2(b,bgt)
其中b,bgt 分别代表预测框和真实框的中心点,且ρ代表的是计算两个中心点间的欧式距离。c代表的是能够同时包含预测框和真实框的最小闭包区域的对角线距离
image

优点:

  • 与GIoU loss类似,DIoU loss(LDIoU=1−DIoUL_{DIoU} =1 - DIoULDIoU=1DIoU)在与目标框不重叠时,仍然可以为边界框提供移动方向。
  • DIoU loss可以直接最小化两个目标框的距离,因此比GIoU loss收敛快得多。
  • 对于包含两个框在水平方向和垂直方向上这种情况,DIoU损失可以使回归非常快,而GIoU损失几乎退化为IoU损失。
  • DIoU还可以替换普通的IoU评价策略,应用于NMS中,使得NMS得到的结果更加合理和有效。

下图所示为GIOU和DIOU的对比。
在这里插入图片描述
红色框是DIOU损失中的预测框。可以很明显的看出,DIOU的收敛速度较GIOU更快。

CIoU(Complete-IoU)

DIOU考虑到了两个检测框的中心距离。而CIOU考虑到了三个几何因素,分别为

  1. 重叠面积
  2. 中心点距离
  3. 长宽比

考虑到bbox回归三要素中的长宽比还没被考虑到计算中,因此,进一步在DIoU的基础上提出了CIoU。其惩罚项如下面公式:

RCIoU=ρ2(b,bgt)c2+avR_{CIoU}=\frac{ρ^2(b,b^{gt})}{c^2} + av RCIoU=c2ρ2(b,bgt)+av
其中a是权重函数,而v 用来度量长宽比的相似性,定义为

a=v(1−IoU)+va = \frac{v}{(1-IoU)+v} a=(1IoU)+vv

v=4π2(arctanwgthgt−arctanwh)v = \frac{4}{π^2}(arctan\frac{w^{gt}}{h^{gt}}-arctan\frac{w}{h}) v=π24(arctanhgtwgtarctanhw)
完整的CIoU损失函数的定义:

LCIoU=1−IoU+ρ2(b,bgt)c2+avL_{CIoU} =1-IoU + \frac{ρ^2(b,b^{gt})}{c^2} + av LCIoU=1IoU+c2ρ2(b,bgt)+av

  • w2 和 h2 为真实框的宽、高
  • w 和 h 为预测框的宽、高

若真实框和预测框的宽高相似,那么 v 为0,该惩罚项就不起作用了。所以很直观地,这个惩罚项作用就是控制预测框的宽高能够尽可能快速地与真实框的宽高接近。

IoU、 GIou、 DIoU、 CIoU在YOLOv3上的性能比较

image

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

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

相关文章

SOLOv2论文简读

论文:SOLOv2: Dynamic, Faster and Stronger 代码:https://github.com/WXinlong/SOLO 摘要 主要提出了作者在SOLOv2中实现的优秀的实例分割方法,旨在创建一个简单、直接、快速的实例分割框架: 通过提出动态学习对象分割器的mas…

Ubuntu18.04 关于使用vnc的踩坑

由于种种原因,手上多了一台可使用的桌面版Ubuntu,正好用来测试代码,方便调试。因为只能远程,所以需要配置远程连接。因此就打算使用vnc进行远程连接,谁料一路坎坷,特此记录。 安装 设置桌面共享 需要注意…

App_Shell模型

App_Shell模型 App Shell 架构是构建 Progressive Web App 的一种方式,这种应用能可靠且即时地加载到您的用户屏幕上,与本机应用相似。 App shell是支持用户界面所需的最小的 HTML、CSS 和 JavaScript,如果离线缓存,可确保在用户重复访问时提供即时、可靠的良好性能。这意…

Jenkins自定义主题教程

Jenkins自定义主题 由于Jenkins自带的样式比较丑陋,所以有很多第三方的样式库,这里针对jenkins-material-theme样式库做一个安装教程。 下载样式库 下载连接 Select your color 选择一个你喜欢的主题颜色。Choose your company logo 上传你自定义的…

IndexedDB_Web 离线数据库

IndexedDB_Web 离线数据库 本文会从头剖析一下 IndexedDB 在前端里面的应用的发展。 indexedDB 目前在前端慢慢得到普及和应用。它正朝着前端离线数据库技术的步伐前进。以前一开始是 manifest、localStorage、cookie 再到 webSQL,现在 indexedDB 逐渐被各大浏览器认…

基于 Docker 的微服务架构

基于 Docker 的微服务架构-分布式企业级实践前言Microservice 和 Docker服务发现模式客户端发现模式Netflix-Eureka 服务端发现模式ConsulEtcdZookeeper 服务注册自注册模式 Self-registration pattern第三方注册模式 Third party registration pattern小结一 服务间的 IPC 机制…

funcode游戏实训,java及C/C++,网上整理

软件,常见错误都有。 所有资源可到公众号获取(源码也是),不再直接分享

swing皮肤包 substance

分享一下swing皮肤包substance 资源可到公众号获取

基于Android的聊天软件,Socket即时通信,实现用户在线聊天

基于Android的聊天软件,Socket即时通信,单聊,聊天室,可自行扩展功能,完善细节。 【实例功能】 1.运行程序,登录界面, 注册账号功能 2.进入主界面,有通讯录, 个人信息。 3.点击好友会话框&#…

Go实现简单的RESTful_API

Go实现简单的RESTful_API 何为RESTful API A RESTful API is an application program interface (API) that uses HTTP requests to GET, PUT, POST and DELETE data. A RESTful API – also referred to as a RESTful web service – is based on representational state t…

Weave Scope安装

Weave Scope安装 首先确保已经安装docker 实时了解Docker容器状态 查看容器基础设施的概况,或者专注于一个特殊的微服务。从而轻松发现并纠正问题,确保你的容器化应用的稳定与性能。 内部细节与深度链接 查看容器的指标、标签和元数据。 在一个可扩展…

MYSQL导入数据出现ERROR 1049 (42000): Unknown database 'n??;'

MYSQL导入数据出现ERROR 1049 (42000): Unknown database ‘n??;’ 背景 我需要将一个csv表中的数据导入数据库创建好的表中,产生的问题如下: 原因寻找 因为我并没有使用’n??;的数据库,所以很好奇这个错怎么来的,尝试如下…

SVG入门理解

SVG入门SVG 元素简单的形状rectcircleellipselinetextpath SVG 样式分层和绘图顺序透明度 SVG入门 当我们用SVG生成和操作一些炫酷的效果时,D3是最佳选择。使用div和其他原生HTML元素绘图也是可以的,但是太笨重,而且会受到不同浏览器的限制&#xff0c…

【哈佛幸福课笔记】【1】

【哈佛幸福课笔记】【1】 ​ ​ 一个月的时间看完了哈佛幸福课,正如Tal所说课程的结束才是学习的开始。对于课程观点的思考,对于个人习惯的培养,对于思维模式的转变还需要花大量的时间去练习。这个系列的帖子将作为我个人的读书笔记&#x…

RAID阵列基础知识

RAID阵列基础知识 独立硬盘冗余阵列 (RAID, Redundant Array of Independent Disks),旧称廉价磁盘冗余阵列(Redundant Array of Inexpensive Disks),简称磁盘阵列。 RAID的种类 这里我们只介绍比较常用的RAID类型&am…

timeshift备份你的Linux系统

timeshift备份你的Linux系统 安装 打开终端(ctrl alt T)并逐个执行以下命令 sudo apt-add-repository -y ppa:teejee2008/ppa sudo apt-get update sudo apt-get install timeshift 创建 点击Create按钮 默认不能备份用户下的文件,所以…

Go语言vscode环境配置

Go语言vscode环境配置 此教程在GO已经安装成功的前提下。 安装vscode扩展 在vscode扩展里面搜索go,然后下载扩展。 安装go 插件 在$GOPATH目录下创建bin,pkg,src切换到$GOPATH/bin目录下,打开终端输入以下命令,不需要翻墙: go…

消息队列-Message Queue

消息队列-Message Queue 目前随着互联网的普及以及上网用户的增多,拥有一套 安全、稳定、低耦合、高性能的内部通信工具尤为重要。 什么是消息队列? 消息队列(英语:Message queue)是一种进程间通信或同一进程的不同线…

Angular 第一章 开始

第一章 开始 用 JavaScript 开发应用程序是一个很大的挑战。由于它的延展性和缺少类型检查,在 JavaScript 中构建一个适当大小的应用程序是很困难的。除此之外,我们对所有类型的处理都使用JavaScript,例如用户界面(UI),操作、客户端-服务器交互和业务处理/验证。因此,我们…

Typescript实现单例之父类调用子类

Typescript实现单例之父类调用子类 设计要求 在程序中,需要一个对象可以全局使用,并且只有一个实例Breakpoint 类是一个可以被继承的类,然后子类必须实现 updateView函数updateView 这个函数可以被自动调用,当窗口发生变化的时候构思 UML 图 Layout 是一个单例类,也就是全局只…