损失函数篇

损失函数

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则强调实时性和计算效率,两者在特定的应用场景下各有优势。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

11 UDP的可靠传输协议QUIC

1.如何做到可靠性传输 2.UDP与TCP,我们如何选择 3.UDP如何可靠,KCP协议在哪些方面有优势 4.KCP协议精讲(重点讲解 5.OUIC时代是否已经到来 UDP如何做到可靠传输 ACK机制重传机制 重传策略序号机制(后发的包可能先到) 3 2 1-> 2 3 1重排机制 2 3 1-> 3 2 1窗口机制 流…

谷粒商城笔记-03-分布式基础概念

文章目录 一,微服务二,集群、分布式三,远程调用四,负载均衡五,服务注册、服务发现、注册中心六,配置中心七,服务熔断、服务降级1,服务熔断2,服务降级3,区别 八…

Spring框架的学习前言

1.注意事项 1.在接下来的学习中我们会将jdk的版本升级到17。 2.引入maven仓库用来存储依赖 3.在后面的javaSpring框架中要第一个项目的创建要选javaweb和lombook这两个依赖 2.Maven的主要功能 (1)maven的主要功能是引入依赖和管理依赖,在…

基于SpringCloud的分布式架构网上商城

基于SpringCloud的分布式架构网上商城的主要使用者管理员功能:首页、个人中心、用户管理、商品信息管理、商品分类管理、系统管理、订单管理等功能。 💕💕作者:Weirdo 💕💕个人简介:擅长Java、C…

【SkiaSharp绘图15】SKPath属性详解:边界、填充、凹凸、类型判断、坐标、路径类型

文章目录 SKPath 构造函数SKPath 属性Bounds 边界(宽边界)TightBounds紧边界FillType填充方式IsConcave 是否凹/ IsConvex 是否凸IsEmpty是否为空IsLine是否为线段IsRect是否为矩形IsOval是否为椭圆或圆IsRoundRect是否为圆角矩形Item[] 获取路径的坐标LastPoint最后点的坐标Po…

基于香橙派AIpro搭建的车牌识别系统

引言 本人正有学习嵌入式的想法,正好碰到机会让我搞了块OrangePi AIpro(香橙派AIpro)开发板,正合我意,直接上手进行体验,顺便给大家分享下我的实践过程。 开发板介绍与初次启动 OrangePiAIPro开发板是香…

WPF UI InkCanvas 导师演示画板 演示 笔记 画笔 识别

<Grid><InkCanvas Name"inkCanvas"/><Button Content"识别" Click"Button_Click" VerticalAlignment"Bottom"/></Grid> 引用内库 Ink ink new Ink(); private void Button_Click(object sender, RoutedEvent…

基于STM32F103C8T6的同步电机驱动-CubeMX配置与IQmath调用

基于STM32F103C8T6的同步电机驱动-CubeMX配置与IQmath调用 一、功能描述: 上位机通过CAN总线实现对电机的运动控制,主要包含三种模式:位置模式、速度模式以及力矩模式。驱动器硬件核心为STM32F103C8T6,带相电压采集电路以及母线电压采集电路。其中供电电压12V。 PWM中心对…

Android-卷积神经网络(Convolutional Neural Network, CNN)

一个复杂且在Android开发中常见的算法是图像处理中的卷积神经网络(Convolutional Neural Network, CNN)。CNN被广泛用于图像识别、物体检测和图像分割等任务,其复杂性在于需要处理大量的图像数据、复杂的神经网络结构和高效的计算。 1. 卷积操作(Convolution) 数学原理:…

企业级监控系统Zabbix

文章目录 Zabbix介绍Zabbix架构Zabbix serverZabbix agentZabbix proxy Zabbix Server的安装Zabbix Agent的安装监控主机流程zabbix_get自定义模板和监控项实战用户登录数监控1.指定监控项命令2.重启Agent服务3.在Server上创建监控项4.测试监控项5.查看监控项图形 触发器定义触…

字符设备驱动程序

简单做个模板框架 字符设备开发流程 确定设备号dev_t&#xff0c;动态分配 alloc_chrdev_region() 或静态分配 register_chrdev_region()定义file_opeartion 结构体*fops *&#xff0c;在结构体成员中实现对应的 *open()、read()*等函数。cdev_init() 将 fops 与 cdev 绑定&…

STM32学习历程(day2)

GPIO解释 GPIO(General-purpose input/output) 可以配置为八种输入输出模式 引脚电平 0V-3.3V 部分引脚可容忍5v 输出模式可控制端口输出高低电平 用以驱动LED、控制蜂鸣器、模拟通信协议输出时序 输入模式可读取端口的高低电平或电压&#xff0c;用于读取按键输入、外界…

firefly rk3588 sdk安装问题记录

目录 一、python版本不对 1.1 下载python2.6 1.2 安装python2.6 1.3 安装遇到问题 二、安装hashlib 三、更新3588 SDK代码 一、python版本不对 我的环境的python版本是python3.7。初次安装的时候执行命令报错&#xff0c;说是版本不对导致 fuhdell:rk3588_sdk$ .repo/rep…

centos通过官网下载安装最新版mysql方案

官网下载步骤&#xff1a; 点击DOCUMENTATION mysql的yum仓库Using the MySQL Yum Repository 向下翻&#xff0c;查看安装命令 点击下载mysql安装包 下载对应的版本 不注册&#xff0c;直接下载社区版 下载好的安装包 安装步骤&#xff1a; 把rpm包导入到服务器…

AI 驱动的数据中心变革与前景

文章主要探讨了AI计算时代数据中心的转型&#xff0c;涉及计算技术的多样性、规格尺寸和加速器的发展、大型语言模型&#xff08;LLM&#xff09;的发展、功耗和冷却趋势、基准测试的重要性以及数据中心的发展等方面。为大家提供深入了解AI基础设施发展的视角。 计算技术的多样…

​浅谈 Linux 中的 core dump 分析方法

在 Linux 系统开发领域中&#xff0c;core dump&#xff08;核心转储&#xff09;是一个不可或缺的工具&#xff0c;它为我们提供了在程序崩溃时分析程序状态的重要线索。当程序因为某种原因&#xff08;如段错误、非法指令等&#xff09;异常终止时&#xff0c;Linux 系统会尝…

spring boot + vue3+element plus 项目搭建

一、vue 项目搭建 1、创建 vue 项目 vue create vue-element说明:创建过程中可以选择路由,也可也可以不选择,可以通过 npm install 安装 vue 项目目录结构 说明:api 为自己创建的文件夹,router 选择路由模块会自动创建 router下的index.js文件(配置路由的文件) im…

泰国内部安全行动司令部数据泄露

BreachForums 论坛的一名成员宣布发生一起重大数据泄露事件&#xff0c;涉及泰国内部安全行动司令部 (ISOC)&#xff0c;该机构被称为泰国皇家武装部队的政治部门。 目前&#xff0c;我们无法准确确认此次泄露的真实性&#xff0c;因为该组织尚未在其网站上发布有关该事件的任…

微信开发者工具报错 Error: module ‘xxx.js‘ is not defined, require args is ‘xxx.js‘

背景 报错如下 检查 代码逻辑和写法都是ok的重新打开项目又是可以的 解决方案 先确保微信开发者工具和uniapp的将js编译成es5都开着&#xff08;这个是默认开的&#xff09; 然后把微信开发者工具关了重开 一般做这一步就会好了&#xff0c;但是只是临时解决 &#xff08…

如何使用 3D 建模库在 C# 中将 3DS 转换为 USDZ?

USDZ/USD是一种 3D 文件格式&#xff0c;被广泛用于跨平台共享 3D 资产。另一方面&#xff0c;3DS是另一种以块形式存储数据的 3D 文件格式。在某些情况下&#xff0c;您需要将3DS 文件转换为 USDZ/USD文件格式。因此&#xff0c;本篇博文介绍了一个功能丰富的3D 建模库&#x…