Yolo底层原理学习(V1~V3)(第一篇)

一,卷积后的特征图大小计算

众所周知,提到深度学习,必不可少的会提及卷积,那么如何计算卷积之后的图片大小呢?

下图呈现:

如图, 我们令FH,FW为原图像的长度FH*FW。P为padding的长度(假如padding=1,则3*3变成5*5),H,W为图像padding后的长度。OH,OW为卷积后的图像长度。

ps:计算结果为小数的话向下取整。


练习题:

答案:
 


小tip:(1)单阶段检测:分类和检测同时做----速度快

        (2)双阶段检测:先分类,再抠图给检测器做检测---精度高


池化,下采样,上采样概念区分:

  • 池化:一种特殊的采样操作,通常用于减少特征图的空间尺寸,常见的有最大池化和平均池化。
  • 下采样:将数据的空间尺寸减少的操作,池化是一种常见的下采样方法。
  • 上采样:将数据的空间尺寸增加的操作,常见于生成更高分辨率的图像或特征图。

卷积,池化会使得模型对图像的感受野不断增大。

二,深刻理解yolov1模型

不管现在发展到了yolov几,要想深刻理解yolo模型的本质设计,就要回到yolov1~yolov3.

上图为yolov1的网络模型图, 其中都是采用和CNN一样的思路(卷积+激活函数+池化+最后全连接层),但是和CNN不一样的是,CNN全连接层最后通过softmax函数可以直接输出我们分类各类别的概率来完成任务,但是yolo中最后全连接层输出的只是7×7×30的向量,他是怎么实现对原图的目标识别与类别检测的呢?(`ヘ´)=3


解答:
首先,我们需要理解7*7*30这个向量,他的意思是有7*7个格子,每个格子有30个向量(如下图)(包含30个信息,为什么是30个呢?稍后会说)

然后这个7*7的向量会被映射到原图448*448 ,将原图划分为49个格子(注意,不是真的划分,是一种映射),每个格子对应原图的一块区域。


对每个区域信息的理解

然后,这时你可能会想每个格子会有原图该区域的检测信息,理解正确,但是要注意,每个格子并不只有该区域的信息,而是都具有全图像全局信息,为什么呢?(这里是理解难点

由CNN的知识可知,通过层层卷积和池化操作,输出的每个向量信息都具有拥有全局感受野(Global Receptive Field)

  1. 特征表示的层次性和抽象性:

    • 深度卷积网络通过多层卷积和池化操作,逐步提取图像的层次化特征。低层特征(靠近输入层)通常对应边缘、纹理等简单模式,感受野较小。高层特征(靠近输出层)则对应更复杂、更抽象的概念,如物体部件、物体类别等,感受野更大。
    • 当信息传递到网络的最后几层,形成用于预测的77特征图时,每个特征图上的值(对应一个网格单元)已经包含了非常高级和抽象的信息。这些信息不仅仅是简单的像素叠加,而是通过复杂的非线性变换学习到的、对目标检测任务有用的表示。
    • 即使感受野覆盖了整个图像,这些高级特征对于“当前网格单元中心是否有特定类别的物体”这个问题来说,仍然是非常相关的。例如,图像其他部分的物体、背景、甚至物体的上下文信息,都可以帮助模型判断当前网格单元内的区域是否更可能包含某个特定类别的物体(比如,如果网格单元区域看起来像车轮,而图像其他部分有车身,那么它属于车的概率就更高)。
  2. 局部信息的权重和定位:

    • 虽然全局信息被整合,但模型在学习过程中会自动学习到哪些信息对于当前网格单元的预测更重要。对于“当前网格单元中心是否有物体”的判断(置信度分数 Pr(Object) * IoU),模型会赋予网格单元直接覆盖区域的特征更高的权重。
    • 对于边界框坐标(bx, by, bw, bh)的预测,模型学习到的回归函数也会主要关注网格单元覆盖区域的特征来精确定位。全局感受野提供上下文和背景信息,帮助更精确地定位(例如,避免将目标框错误地延伸到背景区域),但最终的坐标预测仍然是以网格单元为中心,并受其局部特征主导的。
  3. 注意力机制(隐式):

    • 可以将深度学习模型看作一种隐式的注意力机制。在训练过程中,模型通过反向传播学习,会“关注”那些对预测目标(即当前网格单元是否包含物体及其类别和位置)最有用的特征。即使感受野很大,模型也会学习到,对于当前网格单元的预测任务,只有来自其中心区域及其附近的信息才是最关键的。
  4. 网格划分的设计:

    • YOLOv1的设计本身就是将图像划分为网格,并让每个网格单元负责其中心区域。网络在训练时会学习到这种责任分配。因此,即使特征具有全局感受野,网络的最终输出(通过全连接层和Sigmoid函数)被训练成主要反映对应网格单元责任区域内的内容。

简单类比:
想象一下,你要判断一张照片的左上角(一个网格单元负责的区域)是否有一只猫。你不仅仅看左上角,你还会看看整个照片的上下文(比如背景是在室内还是室外,是否有其他动物,整体色调等)。这些全局信息(整个照片)帮助你做出更准确的判断(左上角是否有猫,以及是什么类型的猫),但你的最终判断仍然主要基于左上角区域本身的内容。深度学习模型在做类似的事情,它利用全局上下文信息来增强对局部区域的判断能力。

因此,全局感受野并非坏事,它提供了宝贵的上下文信息,有助于提高检测和分类的准确性,同时模型通过学习能够有效地将注意力集中在需要负责的局部区域上。

也就是说,虽然每个格子对应原图的一块区域而已,但是他们都拥有全局感受野(目的:更好进行上下文联系识别),然后通过权重定位更加关注原图该区域的信息识别(注意力机制有点像)。


回到上文,我们将 这个7*7的向量会被映射到原图448*448 ,将原图划分为49个格子(注意,不是真的划分,是一种映射),每个格子对应原图的一块区域后,每个格子都包含30个信息,分别是两个检测框(当初设计是为了提高准确率)的(中心坐标x,y,宽高w,h,及其对应的检测置信度c)*2共10个,然后还有要识别的20个类别的概率(两个检测框共用概率值)共30个。

之后,每个格子都会生成2个检测框,只是如果置信度低于我们认为设定的阈值,会被直接不画出检测框。然后剩下的框会进行非极大值抑制,最终产生概率最高的框。


 对获取的(x,y,w,h)的理解,以及怎么运用的

上文我们说到,没过小格子都会得到x,y和w,h信息。接下来将解读这些信息:
(1) 每个小格子都以自身左上角顶点为(0,0)原点,每个小个子所获取的两个预测框的中心一定在格子里面,并且坐标值都是经过归一化标注于在各自原点的坐标系之中,然后映射到原图坐标:
eg:绿色边框的中心坐标为(0.5,0.5),格子有49个,原图为448*448像素,则每个格子为64个像素,则该绿色中心在原图的映射y坐标为0.5*64+64*4.

(2)而对于w,h,其值也是进行了归一化,映射为原始图像的宽高(这里也是每个格子都拥有全局信息的证明,能获取全局信息)。

eg: w=0.43,h=0.40那么原始图像的宽高就是448*0.43;448*0.40。

好啦好啦,不学了,还有没讲完的,精彩请看下一集~~

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

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

相关文章

前端开发项目性能瓶颈分析

1. 使用 rollup-plugin-visualizer 分析构建 借助 rollup-plugin-visualizer 插件,可以分析通过 rollup 构建出的产物内容,并生成可视化图表,帮助你分析打包后的文件大小以及各个模块的占用情况。 1.1. 安装插件 你需要在你的项目中安装 r…

ExoData.h - OpenExo

ExoData.h文件定位源代码1. 头文件依赖2. 核心类声明3. 主要成员函数关节遍历工具关节与配置相关数据/状态操作控制参数/校准4. 主要成员变量总结文件定位 位置:src/ExoData.h 作用:定义 ExoData 类,作为 Exo 系统全局数据的核心容器。它将设…

缓存HDC内容用于后续Direct2D绘制.

思路&#xff1a;把HDC里的内容保存到Direct2D格式的位图里&#xff0c;后续直接调用 renderTarget->DrawBitmap即可。本例中&#xff0c;位图将保存为类的字段。本例中 COM 接口指针皆使用 com_ptr&#xff0c;这是 WinRT 的 COM 智能指针类&#xff0c;com_ptr<I>::…

“抓了个寂寞”:一次实时信息采集的意外和修复

1. 那天下午&#xff0c;舆情系统“迟到”了 那天下午&#xff0c;公司运营那边突然在群里喊&#xff1a;“XX事件都快上热搜榜前十了&#xff0c;咱们系统咋没反应&#xff1f;” 我愣了几秒&#xff0c;立马翻后台日志、爬虫执行记录&#xff0c;结果一查&#xff0c;还真有点…

数据结构之迪杰斯特拉算法

前言&#xff1a;前面两篇文章介绍了生成图的最小生成树的算法&#xff0c;接下来两篇文章会介绍图的最短路径的算法&#xff0c;迪杰斯特拉算法和弗洛伊德算法。迪杰斯特拉算法是用来计算一个点到其他所有点的最短路径&#xff0c;这个点称之为源点。 一、实现流程 回忆一下…

技术文档 | OpenAI 的 Kafka 演进之路与 Pulsar 迁移潜力

导读ChatGPT 用户量指数级暴涨&#xff0c;OpenAI 的 Kafka 集群在一年内增长 20 倍至 30 个集群[1]&#xff0c;其 Kafka 架构面临日均千亿级消息&#xff08;峰值 QPS 800万/秒&#xff09; 的压力。这揭示了一个关键事实&#xff1a;OpenAI 的成功不只依赖模型&#xff0c;更…

【bug】 jetson上opencv无法录制h264本地视频

在Jetson Orin NX上无法使用opencv直接录制h264/h265视频流&#xff08;h264格式的视频流才能在浏览器播放&#xff09; 解决&#xff1a; 软件编码&#xff1a;需要源码编译opencv 1.环境准备 pip uninstall opencv-python sudo apt install build-essential cmake git python…

解决http的web服务中与https服务交互的问题

问题背景&#xff1a; 需要在一个http的web服务中直接跟另一个https服务交互&#xff0c;不经过自身后端。 又来到了熟悉的跨域访问问题。 解决逻辑就是使用nginx转发&#xff0c;涉及到的文件也就是nginx.conf文件&#xff0c;前面解决minio链接时已经有经验了&#xff0c;但…

网站访问信息追踪系统在安全与性能优化中的关键作用——网络安全—仙盟创梦IDE

<?php // 收集访问信息 $visitorInfo未来之窗 [timestamp > date(Y-m-d H:i:s),ip > $_SERVER[REMOTE_ADDR] ?? unknown,page > $_SERVER[REQUEST_URI] ?? unknown,method > $_SERVER[REQUEST_METHOD] ?? unknown,user_agent > $_SERVER[HTTP_USER_A…

Oracle 时间处理函数和操作符笔记

前言 写sql时经常用到时间处理函数&#xff0c;我整理了一份Oracle的常用sql笔记,供大家参考。 如果对你有帮助&#xff0c;请点赞支持~ 多谢&#x1f64f; 笔记 -- 1. 获取当前日期和时间 -- SYSDATE, SYSTIMESTAMP, CURRENT_DATE, CURRENT_TIMESTAMP, LOCALTIMESTAMP SELE…

TDengine时序数据库 详解

1. TDengine 简介 TDengine 是一款 高性能、分布式、支持 SQL 的时序数据库&#xff08;Time-Series Database, TSDB&#xff09;&#xff0c;专为 物联网&#xff08;IoT&#xff09;、工业互联网、金融监控、日志分析 等场景设计。其核心特点包括&#xff1a; 超高性能&…

【IDEA】idea怎么修改注册的用户名称?

文章目录[toc]问题**方法 1&#xff1a;通过 JetBrains 账户网站修改****方法 2&#xff1a;通过 IDEA 内跳转修改&#xff08;快捷方式&#xff09;****注意事项****补充&#xff1a;修改 IDEA 内的项目级用户名**如何退出IDEA用户登录&#xff1f;问题 在 IntelliJ IDEA 中修…

AR眼镜重塑外科手术导航:精准“透视”新突破

在现代医学领域&#xff0c;增强现实&#xff08;AR www.teamhelper.cn &#xff09;技术正以前所未有的方式改变外科手术导航的面貌。通过为医生提供实时的三维可视化、精准的空间定位和智能交互功能&#xff0c;AR眼镜正在成为手术室中的重要工具。本文将系统介绍AR眼镜在手术…

服务端对接 HTTP 接口传输图片 采用base64还是 multipart/form-data

在服务端对接HTTP接口传输图片时&#xff0c;选择 multipart/form-data 还是 Base64 编码&#xff0c;需要根据具体场景权衡。以下是详细对比和建议&#xff1a;1. multipart/form-data 优点 更适合大文件传输&#xff1a; 直接以二进制流传输图片&#xff0c;无需编码/解码&am…

如何在 Windows 上安装 MongoDB 及常见问题

MongoDB 是一款 NoSQL 数据库&#xff0c;在数据管理和存储方面以其无与伦比的强大功能和多功能性而脱颖而出。该平台凭借其灵活性、可扩展性和高性能保持着领先优势&#xff0c;赢得了众多企业的信赖。在这方面&#xff0c;MongoDB 以及其在 Windows 操作系统中的表现&#xf…

JS与Go:编程语言双星的碰撞与共生

在编程语言的璀璨星河中&#xff0c;JavaScript&#xff08;简称JS&#xff09;与Go语言凭借各自独特的魅力&#xff0c;成为不同领域的佼佼者。前者以灵活多变的姿态征服了前端世界&#xff0c;后者则以高效稳健的特性在后端领域崭露头角&#xff0c;二者的碰撞与共生&#xf…

【开源】WpfMap:一个基于WPF(Windows Presentation Foundation)技术构建的数据可视化大屏展示页面

文章目录一、项目概述1.1 项目定位二、适用场景2.1 企业数据展示2.2 监控中心2.3 会议展示三、功能特性3.1 高度自定义3.2 实时更新3.3 丰富的可视化组件3.4 良好的用户体验四、技术资源4.1 开源地址一、项目概述 1.1 项目定位 WpfMap是一个基于WPF&#xff08;Windows Prese…

macbook安装homebrew

homebrew是什么&#xff1f;Homebrew 是 macOS&#xff08;以及 Linux&#xff09;上的一款包管理工具&#xff0c;被称为 “macOS 缺失的包管理器”&#xff0c;它能帮助用户轻松安装、卸载、更新各种命令行工具、开发环境、应用程序等。简单来说&#xff0c;它的作用类似手机…

ViLT: 无卷积或区域监督的视觉-语言Transformer

温馨提示&#xff1a; 本篇文章已同步至"AI专题精讲" ViLT: 无卷积或区域监督的视觉-语言Transformer 摘要 视觉与语言预训练&#xff08;Vision-and-Language Pre-training, VLP&#xff09;在多种联合视觉与语言的下游任务中显著提升了性能。目前的 VLP 方法在很…

初识决策树-理论部分

决策树 前言 参考了大佬的博客&#xff1a;博客地址 适合分析离散数据&#xff0c;若是连续数据需要转换成离散数据再做分析(比如图中的年龄) 结构 决策树由节点和有向边组成&#xff1b;节点可分为内部节点和叶节点 内部节点:特征叶节点:类别有向边:特征的取值范围 在用决…