损失函数篇

损失函数

1、边界框损失函数/回归损失函数bbox_loss

2、分类损失函数cls_loss

3、置信度损失函数obj_loss

YOLOv8损失函数

1、概述

通过YOLOv8-训练流程-正负样本分配的介绍,我们可以知道,经过预处理与筛选的过程得到最终的训练数据:
a. 网络输出值:pred_scores[bx8400xcls_num]、pred_bboxes[bx8400x4]
b. 训练标签值:
target_scoresbx8400xcls_num,在计算损失时与预测结果pred_scores[bx8400xcls_num],计算交叉熵损失,该损失是对每个类别计算BCE Loss,因为类别预测采用的sigmoid分类器。
target_bboxesbx8400x4,在计算损失时,分别与预测的pred_bboxes计算Ciou Loss, 同时与pred_regs(预测的anchors中心点到各边的距离)计算回归DFL Loss。
c. 训练mask值:fg_mask [bx8400],对8400个anchor进行正负样本标记,计算损失过程中通过fg_mask筛选正负样本。

2、损失函数
1、类别分类损失cls_loss

在yolov8中,类别损失最终采用的是交叉熵损失,该方法是我们非常熟知的,不再赘述。

代码如下:
self.bce = nn.BCEWithLogitsLoss(reduction='none')
loss[1] = self.bce(pred_scores,target_scores).sum()/target_scores_sum

其中预测pred_scores: b x 8400 x cls_num; target_scores: b x 8400 x cls_num, 相当于对于每个box,其cls_num个分类都视为二分类,并进行交叉熵运算。

2、边界框回归损失bbox_loss

边框回归,采用的是DFL Loss + CIOU Loss
在这里插入图片描述

target_bboxes /= self.stride_scales
loss[0],loss[2] = self.bbox_loss(pred_regs,pred_bboxes,self.anc_points,target_bboxes,target_scores,target_scores_sum,fg_mask)

DFL loss:

weight = torch.masked_select(target_scores.sum(-1), fg_mask).unsqueeze(-1)
# DFL loss
if self.use_dfl:target_ltrb = self.bbox2reg(anchor_points, target_bboxes, self.reg_max)loss_dfl = self._df_loss(pred_regs[fg_mask].view(-1, self.reg_max + 1), target_ltrb[fg_mask]) * weight

FasterRCNN损失函数

1、由于frcnn的网络结构主要是两个网络组成,损失函数分为四个部分。

RPN分类损失:anchor是否为gt
RPN位置回归损失:anchor位置微调
ROI分类损失:ROI所属类别
ROI位置回归损失:继续对ROI位置微调
四个损失相加就是最后的损失,反向传播,更新参数。

2、RPN损失

1、分类损失:cross_entropy
2、回归损失:smooth L1 loss

3、ROI损失(与RPN类似)

1、分类损失
2、回归损失

在Faster R-CNN模型中,有两个主要的组件:区域提议网络(Region Proposal Network, RPN) 和 Fast R-CNN检测器。这两个组件分别负责生成候选区域(region proposals)和最终的目标检测,它们各自计算并优化不同的损失函数。

RPN的损失
RPN的目标是生成高质量的候选区域,它同时执行分类和回归任务:

分类损失:RPN需要判断每个锚框(anchor)是否包含目标物体,通常使用二元分类(前景vs背景)。损失函数通常采用交叉熵损失(Cross-Entropy Loss),有时也称为Log Loss。对于每个锚框,如果它与任一GT框的重叠超过阈值,则认为它是正样本(前景),否则为负样本(背景)。
回归损失:对于每个前景锚框,RPN需要预测边界框的偏移量,以便更准确地定位目标。回归损失通常采用Smooth L1损失(也称为Huber损失),因为它对大的残差(预测误差)更为稳健。
ROI的损失(Fast R-CNN部分的损失)
Fast R-CNN检测器接收RPN生成的候选区域,然后进行更详细的分类和边界框回归:

分类损失:对于每个候选区域(Region of Interest, ROI),Fast R-CNN需要预测物体的类别。这同样采用交叉熵损失,但是这次是多分类损失,因为它需要区分多个不同的物体类别。
回归损失:类似于RPN的回归损失,Fast R-CNN也需要优化边界框的位置。然而,这里的边界框回归是针对每个类别进行的,因为不同类别的物体可能有不同的形状和比例。这也通常使用Smooth L1损失。
总体损失
在训练过程中,RPN的损失和Fast R-CNN部分的损失会被加权求和,形成总损失函数。这是因为两个部分的目标是相关的,但又各自负责不同的任务。优化整个模型的总损失有助于同时改善区域提议的质量和最终的检测精度。

损失函数的细节
RPN的分类损失通常使用Sigmoid函数进行二元分类,而Fast R-CNN的分类损失使用Softmax函数进行多分类。
RPN的回归损失和Fast R-CNN的回归损失都采用Smooth L1损失,但Fast R-CNN的回归损失可能在每个类别上都有一个独立的分支,这意味着它实际上是多个Smooth L1损失的组合。
通过这种方式,Faster R-CNN模型能够在训练过程中同时优化区域提议和最终的检测结果,从而实现高效且准确的目标检测。

YOLOv8和RT-DETR(Real-Time DETR)是两种不同的目标检测框架,它们在设计哲学和损失函数的选择上存在一些关键的区别。下面我将概述这两种模型的损失函数及其差异。

YOLOv8的损失函数

YOLOv8是YOLO系列的一个最新版本,它采用了以下几种损失函数:

  1. VFL Loss (Variational Focal Loss):用于分类损失,它结合了交叉熵损失和focal loss的优点,以解决类别不平衡问题,尤其是当小目标数量较少时。

  2. CIOU Loss (Complete Intersection over Union Loss):用于边界框回归,CIOU Loss不仅考虑了IoU(交并比),还考虑了中心点的距离和长宽比,提供了更全面的边界框回归度量。

  3. DFL Loss (Distribution Focal Loss):用于边界框坐标预测的细化,通过预测边界框坐标的分布来进一步优化回归。

RT-DETR的损失函数

RT-DETR是基于Transformer架构的实时目标检测模型,它借鉴了DETR的设计,但进行了优化以实现更快的速度。其损失函数包括:

  1. 分类损失:通常使用交叉熵损失,用于预测每个检测框的类别。

  2. 边界框回归损失:RT-DETR可能使用L1损失或GIoU(Generalized IoU)损失等,用于优化检测框的位置。

  3. 匈牙利匹配算法:这是DETR及其衍生模型的核心特点之一,用于在没有先验假设的情况下匹配预测框和真实框,从而确定哪些预测框应该被哪些真实框监督。

区别

  1. 匹配机制:YOLOv8采用Task-Aligned匹配策略,而RT-DETR则依赖于匈牙利算法进行预测框与真实框的匹配。Task-Aligned匹配考虑了任务的特性来优化匹配过程,而匈牙利算法则是一种全局最优的匹配策略。

  2. 损失函数:YOLOv8使用了更复杂的损失函数组合,如VFL和CIOU Loss,旨在提高小目标检测的性能和边界框回归的准确性。RT-DETR的损失函数相对简单,更侧重于速度和效率。

  3. 架构差异:YOLOv8继承了YOLO的一贯风格,使用卷积神经网络(CNN)进行特征提取和预测,而RT-DETR基于Transformer架构,这在模型结构和计算流程上有本质的不同。

这些区别反映了YOLOv8和RT-DETR在设计上的不同取向,YOLOv8追求在各种场景下的高性能,而RT-DETR则强调实时性和计算效率,两者在特定的应用场景下各有优势。

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

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

相关文章

微信小程序/uniapp:class和style不生效的问题

非常重要&#xff1a;小程序端不支持 classObject 和 styleObject 语法。 文档&#xff1a;https://uniapp.dcloud.net.cn/tutorial/vue-basics.html#class-与-style-绑定 目录 对象语法数组语法字符串语法computed其他方案 对象语法 <!-- class --> <view class&quo…

AI是在帮助开发者还是取代它们?

在这个科技日新月异的时代&#xff0c;人工智能&#xff08;AI&#xff09;已经渗透到了我们生活的方方面面&#xff0c;尤其是在软件开发和编程领域&#xff0c;其影响更是深远。AI技术的飞速发展引发了广泛讨论&#xff1a;它究竟是开发者们的得力助手&#xff0c;还是未来可…

2024 年最佳 Figma 字体

字体不仅仅是文本字符&#xff0c;它们还塑造了用户体验。从引导用户浏览界面到传达品牌个性&#xff0c;字体对于设计​​至关重要。然而&#xff0c;找到适合您的网站或应用风格的完美字体可能具有挑战性。 但不要害怕&#xff0c;我们会帮助您&#xff01;请继续关注&#x…

C语言 指针和数组——指针的算术运算

目录 指针的算术运算 指针加上一个整数 指针减去一个整数 指针相减 指针的关系比较运算 小结 指针的算术运算 指针加上一个整数 指针减去一个整数 指针相减 指针的关系比较运算 小结  指针变量 – 指针类型的变量&#xff0c;保存地址型数据  指针变量与其他类型…

负载均衡(服务器)

vi /etc/sysconfig/network-scripts/ifcfg-ens33 systemctl restart network 防火墙 systemctl stop firewalld systemctl disable firewalld vi /etc/selinux/config setenforce 0 yum install gcc gcc-c mkdir /lnmp cd /lnmp/ tar -zxvf zlib-1.2.12.tar.gz tar -zxv…

在Ubuntu 16.04上安装和配置ownCloud的方法

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站。 简介 ownCloud 是一个文件共享服务器&#xff0c;允许您将个人内容&#xff08;如文档和图片&#xff09;存储在一个类似 Dropbox 的集…

[C++][CMake][CMake基础]详细讲解

目录 1.CMake简介2.大小写&#xff1f;3.注释1.注释行2.注释块 4.日志 1.CMake简介 CMake是一个项目构建工具&#xff0c;并且是跨平台的 问题 – 解决 如果自己动手写Makefile&#xff0c;会发现&#xff0c;Makefile通常依赖于当前的编译平台&#xff0c;而且编写Makefile的…

vue的学习--day3

1、尝试使用json文件模拟增删改查 json server:准备一份自己的数据&#xff08;这里我用的是老师给的&#xff09;。 转到d盘&#xff0c;然后打开json文件&#xff1a; 下面模拟增删改查&#xff1a; 借助工具postman或apifox或apipost&#xff1a; 这里我下载了apifox&…

前端之CSS篇--面试题总结

CSS的特性&#xff1a;继承性、层叠性、优先级 优先级&#xff1a;写css样式的时候&#xff0c;会给同一个元素添加多个样式&#xff0c;此时谁的权重搞就显示谁的样式。 !important >行内样式>id>类>标签>全局选择器 隐藏元素的方法 display:none 元素在页面…

产品公告 | MemFire Cloud 现已支持微信授权登录,为移动应用带来更便捷的认证服务

MemFire Cloud推出的“开箱即用”的后端服务&#xff0c;提供了云数据库、身份验证与授权、云存储、静态托管、实时realtime、自动生成API等功能&#xff0c;本次升级新增/优化功能如下&#xff1a; 标题微信授权登录&#xff08;移动应用&#xff09; 为了顺应国内用户的使用…

Python面试题:如何在 Python 中实现单例模式?

在 Python 中&#xff0c;有多种方法可以实现单例模式&#xff08;Singleton Pattern&#xff09;。单例模式是一种设计模式&#xff0c;确保一个类只有一个实例&#xff0c;并提供一个全局访问点。以下是几种常见的方法来实现单例模式&#xff1a; 方法一&#xff1a;使用类变…

Elasticsearch:Ingest architectures - 摄取架构

我们提供各种采集架构&#xff0c;以满足各种用例和网络配置的需求。 要将数据采集到 Elasticsearch&#xff0c;请使用最符合你的需求和用例的选项。对于许多用户和用例来说&#xff0c;最简单的方法是使用 Elastic Agent 采集数据并将其发送到 Elasticsearch。Elastic Agent…

深度学习——深度学习中感受野的计算

感受野 在卷积神经网络&#xff08;CNN&#xff09;中&#xff0c;感受野&#xff08;Receptive Field&#xff09; 是一个非常重要的概念。它描述了网络中某一层的输出&#xff08;通常是特征图上的一个像素点&#xff09;所对应的输入图像上的空间范围。这个范围代表了该输出…

【CSS】了解grid-template-areas属性

grid-template-areas 属性是 CSS Grid 布局中一个非常有用的特性&#xff0c;它允许你通过命名网格区域&#xff08;grid areas&#xff09;来直接控制网格项目的布局。这个属性通过引用网格容器内部网格项目的名称来定义网格区域的布局&#xff0c;使得布局的设计更加直观和易…

SARscape——地理编码与辐射定标

目录 一、算法原理1、概述2、参考文献 二、软件操作三、结果展示1、原始图像2、处理结果 一、算法原理 1、概述 SAR系统观测到的是电磁波入射地球表面后反射&#xff08;后向散射&#xff09;的雷达脉冲的强度和相位信息。这个信息编码到雷达坐标系统下&#xff0c;即斜距坐标…

DataFrame 的常用操作

DataFrame是什么&#xff1f; DataFrame 是一种用于处理和分析数据的二维标签数据结构。它类似于Excel中的电子表格或数据库中的表格&#xff0c;由行和列组成。每个列可以是不同的数据类型&#xff08;如整数、浮点数、字符串等&#xff09;&#xff0c;并且可以进行各种数据操…

vb与数据库编程

第一节 一、数据库基础知识 数据库的概念 数据库是按照数据结构来组织、存储和管理数据的仓库。 它可以存储大量的数据,并提供高效的数据访问和管理功能。 数据库的类型 关系型数据库:如 SQL Server、MySQL、Oracle 等,以表格形式存储数据,通过关系(如主键和外键)来关联不…

数据结构之二叉树概念

数据结构之二叉树 二叉树简介分类普通二叉树平衡二叉树满二叉树二叉搜索树&#xff08;二叉排序树、二叉查找树&#xff09;&#xff0c;平衡二叉树红黑树 B树类型B树&#xff08;B-树、B_树&#xff09;B树B*树 二叉树 简介 二叉树(Binary Tree) &#xff1a;是一种非常重要…

RPC框架之Dubbo

Dubbo 是一款高性能、轻量级的开源 Java RPC&#xff08;Remote Procedure Call&#xff09;框架&#xff0c;由阿里巴巴集团于2011年发布。Dubbo 主要用于实现基于微服务架构的分布式应用&#xff0c;通过提供服务注册与发现、负载均衡、容错等功能&#xff0c;极大地简化了服…

头歌资源库(19)在排序数组中查找元素的首尾位置

一、 问题描述 二、算法思想 该问题可以通过二分查找的思想来解决。 首先&#xff0c;我们可以使用二分查找找到目标值在数组中的任意一个位置&#xff08;即该位置的值等于目标值&#xff09;。假设找到的位置为mid。 接下来&#xff0c;我们需要在mid的左边和右边分别找到…