计算机视觉 | 目标检测与MMDetection

news2024/11/24 5:03:07

目  录

目标检测的基本范式

  • 滑窗
  • 使用卷积实现密集预测
  • 锚框
  • 多尺度检测与FPN

单阶段&无锚框检测器选讲

  • RPN
  • YOLO、SSD
  • Focal loss 与 RetinaNet
  • FCOS
  • YOLO系列选讲

一、目标检测的基本范式

1、什么是目标检测

给定一张图片 ——》用矩形框框出所感兴趣的物体同时预测物体类别。

 在智慧城市中的应用

目标检测技术的演进

边界框(Bounding Box)

框泛指图像上的矩形框,边界横平竖直

描述一个框需要 4 个像素值:

  • 方式1:左上右下边界坐标 (t,r,b)
  • 方式2:中心坐标和框的长宽 (x,y,w,h)

边界框通常指紧密包围感兴趣物体的框检测任务要求为图中出现的每个物体预测一个边界框。

交并比 Intersection Over Union

       交并比(IoU)定义为两矩形框交集面积与并集面积之比,是矩形框重合程度的衡量指标

 

 2、滑窗 Sliding Window

1)设定一个固定大小的窗口

  • 一个好的检测器应满足不重、不漏的要求
  • 滑窗是实现这个要求的一个朴素手段

2)遍历图像所有位置,所到之处用分类模型(假设已经训练好) 识别窗口中的内容

3)为了检测不同大小、不同形状的物体,可以使用不同大小、长宽比的窗口扫描图片

改进思路 1:使用启发式算法替换暴力遍历用相对低计算量的方式粗筛出可能包含物体的位置,再使用卷积网络预测早期二阶段方法使用,依赖外部算法,系统实现复杂
改进思路 2: 减少冗余计算,使用卷积网络实现密集预测目前普遍采用的方式,用卷积一次性计算所有特征,再取出对应位置的特征完成分类。

3、感受野(Receptive Field)

感受野:神经网络中,一个神经元能“看到”的原图的区域
换句话说:

  • 为了计算出这个神经元的激活值,原图上哪些像素参与运算了?

再换句话说:

  • 这个神经元表达了图像上哪个区域内的内容?
  • 这个神经元是图像上哪个区域的特征?

4、边界框回归 (Bounding Box Regression)

问题
滑窗 (或其他方式产生的基准框)与物体精准边界通常有偏差
处理方法
让模型在预测物体类别同时预测边界框相对于滑窗的偏移量
多任务学习

5、基于锚框vs无锚框 

6、非极大值抑制 NMS

滑窗类算法通常会在物体周围给出多个相近的检测框这些框实际指向同一物体,只需要保留其中置信度最高的

算法实现:

7、密集预测模型的训练

  • 检测头在每个位置产生一个预测 (有无物体、类别、位置偏移量)
  • 该预测值应与某个真值比较产生损失,进而才可以训练检测器但这个真值在数据标注中并不存在,标注只标出了有物体的地方
  • 我们需要基于稀疏的标注框为密集预测的结果产生真值,这个过程称为匹配(Assignment)
     

匹配的基本思路

  • 对于每个标注框,在特征图上找到与其最接近的位置 (可以不止一个),该位置的分类真值设置为对应的物体
  • 位置的接近程度,通常基于中心位置或者与基准框的 IoU 判断
  • 其余位置真值为无物体
  • 采样: 选取一部分正、负样本计算 Loss (例如可以不计算真值框边界位置的loss)
     

8、密集预测的基本范式

 9、如何处理尺度问题

图像中物体大小可能有很大差异(10 px ~ 500 px)

朴素的密集范式中,如果让模型基于主干网络最后一层或倒数第二层特征图进行预测:

  • 受限于结构 (感受野),只擅长中等大小的物体
  • 高层特征图经过多次采样,位置信息逐层丢失,小物体检测能力较弱,定位精度较低

解决:

  1. 基于锚框
  2. 图像金字塔
  3. 基于层次化特征
  4. 特征金字塔网络(FPN) 改进思路:高层次特征包含足够抽象语义信息。将高层特征融入低层特征,补充低层特征的语义信息
  5. 多尺度的密集预测

 二、单阶段目标检测算法

        单阶段算法直接通过密集预测产生检测框,相比于两阶段算法,模型结构简单、速度快,易于在设备上部署。
        早期由于主干网络、多尺度技术等相关技术不成熟,单阶段算法在性能上不如两阶段算法,但因为速度和简洁的优势仍受到工业界青睐随着单阶段算法性能逐渐提升,成为目标检测的主流方法

1、YOLO:You Only Look Once(2015)

最早的单阶段检测器之一,激发了单阶段算法的研究潮流

主干网络: 自行设计的 DarkNet 结构,产生 7x7x1024 维的特征图

检测头: 2 层全连接层产生 7x7 组预测结果,对应图中 7x7 个空间位置上物体的类别和边界框的位置


 

 2、SSD Single Shot MultiBox Detector(2016)

  • 主干网络: 使用 VGG + 额外卷积层,产生 11 级特征图
  • 检测头: 在 6 级特征图上进行密集预测,产生所有位置、不同尺度的预测结果

3、RetinaNet(2017)

  • 特征生成: ResNet 主干网络 + FPN 产生 P3~P7,共 5 级特征图,对应降采样率 8~128 倍
  • 多尺度锚框: 每级特征图上设置 3 种尺寸x3 种长宽比的锚框,覆盖 32~813 像素尺寸
  • 密集预测头:两分支、5 层卷积构成的检测头,针对每个锚框产生K 个二类预测以及 4 个边界框偏移量
  • 损失函数: Focal Loss

 

 单阶段算法面临的正负样本不均衡问题

  • 单阶段算法共产生尺度数x位置数x锚框数个预测
  • 而这些预测之中,只有少量锚框的真值为物体(正样本),大部分锚框的真值为背景 (负样本)
  • 使用类别不平衡的数据训练出的分类器倾向给出背景预测,导致漏检

4、YOLOv3(2018)

  • 自定义的 DarkNet-53 主千网络和类 FPN 结构,产生 1/8、1/16、1/32 降采样率的 3 级特征图
  • 在每级特征图上设置 3 个尺寸的锚框,锚框尺寸通过对真值框聚类得到
  • 两层卷积构成的密集预测头,在每个位置、针对每个锚框产生 80 个类别预测、4个边界框偏移量、1个 objectness 预测,每级特征图 3x(80+4+1)=255 通道的预测值

5、YOLOv5(2020)

  • 模型结构进一步改进、使用 CSPDarkNet 主干网络
  • PAFPN 多尺度模块等
  • 训练时使用更多数据增强,如 Mosaic、MixUp 等使用自对抗训练技术 (SAT)提高检测器的鲁棒性

 三、无锚框目标检测算法

基于锚框(Anchor-based)

  • Faster R-CNN、YOLO v3 /v5、RetinaNet 都是基于锚框的检测算法
  • 模型基于特征预测对应位置的锚框中是否有物体,以及精确位置相对于锚框的偏移量
  • 实现复杂,需要手动设置锚框相关的超参数 (如大小、长宽比、数量等),设置不当影响检测精度 X

无锚框(Anchor-free)

  • 不依赖锚框,模型基于特征直接预测对应位置是否有物体,以及边界框的位置
  • 边界框预测完全基于模型学习,不需要人工调整超参数

1、FCOS,Fully Convolutional One-Stage(2019)

  • 模型结构与 RetinaNet 基本相同: 主干网络 + FPN +两分支、5 层卷积构成的密集预测头
  • 预测目标不同:对于每个点位,预测类别、边界框位置和中心度三组数值

 FCOS的多尺度匹配

        Anchor-based 算法根据锚框和真值框的 loU 为锚框匹配真值框通常,锚框会匹配到同尺度的真值框,小物体由低层特征预测,大物体由高层特征图预测

  • 问题: Anchor-free 算法没有锚框,真值框如何匹配到不同尺度?
  • 匹配方案: 每层特征图只负责预测特定大小的物体,例如右图中512像素以上的物体匹配到P7上

        由于重叠的物体尺度通常不同,同一位置重叠的真值框会被分配到不后的特征层,从而避免同一个位置需要预测两个物体的情形

2、CenterNet(2019)

        针对 2D 检测的算法,将传统检测算法中的“以框表示物体”变成“以中心点表示物体”,将 2D 检测建模为关键点检测和额外的回归任务,一个框架可以同时覆盖 2D 检测、3D 检测 、姿态估计等一系列任务。

3、YOLOX(2021)

以 YOLO v3 为基准模型改进的无锚框检测器

  • Decouple Head 结构
  • 更多现代数据增强策略
  • SimOTA 分配策略
  • 从小到大的一系列模型

4、YOLOv8(2022) 

 单阶段与无锚框算法的总结​​​​​​​

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

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

相关文章

前后端交互一、服务器概念与初识Ajax

零、文章目录 前后端交互一、服务器概念与初识Ajax 1、上网的过程 网络相关知识请参考网络详解HTTP相关知识请参考HTTP详解 (1)客户端与服务器 **上网的目的:**通过互联网获取和消费资源 **服务器:**上网过程中,负…

基于STM32的智能粮仓系统设计

一、项目背景 随着粮食质量要求的提高和储存方式的改变,对于粮仓环境的监测和控制也愈发重要。在过去的传统管理中,通风、防潮等操作需要定期人工进行,精度和效率都较低。而利用嵌入式技术和智能控制算法进行监测和控制,不仅能够…

【Git】git push origin master时发生的各类错误汇总

文章目录 一、常见的git命令二、错误一三、错误二四、错误三五、问题解决 一、常见的git命令 使用 git 命令时&#xff0c;您可以执行一系列操作来管理代码仓库。下面是一些常用的 git 命令及其功能&#xff1a; git init: 在当前目录初始化一个新的 git 仓库。git clone <…

2023年5月青少年机器人技术等级考试理论综合试卷(二级)

青少年机器人技术等级考试理论综合试卷&#xff08;二级&#xff09;2023.6 分数&#xff1a; 100 题数&#xff1a; 45 一、 单选题(共 30 题&#xff0c; 共 60 分) 1.下图中的凸轮机构使用了摆动型从动件的是&#xff1f; &#xff08; &#xff09; A.a B.b C.c D.d 试题类…

我是怎么劝退打算入行软件测试的同学的?

过去千篇一律的机构、文章都在劝大家入行软件测试——门槛低、工资高、加班少&#xff01;而这两年&#xff0c;受国内外形势、经济影响&#xff0c;整个IT行业都在走下坡路&#xff0c;被专家们称作行业回归理性发展。最近机构劝入行测试的帖子少了&#xff0c;而“我是在xxx如…

【Python 继承和多态】零基础也能轻松掌握的学习路线与参考资料

Python 继承和多态是面向对象编程中非常关键的概念。继承是一种创建新类的方法&#xff0c;通过继承一个已有的类来创建新类。而多态则是指不同的对象以不同的方式对同一消息作出响应的能力。在这篇文章中&#xff0c;我们将为您介绍 Python 继承和多态的学习路线&#xff0c;并…

d2l学习_第三章线性回归/欠拟合过拟合/权重衰减

x.1 Linear Regression Theory x.1.1 Model 线性回归的模型如下&#xff1a; 我们给定d个特征值 x 1 , x 2 , . . . , x d x_1, x_2, ..., x_d x1​,x2​,...,xd​&#xff0c;最终产生输出yhat&#xff0c;我们产生的yhat要尽量拟合原来的值y&#xff0c;在这一拟合过程中我…

【MySQL】数据库的增删改查、备份、还原等基本操作

【MySQL】数据库的基本操作 一、创建数据库---create1.1 字符集与校验规则1.1.1 查看系统默认字符集以及校验规则1.1.2 默认方式建立数据库1.1.3 指定编码集建立数据库 1.2 建库的本质 二、查看数据库及其相关属性---show2.1 显示所有数据库2.2 显示数据库的创建语句3.2 显示目…

Yarn【多队列实例、任务优先级设置】

前言 我们知道&#xff0c;Hadoop常见的三种调度器&#xff1a;FIFO调度器&#xff08;几乎不用&#xff0c;因为它是先来先服务&#xff09;、容量调度器&#xff08;Apache Hadoop 默认的调度器&#xff09;、公平调度器&#xff08;CDH默认调度器&#xff09;。 其中&…

PyTorch实战7:咖啡豆识别--手动搭建VGG16

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f366; 参考文章&#xff1a;365天深度学习训练营-第P7周&#xff1a;咖啡豆识别&#x1f356; 原作者&#xff1a;K同学啊|接辅导、项目定制 目录 一、 前期准备1. 设置GPU2. 导入数据3. 划分数…

Zookeeper节点操作

ZooKeeper的节点操作 ZooKeeper的节点类型 ZooKeeper其实也是一个分布式集群&#xff0c;其中维护了一个目录树结构&#xff0c;在这个目录树中&#xff0c;组成的部分是一个个的节点。ZooKeeper的节点可以大致分为两种类型: 短暂类型 和 持久类型 短暂类型ephemeral: 客户端…

Creating Add-in Hooks (C#)

本文介绍如何使一个文件在添加、检入、检出到库时&#xff0c;让add-in 程序在SOLIDWORKS PDM Professional 中通知到你。 注意&#xff1a; 因为 SOLIDWORKS PDM Professional 无法强制重新加载Add-in程序 &#xff0c;必须重新启动所有客户端计算机&#xff0c;以确保使用最…

电力综合自动化系统在煤矿领域的设计与应用

安科瑞虞佳豪 持续的高温&#xff0c;给能源保供带来严峻的考验。针对南方部分地区电力供应紧张的局面&#xff0c;煤炭资源大省山西&#xff0c;在确保安全生产的基础上&#xff0c;积极协调增产保供。 这几天&#xff0c;南方多地持续高温&#xff0c;用电量达到高峰。在山西…

深入理解深度学习——注意力机制(Attention Mechanism):Bahdanau注意力

分类目录&#xff1a;《深入理解深度学习》总目录 之前我们探讨了机器翻译问题&#xff1a; 通过设计一个基于两个循环神经网络的编码器—解码器架构&#xff0c; 用于序列到序列学习。 具体来说&#xff0c;循环神经网络编码器将长度可变的序列转换为固定形状的上下文变量&…

抖音seo矩阵系统源码搭建步骤分享

目录 账号矩阵系统源码搭建包括以下步骤&#xff1a; 二、代码实现 三、 代码展示 四、 服务交付 故障级别定义 服务响应时间 账号矩阵系统源码搭建包括以下步骤&#xff1a; 1. 准备服务器和域名 准备一台服务器&#xff0c;例如阿里云、腾讯云等。并在网站上购买一个域…

C++:类型转换

目录 一. C语言的类型转换 二. C类型转换 2.1 static_cast 2.2 reinterpret_cast 2.3 const_cast 2.4 dynamic_cast 三. 运行时类型识别 -- RTTI 四. 总结 一. C语言的类型转换 C语言的类型转换分为隐式类型转换和强制类型转换&#xff0c;隐式类型转换发生在相近的类…

WEB测试环境搭建和测试方法大全

一、WEB测试环境搭建 WEB测试时搭建测试环境所需的软硬件包括&#xff1a;电脑一台、JDK1.6、Tomcat7.0、mysql、IE浏览器、Firefox浏览器、Chrome浏览器、SVN客户端 通过SVN客户端导出最新的Web工程部署到Tomcat7.0下的webapps中&#xff0c;另外重要的一点就是修改数据库连…

31、js - Promise

一、Promise要点 -> js中&#xff0c;只有Promise对象才可以使用.then().catch()方法。 -> axios可以使用.then().catch()&#xff0c;完全是因为调用axios()&#xff0c;返回的是一个Promise对象。 -> new Promise() 里面的代码是同步代码&#xff0c;一旦调用promis…

这个API Hub太厉害了,太适合接口测试了,收录了钉钉企业微信等开放Api的利器

目录 前言&#xff1a; 01API Hub的项目 02API Hub 03调试 04 API 调试 05 API mock 06 针对开放项目功提供者 08 下载 前言&#xff1a; API Hub 的优势在于它提供了完整的 API 管理解决方案&#xff0c;包括API的设计、接口调试、测试和文档管理等。通过集中管理API…

火热报名中 | KCD 北京精彩抢“鲜”看

​ 仲夏已至&#xff0c;风云再起&#xff0c;Kubernetes Community Days 北京站英雄帖一经发出&#xff0c;云原生的各路英雄豪杰纷纷响应。经典招式的升级亮相&#xff0c;最新技巧的惊喜面世&#xff0c;且看各路门派京城聚首&#xff0c;掀起一场云原生的武林论道。各大议…