目标检测中的正负样本是什么,是如何起作用的?

devtools/2024/12/29 6:21:01/

1、正负样本的定义

1.1、正样本

正样本是指那些与真实目标(Ground Truth, GT)有很高关联性的样本,其作用是让模型学习目标的位置和类别特征。举个例子:

Anchor-based中,如果一个候选框(Anchor)与目标框的重叠程度(IoU,交并比)大于一定阈值,可以被认为是正样本。

Anchor-free中,如果某个像素点或者区域落在目标框内且符合预定条件,则被认为是正样本。

1.2、负样本

负样本是指那些与真实目标没有强关联的样本,其作用是帮助模型区分背景和目标,减少误报。举个例子:

Anchor-based中,如果一个候选框与目标框的IoU小于某个阈值,就被认为是负样本。

Anchor-free中,如果某个像素点或区域不在目标框内或未被标记为正样本,则是负样本。

2、正负样本在检测中到底是怎么起作用的

目标检测损失函数通常由三部分组成:

置信度损失(Objectness Loss):用于区分正样本(框住了目标)和背景(负样本)。

边界框回归损失(Localization Loss):优化正样本预测框的位置和大小。

分类损失(Classification Loss):预测正样本的目标类别。

如果一个检测框被认为是正样本,那么该检测框会参与检测中的目标分类、置信度预测以及边界框回归。

而如果该检测框被认为是负样本,也就是模型认为该检测框没有框中感兴趣的目标,仅仅是包含了一些背景,那么该框仅仅会进行置信度的预测。

以二分类交叉熵置信度损失函数为例:

N表示总样本数,pi表示检测框的预测置信度值,yi表示检测框是正样本(1)还是负样本(0)

对于一个检测框,如果被认为是正样本(有目标),则yi=1,那么等式右边的第二项就为0了,此时变成了 Lobj = -log(pi)预测置信度越接近大,则Lobj越小。

对于一个检测框,如果被认为是负样本(纯背景),则yi=0,那么等式右边的第一项就为0了,此时变成了 Lobj = -log(1 - pi),预测置信度越接近大,则Lobj也越大。

通过多轮的训练,每次前向传播和反向传播后,梯度下降,模型参数会朝使损失函数减少的方向调整,损失不断降低。

正样本置信度逐渐接近 1,类别预测逐渐准确,边界框与真实框逐步重合。负样本置信度逐渐接近 0,减少对背景区域的误检测。


http://www.ppmy.cn/devtools/146321.html

相关文章

workman服务端开发模式-应用开发-vue-element-admin封装websocket

一、用于保存WebSocket实例对象 export const WebSocketHandle undefined 二、外部根据具体登录地址实例化WebSocket,然后回传保存WebSocket export const WebsocketINI function (websocketinstance) {this.WebSocketHandle websocketinstancethis.WebSocket…

overleaf中出现TeX capacity exceeded PDF object stream buffer=5000000的原因和解决方案

在插入pdf 配图后,编译出错提示信息如图,很可能的一个原因是pdf文件大小太大了,最好压缩一下,压缩到1MB以内。

【ES6复习笔记】迭代器(10)

什么是迭代器? 迭代器(Iterator)是一种对象,它能够遍历并访问一个集合中的元素。在 JavaScript 中,迭代器提供了一种统一的方式来处理各种集合,如数组、字符串、Map、Set 等。通过迭代器,我们可…

Vue 3 与 Tauri 集成开发跨端APP

1、安装RUST 下载地址:Install Rust - Rust Programming Language 安装: 安装完成后,在命令行里运行: rustup 2、安装 Node.js 与 npm 或 pnpm ,如果已经安装,可以忽略 # 使用 nvm 安装 Node.js 最新版本 nvm install…

【Rust自学】8.1. Vector

喜欢的话别忘了点赞、收藏加关注哦(加关注即可阅读全文),对接下来的教程有兴趣的可以关注专栏。谢谢喵!(・ω・) 8.1.0. 本章内容 第八章主要讲的是Rust中常见的集合。Rust中提供了很多集合类型的数据结构&…

微信小程序打印生产环境日志

微信小程序打印生产环境日志 新建一个log.js文件,写入以下代码: let log wx.getRealtimeLogManager ? wx.getRealtimeLogManager() : nullmodule.exports {debug() {if (!log) returnlog.debug.apply(log, arguments)},info() {if (!log) returnlog.i…

【从零开始入门unity游戏开发之——unity篇01】unity6基础入门开篇——游戏引擎是什么、主流的游戏引擎、为什么选择Unity

文章目录 前言**游戏引擎是什么?****游戏引擎对于我们的意义**1、**降低游戏开发的门槛**2、**提升游戏开发效率** **以前做游戏****现在做游戏****主流的游戏引擎有哪些?**Unity 相比其他游戏引擎的优势?**为什么选择Unity?**Uni…

python数据分析之爬虫基础:scrapy详解

一、爬虫工程化 在之前的爬虫学习中基本已经掌握了爬虫这门技术的大多数技术点,但是我们现在写的代码还很流程化,很难进行商用,想要爬虫达到商用级别,必须要对我们现在编写的爬虫进行大刀阔斧式的重组,以达到工程化的…