目标检测中加入背景样本的思考,基于NanoDetPlus的QualityFocalLoss(原创)

文章目录

  • 引言
  • 训练集加入无目标图像的作用
  • NanoDetPlus的损失函数
  • 无目标图像在训练时怎么计算loss

引言

在目标检测的很多应用场景中,大多数情况下视野中是不存在检测目标的,但是在这些无目标场景下,又很容易出现误检框。为了解决这个问题,理所当然地会想到把这些无目标场景图像放入训练集中进行训练,但是这样做真的有用吗?我们需要思考一下底层的作用机制,并且进一步分析这种方法的作用有多大?最好可以进行量化分析。

训练集加入无目标图像的作用

在目标检测任务中,加入背景样本(负样本)对于训练模型具有重要作用。负样本是指那些不包含目标物体的图像或图像区域,它们对于提高模型的泛化能力和检测性能至关重要。以下是加入背景样本的几个主要作用:

  1. 降低误检测率:通过训练包含背景样本的数据集,模型可以学习到哪些区域是不包含目标物体的,从而在实际检测中减少将背景错误识别为目标的情况。

  2. 提高模型泛化能力:背景样本帮助模型理解目标物体与背景之间的区别,使模型能够更好地泛化到新的、未见过的数据上。这对于在多样化场景中进行准确检测是非常有用的。

  3. 平衡类别比例:在实际应用中,背景样本的数量往往远远超过前景样本(即包含目标的样本)。如果没有背景样本,模型可能会过度关注少数的前景样本,导致类别不平衡。加入背景样本可以帮助平衡正负样本的比例,提高模型的分类性能。

  4. 避免过拟合:在目标检测中,为了避免过拟合,需要确保模型不仅仅在训练数据上表现良好,也能在新数据上保持较好的性能。通过包含背景样本,模型可以学习到更加一般化的特征,而不是仅仅记住训练集中的特定样本。

  5. 提高检测精度:在一些目标检测算法中,如Faster R-CNN,会使用区域建议网络(RPN)来生成候选区域。通过将背景样本作为负样本,模型可以更准确地区分前景和背景,从而提高检测的精度。

  6. 难样本挖掘:在训练过程中,可以通过挖掘难以分类的负样本(hard negative examples),即那些容易被模型误判为目标的背景区域,来进一步提升模型的分类性能。这种难样本挖掘技术可以帮助模型更好地学习区分目标和背景之间的微妙差异。

综上所述,背景样本在目标检测模型的训练中扮演着重要角色,它们不仅有助于降低误检测率和提高模型的泛化能力,还能帮助模型避免过拟合,并提高整体的检测精度。(以上来自Kimi大模型)

NanoDetPlus的损失函数

NanoDetPlus中的损失函数分为三部分,类别评价使用的是QualityFocalLoss,bbox评价使用的是GIoU(Generalized Intersection over Union),除此之外,nanodetplus的回归结果是采用离散化的方法,将检测框距离中心点的四个距离(left,top,right,bottom)分别分成特征图尺度上的reg_max+1份,并计算落在0,1,…,reg_max上的概率,该部分使用DistributionFocalLoss。具体如下

self.loss_qfl = QualityFocalLoss(beta=self.loss_cfg.loss_qfl.beta,loss_weight=self.loss_cfg.loss_qfl.loss_weight,
)
self.loss_dfl = DistributionFocalLoss(loss_weight=self.loss_cfg.loss_dfl.loss_weight
)
self.loss_bbox = GIoULoss(loss_weight=self.loss_cfg.loss_bbox.loss_weight)

在训练时,对于无目标负样本,只对类别计算损失。对于检测框的损失计算,会从batch中剔除掉无目标样本所对应的数据和结果。所以,本节只关注QualityFocalLoss的计算过程。

以下来自https://zhuanlan.zhihu.com/p/681445323
Quality Focal Loss (QFL)是一种用于目标检测的改进损失函数。它的主要创新是将目标的定位质量(如边界框与真实对象的重叠度量,例如IoU得分)直接融合到分类损失中,形成一个联合表示。这种方法能够解决传统目标检测中分类与定位任务之间存在的不一致性问题。QFL通过为每个类别的得分赋予根据定位质量调整的权重,使得检测模型在训练过程中能够更加关注那些难以定位或分类的样本。
>
Quality Focal Loss(QFL)的基本原理可以分为以下几个要点:

  1. 联合表示法: QFL将定位质量(如IoU分数)与分类得分融合为一个联合表示,这种表示在训练和推理过程中保持一致性,有助于解决在训练和测试阶段对质量估计和分类得分使用不一致的问题。

  2. 连续标签支持: 传统的Focal Loss仅支持离散的{0, 1}标签,而QFL扩展了这一概念,支持连续的标签(如IoU分数),从0到1的浮点数,更好地反映了实际数据中的情况。

  3. 动态调整难度: QFL通过动态调整损失函数,使得模型在训练过程中更多地关注难以分类或定位的样本,从而提高模型的整体性能。

nanodetplus中该部分的代码如下

def quality_focal_loss(pred, target, beta=2.0):r"""Quality Focal Loss (QFL) is from `Generalized Focal Loss: LearningQualified and Distributed Bounding Boxes for Dense Object Detection<https://arxiv.org/abs/2006.04388>`_.Args:pred (torch.Tensor): Predicted joint representation of classificationand quality (IoU) estimation with shape (N, C), C is the number ofclasses.target (tuple([torch.Tensor])): Target category label with shape (N,)and target quality label with shape (N,).beta (float): The beta parameter for calculating the modulating factor.Defaults to 2.0.Returns:torch.Tensor: Loss tensor with shape (N,)."""assert len(target) == 2, """target for QFL must be a tuple of two elements,including category label and quality label, respectively"""# label denotes the category id, score denotes the quality scorelabel, score = target# negatives are supervised by 0 quality scorepred_sigmoid = pred.sigmoid()scale_factor = pred_sigmoidzerolabel = scale_factor.new_zeros(pred.shape)loss = F.binary_cross_entropy_with_logits(pred, zerolabel, reduction='none') * scale_factor.pow(beta)# FG cat_id: [0, num_classes -1], BG cat_id: num_classesbg_class_ind = pred.size(1)pos = torch.nonzero((label >= 0) & (label < bg_class_ind), as_tuple=False).squeeze(1)pos_label = label[pos].long()# positives are supervised by bbox quality (IoU) scorescale_factor = score[pos] - pred_sigmoid[pos, pos_label]loss[pos, pos_label] = F.binary_cross_entropy_with_logits(pred[pos, pos_label], score[pos],reduction='none') * scale_factor.abs().pow(beta)loss = loss.sum(dim=1, keepdim=False)return loss

在我训练的网络中,输入尺寸为[128,128],为了便于分析,训练batch设为1。原始图像经过倍数8、16、32的下采样后,特征图大小分别为16×16、8×8、4×4,也就是说,对应原图上256+64+16=336个anchor center。同时,网络的分类输出pred的维度为[336,num_class],也就是每一个center point对应一个one_hot编码。在代码中,

  • line 21:label和score的维度为[336,1],该部分为gt的值。label的初始值为num_class(因为类别编号是0到num_class-1,所以初始值为num_class表示不属于任何一个类),根据gt
    box和anchor center的包含关系,对label中被gt box包含的center point所对应的位置设为gt label
    id,同时score中相应的位置设为质量分数(质量分数有专门的计算方法DynamicSoftLabelAssigner,此处暂不讲解)。
  • line 27:此处使用pred和zerolabel做BCE损失,暂时将所有gt label设为0(此处指当作负样本)计算loss
  • line 28-38:找到正样本(在gt box中的center point)对应的位置,单独计算loss
  • line 40-41:对所有位置的loss求和作为分类损失

无目标图像在训练时怎么计算loss

对于无目标样本来说,上一节代码中的line 27等同于对无目标样本做了损失,line 32 得到的pos为空,自然最后返回的损失值就是line 27的值。

换句话说,在有目标样本的训练过程中,把非gt box的其他位置都当作负样本进行了损失计算,无目标样本无非就是全图位置都是负样本罢了,因此理论和实践上来讲,都会对网络训练有所提升。

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

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

相关文章

Oracle解析exp、imp及常见的问题

前言 在工作中经常需要不同数据库的导入和导出。exp和imp可以实现数据的迁移。 exo会转储产生对应的二进制文件,里面包括数据的定义信息、数据内容等,即为dump文件。 下面是使用exp和imp的一些场景 exp和imp主要有4中模式: 1)数据库模式 数据库模式也就是我们说的全备…

新手理解Hugging Face:与Docker Hub对比,理解Hugging Face到底是啥东西

可以将Hugging Face类比为Docker Hub&#xff0c;但它们之间有一些关键区别。我们将分别解释它们的相似之处和不同之处。 相似之处&#xff1a; 集中存储&#xff1a;Hugging Face Hub和Docker Hub都是集中式存储库&#xff0c;提供了一个可供用户查找、分享和使用的模型或镜…

产品经理常用工具汇总

英文名称中文名称描述Axure原型原型图&#xff0c;流程图&#xff0c;框架图&#xff0c;原型图&#xff1b;Axhub团队原型共享Axure原型团队共享&#xff0c;链接转发&#xff1b;iconfont阿里矢量图标图标下载&#xff0c;协助原型和方案&#xff1b;visio流程图 业务流程图&…

k8s安装记录

k8s安装记录 如无特别说明&#xff0c;则该步操作指在所有的机器上执行&#xff01;&#xff01;&#xff01; 如无特别说明&#xff0c;则该步操作指在所有的机器上执行&#xff01;&#xff01;&#xff01; 如无特别说明&#xff0c;则该步操作指在所有的机器上执行&#…

CSS——前端笔记

CSS 1、选择器1.1、基础选择器1.2、复合选择器1.2.4、伪类选择器 1.3、属性选择器1.4、结构伪类选择器1.5、伪元素选择器 2、CSS的元素显示模式2.1、块元素2.2、行内元素2.3、行内块元素2.4、元素显示模式转换 3、字体属性3.1、font-family 字体3.2、font-size 字体大小3.3、fo…

Three.js加载glb / gltf模型,Vue加载glb / gltf模型(如何在vue中使用three.js,vue使用threejs加载glb模型)

简介&#xff1a;Three.js 是一个用于在 Web 上创建和显示 3D 图形的 JavaScript 库。它提供了丰富的功能和灵活的 API&#xff0c;使开发者可以轻松地在网页中创建各种 3D 场景、模型和动画效果。可以用来展示产品模型、建立交互式场景、游戏开发、数据可视化、教育和培训等等…

常用的数据结构及算法

一、数据结构 &#xff08;一&#xff09;线性结构&#xff1a;一对一。 1.可以使用数组、链表来表示。数组又分为静态数组和动态数组两种。链表常用的是单链表。 2.两种特殊的线性结构&#xff1a;队列和栈。其中队列是先进先出&#xff08;排队&#xff09;&#xff0c;栈…

SpringBoot3 集成Springdoc 实现Swagger3功能

说明&#xff1a; 只通过引用org.springdoc 的两个包就可以使用Swagger3 功能&#xff08;步骤1&#xff09;&#xff1b;如想更美观及实现动态认证的开启与关闭&#xff0c;及Swagger3登录认证等功能&#xff0c;需实现&#xff08;步骤1、2、3&#xff09;的配置; 1、 引包…

chrome浏览器查看css样式

样式的查看 1.匹配器为灰色文本&#xff1a; 表示非当前选择器 2.样式有划线标识&#xff1a;CSS属性无效或未知 / 属性值无效 / 被其他属性覆盖的属性 3.属性以浅色文本显示且有感叹号提示&#xff1a;属性虽然有效&#xff0c;但由于CSS逻辑而没有任何影响 转自&#xff1a;…

2024HW --->蓝队面试题

这段时间在写横向移动&#xff0c;搞得鸽了很久&#xff08;内网真的很玄学&#xff09; 还没写完。。。 但是这不是准备HW了吗。小编也来整理一下自己收集到的题目吧&#xff01;&#xff01;&#xff01; &#xff08;仅为个人见解&#xff0c;不代表最终答案&#xff09;&…

react中useState的值没有改变,而是旧的数值

问题背景 想实现点击按钮就改变数据的效果&#xff0c;但是在控制台的打印结果&#xff0c;总是上一次的修改情况&#xff0c;并不是最新的修改后的数据 代码&#xff1a; import { useState, useRef } from "react";// 实现sonA的数据传递给sonB const SonA () …

C语言联合体详解

下午好诶&#xff0c;今天小眼神给大家带来一篇C语言联合体详解的文章~ 目录 联合体 1. 联合体类型的声明 2. 联合体的特点 代码一&#xff1a; 代码二&#xff1a; 3. 相同成员的结构体和联合体对比 ​编辑4. 联合体大小的计算 5. 联合体的优点 联合体 1. 联合体…

软件开发技术栈整理

Java基础 OOP(面向对象编程)-CSDN博客 Jdk和Jre的区别-CSDN博客 数据结构和算法 八大数据结构-CSDN博客 十大经典排序算法-CSDN博客 Spring框架 Spring框架核心模块-CSDN博客 Mybatis框架 MyBatis体系架构_mybatis equal-CSDN博客 数据库 Mysql架构体系_mysql体系架构…

第62天:服务攻防-框架安全CVE 复现SpringStrutsLaravelThinkPHP

目录 思维导图 常见语言开发框架&#xff1a; 案例一&#xff1a;PHP-开发框架安全-Thinkphp&Laravel Thinkphp3.2.x日志泄露 自动化脚本检测 如何getshell 手工注入 ​ThinkPHP5 5.0.23 手工注入 工具检测 laravel-cve_2021_3129 案例二&#xff1a;JAVAWEB-开…

pytorch与深度学习

ChatGPT PyTorch是一个由Facebook AI Research Team开发的开源深度学习库&#xff0c;它提供了一个灵活的环境和丰富的API&#xff0c;用于快速且方便地构建、训练和部署深度学习模型。PyTorch在科学界和工业界都收到了广泛的使用&#xff0c;其中包括了学术研究、小型项目和大…

Chrome修改主题颜色

注意&#xff1a;自定义Chrome按钮只在搜索引擎为Google的时候出现。

如何30天快速掌握键盘盲打

失业后在家备考公务员&#xff0c;发现了自己不正确的打字方式&#xff0c;决定每天抽出一点时间练习打字。在抖音上看到一些高手的飞速盲打键盘后&#xff0c;觉得使用正确的指法打字是很必要的。 练习打字&#xff0c;掌握正确的键盘指法十分关键。 练习打字的第一步是找到…

关于电商独立站搭建中电商API数据采集接口的应用

搭建供应链系统时&#xff0c;您可能需要与电商平台进行集成&#xff0c;以实现订单管理、库存同步、物流跟踪等功能。以下是一些常见的电商接口&#xff0c;可以帮助您构建供应链系统&#xff1a; 1. **淘宝开放平台接口**&#xff1a;淘宝开放平台提供了丰富的接口&#xff…

AI System AI系统对大模型的影响有多深?

AI System AI系统对大模型的影响有多深&#xff1f;要回答这个问题之前&#xff0c;不妨从下面这个问题开始入手思考。 大模型进入了爆发期后&#xff0c;在 LLM 进化树中&#xff0c;BERT&#xff08;Encoder-Only&#xff09;、T5&#xff08;Encoder-Decoder&#xff09;、…

社交创新的标杆:解读Facebook的社交模式

引言 在当今数字化时代&#xff0c;社交媒体已成为人们日常生活和沟通的重要工具。作为全球最大的社交媒体平台&#xff0c;Facebook不仅改变了我们的社交模式&#xff0c;而且对全球的社交文化、商业活动和公共事务产生了深远的影响。本文将深入探讨Facebook的社交模式&#…