YOLO的框架及版本迭代
YOLO(You Only Look Once)是一种非常流行的实时目标检测算法,其特点是将目标检测任务转换为一个回归问题,通过一次前向传播就可以同时完成目标的分类和定位。以下是YOLO框架的整体架构和工作原理:
一、YOLO的基本框架
1. 输入层
- 输入是一张图像,通常被调整为固定大小的方形图像,例如 416 × 416 416 \times 416 416×416 或 640 × 640 640 \times 640 640×640。
- 输入图像的每个像素点被归一化为 [ 0 , 1 ] [0, 1] [0,1] 之间的浮点数。
2. 主干网络(Backbone)
- 这是YOLO的核心特征提取部分,类似于卷积神经网络(CNN)。
- 不同版本的YOLO使用不同的主干网络:
- YOLOv1 使用了简单的 GoogLeNet 风格的CNN。
- YOLOv2、YOLOv3 使用了 Darknet 网络。
- YOLOv4、YOLOv5 引入了 CSPDarknet。
- YOLOv7 进一步优化了网络结构,引入了 ELAN 层。
- YOLOv8 使用了更轻量级的结构,如 EfficientNet 或 Transformer。
3. 特征金字塔网络(Feature Pyramid Network, FPN)
- 将不同尺度的特征图结合,帮助检测不同大小的目标。
- YOLOv3 及以后版本引入了 FPN 和 PAN(Path Aggregation Network),实现更好的多尺度特征融合。
4. 输出层(Detection Head)
- YOLO将输入图像划分为 S × S S \times S S×S 的网格,每个网格负责检测一个或多个目标。
- 对于每个网格,预测:
- Bounding Box:边界框的位置( x , y , w , h x, y, w, h x,y,w,h)。
- 置信度:边界框中是否有物体以及置信度。
- 类别概率:每个类别的概率。
输出的张量结构如下:
( S × S × B × ( 5 + C ) ) (S \times S \times B \times (5 + C)) (S×S×B×(5+C))
其中:
- S × S S \times S S×S:网格大小。
- B B B:每个网格的预测框数量(例如 YOLOv3 中 B = 3 B=3 B=3)。
- 5 5 5:包含边界框的 x , y , w , h x, y, w, h x,y,w,h 和置信度。
- C C C:类别数量。
二、YOLO的工作流程
- 图像输入:将原始输入图像调整为固定大小。
- 特征提取:主干网络提取图像中的特征。
- 预测框生成:生成多个边界框,并为每个框预测置信度和类别概率。
- 非极大值抑制(NMS):通过置信度和 IoU(交并比)过滤掉重叠和低置信度的框,保留最佳的预测框。
- 输出结果:输出检测到的目标类别、边界框位置和置信度。
三、YOLO的优缺点
优点:
- 速度快:YOLO可以在实时条件下完成目标检测,适用于实时应用。
- 端到端训练:YOLO直接从图像中学习特征并预测目标位置和类别。
- 单一模型:不需要额外的候选区域生成步骤。
缺点:
- 对小目标的检测效果较差:由于将图像划分为较大的网格,小目标可能被忽略。
- 精度可能不如两阶段方法(如Faster R-CNN):尤其是在复杂的背景下。
四、YOLO模型的改进版本
版本 | 主要改进 | 优势 |
---|---|---|
YOLOv1 | 单次检测,回归问题 | 速度快,简单 |
YOLOv2 | 使用Darknet,Batch Normalization | 提高检测精度 |
YOLOv3 | 多尺度检测,FPN | 改善小目标检测 |
YOLOv4 | CSPDarknet、PAN、数据增强 | 进一步提升速度与精度 |
YOLOv5 | PyTorch实现,模块化更强 | 更易训练和部署 |
YOLOv7 | ELAN、E-ELAN模块 | 提高计算效率 |
YOLOv8 | 支持Transformer、EfficientNet等 | 更轻量化、更高精度 |
五、YOLO的代码框架示例(PyTorch)
import torch
import torch.nn as nnclass YOLO(nn.Module):def __init__(self, num_classes=80):super(YOLO, self).__init__()# Backbone: Feature extractionself.backbone = DarknetBackbone()# Head: Detection headself.head = DetectionHead(num_classes)def forward(self, x):features = self.backbone(x)output = self.head(features)return outputclass DarknetBackbone(nn.Module):# 定义YOLO的Darknet主干网络def __init__(self):super(DarknetBackbone, self).__init__()# 多层卷积层self.layers = nn.Sequential(nn.Conv2d(3, 32, kernel_size=3, stride=1, padding=1),nn.BatchNorm2d(32),nn.ReLU(inplace=True),# 更多的卷积层...)def forward(self, x):return self.layers(x)class DetectionHead(nn.Module):# 定义检测头def __init__(self, num_classes):super(DetectionHead, self).__init__()self.conv = nn.Conv2d(512, (5 + num_classes) * 3, kernel_size=1)def forward(self, x):return self.conv(x)# 测试模型
model = YOLO(num_classes=80)
input_tensor = torch.randn(1, 3, 416, 416)
output = model(input_tensor)
print(output.shape)
总结
YOLO的核心思想是一次看全图,将目标检测作为回归问题进行端到端学习。它具有高效、实时的特点,并且通过不同版本的改进,在速度和精度之间取得了良好的平衡。
相关文章:
YOLO的框架及版本迭代
YOLO(You Only Look Once)是一种非常流行的实时目标检测算法,其特点是将目标检测任务转换为一个回归问题,通过一次前向传播就可以同时完成目标的分类和定位。以下是YOLO框架的整体架构和工作原理: 一、YOLO的基本框架…...
PotPlayer 最新版本支持使用 Whisper 自动识别语音生成字幕
PotPlayer 最新版本支持使用 Whisper 自动识别语音生成字幕 设置使用下载地址 设置 使用 下载地址 https://www.videohelp.com/software/PotPlayer...
JavaScript零基础入门速通(中)
目录 1. 函数 1.1 函数声明 1.2 返回值 1.3 匿名函数 1.4 箭头函数 2. 对象 2.1 创建对象 2.2 访问和修改对象的属性 2.3 对象方法 3. 数组 3.1 创建数组 3.2 数组方法 3.3 遍历数组 4. 作用域 4.1 全局作用域 4.2 局部作用域 4.3 块级作用域 5. 事件处理 5…...
【Yarn Bug】 yarn 安装依赖出现的网络连接问题
最近,在初始化 Ant Design Pro 前端脚手架过程中,使用 yarn 安装依赖时遇到了网络连接问题,具体错误信息提示为 info There appears to be trouble with your network connection. Retrying...。通过百度查询,得知出现这种问题的原…...
字节青训Marscode_5:寻找最大葫芦——最新题解
步骤1:问题定义与分析 输入条件: 整数n:牌的数量整数max:葫芦牌面值之和的上限数组array:n张牌的牌面值 输出条件: 两个整数组成的数组[a,b]: a表示三张相同牌的牌面值b表示两张相同牌的牌面值如…...
MySQL —— MySQL 程序
目录 前言 一、MySQL 程序简介 二、mysqld -- MySQL 服务器 三、mysql -- MySQL 客户端 1. mysql 客户端简介 2. mysql 客户端选项 (1)指定选项的方式 (2)mysql 客户端命令常用选项 (3)在命令行中使…...
LLamafactory API部署与使用异步方式 API 调用优化大模型推理效率
文章目录 背景介绍第三方大模型API 介绍LLamafactory 部署API大模型 API 调用工具类项目开源 背景介绍 第三方大模型API 目前,市面上有许多第三方大模型 API 服务提供商,通过 API 接口向用户提供多样化的服务。这些平台不仅能提供更多类别和类型的模型…...
不玩PS抠图了,改玩Python抠图
网上找了两个苏轼的印章图片: 把这两个印章抠出来的话,对于不少PS高手来说是相当容易,但是要去掉其中的水印,可能要用仿制图章慢慢描绘,图章的边缘也要慢慢勾画或者用通道抠图之类来处理,而且印章的红色也不…...
三维渲染中顺序无关的半透明混合(OIT)(一Depth Peeling)
>本文收集关于透明对象渲染技术中关于OIT技术的资料,尝试用简单的逻辑对这些内容进行整理。 1、透明对象的特殊对待 不要小瞧png图片和jpg图片的差异!在一般的三维平台,png代表的是带透明通道的纹理,而jpg代表的是不带透明的…...
Linux零基础入门--Makefile和make--纯干货无废话!!
目录 Makefile的概念与使用 Makefile的编写 多个源文件的Makefile编写 Makefile的概念与使用 Makefile其实是linux中的一种包含构建指令的文件,用于自动化构建 一个工程中的源文件不计数,其按类型、功能、模块分别放在若干个目录中,makefi…...
vim编辑器的一些配置和快捷键
记录vim编辑器的一些配置和快捷键,边学边用: yy 复制dd 删除p:粘贴ctrly 取消撤销u:撤销:w 写入:q 退出a/i 插入O: 上方插入一个空行o:下方插入一个空行:e 打开文件编辑 其他配置: 上移一行和下移一行&a…...
电子应用设计方案-31:智能AI音响系统方案设计
智能 AI 音响系统方案设计 一、引言 智能 AI 音响作为一种新兴的智能家居设备,通过融合语音识别、自然语言处理、音频播放等技术,为用户提供便捷的语音交互服务和高品质的音乐体验。本方案旨在设计一款功能强大、性能稳定、用户体验良好的智能 AI 音响系…...
【设计模式】【结构型模式(Structural Patterns)】之装饰模式(Decorator Pattern)
1. 设计模式原理说明 装饰模式(Decorator Pattern) 是一种结构型设计模式,它允许在不改变对象接口的前提下,动态地给对象增加额外的责任或功能。这种模式创建了一个装饰类,用于包装原有的类,并在保持类方法…...
【AI】JetsonNano启动时报错:soctherm OC ALARM
1、问题描述 将JetsonNano烧写SD卡镜像为Ubuntu20.04后,启动时报错:soctherm OC ALARM,启动失败;然后系统一直重启 2、原因分析 “soctherm OC ALARM”是检测到系统温度超过安全阈值时发出的过热警告。 “soctherm”代表系统…...
QT:生成二维码 QRCode
目录 1.二维码历史2.QT源码3.界面展示4.工程源码链接 1.二维码历史 二维码(2-Dimensional Bar Code),是用某种特定的几何图形按一定规律在平面(二维方向上)分布的黑白相间的图形记录数据符号信息的。它是指在一维条码…...
【LeetCode刷题之路】120:三角形最小路径和的两种解法(动态规划优化)
LeetCode刷题记录 🌐 我的博客主页:iiiiiankor🎯 如果你觉得我的内容对你有帮助,不妨点个赞👍、留个评论✍,或者收藏⭐,让我们一起进步!📝 专栏系列:LeetCode…...
神经网络中常见的激活函数Sigmoid、Tanh和ReLU
激活函数在神经网络中起着至关重要的作用,它们决定了神经元的输出是否应该被激活以及如何非线性地转换输入信号。不同的激活函数适用于不同的场景,选择合适的激活函数可以显著影响模型的性能和训练效率。以下是三种常见的激活函数:Sigmoid、T…...
适用于学校、医院等低压用电场所的智能安全配电装置
引言 电力,作为一种清洁且高效的能源,极大地促进了现代生活的便捷与舒适。然而,与此同时,因使用不当或维护缺失等问题,漏电、触电事件以及电气火灾频发,对人们的生命安全和财产安全构成了严重威胁…...
基于python爬虫的智慧人才数据分析系统
废话不多说,先看效果图 更多效果图可私信我获取 源码分享 import os import sysdef main():"""Run administrative tasks."""os.environ.setdefault(DJANGO_SETTINGS_MODULE, 智慧人才数据分析系统.settings)try:from django.core.m…...
LeetCode-315. Count of Smaller Numbers After Self
目录 题目描述 解题思路 【C】 【Java】 复杂度分析 LeetCode-315. Count of Smaller Numbers After Selfhttps://leetcode.com/problems/count-of-smaller-numbers-after-self/description/ 题目描述 Given an integer array nums, return an integer array counts whe…...
根据导数的定义计算导函数
根据导数的定义计算导函数 1. Finding derivatives using the definition (使用定义求导)1.1. **We want to differentiate f ( x ) 1 / x f(x) 1/x f(x)1/x with respect to x x x**</font>1.2. **We want to differentiate f ( x ) x f(x) \sqrt{x} f(x)x wi…...
WPF关于打开新窗口获取数据的回调方法的两种方式
一种基于消息发送模式 一种基于回调机制 基于消息发送模式 父页面定义接收的_selectedPnNumberStandarMsg保证是唯一 Messenger.Default.Register<PlateReplaceApplyModel>(this, _selectedPnNumberStandarMsgToken, platePnNumberModel > { …...
复杂网络(四)
一、规则网络 孤立节点网络全局耦合网络(又称完全网络)星型网络一维环二维晶格 编程实践: import networkx as nx import matplotlib.pyplot as pltn 10 #创建孤立节点图 G1 nx.Graph() G1.add_nodes_from(list(range(n))) plt.figure(f…...
用MATLAB符号工具建立机器人的动力学模型
目录 介绍代码功能演示拉格朗日方法回顾求解符号表达式数值求解 介绍 开发机器人过程中经常需要用牛顿-拉格朗日法建立机器人的动力学模型,表示为二阶微分方程组。本文以一个二杆系统为例,介绍如何用MATLAB符号工具得到微分方程表达式,只需要…...
SQL优化与性能——数据库设计优化
数据库设计优化是提高数据库性能、确保数据一致性和支持业务增长的关键环节。无论是大型企业应用还是小型项目,合理的数据库设计都能够显著提升系统性能、减少冗余数据、优化查询响应时间,并降低维护成本。本章将深入探讨数据库设计中的几个关键技术要点…...
FPGA存在的意义:为什么adc连续采样需要fpga来做,而不会直接用iic来实现
FPGA存在的意义:为什么adc连续采样需要fpga来做,而不会直接用iic来实现 原因ADS111x连续采样实现连续采样功能说明iic读取adc的数据速率 VS adc连续采样的速率adc连续采样的速率iic读取adc的数据速率结论分析 FPGA读取adc数据问题一:读取adc数…...
我们来学mysql -- 事务之概念(原理篇)
事务的概念 题记一个例子一致性隔离性原子性持久性 题记 在漫长的编程岁月中,存在一如既往地贯穿着工作,面试的概念这类知识点,事不关己当然高高挂起,精准踩坑时那心情也的却是日了🐶请原谅我的粗俗,遇到B…...
基于特征子空间的高维异常检测:一种高效且可解释的方法
本文将重点探讨一种替代传统单一检测器的方法:不是采用单一检测器分析数据集的所有特征,而是构建多个专注于特征子集(即子空间)的检测器系统。 在表格数据的异常检测实践中,我们的目标是识别数据中最为异常的记录,这种异常性可以…...
看不见的彼方:交换空间——小菜一碟
有个蓝色的链接,先去看看两年前的题目的write up (https://github.com/USTC-Hackergame/hackergame2022-writeups/blob/master/official/%E7%9C%8B%E4%B8%8D%E8%A7%81%E7%9A%84%E5%BD%BC%E6%96%B9/README.md) 从别人的write up中了解到&…...
YOLO模型训练后的best.pt和last.pt区别
在选择YOLO模型训练后的权重文件best.pt和last.pt时,主要取决于具体的应用场景:12 best.pt:这个文件保存的是在训练过程中表现最好的模型权重。通常用于推理和部署阶段,因为它包含了在验证集上表现最好的模型权重&#x…...
怎么在百度上搜到自己的网站/网站搜什么关键词
gettext 是GNU 提供的一套 国际化与本地化处理的相关函数库。大多数语言都有对应的gettext实现。本文主要使用jed 来实现gettext 一系列方法对应的功能。pot/po文件pot文件 是po文件的模板文件,一般是通过 xgettext 程序生成出来的。po文件 是根据pot文件通过msgini…...
如何制作个人网站教程/网络公司网站建设
好的,我正在尝试从文本文件创建字典,因此键是单个小写字符,每个值都是文件中以该字母开头的单词的列表. 文本文件每行包含一个小写单词,例如: airport bathroom boss bottle elephant 输出: words {a: [airport], b: [bathroom, boss, bottle], e:[elep…...
上海松江做网站建设/如何建立个人网址
MemcacheDB是 一个开源项目,给memcached分布式缓存服务器添加了Berkeley DB的持久化存储机制和异步主辅复制机制,让memcached具备了事务恢复能力、持久化能力和分布式复制能力,非常适合于需要超高性能读写速度,但是 不需要严格事务…...
网站360自然排名要怎么做/新闻稿发布
在iOS app 中经常会嵌套html 代码,js运行alert时会出现这个问题,见图: 提示框的title为所在目录文件夹名字: 解决方案: 用 iOS native 的uiwebview 的扩展方法来监听 js的alert 然后自定义 alert 的title #import &…...
网站如何做银联在线支付/铁岭网站seo
今天搞树莓派,遇到/sys这个目录,不太清楚,先对/sys目录知识进行一个整理 首先,对 /sys目录下的各个子目录进行具体说明: /sys下的子目录 内容 /sys/devices 该目录下是全局设备结构体系,包含所有…...
柳市网站设计推广/2022适合小学生的简短新闻
清晨的的地铁站,匆匆忙忙赶着上班的上班族,学生党,为了躲避这繁杂的世界不知道从什么时候开始耳机成为了当代年轻人的生活必备。耳机带来了生人勿近的独享时间,但长时间佩戴,也可能带来了一些潜在的风险 比如中耳炎..…...