one-stage目标检测方法

news2024/10/1 17:36:53

YOLO系列算法

从区域推荐到端到端

RCNN系列的方法和核心思想在于:先找出可能存在物体的区域,再确认物体的存在

这种思路归根溯源,来自传统的目标检测算法。

为了解决传统方法中的滑动窗口的方式,来找出可能存在目标的区域,从而提高检测效率。

这种方法固然取得了优秀的性能,但是存在一个关键问题:

一种更加直接的思路:端到端

对于先找到目标区域再预测的过程,我们可以采用一种更加直接的方式:让模型自动地识别出最终的目标。

我们只是为模型提供一个初始规则后,就可以让机器自动地识别出目标位置。

实际上,上述思路变换的本质来源于问题的定义的变换。

在之前的目标检测方法中,是将检测问题视为两个问题的组合:分类和回归(分类是核心问题)

然而,在端到端的问题上,是把检测问题视为一个典型的回归模型。

即然是回归模型,就是要预测一组数字,这个数字可以描述图像中目标的位置和类别。

那么我们用有序的位置组合以及onehot类别向量作为预期输出,即可实现可靠的目标检测。

端到端应该输出什么?

我们应当如何规定YOLO的输出,才可以直接得到目标位置?

为了检测出目标的输出,应当包含以下内容:

  • 框的位置(4个点定义一个方框)
  • 物体类别(n维one hot向量)
  • 置信度(这个框和这个类别有多大的把握)

对于VOC数据集,每个框,我们可以得到一个(4+1+20=25)个长度的向量,作为ground truth。

想象中,我们可以将一张图像的框生成一个25维的向量,用CNN去预测出这些向量。解析结果以后,可以得到目标位置和类别。

然而,他会造成一个新的问题:每个图像的框可能并不一致,因此需要预测不同的输出尺寸。

显然,这在CNN中行不通。

YOLO v1的输出格式

yolo v1的输出为一个 N×N×M的三维向量。

具体上:

第一步:将图像定义成N×N个区域,如下:

第二步:每个区域会产生两个proposal

第三步:对于每个proposal,都有:

* 置信度:1维向量
* 框坐标:4维向量
* 分类值:20维向量

因此,一个proposal的分类值为1+4+20=25.

然而,由于一个区域要产生两个框,因此proposal为(1+4)*2 + 20 = 30

假设一个图像被划分成7*7的区域,则最终的输出尺寸为: 7×7×30(2个anchor)

YOLO v1的算法细节

  1. 图像输入后,经过卷积池化等步骤,得到一个7×7×1024的feature map
  2. 特征图链接fc后,得到一个4096维的向量
  3. 4096的向量进而进入fc后,得到一个1470的特征向量
  4. 将特征reshape后,得到一个的向量7×7×30的向量

预测

在预测阶段,一张图像输入后,得到7×7×30张量

对于每个30维的向量,都可以得到两个bounding box。

每个bounding box都存在一个置信度,设置一个阈值,删除掉置信度较低的框

剩余的框画在图像,就有:

其中,框越粗,置信度越高。

将7*7的类别对图像涂色,有

最后,利用NMS对同类框进行抑制,得到最终的框如下

训练

损失函数是实现回归的最重要问题。

对于一个这样的输出,应当设置什么样的损失函数?

分段特征的损失

针对一个向量中不同的内容,应当设置不同的损失函数。

第一项

中心点损失:采用均方误差来实现

第二项

缩放损失:采用均方误差实现,为了统一不同尺度目标的结果,采用了平方根的方法归一化

第三项

含有目标的置信度损失,赋予较大的权重,增加目标区域对于置信度的影响

第四项

不含目标的置信度损失,赋予较小的权重,减少非目标区域对于置信度的影响

第五项

分类损失

其他细节

如何将ground truth转换成yolo的输出?

为了便于回归,将目标框的坐标变换为0-1的值。

对于x,y:是目标框的中心点,到对应区域中的比例。

例如,对应区域的左上角为原点(0, 0)

而后,目标框的中心点,相对于原点的偏移量的比例,即为xy值

关于置信度:

所有包含了目标的区域都视为1,其他区域都视为0.(标注过程)

YOLO v1的缺陷

  1. 对于重叠/小物体,检测性能差;
  2. 只支持相同尺寸的图像输入;
  3. 对于尺度不同的物体,检测框的位置存在误差

YOLO v2

改进1: 模型

  1. 去除所有的dropout, 加入batch norm

  2. 将训练图像的输入改为448*448,而不是v1中的224*224

  1. anchor boxes

在faster rcnn中,anchor采用了3中固定尺度和3种固定比例。

虽然这些是通过对数据集考察后确定下来的,但却不够精确。

YOLOv2中,采用了新的方式来确定模板框的尺寸

将voc中每种框的wh列出来,作为一个数据,然后进行聚类处理。(kmeans)

那么具体聚多少类?手动设定(超参数)

如果类别数量非常大,则会导致计算量增加

如果类别数量非常少,则会不够精确。

实验结果表明,anchor boxes选择为5,则会产生最优的平衡。

注意,这里的框之间的距离公式(不是欧氏距离)是1−IOU

  1. 特征融合

直接对最后一层输出的feature map做回归,则会产生一个问题:对小尺度物体不够友好。

解决小目标检测的举措之一:用更大视野的图进行检测。

YOLO v3: 更快更准

改进1: 多尺度检测

三种尺度进行检测

那么你会如何实现这样的方式?

  • 图像金字塔?
  • 特征金字塔?

注意:这种方式共产生多少个anchor?

改进2: 跳层连接(resnet)

改进3: 网络结构

总结:

Yolov1是一种基于深度学习的目标检测算法,其主要特点是快速和高效。以下是关于Yolov1的一些精髓:

  1. Yolov1使用单个神经网络来同时进行目标检测和分类,而不是像其他算法那样需要多个网络。

  2. Yolov1使用全卷积神经网络,可以对不同大小的输入图像进行处理。

  3. Yolov1将输入图像划分为S x S个网格,并为每个网格预测B个边界框和每个边界框的置信度和类别概率。

  4. Yolov1使用非极大值抑制(NMS)来消除重叠的边界框。

  5. Yolov1的训练数据集使用了数据增强技术,包括随机裁剪、旋转、缩放等。

以下是一些关于Yolov1的链接:

  1. Yolov1论文:https://arxiv.org/abs/1506.02640

  2. Yolov1代码实现:darknet/src at master · pjreddie/darknet · GitHub

  3. Yolov1视频演示:https://www.youtube.com/watch?v=9s_FpMpdYW8

  4. Yolov1在COCO数据集上的结果:COCO - Common Objects in Context

V1:将分类问题-->回归问题(CNN+reshape)

loss:加根号目的:缓解尺度问题

loss正负例分别算,负例前乘以λ(0<<1)原因:一张图片中大多为负例(90%)为保持模型对正负例预测性能的平衡

V2:去掉了fc层,不限制输入图像尺寸

聚类:距离采用:1-IOU

26*26:分辨率高;13*13:分辨率低,提高了对小目标检测的精度。

V3:

特征金字塔(高分辨(细节)特征)+上采样(泛化较好的特征)--> 较好的识别目标(大中小)

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

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

相关文章

自学软件测试到什么程度才可以去找工作...拿到阿里offer后才知道有这些就够了!!

如果是纯自学&#xff0c;建议先自学软件测试基础、功能测试等&#xff0c;然后找一个相关的工作&#xff0c;在工作中&#xff0c;边增长项目经验&#xff0c;边自学更难一点的自动化编程、性能测试等。自动化测试、性能测试如果没有老师带&#xff0c;自学的难度比较大&#…

uniapp 使用自定义icon图标

1.下载图标文件 阿里图标库位置&#xff1a;iconfont-阿里巴巴矢量图标库 eg: 搜索 “书签” 图标&#xff0c;点击加入购物车&#xff0c;再进入购物车&#xff0c;填写加入项目&#xff0c;也可以直接下载&#xff0c;点击编辑 编辑可以设置图片颜色&#xff0c;或像素大小…

immutable深拷贝:数据多层属性-不可变数据结构

一、为何要用immutable深拷贝&#xff1f; 1.浅拷贝&#xff08;浅复制&#xff09; //引用赋值-浅复制、浅拷贝 var obj{name:"溜溜球"}var obj2obj;obj2.name"刘刘球";console.log(obj);//name:"刘刘球"console.log(obj2);//name:"刘刘…

[C++][opencv]opencv填充透明色到不规则polygon区域

大家用yolov5-seg分割都知道官方演示分割结果会把分割区域半透明填充到原图里面&#xff0c;那么C如何实现呢。今天特地研究了下。由于分割点是变动的&#xff0c;所以我们需要用变量控制分割点数。 参考文章写的很不错&#xff0c;但是有个毛病&#xff0c;他这个是5点必须是…

MySQL---JDBC基础操作、SQL注入

1. JDBC JDBC&#xff08;Java DataBase Connectivity,java数据库连接&#xff09;是一种用于执行SQL语句的Java API。 JDBC是Java访问数据库的标准规范&#xff0c;可以为不同的关系型数据库提供统一访问&#xff0c;它由一组用Java 语言编写的接口和类组成。 JDBC需要连接…

unreal 5.1 增强输入实现

在ue5.1版本增加了增强输入&#xff0c;并且废弃了之前的轴映射和操作映射。 官方文档地址&#xff1a;https://docs.unrealengine.com/5.1/zh-CN/enhanced-input-in-unreal-engine/ 输入动作&#xff08;Input Actions&#xff09; 更改后的区别我体验下来&#xff0c;它将…

探索 PlanetIX:解读区块链游戏运营的奥秘

作者: danielfootprint.network 熊市之中&#xff0c;PlanetIX 成长为最强的 Web3 游戏&#xff0c;在 Polygon 网络上独占鳌头。而其开发团队深度使用了 Footprint Analtics 的零代码数据分析平台和-GameFi 的数据 API 来提升用户的游戏体验。 近日&#xff0c;Footprint 与…

Visual Studio添加native tools command prompt

学习UEFI开发&#xff0c;环境设置种需要用到native tools command prompt&#xff0c;但是看了一下VS2017的Tools菜单下没有这个选项。网上查询&#xff0c;解决了问题&#xff1a; Tools > External Tools > Add Title:VS Command PromptCommand:C:\Windows\System32\…

操作系统原理 —— 内存管理的概念(十八)

为什么要有内存管理 为什么要对内存进行管理&#xff0c;需要解决什么问题&#xff1f; 要回答这个问题&#xff0c;首先我们需要明白&#xff1a;进程运行时&#xff0c;需放在内存才能运行。比如在执行一个程序时&#xff0c;需将该程序的相关数据与指令装入内存才能运行。…

家居购项目 (上)

文章目录 &#x1f400;Java后端经典三层架构&#x1f407;MVC模型&#x1f407;开发环境搭建&#x1f407;会员注册&#x1f333;前端验证用户注册信息&#x1f333;思路分析&#x1f349;创建表&#x1f349;创建实体类&#x1f349;DAO&#x1f34c;MemberDAOImpl &#x1f…

ISO21434 组织网络安全管理

目录 一、概述 二、目标 三、输入 3.1 先决条件 3.2 进一步支持信息 四、要求和建议 4.1 网络安全治理 4.2 网络安全文化 4.3 信息共享 4.4 管理系统 4.5 工具管理 4.6 信息安全管理 4.7 组织网络安全审计 五、输出 一、概述 为了实现网络安全工程&#xff0c;该…

Rotary Position Embedding (RoPE, 旋转式位置编码) | 原理讲解+torch代码实现

&#x1f525; RoPE为苏剑林大佬之作&#xff0c;最早应用于他自研的RoFormer (Rotary Transformer)&#xff0c;属于相对位置编码。效果优于绝对位置编码和经典式相对位置编码。出自论文&#xff1a;《RoFormer: Enhanced Transformer with Rotary Position Embedding》 &…

轻松高效!三种方法教你音频转文字!

我们在日常生活中&#xff0c;总会遇到许多需要音频转文字的情况。这个时候大部分小伙伴会选择一边播放音频一边记录的方式来整理音频的内容&#xff0c;这样既麻烦又费时&#xff0c;整理的效率也不高。其实我们只需要使用软件来协助我们将音频转换成文字&#xff0c;就可以很…

2023年03月六级真题全3套【可复制可划线查词】共11页PDF

2023年03月六级真题全3套【可复制可划线查词】共11页PDF 2023年03月六级真题全3套【可复制可划线查词】共11页PDF 2023年03月六级真题全3套【可复制可划线查词】共11页PDF

html基础知识总结

&#xff08;一&#xff09;html 1、html html&#xff1a;超文本标签语言&#xff0c;专门用来制作网页的一门语言。超文本&#xff1a;就是它不仅可以放文本内容&#xff0c;还可以是图片&#xff0c;声音&#xff0c;视频&#xff0c;多媒体等等内容 2、 html标签的分类 …

ASEMI双向可控硅BT137性能特点, BT137应用及购买指南

编辑-Z 本文将详细介绍可控硅BT137的性能特点、应用领域以及购买时需要注意的事项&#xff0c;帮助您更好地了解和选择BT137可控硅。 一、BT137可控硅简介 可控硅&#xff08;Silicon Controlled Rectifier&#xff0c;简称SCR&#xff09;是一种四层三端半导体器件&#xff…

sql 优化----》1)分析与定位策略

https://www.cnblogs.com/cshaptx4869/p/10482500.html 1&#xff1a;通过 show status 了解各种的SQL的执行频率 2&#xff1a;定位执行频率低的SQL语句: 1):通过慢日志定位 慢日志&#xff1a;可以通过两个方式配置 方式一&#xff1a;配置文件&#xff0c;my.cnf show_query…

25 # eventloop 执行流程

浏览器事件环 1、浏览器的进程 进程是计算机调度的基本单位&#xff0c;进程中包含着线程&#xff0c;浏览器是多进程进程&#xff0c;大致有下面几种 每一个页卡都是进程&#xff08;互不影响&#xff09;浏览器也有一个主进程&#xff08;用户界面&#xff09;每一个页卡里…

聊一聊行业的前景、就业方向和薪资待遇

软件测试行业是和软件开发相辅相成得一个行业&#xff0c;但目前大家对于软件测试行业的了解并不多&#xff0c;甚至很多学了软件测试的朋友也不是很了解。今天&#xff0c;就来给大家说一说&#xff0c;软件测试行业的前景、就业方向和薪资待遇。 岗位前景 很多小伙伴都曾听…

【PHPWord】PHPWord 根据word模板生成的内容动态生成目录以及页码

文章目录 一、需求分析二、PHPWord 中模板页码的设置三、模板内生成目录四、总结一、需求分析 在实际业务中,我们可能需要根据一些比较复杂的业务模板,生成对应的Word 文件。 本文将掌握: 使用模板配置页码使用模板插入目录二、PHPWord 中模板页码的设置 1.配置页码 注意…