CV经典任务(二)目标检测 |单目标,多目标 非极大值抑制等

news2024/11/21 0:15:28

文章目录

  • 1 目标检测
    • 1.1 单目标检测
    • 1.2 多目标检测
      • 3.2.1 阶段一 单像素点采样目标检测
      • 3.2.2 阶段二 多像素点采样目标检测
      • 3.2.3 阶段三 RNN
      • 3.2.4 阶段四 一阶段的目标检测 Yolo/SSD

1 目标检测

目标检测的重要任务是

  1. 目标定位:目标检测的首要任务是确定图像中对象的位置,通常使用边界框(Bounding Box)来描述目标的位置。边界框由一对坐标表示,通常是左上角和右下角的坐标。
  2. 目标识别:目标检测不仅要定位目标,还要识别目标的类别或类别标签。这通常涉及将检测到的对象与已知的类别进行比较,从而确定它是什么物体。

所以目标检测可以通俗理解为分类+定位

我不仅要告诉你什么类别,还要告诉你在哪儿

在这个任务中,我们用边界框,来定位我们的物体

边界框的位置表示有两种

第一种是边框的坐上,右下的点的坐标点x1,y1 x2,y2

第二种是边框的中间点坐标,和宽高

两种方式都可以唯一确定图片上的边框,并且可以相互转换

1.1 单目标检测

即图片中只有一个要检测的物体,这个难度相对来说小一些

直观可以想到一种方式

首先拿一个卷积网络提取特征

再利用提取到的特征(假如提取到的特征是2048)一方面可以接一个全连接层做分类(比如2048到10类),另一方面可以接全连接层做坐标点的回归(比如2048到4个坐标点)

这样需要两个损失函数,一个损失函数降低分类错误率,另一个损失函数降低回归错误率,我们称这样的网络叫做多任务多损失网络
在这里插入图片描述

对于这样的任务

一般可以多阶段训练

1 先训练分类分支

2 再在分类分支训练好的基础上训练坐标点回归

3 最后一步将两个合并到一起训练

1.2 多目标检测

图片中可能有多个要检测的物体,这个难度就更大了

物体的个数是未知的,我们不能像单目标检测那样只回归一个坐标点,回归的坐标点个数是未知的!!天啊该怎么呢

所以研究者们做了如下一些尝试

3.2.1 阶段一 单像素点采样目标检测

既然直接回归不行,那么我们可以先产生很多的边界框(术语叫锚框),让网络对这些边界框 锚框一个一个做分类,并预测它距离真实边框的偏移量!

最开始大伙儿尝试直接对于每个像素点给出不同尺寸的锚框

当生成足够多的锚框的时候,大力出奇迹,总会有框几乎把我们的目标框住的

这时候对于每个区域进行分类判断,一张图片可能会产生几十万上百万张图片,然后让网络进行分类

直观感受 是有点鲁莽!!!密集恐惧症颤抖

实际也证明这种方式的运算量巨大,但他是可行的方式

训练阶段

我们把每一个锚框看作一个训练样本

这个训练样本需要两个标记,一是类别(一般就分配给与它最近边框的类别即可),二是与它最近的真实边框的偏移量

模型对于每一个框需要预测它的类别,与最近的真实边框的偏移量

预测阶段

首先为图像生成多个锚框

利用模型为这些锚框一 一预测类别和偏移量

有一个可能的问题,我们生成了多个相似的具有明显重叠的锚框

采用非极大值抑制来合并属于同一目标的相似的边界框

(1)首先,根据每个候选边界框的得分(通常是模型预测的物体存在概率或置信度分数)对所有候选边界框进行降序排序,得分较高的边界框排在前面。

(2)选择得分最高的边界框,并将其添加到最终的筛选结果中。这个边界框通常被认为是最有可能包含真实目标的边界框。

(3)于剩余的候选边界框,计算它们与已选择的高分边界框的重叠区域(通常使用IoU,Intersection over Union来衡量)。IoU是两个边界框重叠区域与它们的联合区域的比例。

(4)剔除重叠边界框:如果某个候选边界框与已选择的高分边界框具有高于预定阈值的IoU值(也就意味着和我们得分最高的边界重叠过高),则将该候选边界框从列表中移除

(5)重复步骤:重复步骤2到步骤4,直到没有更多的候选边界框需要处理。

(6)输出结果:NMS会输出一组经过非极大值抑制筛选的边界框

可以做这样一个比喻来通俗理解这件事情

想象你是一名宝藏猎人,你有一块地图上标有可能埋有宝藏的若干区域。你的任务是找到最有可能埋有宝藏的区域,同时避免走重复的路线,因为这不会增加你找到宝藏的机会。

  1. 得分排序:每个区域都有一个分数,表示它有多大的可能性埋有宝藏。你首先查看地图上所有区域的分数,将得分最高的区域放在列表的最前面,就像把最有希望的区域标记在地图上。
  2. 选择高分区域:你首先前往得分最高的区域,因为那里找到宝藏的可能性最大。
  3. 计算重叠区域:当你到达一个区域后,你会注意到一些其他区域可能与你当前所在的区域有很大的重叠。这就像你走到了一个区域,但可能有其他猎人也在附近搜索。
  4. 剔除重叠区域:为了避免重复工作,你会检查其他猎人所在的区域,如果它们与你当前的区域有很大的重叠(重复搜索的可能性高),你会决定不再前往这些区域,而是继续前往下一个可能性很高的区域。
  5. 重复步骤:你会不断重复前往得分最高的区域、计算重叠区域和剔除重叠区域的步骤,直到你认为没有更值得前往的高分区域为止。
  6. 输出结果:最终,你的努力会得到一组标记为最有可能埋有宝藏的区域,而且你不会重复浪费时间去搜索高度重叠的区域。

3.2.2 阶段二 多像素点采样目标检测

单像素点采样直接对于所有像素点为中心给出不同尺寸的锚框,运算量巨大

那么我们可不可以降低一下这个运输量呢?

当然可以啦

我们以一小部分像素为中心生成不同锚框

比如2×2像素,比如4×4像素

这样就可以降低我们的锚框量啦

3.2.3 阶段三 RNN

但是即便如此,锚框量依然巨大

那么我们可不可以进一步减少锚框量呢,可以的

我们可以采用某些算法,给出建议区域,即找出所有潜在可能包含目标的区域

这便是R-CNN系列

R-CNN

1 利用区域建议方法selective search产生的感兴趣区域,大约2000个候选区域(或称为候选框),这些区域被认为可能包含目标物体。

2 对于每个候选区域,R-CNN将其缩放裁剪出来,并通过一个预训练的卷积神经网络(通常是AlexNet)提取特征。这些候选区域在CNN中前向传播,生成固定长度的特征向量。

3 特征向量被送入一个独立的支持向量机(SVM)分类器,每个SVM分类器用于识别特定类别的目标物体。这意味着为每个可能的目标类别都训练一个二元分类器,以判断特定候选区域是否包含属于该类别的物体。

4 此外,R-CNN还包括一个边界框回归器,用于微调候选区域的边界框,以更准确地定位目标物体。

5 最后,为了去除重叠和冗余的检测结果,使用非极大值抑制(NMS)来选择最终的检测边界框。

R-CNN可以有着更高的精度,处理的锚框也少了,但是它产生感兴趣区域也很耗时

总结来看他的缺点

  • 训练和推理速度慢,因为每个候选区域都要进行独立的前向传播和分类。
  • 需要大量的存储空间,因为要保存每个候选区域的特征向量和分类器参数。
  • 不够端到端,训练过程相对复杂。

Fast R-CNN

Fast R-CNN看名字就可以知道哈哈哈哈是R-CNN的改进,让他变得更快,同时变得端到端

1 首先利用卷积网络进行特征提取

2 提取到的特征图再做感兴趣区域建议!而特征图的区域是可以和原图一一映射的

3 再对取出来的区域做裁剪缩放(Rol Align 双线性插值),然后利用全连接层输出每个感兴趣区域的特征进行分类或回归

4 使用非极大值抑制(NMS)来选择最终的检测边界框。

Faster R-CNN

与R-CNN不同,Fast R-CNN不再使用选择性搜索等传统方法生成大量候选区域。相反,它引入了一种叫做"候选区域提取网络(Region Proposal Network,RPN)"的网络模块,用于生成高质量的候选区域。提高了效率

1 首先利用卷积网络进行特征提取

2 提取到的特征图利用候选区域提取网络获得感兴趣区域!而特征图的区域是可以和原图一一映射的

候选区域提取网络需要进行二分类 是目标还是背景

3 再对取出来的区域做裁剪缩放(Rol Align 双线性插值),然后利用全连接层输出每个感兴趣区域的特征进行分类或回归

4 使用非极大值抑制(NMS)来选择最终的检测边界框。

在这里插入图片描述

3.2.4 阶段四 一阶段的目标检测 Yolo/SSD

Yolo

YOLO采用单一的卷积神经网络来同时处理目标检测和分类任务。与传统的两阶段目标检测方法不同(如R-CNN系列),YOLO将目标检测任务转化为回归问题,一次性输出所有检测框的位置和类别信息。

​ 不用区域建议网络了,直接把图片分成7×7,每个网格单元负责检测图像中的物体,产生一个或多个候选框。

每个网格单元预测多个候选框(通常是B个,如2或3个)。每个候选框由5个参数定义:中心坐标(x, y)、宽度(w)、高度(h)以及物体存在概率(objectness score)。这些参数用于定义每个候选框的位置和是否包含物体。

每个网格单元还预测C个类别的概率分数,用于表示物体属于每个类别的可能性。这些类别概率分数与每个候选框关联。

SSD

SSD和之前工作主要区别是

SSD引入了一组称为Anchor框的预定义边界框。每个Anchor框与特定位置和尺度的特征图单元相对应。这些Anchor框用于尝试捕获不同尺寸和比例的物体。

结论

​ Faster R-CNN速度偏慢,但精度高

​ SSD速度快,精度高

​ 主干网络越宽,深度越深对性能帮助越大

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

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

相关文章

(数组/字符串) 380. O(1) 时间插入、删除和获取随机元素 ——【Leetcode每日一题】

❓ 380. O(1) 时间插入、删除和获取随机元素 难度:中等 实现 RandomizedSet 类: RandomizedSet() 初始化 RandomizedSet 对象bool insert(int val) 当元素 val 不存在时,向集合中插入该项,并返回 true ;否则&#x…

私房菜外卖配送商城小程序的作用是什么

私房菜有自己的品牌,也更容易跑出连锁经营体系,由于餐饮行业主要服务本地同城客户,因此在实际经营中对商家来说,怎样实现引流获客、促进到店及转化复购很重要。 传统线下传单、朋友圈推广等方式比较低效,而线上入驻第…

Spring Cloud Gateway实战WebFlux解析请求体及抛出指定错误代码和信息

概述 基于Spring Cloud开发微服务时,使用Spring Cloud原生自带的Gateway作为网关,所有请求都需要经过网关服务转发。 为了防止恶意请求刷取数据,对于业务请求需要进行拦截,故而可在网关服务增加拦截过滤器。基于此,有…

uniapp 事件委托失败 获取不到dataset

问题&#xff1a; v-for 多个span ,绑定点击事件 代码:view里包着一个span, <view class"status-list" tap"search"><span class"status-item" v-for"(key,index) in statusList" :key"index" :data-key"k…

程序员大佬‍被没收三年工资105w?

程序员大佬&#x1f468;&#x1f3fb;‍&#x1f4bb;被没收三年工资105w&#xff1f; 我在CSDN搜了一些关键词并没有找到关于这个事件的信息&#xff0c;发这篇文章主要是想让更多的大佬关注一下这个事情的发展&#xff0c;因此就放了几个图片&#xff0c;具体的大佬们可以去…

【短文】怎么查看自己的Linux是哪个发行版本和哪个版本号

2023年9月29&#xff0c;周三晚上 首先去到etc目录 cd /etc 然后用如下命令查看所有文件 ls 找到类似“XXX-release”的文件 然后用如下命令查看这个文件 cat

NodeMCU ESP8266基于Arduino IDE的开发环境搭建(图文并茂)

文章目录 NodeMCU ESP8266基于Arduino IDE的开发环境搭建&#xff08;手把手教程&#xff09;软件下载官网地址百度云 安装IDE配置基础配置设置开发板 测试串口驱动下载测试用例 总结 NodeMCU ESP8266基于Arduino IDE的开发环境搭建&#xff08;手把手教程&#xff09; 软件下…

力扣每日一题(+日常水几道题)

每日一题1333. 餐厅过滤器 - 力扣&#xff08;LeetCode&#xff09; 简单的按规则排序,去除几个不满足的条件然后排序返回即可 #include<algorithm> class Solution { public:vector<int> filterRestaurants(vector<vector<int>>& restaurants, …

涉及多条件查询 使用mybatispluse的解决方法EasyCaptcha图形验证码工具

登录中遇到账号和密码去数据库中查询因为查询是多条件的 所以需要使用QueryWrapper中allEq 而allEq如何添加条件使用map 位于mybatisplus的条件构造器的使用 条件构造器 | MyBatis-Plus QueryWrapper<User> wrapper new QueryWrapper<>();Map<String, Object&g…

rust所有权

一、堆和栈 栈和堆都是程序运行时使用的内存&#xff0c;但是它们的结构不同。 1.栈 栈&#xff0c;英文是stack。是内存的一段区域。 栈是后进先出形式的。就像薯片桶&#xff0c;先放进去的一片只能后拿出来。 栈上存储的数据大小必须是已知且固定的。也就是说如果一个变量…

独立站引流,如何在Reddit进行营销推广?

Reddit是目前最被忽视却最具潜力的社交媒体营销平台之一&#xff0c;它相当于国内的百度贴吧&#xff0c;是美国最大的论坛&#xff0c;也是美国第五大网站&#xff0c;流量仅次于Google、Youtube、Facebook以及亚马逊。 如果会玩&#xff0c;Reddit也可以跟其他的社交媒体营销…

Ubuntu安装Oracle JDK

文章目录 下载JDK安装Oracle JDK验证安装 下载JDK Oracle JDK需要从Oracle的官方网站下载&#xff0c;访问Oracle的官方网站并下载所需版本的JDK。 https://www.oracle.com/java/technologies/downloads/#java17 安装Oracle JDK 2.1. 下载.tar.gz文件后&#xff0c;移动到适…

一、2023.9.27.C++基础.1

回答问题一定要有逻辑性&#xff0c;我将从 这个技术是什么&#xff1f; 为什么要有这个技术&#xff1f; 这个技术底层是怎么实现的&#xff1f; 这个技术的优点缺点&#xff1f; 这个技术所适合的使用场景&#xff1f; 以下五个方面来回答问题。 文章目录 一、C基础部分&…

自动化测试-友好的第三方库

目录 mock furl coverage deepdiff pandas jsonpath 自动化测试脚本开发中&#xff0c;总是会遇到各种数据处理&#xff0c;例如MOCK、URL处理、JSON数据处理、结果断言等&#xff0c;也会遇到所采用的测试框架不能满足当前需求&#xff0c;这些问题都需要我们自己动手解…

Element UI搭建首页导航和左侧菜单以及Mock.js和(组件通信)总线的运用

目录 前言 一、Mock.js简介及使用 1.Mock.js简介 1.1.什么是Mock.js 1.2.Mock.js的两大特性 1.3.Mock.js使用的优势 1.4.Mock.js的基本用法 1.5.Mock.js与前端框架的集成 2.Mock.js的使用 2.1安装Mock.js 2.2.引入mockjs 2.3.mockjs使用 2.3.1.定义测试数据文件 2…

多元异构、绿色节能,揭秘浪潮计算机基础技术研究与整机柜设计思路

出品 | CSDN 云计算 数字化转型、云计算 技术与应用的爆发&#xff0c;数据中心从传统 CPU 为核心&#xff0c;变为 CPU、GPU、ASIC、FPGA、DPU 等等多种硬件与芯片架构、多元算力并存的阶段。对于企业来说&#xff0c;数字化转型中算力就是生产力&#xff0c;底层算力底座可能…

可信执行环境(Tee)入门综述

SoK: Hardware-supported Trusted Execution Environments [ArXiv22] 摘要引言贡献 范围系统和威胁模型系统模型威胁模型共存飞地对手无特权软件对手系统软件对手启动对手外围对手结构对手侵入性对手 关于侧信道攻击的一点注记 VERIFIABLE LAUNCH信任根&#xff08;RTM&#xf…

jvm深入研究文档--jvm分区以及职责

Java虚拟机&#xff08;JVM&#xff09;主要包括以下几个区域&#xff1a; 方法区&#xff08;Method Area&#xff09;&#xff1a;这个区域存储已被加载的类信息&#xff0c;常量&#xff0c;静态变量&#xff0c;即时编译器编译后的代码等数据。方法区是所有线程共享的。在…

C. Card Game

题目&#xff1a;样例&#xff1a; 输入 4 4 -4 1 -3 5 4 1 -2 3 -4 3 -1 3 -5 1 -1输出 5 4 2 0 思路&#xff1a; 这里的题意就是&#xff0c; 当我们 i 取奇数的时候&#xff0c;可以获得该奇数 i 的值&#xff0c;并去掉当前卡牌。 当我们 i 取偶数的时候&#xff0c;去掉当…

钢轨长度及允许偏差

声明 本文是学习GB-T 2585-2021 铁路用热轧钢轨. 而整理的学习笔记,分享出来希望更多人受益,如果存在侵权请及时联系我们 1 范围 本标准规定了铁路用钢轨的订货内容、分类、尺寸、外形、质量及允许偏差、技术要求、试验方法、检 验规则、标志及质量证明书。 本标准适用于3…