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

文章目录

  • 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.xdnf.cn/news/143900.html

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

相关文章

杭州亚运会虚实短视频《功成》,给数字人三维动画宣传片制作有何启发?

杭州亚运会功夫创意视频《功成》,由超写实数字人筱竹、武术演员张晋、青年运动员共同参演,通过数字人筱竹拜师功夫大师张晋的故事,将动静结合的中国功夫与亚运赛场上的体育竞技创意结合,以全新的数字人三维动画宣传片,…

网络安全(黑客技术)自学内容

前言 一、什么是网络安全 网络安全可以基于攻击和防御视角来分类,我们经常听到的 “红队”、“渗透测试” 等就是研究攻击技术,而“蓝队”、“安全运营”、“安全运维”则研究防御技术。 无论网络、Web、移动、桌面、云等哪个领域,都有攻与防…

【PickerView案例10-国旗选择界面02 Objective-C预言】

一、好了,我们继续来实现这个国旗选择界面: 1.它的界面里面,是不是很简单,就一个UIPickerView,就完事儿了 然后,显示的每一行内容呢, 1)一个文字Label 2)一个图片 那大家应该有意识,它返回的应该是一个View,对吧, 代理方法里面,有一个返回View的,viewForRow…

唤醒手腕 2023年 B 站课程 Golang 语言详细教程笔记(更新中)

0001、1000集GO语言Flag毒誓 唤醒手腕UP猪Pig目标花费1000集进行讲解Go语言视频学习教程(有趣的灵魂,适合小白,不适合巨佬),从2023年3月19日开始,将会一直每天更新,准备在2024年5月1日之前更新…

【VUE复习·8】v-if;v-show高级

总览 1.v-if 与其变种 v-else-if;v-else 2.v-show 3.v-if 与 v-show 的区别和应用场景 一、v-if 这样用(使用 data 或 函数 来驱动它) 1.v-if v-if 的用法很简单,它判断的是后面语句的 boolean 值,用来控制 DOM 元…

开源对手模拟工具:Network Flight Simulator

Network Flight Simulator 是一款轻量级实用程序,可生成恶意网络流量并帮助安全团队评估安全控制和网络可见性。 该工具执行测试来模拟 DNS 隧道、DGA 流量、对已知活动 C2 目的地的请求以及其他可疑流量模式。 安全行业内关于全面产品(例如 EDR、SI…

外汇天眼:外汇交易一周最佳外汇交易日!

外汇市场运行24小时,但并非每时每刻都适合交易。本文将为您介绍一周中最佳外汇交易日,以及哪些时间段最适合参与外汇交易。 首先,值得注意的是伦敦时段通常是外汇市场最繁忙的时段。然而,即便如此,一周中仍有特定的日…

蓝桥杯每日一题2023.9.27

4408. 李白打酒加强版 - AcWing题库 题目描述 题目分析 对于这题我们发现有三个变量,店,花,酒的数量,对于这种范围我们使用DP来进行分析。 dp[i][j][k]我们表示有i个店,j朵花,k单位酒的集合&#xff0c…

B树和B+树的介绍和对比,以及MySQL为何选择B+树

在计算机科学中,B树和B树是常用的数据结构,用于在大规模数据集上进行高效的插入、删除和查找操作。它们在数据库管理系统、文件系统等许多实际应用中发挥着重要作用。本文将深入介绍B树和B树的结构特点、实际应用方面以及它们的优缺点,并最后…

Unity3d中Scene场景2D模式下放大后UI元素后不显示的问题

如题:UI在game视图显示没有问题, 在Play状态下,在Sence视图查看UI对象的时候进行放大操作,然后UI就不显示了或者显示不全,缩小就恢复正常。这让我在Play模式下预览UI状态很麻烦。相关问题描述较少。 初步判定为摄像机…

力扣:111. 二叉树的最小深度(Python3)

题目: 给定一个二叉树,找出其最小深度。 最小深度是从根节点到最近叶子节点的最短路径上的节点数量。 说明:叶子节点是指没有子节点的节点。 来源:力扣(LeetCode) 链接:力扣(LeetCod…

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

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

VM虚拟机连接NAT虚拟网络并上网的总结

关键字 VMware、NAT、VM虚拟机、ip route get、网关、私有云 设置 虚拟网络 VMware虚拟网络管理器中显示当前所有VMware的虚拟网络,根据显示,这里是"VMnet8"网络是NAT模式(寄主机只能存在一个NAT虚拟网络,也就是说&a…

制作PE启动盘

文章目录 ⭐️写在前面的话⭐️1、下载微PE2、格式化U盘3、安装PE到U盘4、下载镜像 ⭐️写在前面的话⭐️ 📒博客主页: 程序员好冰 🎉欢迎 【点赞👍 关注🔎 收藏⭐️ 留言📝】 📌本文由 程序员好…

通俗易懂了解大语言模型LLM发展历程

1.大语言模型研究路程 NLP的发展阶段大致可以分为以下几个阶段: 词向量词嵌入embedding句向量和全文向量理解上下文超大模型与模型统一 1.1词向量 将自然语言的词使用向量表示,一般构造词语字典,然后使用one-hot表示。   例如2个单词&…

【STM32】IAP升级01 bootloader实现以及APP配置(主要)

APP程序以及中断向量表的偏移设置 前言 通过之前的了解 之前的了解,我们知道实现IAP升级需要两个条件: 1.APP程序必须在 IAP 程序之后的某个偏移量为 x 的地址开始; 2.APP程序的中断向量表相应的移动,移动的偏移量为 x&#xff…

深入理解 pytest.main():Python 测试框架的核心功能解析

前言 笔者平常运行pytest用例时,通常使用命令行方式,像这样 pytest -v pxl/test_dir/test_demo.py::TestDemo::test_my_var,执行某一条case,但每次命令行敲也挺麻烦的。那如何在python代码中调用pytest呢?带着疑问一…

APP开发费用计算方法

计算开发移动应用(APP)的费用涉及多个因素,包括项目的规模、复杂性、所需功能、技术选择、开发团队的经验、地理位置和市场需求等。以下是一些考虑开发APP费用的关键因素以及一般的费用计算方法,希望对大家有所帮助。北京木奇移动…

第八天:gec6818arm开发板和Ubuntu中安装并且编译移植mysql驱动连接QT执行程序

一、Ubuntu18.04中安装并且编译移植mysql驱动程序连接qt执行程序 1 、安装Mysql sudo apt-get install mysql-serverapt-get isntall mysql-clientsudo apt-get install libmysqlclient-d2、查看是否安装成功,即查看MySQL版本 mysql --version 3、MySQL启动…

PHP8中伪变量“$this->”和操作符“::”的使用-PHP8知识详解

对象不仅可以调用自己的变量和方法,也可以调用类中的变量和方法。PHP8通过伪变量“$this->”和操作符“::”来实现这些功能。 1.伪变量“$this->” 在通过对象名->方法调用对象的方法时,如果不知道对象的名称,而又想调用类中的方法…