【pytorch】从yolo的make_grid理解torch.meshgrid、torch.stack

文章目录

    • 简述
    • 1、torch.meshgrid 创建行列坐标
    • 2、torch.stack 结合行列坐标
    • 3、通过view函数扩展维度

简述

yolo检测 make_grid创建网格代码如下,那么什么是torch.meshgrid?

def _make_grid(nx=20, ny=20):
        yv, xv = torch.meshgrid([torch.arange(ny), torch.arange(nx)])
        return torch.stack((xv, yv), 2).view((1, 1, ny, nx, 2)).float()

1、torch.meshgrid 创建行列坐标

torch.meshgrid 是 PyTorch 中的一个函数,这个函数通常用于创建坐标点的网格,以便进行一些网格上的操作,比如插值或者计算函数值。
例如,我们的目标是创建4行8列的坐标网格。

import torch
ny=4
nx=8
yv, xv = torch.meshgrid([torch.arange(ny), torch.arange(nx)])
print(yv)
print(xv)

'''
tensor([[0, 0, 0, 0, 0, 0, 0, 0],
        [1, 1, 1, 1, 1, 1, 1, 1],
        [2, 2, 2, 2, 2, 2, 2, 2],
        [3, 3, 3, 3, 3, 3, 3, 3]])
tensor([[0, 1, 2, 3, 4, 5, 6, 7],
        [0, 1, 2, 3, 4, 5, 6, 7],
        [0, 1, 2, 3, 4, 5, 6, 7],
        [0, 1, 2, 3, 4, 5, 6, 7]])
'''

这个操作会形成以ny为行数,nx为列数的坐标网格,也就是4行8列。其中每行每列又按照torch.arange进行排序,也就是0-4行,0-8列。如下图所示。
![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/ba16af5cd94243f79c1adfb2b282a2a1.png
可以看到yv实际上是一个纵坐标的网格,每个值都代表着自己所在的行,分别对应0-3行
xv代表着自己的列,也就是0-7列。在yolo检测的make_grid中,通常还有下个步骤,将两个值堆叠在一起。torch.stack。

2、torch.stack 结合行列坐标

torch.stack((xv, yv), 2)就是将上述行列坐标信息堆叠在第2个维度,这样子每个位置就有各自的行列坐标值。
(为了迎合yolo和w、h的顺序,x坐标堆叠在前面,y堆叠在后面)
在这里插入图片描述

tmp = torch.stack((xv, yv), 2)
print(tmp.shape)
print(tmp[1,2])
print(tmp[3,6])

'''
torch.Size([4, 8, 2])
tensor([2, 1])
tensor([6, 3])
'''

可以看到w=1,h=2对应的值就是[2,1]也就是第2行,第1列。
w=3,h=6对应的值就是[6,3]也就是第6行,第3列。每一个wh都对应各自的行列坐标。也就是通过grid和stack函数,每个行列都有属于自己的值了!

3、通过view函数扩展维度

out=tmp.view((1, 1, ny, nx, 2)).float()

也就是将3维向量扩展成5维,就是为了后续检测操作,没有什么需要特别说的。

至此,整个make_grid函数解释完毕。这个函数作用就是生成ny行,nx列的网格用于检测时候的xy坐标确定

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

C++基础 -28- 友元

友元用于访问类中的所有数据成员 类中的私有成员,类外不可访问 定义友元的格式(友元函数必须要在类内,声明) friend void show(person &b); 使用友元访问类的所有成员 #include "iostream"using namespace std…

深入Spring Security魔幻山谷-获取认证机制核心原理讲解(新版)

文/朱季谦 这是一个古老的传说。 在神秘的Web系统世界里,有一座名为Spring Security的山谷,它高耸入云,蔓延千里,鸟飞不过,兽攀不了。这座山谷只有一条逼仄的道路可通。然而,若要通过这条道路前往另一头的…

html实现各种好看的鼠标滑过图片特效模板

文章目录 1.鼠标悬浮效果1.1 渐动效果1.2 渐变效果1.3 边框效果1.4 线行效果1.5 图标效果1.6 块状效果1.7 边线效果1.8 放大效果1.9 渐出效果1.10 痕迹效果1.11 交叉效果1.12 着重效果1.13 详展效果1.14 能动效果1.15 明细效果 2.主要源码2.1 源代码 源码下载 作者:…

基于python的FMCW雷达工作原理仿真

这篇文章将介绍如何使用python来实现FMCW工作原理的仿真,第1章内容将介绍距离检测原理,第2章内容会介绍速度检测原理。 第1章 第1部分: 距离检测原理 调制的连续波雷达通常也被叫做调频连续波(FMCW)雷达是一个使用频率调制来测量…

鸿蒙(HarmonyOS)应用开发——容器组件(Grid组件)

前言 前面一篇文章中,已经说了List组件。那么接下来就是容器组件中的Grid组件 #mermaid-svg-oz1b7w45ASmMlZFa {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-oz1b7w45ASmMlZFa .error-icon{fill:#5522…

Docker-compose的在线与离线安装方式及问题解决

文章目录 一、在线方式1、GitHub2、daocloud.io 二、离线方式(推荐)三、验证 一、在线方式 1、GitHub curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/d…

springboot缓存技术-Ehcache-Redis-memcached

springboot缓存技术-Ehcache-Redis-memcached 文章目录 springboot缓存技术-Ehcache-Redis-memcachedspring缓存使用方式手机验证码案例缓存供应商变更Ehcache变更缓存供应商Redis缓存供应商变更memcached下载安装memcachedSpringBoot整合memcached spring缓存使用方式 导缓存…

linux后端基础---笔记整理(tmux、vim、shell、ssh/scp、git、thrift、docker)

目录 1.Linux常用文件管理命令 2.tmux终端复用器/vim命令式文本编辑器 3.Shell语法 3.1 Shell—版本3.2 新建一个test.sh文件3.3 Shell文件—运行方式3.4 Shell—注释3.5 Shell—变量3.6 Shell—默认变量,文件参数, “$”的用法3.7 Shell—数组3.8 shell—expr命令…

java餐饮刀削面快餐店点餐服务系统springboot+jsp

网上点餐省去了客户很多不必要的时间和麻烦,给商家带来更多利益。同时,网上点餐可以辅助餐饮企业营销。传统的点餐是需要配备一个专业的服务员负责菜品介绍并记录顾客点单,确认后上交至后台厨房,厨房根据菜品种类安排做菜顺序最终…

数据结构:带头双向循环链表的实现

引言 单链表存在缺陷:需要从头开始找前一个节点 解决方法:双向链表 链表的结构(8种): 1. 单向,双向 2. 带头、不带头 带头即为带哨兵位的头节点,第一个节点不存储有效数据。带头节点&#…

垃圾回收与内存泄漏

前端面试大全JavaScript垃圾回收与内存泄漏 🌟经典真题 🌟什么是内存泄露 🌟JavaScript 中的垃圾回收 🌟标记清除 🌟引用计数 🌟真题解答 🌟总结 🌟经典真题 请介绍一下 Jav…

混合使用Windows和Linux子系统的工具和命令

文章目录 在Windows中运行Linux命令使用PowerShell混合使用Linux和Windows命令通过power shell在Windows混合使用Linux工具在Linux中混合使用Windows 工具 推荐阅读 Windows和Linux的工具和命令可以通过WSL互换使用。 可以在Linux子系统中运行Windows命令,也可以在W…

redis主从复制模式和哨兵机制

目录 第一章、主从复制模式1.1)Redis 主从复制模式介绍1.2)Redis 主从复制实现、 第二章、哨兵机制2.1)容灾处理之哨兵2.2)Sentinel 配置 第一章、主从复制模式 1.1)Redis 主从复制模式介绍 ①单点故障:数…

【C++】string类模拟实现过程中值得注意的点

👀樊梓慕:个人主页 🎥个人专栏:《C语言》《数据结构》《蓝桥杯试题》《LeetCode刷题笔记》《实训项目》《C》《Linux》 🌝每一个不曾起舞的日子,都是对生命的辜负 目录 前言 1.有关const的使用 &#x…

常用sql记录

备份一张表 PostgreSQL CREATE TABLE new_table AS SELECT * FROM old_table;-- 下面这个比上面好,这个复制表结构时,会把默认值、约束、注释都复制 CREATE TABLE new_table (LIKE old_table INCLUDING ALL) WITHOUT OIDS; INSERT INTO new_table SELE…

一进三出宿舍限电模块的改造升级

一进三出宿舍限电模块改造升级石家庄光大远通电气有限公司智能模块功能特点: 电能控制功能:可实施剩余电量管理,电量用完时将自动断电; 剩余电量可视报警提示功能:剩余电量可视,并当电量剩余5度时&#xff…

图解java.util.concurrent并发包源码系列——深入理解定时任务线程池ScheduledThreadPoolExecutor

深入理解定时任务线程池ScheduledThreadPoolExecutor ScheduledThreadPoolExecutor作用与用法ScheduledThreadPoolExecutor内部执行流程DelayedWorkQueueScheduledFutureTask源码分析任务提交ScheduledFutureTask的属性和方法delayedExecute(t) 任务执行ScheduledFutureTask.su…

Android Bitmap 使用Vukan、RenderEffect、GLSL实现模糊

文章目录 Android Bitmap 使用Vukan、RenderEffect、GLSL实现模糊使用 RenderEffect 模糊使用 Vukan 模糊使用 GLSL 模糊RS、Vukan、RenderEffect、GLSL 效率对比 Android Bitmap 使用Vukan、RenderEffect、GLSL实现模糊 本文首发地址 https://blog.csdn.net/CSqingchen/articl…

行内元素和块级元素分别有哪些?有何区别?怎样转换?

行内元素和块级元素分别有哪些? 常见的块级元素: p、div、form、ul、li、ol、table、h1、h2、h3、h4、h5、h6、dl、dt、dd 常见的行级元素: span、a、img、button、input、select 有何区别? 块级元素: 总是在新行上…

Centos7安装

想学Vmware安装可以看下下面链接,不想就算了 https://blog.csdn.net/weixin_43895362/article/details/134723073 选择第一项,安装直接CentOS 7,回车 稍等后出现进入下图,选择中文,这个只是安装时的语言 首先设置时间,时区选择上海,查看时…