F.interpolate 数组采样操作

news2024/11/29 6:36:29

功能:利用插值方法,对输入的张量数组进行上\下采样操作,换句话说就是科学合理地改变数组的尺寸大小,尽量保持数据完整。 

在计算机视觉中,interpolate函数常用于图像的放大(即上采样操作)。比如在细粒度识别领域中,注意力图有时候会对特征图进行裁剪操作,将有用的部分裁剪出来,裁剪后的图像往往尺寸小于原始特征图,这时候如果强制转换成原始图像大小,往往是无效的,会丢掉部分有用的信息。所以这时候就需要用到interpolate函数对其进行上采样操作,在保证图像信息不丢失的情况下,放大图像,从而放大图像的细节,有利于进一步的特征提取工作。

torch.nn.functional.interpolate(input, size=None, scale_factor=None, mode='nearest', align_corners=None, recompute_scale_factor=None)

参数:

  • input(Tensor):需要进行采样处理的数组。
  • size(int或序列):输出空间的大小
  • scale_factor(float或序列):空间大小的乘数
  • mode(str):用于采样的算法。'nearest'| 'linear'| 'bilinear'| 'bicubic'| 'trilinear'| 'area'。默认:'nearest'
  • align_corners(bool):在几何上,我们将输入和输出的像素视为正方形而不是点。如果设置为True,则输入和输出张量按其角像素的中心点对齐,保留角像素处的值。如果设置为False,则输入和输出张量通过其角像素的角点对齐,并且插值使用边缘值填充用于边界外值,使此操作在保持不变时独立于输入大小scale_factor。
  • recompute_scale_facto(bool):重新计算用于插值计算的 scale_factor。当scale_factor作为参数传递时,它用于计算output_size。如果recompute_scale_factor的False或没有指定,传入的scale_factor将在插值计算中使用。否则,将根据用于插值计算的输出和输入大小计算新的scale_factor(即,如果计算的output_size显式传入,则计算将相同 )。注意当scale_factor 是浮点数,由于舍入和精度问题,重新计算的 scale_factor 可能与传入的不同。

注意:

  • 输入的张量数组里面的数据类型必须是float。
  • 输入的数组维数只能是3、4或5,分别对应于时间、空间、体积采样。
  • 不对输入数组的前两个维度(批次和通道)采样,从第三个维度往后开始采样处理。
  • 输入的维度形式为:批量(batch_size)×通道(channel)×[可选深度]×[可选高度]×宽度(前两个维度具有特殊的含义,不进行采样处理)
  • size与scale_factor两个参数只能定义一个,即两种采样模式只能用一个。要么让数组放大成特定大小、要么给定特定系数,来等比放大数组。
  • 如果size或者scale_factor输入序列,则必须匹配输入的大小。如果输入四维,则它们的序列长度必须是2,如果输入是五维,则它们的序列长度必须是3。
  • 如果size输入整数x,则相当于把3、4维度放大成(x,x)大小(输入以四维为例,下面同理)。
  • 如果scale_factor输入整数x,则相当于把3、4维度都等比放大x倍。
  • mode是’linear’时输入必须是3维的;是’bicubic’时输入必须是4维的;是’trilinear’时输入必须是5维的
  • 如果align_corners被赋值,则mode必须是'linear','bilinear','bicubic'或'trilinear'中的一个。
  • 插值方法不同,结果就不一样,需要结合具体任务,选择合适的插值方法。

align_corners=True与False的区别,从4×4上采样成8×8。一个是按四角的像素点中心对齐,另一个是按四角的像素角点对齐。

 

import torch.nn.functional as F
import torch

a=torch.arange(12,dtype=torch.float32).reshape(1,2,2,3)
b=F.interpolate(a,size=(4,4),mode='bilinear')
# 这里的(4,4)指的是将后两个维度放缩成4*4的大小
print(a)
print(b)
print('原数组尺寸:',a.shape)
print('size采样尺寸:',b.shape)

# # 原数组
# tensor([[[[ 0.,  1.,  2.],
#           [ 3.,  4.,  5.]],
#
#          [[ 6.,  7.,  8.],
#           [ 9., 10., 11.]]]])
# # 采样后的数组
# tensor([[[[ 0.0000,  0.6250,  1.3750,  2.0000],
#           [ 0.7500,  1.3750,  2.1250,  2.7500],
#           [ 2.2500,  2.8750,  3.6250,  4.2500],
#           [ 3.0000,  3.6250,  4.3750,  5.0000]],
#
#          [[ 6.0000,  6.6250,  7.3750,  8.0000],
#           [ 6.7500,  7.3750,  8.1250,  8.7500],
#           [ 8.2500,  8.8750,  9.6250, 10.2500],
#           [ 9.0000,  9.6250, 10.3750, 11.0000]]]])
# 原数组尺寸: torch.Size([1, 2, 2, 3])
# size采样尺寸: torch.Size([1, 2, 4, 4])
# # 规定三四维度放缩成4*4大小

# ----------size与scale_factor的区别--------------
import torch.nn.functional as F
import torch

a=torch.arange(4*512*14*14,dtype=torch.float32).reshape(4,512,14,14)
b=F.interpolate(a,size=(28,56),mode='bilinear')
c=F.interpolate(a,scale_factor=(4,8),mode='bilinear')
print('原数组尺寸:',a.shape)
print('size采样尺寸:',b.shape)
print('scale_factor采样尺寸:',c.shape)

# 原数组尺寸: torch.Size([4, 512, 14, 14])
# size采样尺寸: torch.Size([4, 512, 28, 56])
# # 第三维度放大成28,第四维度放大成56
# scale_factor采样尺寸: torch.Size([4, 512, 56, 112])
# # 第三维度放大4倍,第四维度放8倍

# ----------size与scale_factor的区别-------------
import torch.nn.functional as F
import torch

a=torch.arange(4*512*14*14,dtype=torch.float32).reshape(4,512,14,14)
b=F.interpolate(a,size=28,mode='bilinear')
c=F.interpolate(a,scale_factor=4,mode='bilinear')
print('原数组尺寸:',a.shape)
print('size采样尺寸:',b.shape)
print('scale_factor采样尺寸:',c.shape)

# 原数组尺寸: torch.Size([4, 512, 14, 14])
# size采样尺寸: torch.Size([4, 512, 28, 28])
# # 三四维度数组被放大成28*28
# scale_factor采样尺寸: torch.Size([4, 512, 56, 56])
# # 三四维度数组被放大了4倍

# ---------------align_corners=True与False的区别---------------
import torch.nn.functional as F
import torch

a=torch.arange(18,dtype=torch.float32).reshape(1,2,3,3)
b=F.interpolate(a,size=(4,4),mode='bicubic',align_corners=True)
c=F.interpolate(a,size=(4,4),mode='bicubic',align_corners=False)

print(a)
print(b)
print(c)

# tensor([[[[ 0.,  1.,  2.],
#           [ 3.,  4.,  5.],
#           [ 6.,  7.,  8.]],
#
#          [[ 9., 10., 11.],
#           [12., 13., 14.],
#           [15., 16., 17.]]]])
# # align_corners=True
# tensor([[[[ 0.0000,  0.5741,  1.4259,  2.0000],
#           [ 1.7222,  2.2963,  3.1481,  3.7222],
#           [ 4.2778,  4.8519,  5.7037,  6.2778],
#           [ 6.0000,  6.5741,  7.4259,  8.0000]],
#
#          [[ 9.0000,  9.5741, 10.4259, 11.0000],
#           [10.7222, 11.2963, 12.1481, 12.7222],
#           [13.2778, 13.8519, 14.7037, 15.2778],
#           [15.0000, 15.5741, 16.4259, 17.0000]]]])
# # align_corners=False
# tensor([[[[-0.2871,  0.3145,  1.2549,  1.8564],
#           [ 1.5176,  2.1191,  3.0596,  3.6611],
#           [ 4.3389,  4.9404,  5.8809,  6.4824],
#           [ 6.1436,  6.7451,  7.6855,  8.2871]],
#
#          [[ 8.7129,  9.3145, 10.2549, 10.8564],
#           [10.5176, 11.1191, 12.0596, 12.6611],
#           [13.3389, 13.9404, 14.8809, 15.4824],
#           [15.1436, 15.7451, 16.6855, 17.2871]]]])

参考:链接

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

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

相关文章

【C#】MVC页面常见的重定向方式和场景

本篇文章主要简单讲讲,C# MVC 页面常见跳转或者重定向的方式和场景。 在实际项目开发中,在一些特定场景肯定会用到重定向,比如:不同角色跳转到不同视图地址 目录 一、种常见重定向方式1.1、RedirectToAction1.2、RedirectToRoute1…

猿人学14题—备而后动-勿使有变

猿人学14题—备而后动-勿使有变 抓包分析大致流程 mz参数生成m的值定位&参数组成补环境首先简单处理下十六进制编码问题提示:ReferenceError: window is not defined提示:document is not defined提示:$ is not definedASN1 is not defin…

【探索人工智能】我与讯飞星火认知大模型的对话

文章目录 讯飞星火认知大模型的地址概要讯飞星火认知大模型的发展历程讯飞星火认知大模型的主页利用讯飞星火大模型解决一些基本的数学问题讯飞星火认知大模型与OpenAI,ChatGPT没有关系!让讯飞星火认知大模型编写传奇代码hello world小结 讯飞星火认知大模型的地址 …

chatgpt使用及辅助编程方面的体验

chatgpt使用及辅助编程方面的体验 文章目录 chatgpt使用及辅助编程方面的体验1 引言2 辅助编程体验2.1 辅助编写代码2.2 找出代码问题2.3 代码优化2.4 解释代码结束语 1 引言 最近几个月什么最火,那一定时chatgpt,虽然在国内使用存在各种限制,但是还是挡…

el-select和el-checkBox实现下拉菜单全选功能

el-select 和 el-checkbox 实现下拉菜单全选功能 示例代码&#xff1a; <el-selectpopper-class"select-container"v-model"ids"placeholder"请选择目标":multiple-limit"20"multiplefilterablecollapse-tagsclass"wd400&qu…

20230721 Essex UK, Dongbing Gu 公开讲座--机器人前沿

个人主页&#xff1a; https://www.essex.ac.uk/people/GUDON81301/dongbing-gu 机器人领域任务的特点&#xff1a;dull, dirty, dangerous tasks in remote spaces 机器鱼&#xff1a; 实时港口环境监测 机器鱼群探索算法 化学传感器 水面声呐定位系统/SLAM/通信问题 Robotic …

RocketMQ教程-安装和配置

Linux系统安装配置 64位操作系统&#xff0c;推荐 Linux/Unix/macOS 64位 JDK 1.8 Maven3.0 yum 安装jdk8 yum 安装maven 1.下载安装Apache RocketMQ RocketMQ 的安装包分为两种&#xff0c;二进制包和源码包。 点击这里 下载 Apache RocketMQ 5.1.3的源码包。你也可以从这…

网络安全 Day18-计算机网络知识03

计算机网络知识03 1. 路由器排查故障2. 设置和修改网关3. 设置修改DNS4. 私网地址5. VMware虚拟机NAT模式下上网原理6. DHCP工作原理 1. 路由器排查故障 排查网线&#xff0c;排查网卡&#xff0c;排查网卡的驱动查看网卡IP&#xff0c;没有配置IP、网关、DNS配置正确ping百度…

R语言贝叶斯METROPOLIS-HASTINGS GIBBS 吉布斯采样器估计变点指数分布分析泊松过程车站等待时间...

原文链接&#xff1a;http://tecdat.cn/?p26578 指数分布是泊松过程中事件之间时间的概率分布&#xff0c;因此它用于预测到下一个事件的等待时间&#xff0c;例如&#xff0c;您需要在公共汽车站等待的时间&#xff0c;直到下一班车到了&#xff08;点击文末“阅读原文”获取…

行为型模式 - 状态模式

概述 【例】通过按钮来控制一个电梯的状态&#xff0c;一个电梯有开门状态&#xff0c;关门状态&#xff0c;停止状态&#xff0c;运行状态。每一种状态改变&#xff0c;都有可能要根据其他状态来更新处理。例如&#xff0c;如果电梯门现在处于运行时状态&#xff0c;就不能进…

MySQL—事务

MySQL—事务 &#x1f50e;定义&#x1f50e;事务的特性原子性一致性持久性隔离性 &#x1f50e;并发执行事务可能产生的问题脏读不可重复读幻读总结 &#x1f50e;MySQL—事务的隔离级别 &#x1f50e;定义 事务的本质是将多条 SQL 语句打包成一个整体 要么全部成功, 要么全部…

html a标签换行显示

文章目录 用css display属性不用css&#xff0c;可以用<br>标签换行示例 用css display属性 可以使用CSS的display属性来实现多个a标签每行显示一个。 HTML代码&#xff1a; <div class"link-container"><a href"#">Link 1</a>…

# **基于TiDB Binlog架构的主备集群切换操作手册**

作者&#xff1a; Liuhaoao 原文来源&#xff1a; https://tidb.net/blog/dc65ef62 操作背景&#xff1a;最近手头有个系统&#xff0c;刚做完灾备建设及数据同步&#xff08; 文章链接在这 &#xff09;&#xff0c;需要进行灾备切换演练&#xff0c;验证灾备库建设是否…

HCIA静态路由综合实验(eNSP)

实验题目及要求&#xff1a; 1、分析IP地址分配。 主干IP掩码均为30&#xff1b; 环回IP掩码为28&#xff0c;方便汇总掩码27&#xff1b; 然后预留部分IP地址。 如下图&#xff1a; 2、按如上图片要求连接设备&#xff0c;并标记好IP分配信息&#xff0c;便于命令配置时一…

网页生成PDF表格诡异多出空白

环境&#xff1a; axios: 0.27.0 egg: 2.35.0 pdf-lib: 1.17.1 puppeteer-core: 17.1.3 node: 16.20.0 element-plus: 2.3.2 vue: 3.2.47 背景&#xff1a; 一个报告页面含有多个统计表格和描述文字&#xff0c;生成PDF用于下载查看&#xff0c;页面使用vue3element-plus…

使用ffmpeg合并视频遇到的坑

下面以Linux环境介绍为主 1.ffmpeg可执行命令不同的环境是不同的&#xff0c;Linux在执行命令前还需要授权。 2.合并视频命令&#xff1a; 主要命令: {} -f concat -auto_convert 0 -safe 0 -i {} -y -c:v copy 坑一&#xff1a;其中第一个花括号替换的是可执行命令所在的…

如何计算 FPS(帧率)

FPS(Frames Per Second)&#xff0c;每秒多少帧 在 val.py 中&#xff0c;需要修改参数 batch-size1 同时别忘了修改自己数据集的 yaml 文件以及训练好的 pt 文件&#xff0c;如下图&#xff1a; 修改完成后&#xff0c;运行 val.py&#xff0c;得到结果&#xff0c;如下图&a…

Debian部署Tomcat 注册服务并设置开机启动

目录 写在前面 1.准备工作 2.在Linux下安装Tomcat 3.Tomcat注册服务并设置开机启动 3.1.使用 rc.local 配置开机启动 3.2.使用/etc/init.d 3.3.systemd配置&#xff08;通用方式&#xff09; 在Debian系统上安装Tomcat并将其注册为服务以及设置开机启动的步骤。Tomcat是一…

Android Studio 提示 Failed to initialize editor问题的解决

Android Studio 从2018的版本升级到2021年的版本后&#xff0c;无法预览xml。我查了很久&#xff0c;最后发现是Gradle的版本和工具不匹配&#xff0c;按照开发工具的提示&#xff0c;升级版本即可&#xff0c;我的是从3.2.1升级到了4.2.2

在macOS、Windows上使用VSCode + SSH实现远程Matplotlib图形显示

简介 在 macOS 上使用 VSCode SSH 环境来显示 Matplotlib 绘制的图形需要进行一些配置。因为默认情况下&#xff0c; Matplotlib 的图形是无法显示在远程计算机的桌面上的。您可以通过设置 Matplotlib 使用不同的后端(backend)来实现将图形显示在本地计算机上。 第一步&…