当前位置: 首页 > news >正文

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 使用了更轻量级的结构,如 EfficientNetTransformer

3. 特征金字塔网络(Feature Pyramid Network, FPN)

  • 将不同尺度的特征图结合,帮助检测不同大小的目标。
  • YOLOv3 及以后版本引入了 FPNPAN(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的工作流程

  1. 图像输入:将原始输入图像调整为固定大小。
  2. 特征提取:主干网络提取图像中的特征。
  3. 预测框生成:生成多个边界框,并为每个框预测置信度和类别概率。
  4. 非极大值抑制(NMS):通过置信度和 IoU(交并比)过滤掉重叠和低置信度的框,保留最佳的预测框。
  5. 输出结果:输出检测到的目标类别、边界框位置和置信度。

三、YOLO的优缺点

优点:

  • 速度快:YOLO可以在实时条件下完成目标检测,适用于实时应用。
  • 端到端训练:YOLO直接从图像中学习特征并预测目标位置和类别。
  • 单一模型:不需要额外的候选区域生成步骤。

缺点:

  • 对小目标的检测效果较差:由于将图像划分为较大的网格,小目标可能被忽略。
  • 精度可能不如两阶段方法(如Faster R-CNN):尤其是在复杂的背景下。

四、YOLO模型的改进版本

版本主要改进优势
YOLOv1单次检测,回归问题速度快,简单
YOLOv2使用Darknet,Batch Normalization提高检测精度
YOLOv3多尺度检测,FPN改善小目标检测
YOLOv4CSPDarknet、PAN、数据增强进一步提升速度与精度
YOLOv5PyTorch实现,模块化更强更易训练和部署
YOLOv7ELAN、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…...

适用于学校、医院等低压用电场所的智能安全配电装置

引言 电力,作为一种清洁且高效的能源,极大地促进了现代生活的便捷与舒适。然而,与此同时,因使用不当或维护缺失等问题,漏电、触电事件以及电气火灾频发,对人们的生命安全和财产安全构成了严重威胁&#xf…...

基于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…...

Python 装饰器实战:用@syntax 优雅地增强函数功能

# Python 装饰器实战:用syntax 优雅地增强函数功能## 什么是装饰器?装饰器(Decorator)是 Python 中的一种高级特性,它允许你在不修改原函数代码的情况下,动态地给函数添加功能。简单来说,装饰器…...

Leetcode 数据结构刷题 ->链表1

[27. 移除元素]移除等于所给值的元素,我们可以直接使用双指针,对着来的。关键就是把不等于x的值(我改一下,没用val),放到后面去,这样前面就全部都是不等于x值,再计数即可。看代码就对…...

从AHB到AXI:手把手带你用Verilog仿真看Outstanding如何提升SoC数据吞吐

从AHB到AXI:深入解析Outstanding机制如何优化SoC数据吞吐效率 在复杂的SoC设计中,总线架构的选择直接影响系统性能。传统AHB总线虽然结构简单,但在高并发场景下容易成为瓶颈。AXI协议通过引入Outstanding、Out-of-order等机制,显著…...

Realistic Vision V5.1 创意工作流:利用GitHub管理提示词库与生成作品版本

Realistic Vision V5.1 创意工作流:利用GitHub管理提示词库与生成作品版本 你有没有遇到过这种情况?团队里每个人都在用Realistic Vision V5.1生成图片,但大家用的提示词五花八门,好的描述词散落在各个聊天记录里,生成…...

企业生产环境怎么正确做 Vibe Coding:不是让 AI 接管,而是把交付流程做成可控系统

这两年,vibe coding 很热。很多团队第一次接触它时,直觉都是:既然 AI 会写代码,那就让它多写一点,人少管一点,速度自然就上来了。 但一进企业生产环境,这种想法通常很快撞墙。 因为企业真正关心…...

大数据毕业设计容易的题目答疑

1 引言 毕业设计是大家学习生涯的最重要的里程碑,它不仅是对四年所学知识的综合运用,更是展示个人技术能力和创新思维的重要过程。选择一个合适的毕业设计题目至关重要,它应该既能体现你的专业能力,又能满足实际应用需求&#xff…...

告别命令行恐惧:用RU.EXE快捷键玩转硬件诊断(附常用命令速查表)

告别命令行恐惧:用RU.EXE快捷键玩转硬件诊断(附常用命令速查表) 在工业计算机维护和硬件诊断领域,RU.EXE一直是资深工程师的秘密武器。但对于每天奔波在不同现场的技术支持人员来说,面对这个功能强大却界面复古的工具&…...

告别定位漂移:用Python手把手实现GNSS载波相位平滑伪距(附代码)

告别定位漂移:用Python手把手实现GNSS载波相位平滑伪距(附代码) 在无人机自主飞行或自动驾驶小车导航时,你是否遇到过这样的困扰:明明设备静止不动,地图上的定位点却像喝醉酒一样左右摇摆?这种&…...

DownKyi架构深度解析:高效B站视频下载工具的技术实现与实战指南

DownKyi架构深度解析:高效B站视频下载工具的技术实现与实战指南 【免费下载链接】downkyi 哔哩下载姬downkyi,哔哩哔哩网站视频下载工具,支持批量下载,支持8K、HDR、杜比视界,提供工具箱(音视频提取、去水印…...

颠覆式窗口置顶:Topit重新定义Mac多任务处理体验

颠覆式窗口置顶:Topit重新定义Mac多任务处理体验 【免费下载链接】Topit Pin any window to the top of your screen / 在Mac上将你的任何窗口强制置顶 项目地址: https://gitcode.com/gh_mirrors/to/Topit 在数字工作空间爆炸式增长的今天,Mac用…...