yolo发展历史

news2024/11/23 3:07:29

yolo系列

  • 一、任务描述
  • 二、设计思想
  • 三、发展历程
    • 1. YOLOv1
      • 1.1问题背景
      • 1.2创新点
      • 1.3训练流程
      • 1.4检测流程
        • 1.4.1 优点
        • 1.4.2 缺点
    • 2. YOLOv2
      • 2.1问题背景
      • 2.2创新点
      • 2.3提升性能的方法
      • 2.4训练流程????
    • 3. YOLOv3
      • 3.1问题背景
      • 3.2模型改进
    • 4. YOLOv4
      • 4.1问题背景
  • 四、总结

一、任务描述

目标检测是为了解决图像里的物体是什么,在哪里的问题。输入一幅图像,输出的是图像里每个物体的类别和位置,其中位置用一个包含物体的框表示。

需要注意,我们的目标,同时也是论文中常说的感兴趣的物体,指我们关心的类别(行人检测只检测人,交通检测只关心交通工具等),或者数据集包含的类别,并不是图像里所有的物体都是目标,比如建筑,草坪也是物体,但他们常常是背景。

从计算机视觉的角度看,目标检测是分类+定位,从机器学习的角度看,目标检测是分类+回归

二、设计思想

目标检测架构分为两种,一种是two-stage,一种是one-stage,区别就在于 two-stage 有region proposal 过程,类似于一种海选过程,网络会根据候选区域生成位置和类别,而 one-stage 直接从图片生成位置和类别。
今天提到的 YOLO 就是一种 one-stage 方法。YOLO 是 You Only Look Once 的缩写,意思是神经网络只需要看一次图片,就能输出结果。

三、发展历程

YOLO 一共发布了四个版本,其中 YOLOv1 奠定了整个系列的基础,后面的系列就是在第一版基础上的改进,只为提升性能。
①将输入图像划分为 S×S 网格(grid),比如这里划分成 7×7=49 个 grid,如果目标的中心落入网格单元,则该网格单元负责检测该目标。注意不是整个物体落入单元格,只需要物体中心在即可。

②每个网格单元预测 B(文中 B=2) 个边界框和这些框的置信度得分。这个分数反映这个框包含物体的概率 Pr(Object) 以及预测框的位置准确性 IOU,所以置信分数也由这两部分定义;

③每个 bounding box 都要包含 5 个预测值,x, y, w, h, confidence。(x,y)框中心是相对于网格单元的坐标,w 和 h 是框相当于整幅图的宽和高,confidence 代表该框与 ground truth 之间的 IOU(框里没有物体分数直接为 0 )
定位:每个网格都要预测 B = 2 个框框,49 个网格就会输出 98 个边界框,每个框还有它的分数

④因为位置和类别需要同时预测,所以每个单元格除了输出 bounding box 也输出物体的条件概率(该物体属于某一类的概率,当然这些概率以包含对象的网格单元为条件)。每个网格单元输出一个概率集合,不考虑这个 grid 预测几个 bounding box。
分类:每个网格输出一个类别概率,也就是说一个网格只能属于概率最大的那一类

⑤测试阶段,在测试时,我们将条件分类概率与各个框的置信度预测相乘,作为每个框特定于每个类的置信分数(这个分数编码了类别和位置两部分信息)。

与 R-CNN 系列方法相比:
i) R-CNN 及其变体采用 region proposals 而不是滑动窗口法找物体,是一种多阶段方法。调网络的时候需要分开调,运行慢。
ii)YOLO 与 R-CNN 相似的地方是在网格单元找可能的边界框,用 CNN 提取特征。不同的是,加在网格单元的空间限制有助于防止同一个目标的重复检测,预测的边界框也少(98 个),还有把多个阶段结合成一个阶段。

1. YOLOv1

1.1问题背景

之前 two-stage 方法如 R-CNN 把检测问题分成两部分,先生成候选区域(region proposal),再用分类器对区域分类,多阶段训练导致不易优化。

1.2创新点

把检测当作回归问题,用一个网络输出位置和类别,实现了一个 unified system,从检测的角度是 one-stage的

1.3训练流程

和 R-CNN 差不多
首先 ImageNet 1000类 竞赛数据集上对卷积层进行预训练
然后再把网络根据检测任务微调

1.4检测流程

a) 输入一幅多目标图像
b) 将图像划分成多个网格
c) 通过网络得到每个网格的分类概率,以及各网格预测的框+置信度
d) 针对每个框,把概率与置信分数相乘,作为每个框特定于每个类的置信分数
e) 输出位置和类别信息

1.4.1 优点

快。因为回归问题没有复杂的流程(pipeline)。

可以基于整幅图像预测(看全貌而不是只看部分)。与基于滑动窗口和区域提议的技术不同,YOLO在训练和测试期间会看到整个图像,因此它隐式地编码有关类及其外观的上下文信息。因为能看到图像全貌,与 Fast R-CNN 相比,YOLO 预测背景出错的次数少了一半。

学习到物体的通用表示(generalizable representations),泛化能力好。

因此,当训练集和测试集类型不同时,YOLO 的表现比 DPM 和 R-CNN 好得多,应用于新领域也很少出现崩溃的情况。

1.4.2 缺点

存在的问题主要有两方面:一是每个cell只预测一个类别,如果目标重叠则会漏检;二是由于boundingbox的限制,对小目标或是新的宽高比的目标检测效果较差。

空间限制:一个单元格只能预测两个框和一个类别,这种空间约束必然会限制预测的数量;

难扩展:模型根据数据预测边界框,很难将其推广到具有新的或不同寻常的宽高比或配置的对象。由于输出层为全连接层,因此在检测时,YOLO 训练模型只支持与训练图像相同的输入分辨率。

2. YOLOv2

2.1问题背景

1、YOLOv1 检测性能低
2、当前的检测任务受数据集标签的限制(数据集必须有标签或通过分类赋予标签)。但是,标记检测图像比标记分类图像昂贵得多,所以检测数据和分类数据不是一个规模。

2.2创新点

针对第一个问题,使用一些方法提升 YOLOv1 的性能,得到 YOLOv2。
针对第二个问题,提出了 ImageNet 和 COCO 数据集的结合方法,以及联合训练方法,训练 YOLOv2 后得到的模型叫 YOLO9000。

2.3提升性能的方法

(1)Accuracy: Batch Normalization, High Resolution Classifier, Convolutional With Anchor Boxes, , Direct location prediction, Fine-Grained Features, Multi-Scale Training
在这里插入图片描述

(2)Speed: 提出一个新网络 Darknet-19,小卷积核节省参数
在这里插入图片描述
(3)舍弃Dropout和FC层,加入BatchNormalization,稳定收敛;

(4)输入更高分辨率的图像,并且支持multi-scale多尺寸图像;
在这里插入图片描述
(5)借鉴了二阶段算法的anchor策略,通过聚类获取与数据集相匹配的anchor尺寸;
在这里插入图片描述

(6)相对于grid cell做位置预测,模型更容易收敛;
在这里插入图片描述

(7)passthrough策略融合细粒度特征助力小目标检测;
在这里插入图片描述

YoloV2在网络结构上减少了参数量,从无穷回归到有穷回归的策略降低学习难度,但特征融合的方式仍不能有效改善密集、小目标检测,也不支持多标签的分类

2.4训练流程????

论文提出了一种联合训练算法,该算法可以在检测和分类数据上训练目标检测器。利用标记的检测图像来学习精准定位,同时使用分类图像来增加其“词汇量”和健壮性。
一、分类检测数据集结合方法:
检测数据集的标签少且普通,分类数据集的标签多且具体,如果我们想在两个数据集上训练,就得把它们的标签合并起来。很多分类方法都用一个 softmax layer ,但它的前提是假设所有类互斥,但我们的数据集类别是不都是互斥 (有可能是包含关系,例如狗和金毛犬),所以我们使用了一个多标签模型来组合数据集(无互斥的要求),及使用多个 softmax 。大多数分类方法都假定标签采用扁平结构,但是对于组合数据集我们需要层次化的结构。
ImageNet 标签采用有向图结构。在这里,作者把数据集的结构简化为结构树(hierarchical tree)。通过改造图,最后得到一个 WordTree,这样每个节点/标签都有自己的概率,解决了类别之间不互斥的问题,就能在检测集和分类集上联合训练。

二、联合训练方法:
把检测和分类数据混合,训练过程中遇到带标签的检测图像,就基于 YOLOv2 整个损失函数进行反向传播,遇到分类图像,只反向传播网络的分类损失。

3. YOLOv3

参考 https://zhuanlan.zhihu.com/p/650231105

3.1问题背景

YOLOv3 的提出不是为了解决什么问题,整篇论文其实是技术报告。
YOLOv3 在 YOLOv2 基础上做了一些小改进,文章篇幅不长,核心思想和 YOLOv2、YOLO9000差不多。

3.2模型改进

边界框预测:定位任务采用 anchor box 预测边界框的方法,YOLOv3 使用逻辑回归为每个边界框都预测了一个分数 objectness score,打分依据是预测框与物体的重叠度。如果某个框的重叠度比其他框都高,它的分数就是 1,忽略那些不是最好的框且重叠度大于某一阈值(0.5)的框

类别预测:和 YOLOv2 一样,YOLOv3 仍然采取多标签分类
多尺度预测使用新网络 Darknet-53 提取特征

4. YOLOv4

4.1问题背景

YOLO 原作者之前宣布退出CV界,YOLOv4 的作者其实不是前三篇 YOLO 的一作
YOLOv4 是对 YOLOv3 的一个改进。它的改进方法就是总结了几乎所有的检测技巧,又提出一点儿技巧,然后经过筛选,排列组合,挨个实验(ablation study)哪些方法有效。
值得注意的是文章第二部分相关工作,简直就是目标检测的一个简单综述,阅读该部分,你就能了解模型及方法,如果它提到的每个方法你都了解,说明你在这个方向的研究较全面深入(我没达到)。

框架方法
下面这幅论文中的图介绍了 YOLOv4 检测器的构成及使用的训练方法,这些是经过大量实验选出的性能最好的组合??

四、总结

回顾 YOLO 系列的发展,我们可以看出 YOLO 后期没有提出新颖的想法,更重视应用落地。

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

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

相关文章

MySQL学习Day31-主从复制

一、主从复制概述: 主从复制作用1:读写分离,可以通过主从复制的方式来同步数据,然后通过读写分离提高数据库并发处理能力;其中一个是Master主库,负责写入数据;其它都是slave从库,负责读取数据。当主库进行更新的时候,…

相机安装位置固定后开始调试设备供电公司推荐使用方法

摄像头安装位置固定后开始调试 设备供电:无电源设备需要连接12V/2A电源并连接到摄像机的DC端口,而有电源的摄像机可以直接连接到220V电源。 连接设备:如果是有线连接,请使用网线将设备连接到电脑(建议直接连接&#…

Text-to-SQL 工具Vanna + MySQL本地部署 | 数据库对话机器人

今天我们来重点研究与实测一个开源的Text2SQL优化框架 – Vanna 1. Vanna 简介【Text-to-SQL 工具】 Vanna 是一个基于 MIT 许可的开源 Python RAG(检索增强生成)框架,用于 SQL 生成和相关功能。它允许用户在数据上训练一个 RAG “模型”&a…

PLC数采网关在实际应用中的效能-天拓四方

在工业自动化领域中,PLC扮演着至关重要的角色,它负责控制和监测生产线的各个环节。然而,随着工业4.0的推进和智能制造的快速发展,单纯依靠PLC进行现场控制已无法满足企业对数据集中管理、远程监控和智能分析的需求。因此&#xff…

立即注册 | 线上讲座:借助 NGINX Plus 优化物联网数据传输和应用安全

原文作者:NGINX 原文链接:立即注册 | 线上讲座:借助 NGINX Plus 优化物联网数据传输和应用安全 转载来源:NGINX 开源社区 NGINX 唯一中文官方社区 ,尽在 nginx.org.cn 基本信息 课程主题 借助 NGINX Plus 优化物联网…

地理数据 vs. 3D数据

在表示我们周围的物理世界时,地理空间数据和 3D 建筑数据是两个最常见的选择。 他们在各个行业和项目中发挥着至关重要的作用。 从构建数字孪生到可视化城市景观和创建沉浸式应用程序。 尽管地理空间和 3D 建筑数据有相似之处,但它们不可互换。 虽然地…

专升本 C语言笔记-05 常量定义 #define宏定义 const关键字 enum关键字

1.宏定义 #define的使用 1.1.宏定义的概念 宏定义就是用一个标识符来表示一个字符串,如果后面代码出现了该标识符,那么就全部替换成指定的字符串 1.2.宏定义实现案例 #include <stdio.h> #define N 123 int main() {printf("N %d\n",N);printf("N N…

Linux tcpdump抓包转Wireshark 分析

简介 tcpdump 是Linux系统下的一个强大的命令&#xff0c;可以将网络中传送的数据包完全截获下来提供分析。它支持针对网络层、协议、主机、网络或端口的过滤&#xff0c;本文将展示如何使用 tcpdump 抓包&#xff0c;以及如何用 tcpdump 和 wireshark 分析网络流量 tcpdump指…

一文带你详解天池医疗数据集

医疗作为和民生健康息息相关的产业&#xff0c;通过天池大赛开放出一批有临床科研价值的数据集&#xff0c;涵盖了预防、辅诊、医学科研等主题。 与此同时&#xff0c;阿里云天池平台也积极推动产学研的共同进步&#xff0c;开源了多个本地生活领域的数据集&#xff0c;如aBea…

(含代码)利用TensorRT的8位PTQ将Stable Diffusion速度提高 2 倍

利用TensorRT的8位PTQ将Stable Diffusion速度提高 2 倍 在生成人工智能的动态领域中&#xff0c;扩散模型脱颖而出&#xff0c;成为生成带有文本提示的高质量图像的最强大的架构。 像稳定扩散这样的模型已经彻底改变了创意应用。 然而&#xff0c;由于需要迭代去噪步骤&#x…

vulhub靶场-Jangow

下载&部署 下载 下载链接&#xff1a; https://download.vulnhub.com/jangow/jangow-01-1.0.1.ova 点击下载即可 部署 因为源虚拟机是从virtualbox导出的&#xff0c;为了避免繁琐的操作步骤&#xff0c;用virtualbox来导入 virtualbox下载地址&#xff1a; https:…

2021年1月1日起四川启动食品经营许可与备案电子证书办理

12月25日&#xff0c;四川省市场监督管理局、四川省大数据中心发布《关于启用食品经营许可登记电子证书的公告》&#xff08;以下简称《公告》&#xff09;。 《公告》显示&#xff0c;为贯彻落实《食品经营许可证管理办法》、《四川省小食品作坊、小经营店、商贩管理规定》和国…

常见面试题之计算机网络

1. OSI 五层模型&#xff08;或七层模型&#xff09;是什么&#xff0c;每一层的作用是什么 应用层&#xff1a;又可细分为应用层、表示层、会话层。其中应用层主要做的工作就是为应用程序提供服务&#xff0c;常见的协议为 HTTP、HTTPS、DNS等&#xff1b;表示层主要做的工作…

PXE自动化安装操作系统

一、PXE基本介绍 PXE&#xff0c;全名Pre-boot Execution Environment&#xff0c;预启动执行环境&#xff1b; 通过网络接口启动计算机&#xff0c;不依赖本地存储设备&#xff08;如硬盘&#xff09;或本地已安装的操作系统&#xff1b; 由Intel和Systemsoft公司于1999年9月…

通过一篇文章让你了解什么是函数栈帧

函数栈帧的创建和销毁 前言一、什么是函数栈帧二、 理解函数栈帧能解决什么问题三、 函数栈帧的创建和销毁解析3.1 什么是栈3.2 认识相关寄存器和汇编指令相关寄存器eaxebxebpespeip 相关汇编命令 3.3 解析函数栈帧的创建和销毁3.3.1 预备知识3.3.2 函数的调用堆栈3.3.4 准备环…

*Javaweb -- MyBatis*

一:介绍: 1.MyBatis是一个优秀的 ①持久层 ②框架,用于简化JDBC的开发! ①:JAVAEE有三层的结构:表现层, 业务层, 持久层. 表现层代表的是页面的展示,业务层则指的是对于相关逻辑的处理, 而持久层, 指的则是对于数据进行持久化,保存在数据库当中. 持久层具体的来说就是负责…

宏碁又遭网络袭击,菲律宾分公司大量数据被盗

近日&#xff0c;宏碁&#xff08;Acer&#xff09;菲律宾公司方面证实&#xff0c;管理该公司员工考勤数据的第三方供应商遭遇网络攻击&#xff0c;部分员工数据被盗。 宏碁&#xff0c;中国台湾计算机硬件和电子产品制造商&#xff0c;以其电脑产品极具性价比而闻名。 据悉&a…

生成式AI来袭,FOSS全闪对象存储应时而生

AI大模型正飞速跃进&#xff0c;从引领文本生成革命的ChatGPT到开创文生视频新纪元的Sora&#xff0c;多模态交互技术连续迭代&#xff0c;促进了智算中心的快速落地。在这一过程中&#xff0c;算力的迅猛增长对存储系统提出了更高的要求和挑战。为满足这些日益增长的需求&…

3_springboot_shiro_jwt_多端认证鉴权_Redis缓存管理器.md

1. 什么是Shiro缓存管理器 上一章节分析完了Realm是怎么运作的&#xff0c;自定义的Realm该如何写&#xff0c;需要注意什么。本章来关注Realm中的一个话题&#xff0c;缓存。再看看 AuthorizingRealm 类继承关系 其中抽象类 CachingRealm &#xff0c;表示这个Realm是带缓存…

【Linux】Centos7上安装MySQL5.7

目录 1.下载安装包2. 上传安装包3.将 mysql 解压到/usr/local/4.重命名5.创建mysql用户及用户组6. 进入 mysql 目录修改权限7. 安装依赖库8. 执行安装脚本9. 复制启动脚本到资源目录10. 拷贝 my.cnf&#xff0c;并赋予权限11. 配置环境变量12. 启动 mysqld13. 登录 MySQL&#…