关于YOLO模型架构中的strides

news2024/9/19 10:51:05

  在Ultralytics YOLO模型架构中,m.stride是一个非常关键的属性,用于描述网络在不同尺度(scale)上的空间压缩程度。解释m.stride的原理之前,我们首先要了解深度学习中卷积神经网络(CNN)的基本工作原理。

卷积神经网络(CNN)和Stride

  卷积神经网络通过一系列的卷积层、池化层等对输入数据进行处理。在这个过程中,特征图(Feature Map)的空间尺寸逐渐减小,而深度(即特征的数量或通道数)逐渐增加。这种空间尺寸的缩减是通过卷积层的stride和池化层实现的。其中,stride是卷积过程中滤波器(kernel)移动的步长。如果stride大于1,则特征图的空间维度会缩减,有助于增大感受野并减少计算量。

m.stride 在YOLO中的应用

  在YOLO的架构中,模型通常会有多个输出尺度,这允许模型能够检测在多个尺度上的物体。这意味着同一幅图像将被处理成不同大小的特征图,以便检测不同大小的物体。m.stride属性就是用来表示这些不同尺度下,输入图像相对于输出特征图的缩减比例。
  例如,假设输入图像大小为[3, 640, 640](通道数, 高度, 宽度),而某一特征图的大小为[255, 20, 20](通道数, 高度, 宽度),则该特征图的stride可以计算为640 / 20 = 32。这意味着特征图上的每一个单元格,对应原始图像上32x32大小的区域。YOLO模型中的m.stride数组就记录了所有尺度上的这种缩减比例。

参考yolov8-p2.yaml:

# Ultralytics YOLO 🚀, AGPL-3.0 license
# YOLOv8 object detection model with P2-P5 outputs. For Usage examples see https://docs.ultralytics.com/tasks/detect

# Parameters
nc: 80 # number of classes
scales: # model compound scaling constants, i.e. 'model=yolov8n.yaml' will call yolov8.yaml with scale 'n'
  # [depth, width, max_channels]
  n: [0.33, 0.25, 1024]
  s: [0.33, 0.50, 1024]
  m: [0.67, 0.75, 768]
  l: [1.00, 1.00, 512]
  x: [1.00, 1.25, 512]

# YOLOv8.0 backbone
backbone:
  # [from, repeats, module, args]
  - [-1, 1, Conv, [64, 3, 2]] # 0-P1/2=========80x320x320
  - [-1, 1, Conv, [128, 3, 2]] # 1-P2/4=========160x160x160
  - [-1, 3, C2f, [128, True]]  #2=========160x160x160
  - [-1, 1, Conv, [256, 3, 2]] # 3-P3/8=========320x80x80
  - [-1, 6, C2f, [256, True]]  #4=========320x80x80
  - [-1, 1, Conv, [512, 3, 2]] # 5-P4/16=========640x40x40
  - [-1, 6, C2f, [512, True]] #6=========640x40x40

  - [-1, 1, Conv, [1024, 3, 2]] # 7-P5/32=========640x20x20
  - [-1, 3, C2f, [1024, True]] #8=========640x20x20
  - [-1, 1, SPPF, [1024, 5]] # 9=========640x20x20

# YOLOv8.0-p2 head
head:
  - [-1, 1, nn.Upsample, [None, 2, "nearest"]] #10 ========= 640x40x40
  - [[-1, 6], 1, Concat, [1]] #11 cat backbone P4========= 640x40x40+ 640x40x40 = 1280x40x40
  - [-1, 3, C2f, [512]] # 12========= 640x40x40

  - [-1, 1, nn.Upsample, [None, 2, "nearest"]] #13=========640x80x80
  - [[-1, 4], 1, Concat, [1]] #14 cat backbone P3=========640x80x80+ 320x80x80 =960x80x80
  - [-1, 3, C2f, [256]] # 15 (P3/8-small)=========320x80x80

  - [-1, 1, nn.Upsample, [None, 2, "nearest"]] #16 =========320x160x160
  - [[-1, 2], 1, Concat, [1]] #17 cat backbone P2=========320x160x160 + 160x160x160 = 480x160x160
  - [-1, 3, C2f, [128]] # 18 (P2/4-xsmall)=========160x160x160

  - [-1, 1, Conv, [128, 3, 2]] #19=========160x80x80
  - [[-1, 15], 1, Concat, [1]] #20cat head P3=========160x80x80 + 320x80x80 = 480x80x80
  - [-1, 3, C2f, [256]] # 21 (P3/8-small)=========320x80x80

  - [-1, 1, Conv, [256, 3, 2]] #22=========320x40x40
  - [[-1, 12], 1, Concat, [1]] #23 cat head P4=========320x40x40 +  640x40x40 = 960x40x40
  - [-1, 3, C2f, [512]] # 24 (P4/16-medium)=========640x40x40

  - [-1, 1, Conv, [512, 3, 2]] #25=========640x20x20
  - [[-1, 9], 1, Concat, [1]] #26 cat head P5=========640x20x20 + 640x20x20 = 1280x20x20
  - [-1, 3, C2f, [1024]] # 27 (P5/32-large)=========640x20x20

  - [[18, 21, 24, 27], 1, Detect, [nc]] # Detect(P2, P3, P4, P5)

从yaml来看,总共有四个输出,分别是P2, P3, P4, P5,我们就这四个输出来看一下。对于P2,如果输入尺寸是640x640,特征图是160x160x160,根据公式来算,stride应该是:

请添加图片描述)

同理,剩下的就分别是16,32,64

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

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

相关文章

png图片如何缩小体积?这个方法效果不错

图片压缩是我们生活中经常都会遇到的问题。在日常工作中图片体积过大的话,在使用过程中就会收到影响,比如加载过慢等。那么,当我们想要对png图片进行压缩处理的时候,要怎么操作呢?很简单,使用图片在线压缩&…

【sping】在logback-spring.xml 获取项目名称

在日志文件中我们想根据spring.application.name 创建出的文件夹。 也不想死在XML文件中。 application.yml spring:application:name: my-demo logback-spring.xml <springProperty name"application_name" scope"context" source"spring.app…

如何用微信小程序实现远程控制无人售货柜

如何用微信小程序实现远程控制无人售货柜呢&#xff1f; 本文描述了使用微信小程序调用HTTP接口&#xff0c;实现控制无人售货柜&#xff0c;独立控制售货柜、格子柜的柜门。 可选用产品&#xff1a;可根据实际场景需求&#xff0c;选择对应的规格 序号设备名称厂商1智能WiFi…

数值分析复习:Richardson外推和Romberg算法

文章目录 Richardson外推Romberg&#xff08;龙贝格&#xff09;算法 本篇文章适合个人复习翻阅&#xff0c;不建议新手入门使用 本专栏&#xff1a;数值分析复习 的前置知识主要有&#xff1a;数学分析、高等代数、泛函分析 本节继续考虑数值积分问题 Richardson外推 命题&a…

网络爬虫快速入门及爬取百度搜索结果(附源码)

前言 爬虫的基本结构及工作流程 1. 确定目标 首先&#xff0c;确定你想要爬取的目标&#xff0c;包括目标网站或网页、需要提取的数据类型&#xff08;如文本、图片、视频等&#xff09;以及爬取的深度&#xff08;单页、整个网站等&#xff09;。 2. 获取网页内容 使用HT…

为智算产业高质量发展探寻路径,又一重要生态合作启动

4月22日&#xff0c;由中国工业经济联合会主办的“2024中国工业经济高峰论坛智能算力产业高质量发展论坛”落幕。院士专家、研究机构、以及来自智能算力产业上下游企业代表近180人出席&#xff0c;围绕完善算力基础设施、深化算力赋能行业应用、推动区域数字化发展等热点议题展…

【MySQL 数据宝典】【磁盘结构】- 005 Undo log 撤销日志

一、基本介绍 ​ 每当我们要对一条记录做改动时&#xff08;这里的改动可以指 INSERT 、 DELETE 、 UPDATE &#xff09;&#xff0c;都需要留一手 -> 把回滚时所需的东西都给记下来 ​ 你插入一条记录时&#xff0c;至少要把这条记录的主键值记下来&#xff0c;之后回滚的…

大数据技术应用实训室解决方案

一、大数据课程体系 1.1 大数据实验实训课程体系设计依据 大数据实验实训课程体系的设计依据主要围绕培养目标、培养方案和课程体系建设三个方面来展开。 1、培养目标 大数据实验实训课程的设计旨在培养具备大数据理论知识和实践技能的专业人才。具体而言&#xff0c;这些人才…

刷课必备!用Python实现网上自动做题

前言 开学少不了老师会布置一些 软件上面的作业&#xff0c;今天教大家用python制作自动答题脚本&#xff0c;100%准确率哦喜欢的同学记得关注、收藏哦 环境使用 Python3.8Pycharm 模块使用 import requests —> 数据请求模块 pip install requestsimport parsel —>…

TypeError: FormatCode() got an unexpected keyword argument ‘verify‘

背景 使用mmdet3d调试项目&#xff0c;提示下面的错误 笔者使用的mmcv版本为mmcv-full1.4.0 原因分析 从截图中可以看出错误出现在/usr/local/lib/python3.8/dist-packages/mmcv/utils/config.py的第496行&#xff1a;text, _ FormatCode(text, style_configyapf_style, v…

环回光模块

&#x1f44f;&#x1f4cd;环回光模块&#xff08;Lookback&#xff09;&#xff0c;也称为光模块自环测试回路器&#xff0c;用于测试系统或网络中的信号回传。通过回传信号&#xff08;主要是成对连接发射端到接收端的一侧&#xff09;&#xff0c;可以检测网络链路中各种潜…

java网络编程 BufferedReader的readLine方法读不到数据且一直阻塞

最近在整理Java IO相关内容&#xff0c;会遇到一些以前没有注意的问题&#xff0c;特此记录&#xff0c;以供自查和交流。 需求&#xff1a; 基于Java的BIO API&#xff0c;实现简单的客户端和服务端通信模型&#xff0c;客户端使用BufferedReader的readLine方法读取System.i…

​「Python绘图」绘制皮卡丘

python 绘制皮卡丘 一、预期结果 二、核心代码 import turtle print("开始绘制皮卡丘") def getPosition(x, y):turtle.setx(x)turtle.sety(y)print(x, y)class Pikachu:def __init__(self):self.t turtle.Turtle()t self.tt.pensize(3)t.speed(190)t.ondrag(getP…

隋总分享:Temu选品师算不算是蓝海项目?

在当今日新月异的互联网经济浪潮中&#xff0c;跨境电商正成为一股不可忽视的力量。最近&#xff0c;网红隋总对Temu选品师这一职业进行了深入介绍&#xff0c;引发了广泛关注。那么&#xff0c;Temu选品师是否真的可以视为一个蓝海项目呢?本文将对此进行一番细致的探讨。 首先…

python学习笔记B-08:序列结构之列表--列表的遍历操作

列表的遍历操作主要通过以下三种方法实现。 lst list("hello") print("第一种遍历方式&#xff0c;使用for循环&#xff0c;循环变量item直接就是lst中的元素") for item in lst:print(item,end"\t")print("\n\n第二种遍历方式&#xff0…

【HarmonyOS】Stage 模型 - 基本概念

一、项目结构 如图1所示&#xff1a; 图1 从项目结构来看&#xff0c;这个应用的内部包含了一个子模块叫 entry&#xff0c;模块是应用的基本功能单元&#xff0c;它里面包含源代码、资源、配置文件等。 像这样的模块在应用内部可以创建很多。但模块整体来讲就分成两大类&am…

unity中重构(分拆)输入代码

codemonkey的混乱厨房第14节&#xff0c;讲述了怎么来重构代码。 目的&#xff1a;是减少和管理的复杂性&#xff0c;每个类只做一件事&#xff0c;只能做一件事 重构思路分析&#xff1a; 空对象 挂着新类脚本 新类{ 公开方法 public 带返回值 } --------------------------…

【大模型开源篇1】彦宏您怎么看LLaMA3的开源

Meta LLaMA是Meta公司开源的大模型&#xff0c;作为大模型开源界得鼻祖&#xff0c; 刚刚发布LLaMA3。从ChatGPT 拉开了大模型竞赛的序幕&#xff0c;Meta 选择了开源&#xff0c;至此大模型也开始百花齐放的时期&#xff0c;但是开源模型一直无法超过必源模型&#xff0c;如今…

2024最新Notepad++ 的下载、安装及配置

Notepad是一款免费且开源的文本和源代码编辑器&#xff0c;支持多种编程语言。它运行在MS Windows环境下&#xff0c;使用GPL许可证发布。由于其轻量级和高效性&#xff0c;成为了许多开发者的首选工具。 下载地址&#xff1a;「Notedpad」&#xff0c; 链接&#xff1a;https…

报销管理如何秒变高效神器?

一、客户介绍 易快报作为业界知名的企业报销管理平台&#xff0c;一直致力于为企业提供高效、便捷的报销服务。随着业务的不断扩展&#xff0c;易快报面临着与多个外部系统进行数据交互的需求&#xff0c;以提升工作效率和减少数据差错。中信建投作为国内领先的金融机构&#…