图解YOLO(You Only Look Once)目标检测(v1-v5)
1. YOLO系列整体介绍
YOLO属于深度学习经典检测方法中的单阶段(one - stage)类型,与两阶段(two - stage,如Faster - rcnn、Mask - Rcnn系列)方法相对。
不同模型性能
单阶段方法的最核心优势是速度非常快,适合做实时检测任务,但通常检测效果不如两阶段方法
2. 指标分析
map指标:综合衡量检测效果,不能仅依靠精度(Precision)和召回率(Recall)来评估检测模型性能。
IOU(交并比):计算公式为,用于衡量预测框与真实框的重叠程度。
Precision和Recall:
Precision(精度)公式为,
Recall(召回率)公式为。
基于置信度阈值来计算,例如分别计算0.9;0.8;0.7
0.9时:TP+FP = 1,TP = 1 ;FN = 2;Precision=1/1;Recall=1/3;
AP与MAP:
AP(Average Precision)计算需要考虑所有阈值,MAP(Mean Average Precision)是所有类别的平均AP,通过Precision - Recall曲线来理解。
3. YOLO - V1
核心思想与方法:
经典的one - stage方法,把检测问题转化成回归问题,使用一个CNN即可完成检测任务。
应用领域:可以对视频进行实时检测,应用领域广泛。
性能指标对比:
网络架构:输入图像后经过一系列卷积层(CR)、全连接层(FC)处理,最终输出预测结果。7×7表示最终网格的大小,每个网格预测B个边界框,每个边界框包含位置(X, Y, H, W)、置信度C等信息。
7×7表示最终网格的大小,每个网格预测B个边界框,每个边界框包含位置(X, Y, H, W)、置信度C等信息。
每个数字的含义:
10 =(X,Y,H,W,C)*B(2个)当前数据集中有20个类别,
7*7表示最终网格的大小(S*S)*(B*5+C)
损失函数:包含位置误差、置信度误差(分含有物体和不含物体两种情况)、分类误差。
NMS(非极大值抑制)
优点与问题:优点是快速、简单;问题在于每个Cell只预测一个类别,重叠物体检测存在困难,小物体检测效果一般,长宽比可选但单一。
4. YOLO - V2
整体提升:相比YOLO - V1更快、更强,在VOC2007数据集上mAP达到78.6。
改进点
Batch Normalization:舍弃Dropout,卷积后全部加入Batch Normalization,使网络每一层输入归一化,收敛更容易,mAP提升2%。
更大的分辨率:V1训练和测试分辨率不同,训练时用的是224*224,测试时使用448*448,可能导致模型水土不服。V2训练时额外进行10次448×448的微调,使用高分辨率分类器后,mAP提升约4%。
网络结构:采用DarkNet架构,实际输入为416×416,没有FC层,5次降采样,通过1×1卷积节省参数。
聚类提取先验框:通过K - means聚类确定先验框,使预测的box数量更多(13×13×n),先验框不是直接按固定长宽比给定,引入anchor boxes后召回率提升。
Anchor Box:
通过引入anchor boxes,使得预测的box数量更多(13*13*n)
跟faster-rcnn系列不同的是先验框并不是直接按照长宽固定比给定
Directed Location Prediction:改进位置预测方式,使用相对grid cell的偏移量,避免模型不稳定问题,计算公式为
例如预测值(σtx,σty,tw,th)=(0.2,0.1,0.2,0.32),anchor框为:
在特征图位置:
在原位置:
感受野与小卷积核优势:
概述来说就是特征图上的点能看到原始图像多大区域
如果堆叠3个3*3的卷积层,并且保持滑动窗口步长为1,其感受野就是7*7的了,这跟一个使用7*7卷积核的结果是一样的,那为什么非要堆叠3个小卷积呢?
假设输入大小都是h*w*c,并且都使用c个卷积核(得到c个特征图),可以来计算一下其各自所需参数:
很明显,堆叠小的卷积核所需的参数更少一些,并且卷积过程越多,特征提取也会越细致,加入的非线性变换也随着增多,还不会增大权重参数个数,这就是VGG网络的基本出发点,用小的卷积核来完成体特征提取操作。
Fine - Grained Features:融合之前的特征,解决最后一层感受野太大导致小目标可能丢失的问题。
Multi - Scale:利用卷积操作特性,在一定iterations之后改变输入图片大小,最小320×320,最大608×608,以适应不同尺度目标检测。
5. YOLO - V3
主要改进:最大改进在于网络结构,更适合小目标检测。特征提取更细致,融入多尺度特征图信息预测不同规格物体,先验框更丰富(3种scale,每种3个规格,共9种),改进softmax用于预测多标签任务。
多scale检测:设计3个scale用于检测不同大小物体,介绍了不同scale的预测张量以及与特征图的关系。
cale变换经典方法
左图:对不同的特征图分别利用;右图:不同的特征图融合后进行预测
残差连接:采用resnet的思想,堆叠更多层进行特征提取,利用残差连接提升性能。从今天的角度来看,基本所有网络架构都用上了残差连接的方法
核心网络架构:没有池化和全连接层,全部采用卷积,下采样通过stride为2实现,展示了网络的输入、卷积层操作以及输出的相关信息。
先验框设计:
13*13特征图上:(116x90),(156x198),(373x326)26*26特征图上:(30x61),(62x45),(59x119)
52*52特征图上:(10x13),(16x30),(33x23)
softmax层替代:使用logistic激活函数替代softmax,用于预测物体的多个标签。
6. YOLO - V4
整体介绍:虽作者更换,但核心精髓未变,在单GPU上训练效果良好,从数据层面和网络设计层面进行大量改进。
V4贡献:
亲民政策,单GPU就能训练的非常好,接下来很多小模块都是这个出发点两大核心方法,从数据层面和网络设计层面来进行改善
消融实验,工作量不轻全部实验都是单GPU完成
Bag of freebies(BOF)
数据增强:包括调整亮度、对比度、色调、随机缩放、剪切、翻转、旋转,Mosaic数据增强(四张图像拼接成一张训练)、Random Erase(用随机值或训练集平均像素值替换图像区域)、Hide and Seek(根据概率随机隐藏一些补丁)等方法。
Mosaic data augmentation
Random Erase:用随机值或训练集的平均像素值替换图像的区域
Hide and Seek:根据概率设置随机隐藏一些补丁
网络正则化与损失函数:采用Dropout、Dropblock等网络正则化方法,处理类别不平衡问题,设计合适的损失函数。
DropBlock
之前的dropout是随机选择点(b),现在吃掉一个区域
训练优化相关方法
Self-adversarial-training(SAT)
通过引入噪音点来增加游戏难度
Label Smoothing:
神经网络最大的缺点:自觉不错(过拟合),让它别太自信例如原来标签为(0,1):
缓解神经网络过拟合问题,使标签取值范围从(0,1)调整为[0.05,0.95],使用后能使簇内更紧密,簇间更分离。
IOU相关损失函数:
IOU损失(1 - IOU)存在的问题,如无相交时无法梯度计算、相同IOU无法反映实际情况;
GIOU损失(引入最小封闭形状C)、DIOU损失(直接优化距离)、CIOU损失(考虑重叠面积、中心点距离、长宽比三个几何因素)。
DIOU损失:
其中分子计算预测框与真实框的中心点欧式距离d 分母是能覆盖预测框与真实框的最小BOX的对角线长度c 直接优化距离,速度更快,并解决GIOU问题
CIOU损失:损失函数必须考虑三个几何因素:重叠面积,中心点距离,长宽比 其中α可以当做权重参数
DIOU - NMS(不仅考虑IoU值,还考虑两个Box中心点之间的距离)和SOFT - NMS(柔和处理,更改分数而非直接剔除)。
SOFT-NMS
Bag of specials(BOS)
网络改进方法:增加稍许推断代价但可提高模型精度,包括网络细节部分的改进,引入注意力机制、特征金字塔等方法。
SPPNet(Spatial Pyramid Pooling)(用最大池化满足最终输入特征一致)
CSPNet(Cross Stage Partial Network)(按特征图channel维度拆分,一部分正常走网络,一部分直接concat到输出)
CBAM(引入注意力机制,V4中用的是空间注意力机制SAM)
V4中用的是SAM,也就是空间的注意力机制
不光NLP,语音识别领域在搞attention,CV中也一样
YOLOV4中的Spatial attention module
一句话概述就是更简单了,速度相对能更快一点
PAN(引入自底向上的路径,使底层信息更易传到顶部,且采用拼接而非加法)
先从FPN说起
自顶向下的模式,将高层特征传下来
PAN(Path Aggregation Network)
引入了自底向上的路径,使得底层信息更容易传到顶部
并且还是一个捷径,红色的没准走个100层(Resnet),绿色的几层就到了
Mish激活函数公式为,计算量增加但效果有提升
消除网格敏感性:坐标回归预测值在0 - 1之间,在grid边界表示存在困难,通过在激活函数前加系数(大于1)缓解该问题。
为了缓解这种情况可以在激活函数前加上一个系数(大于1的):
整体网络架构:采用CSPDarknet53架构,展示了网络的输入、各层操作以及最终的输出等信息。
7. YOLOV5源码相关
可视化工具:
1.配置好netron,详情:https://github.com/lutzroeder/netron
桌面版:https://lutzroeder.github.io/netron/
2.安装好onnx,pip install onnx即可
3.转换得到onnx文件,脚本原始代码中已经给出
4.打开onnx文件进行可视化展示(.pt文件展示效果不如onnx)
Focus模块:先分块,后拼接,再卷积,间隔完成分块任务,使卷积输入的C变为12,目的是加速,不增加AP。
BottleneckCSP:注意叠加个数,里面包含resnet模块,相比V3版本多了CSP,效果有一定提升。
PAN流程:PAN流程中各模块的操作,如Focus、CONV、BottleneckCSP、Concat、Upsample等层的参数和连接关系。
相关文章:

图解YOLO(You Only Look Once)目标检测(v1-v5)
1. YOLO系列整体介绍 YOLO属于深度学习经典检测方法中的单阶段(one - stage)类型,与两阶段(two - stage,如Faster - rcnn、Mask - Rcnn系列)方法相对。 不同模型性能 单阶段方法的最核心优势是速度非常快…...

基于AI应用创业IDEA:使用百度搜索开放平台的MCP广场智能推荐MCPServices服务
基于AI应用创业IDEA:使用百度搜索开放平台的MCP广场智能推荐MCPServices服务 在当今快速发展的技术时代,人工智能(AI)已经成为推动各行各业创新的关键力量。特别是在创业领域,AI技术不仅能够帮助提升产品性能…...

WebRTC服务器Coturn服务器的管理平台功能
1、概述 开源的webrtc服务器提供管理平台功能,用户可以通过web页面进行访问配置coturn服务器,主要包括管理平台功能和telnet的管理功能,coturn相当于telnet服务器,可能通过配置来开启这两个功能,方便查看coturn服务器…...

户外监控起雾终结者:PD3电解除湿器全方位解决方案
一、监控画面模糊?潮湿正在侵蚀您的安防系统! 清晨的浓雾中,监控画面逐渐模糊;暴雨过后,摄像头内部凝结水珠;冬季温差导致镜头起雾,关键画面完全丢失...这些场景每天都在全国各地的安防系统中上…...

[mysql]数据类型精讲
目录 数据类型精讲: 整数类型 浮点类型 日期和时间类型 文本字符串类型 数据类型精讲: 精度问题:不能损失数据 性能问题:表的设计,范式的讲解. 表设计的时候需要设置字段,我们现在要把字段类型讲完.,细节点一点点给大家拆解. Float和double是有精度的损失的,这边推荐使用…...

并发设计模式实战系列(7):Thread Local Storage (TLS)
🌟 大家好,我是摘星! 🌟 今天为大家带来的是并发设计模式实战系列,第七章Thread Local Storage (TLS),废话不多说直接开始~ 目录 一、核心原理深度拆解 1. TLS内存模型 2. 关键特性 二、生活化类比&a…...
跟我学C++中级篇——处理对象的复制
一、对象的传递 在应用程序中,经常会遇到不同线程或不同模块间需要进行对象的传递,本来传递不是什么多大的事。但问题是,如果对象的值大到一定的程度后,传递不是问题可对象值的处理反而成了问题了。举一个现实世界的例子…...

Tailwind CSS 实战:基于 Kooboo 构建企业官网页面(一)
目录 一、技术选型:为什么选择Tailwind Kooboo? 二、CDN方案 vs 传统安装 三、CDN方式实战步骤 一、技术选型:为什么选择Tailwind Kooboo? 1.1 黄金组合优势 Tailwind CSS:原子化CSS框架,提供&#x…...
Go语言实战:快速搭建完整的用户认证系统
前言 在本文中,我将介绍如何使用 Go 语言搭建一个包含用户注册、登录、登出功能的完整认证系统。该系统使用 SQLite 作为数据库,JWT 作为身份验证token,并实现了优雅关闭等特性。 技术栈 Go 语言 SQLite 数据库 JWT (JSON Web Token) G…...

Bolsig+超详细使用教程
文章目录 Bolsig介绍Bolsig的使用 Bolsig介绍 BOLSIG 是一款用于求解弱电离气体中电子玻尔兹曼方程的免费计算程序,适用于均匀电场条件下的群体实验、气体放电及碰撞型低温等离子体研究。在此类环境中,电子分布函数呈现非麦克斯韦特性,其形态…...

uni-app云开发总结
uni-app云开发总结 云开发无非就三个概念:云数据库、云函数、云存储 uni-app中新增了一个概念叫做云对象,它其实就是云函数的加强版,它是导出的一个对象,对象中可以包含多个操作数据库的函数,接下来咱们就详细对uni-…...
新闻速递丨Altair 与 Databricks 达成合作,加速数据驱动型创新
NEWS Altair 近日宣布与数据和人工智能公司 Databricks 达成战略合作,通过新一代数据统一化、图谱驱动智能和企业级人工智能(AI)技术赋能双方客户。 此次合作整合了两大平台的核心优势,将 Altair RapidMiner 平台的强大功能&…...
vscode和git 踩坑
git init经常 在 vscode push错误问题: 正确姿势:先 GitHub 上建仓库 → git clone 拉到本地 → 再用 VSCode 打开编辑 ❌ 不是:VSCode 里 git init → 再去 GitHub 选个仓库绑定 举个对比 操作流程是否推荐后果GitHub 创建仓库 → git clone → 用 VSC…...

《ATPL地面培训教材13:飞行原理》——第7章:失速
翻译:刘远贺;工具:Cursor & Cluade 3.7 第7章:失速 目录 引言失速的原因升力曲线失速恢复接近失速时的飞机行为接近失速时的飞行控制使用失速识别失速速度失速警告人工失速警告装置基本失速要求(EASA和FAR&…...

在html中如何创建vue自定义组件(以自定义文件上传组件为例,vue2+elementUI)
1、先上代码:vueUpload.js var dom <div class"upload-file"><el-upload :action"uploadFileUrl" :before-upload"handleBeforeUpload" :file-list"fileList" :limit"limit":on-error"handleUpl…...

《使用 Cesium 加载静态热力图显示的实现步骤》
Cesium——使用cesium 加载静态热力图显示 实现思路 要在 Cesium 中加载静态热力图,我们需要完成以下几个主要步骤: 1、计算热力图数据的四至范围和中心点。 2、初始化热力图并设置相关参数。 3、将数据添加到热力图中。 4、定位到热力图的位置并刷…...
Spring 事务传播行为
事务传播行为(Transaction Propagation Behavior)是指多个拥有事务的方法在嵌套调用时的事务控制方式。以下是常见的事务传播行为及其应用场景: 1. PROPAGATION_REQUIRED(默认) 定义:如果当前存在事务&…...

mfc学习(一)
mfc为微软创建的一个类qt框架的客户端程序,只不过因为微软目前有自己 的亲身儿子C#(.net),所以到2010没有进行维护。然后一些的工业企业还在继续进行维护相关的内容。我目前就接手一个现在这样的项目,其实本质与qt的思路是差不多的…...

ThreadLocal详解与实战指南
目录 1. ThreadLocal基本概念 1.1 核心原理 1.2 主要特性 2. ThreadLocal API详解 2.1 核心方法 2.2 基本使用方式 3. ThreadLocal使用场景与实战 3.1 场景一:用户身份信息传递 实现步骤 1.创建用户上下文类 2.创建过滤器或拦截器来设置和清理用户信息 …...
[FPGA基础] RAM篇
Xilinx FPGA RAM 使用指南 1. 引言 随机存取存储器(RAM)是 Xilinx FPGA 设计中用于存储和快速访问数据的重要资源。Xilinx FPGA 提供多种 RAM 类型,包括块 RAM(Block RAM)和分布式 RAM(Distributed RAM&a…...

【含文档+PPT+源码】基于微信小程序的校园快递平台
项目介绍 本课程演示的是一款基于微信小程序的校园快递平台,主要针对计算机相关专业的正在做毕设的学生与需要项目实战练习的 Java 学习者。 1.包含:项目源码、项目文档、数据库脚本、软件工具等所有资料 2.带你从零开始部署运行本套系统 3.该项目附带…...

【CODEMATE】进制转换(transform) 粤港澳青少年信息学创新大赛 C/C++/Python 解题思路
目录 问题描述做题思路,解决过程思路:踩过的坑:核心代码C 语言 / C 切片:C 语言 / C 判断 ‘A’ 数量:Python 切片:Python 判断 ‘A’ 数量: 完整代码C 语言 完整代码C 完整代码Python 完整代码…...
统计文件中单词出现的次数并累计
# 统计单词出现次数 fileopen("E:\Dasktape/python_test.txt","r",encoding"UTF-8") f1file.read() # 读取文件 countf1.count("is") # 统计文件中is 单词出现的次数 print(f"此文件中单词is出现了{count}次")# 2.判断单词出…...
DbCreateHelper数据库创建指南
DbCreateHelper 是一个用于简化数据库创建和初始化过程的工具类,它封装了常见的数据库操作,使开发者能够更便捷地创建、配置和管理数据库。 1.主要功能 数据库创建与初始化 表结构创建与管理 数据库版本控制 数据迁移支持 数据库连接管理 基本用法…...

2025 Java 开发避坑指南:如何避免踩依赖管理的坑?
在 Java 开发的世界里,依赖管理就像是一座看不见的桥梁,连接着项目所需的各种第三方库和框架。然而,这座桥梁并非总是稳固,稍有不慎就可能掉入 “依赖地狱”,导致项目编译失败、运行异常。2025 年,随着开源…...

ARM服务器与X86服务器核心区别分析
ARM服务器与X86服务器核心区别分析 一、架构设计与指令集差异 指令集本质 ARM:基于RISC(精简指令集),指令定长且简单,单周期执行效率高,硬件设计复杂度低,适合低功耗场景。 X86…...

人口老龄化丨AI健康小屋如何实现防病于未然
随着全球老龄化加剧,“银发浪潮” 对医疗资源、养老护理和健康管理提出了严峻挑战。 由此智绅科技应运而生,七彩喜智慧养老系统构筑居家养老安全网。 AI 健康小屋作为银发科技的创新载体,通过智能化健康监测、精准化风险预警、便捷化医疗衔…...

记录搭建自己应用中心
记录搭建自己应用中心 应用架构主应用-管理中心系统文件系统子应用 日志系统日志系统前端日志系统后端 用户系统接入使用暂未完成 研发管理需求面板消息推送任务分配应用发布 应用架构 一直想做个试试,这是一个简易版的,主要是整合下知识的,…...

git版本回退 | 远程仓库的回退 (附实战Demo)
目录 前言1. 基本知识2. Demo3. 彩蛋 前言 🤟 找工作,来万码优才:👉 #小程序://万码优才/r6rqmzDaXpYkJZF 爬虫神器,无代码爬取,就来:bright.cn 本身暂存区有多个文件,但手快了&…...

STM32 的 GPIO和中断
GPIO的简单介绍 内部结构 施密特触发器(TTL肖特基触发器) 的工作原理: 施密特触发电路(简称)是一种波形整形电路,当任何波形的信号进入电路时,输出在正、负饱和之间跳动,产生方波或…...