F.interpolate函数

F.interpolate 是 PyTorch 中用于对张量(通常是图像数据)进行插值操作的函数,常用于调整张量的大小,例如改变图像的分辨率。它支持多种插值方法,包括最近邻插值、双线性插值和三次插值等。

语法

python 复制代码
torch.nn.functional.interpolate(input, size=None, scale_factor=None, mode='nearest', align_corners=None)

参数

  1. input:

    • 输入的张量,形状通常为 (N, C, H, W)(N, C, D, H, W)(批次、通道数、高度、宽度 或深度、高度、宽度)。
  2. size:

    • 调整后张量的目标大小,可以是整数元组,例如 (height, width)
    • 优先级高于 scale_factor
  3. scale_factor:

    • 用于调整大小的比例因子,可以是浮点数或元组(对于高度和宽度分别指定比例)。
    • 如果指定了 size,此参数会被忽略。
  4. mode:

    • 指定插值方法,常用选项:
      • 'nearest':最近邻插值。
      • 'linear':线性插值(仅适用于 3D 输入)。
      • 'bilinear':双线性插值(常用于 2D 图像)。
      • 'bicubic':双三次插值(适用于 2D 图像)。
      • 'trilinear':三线性插值(适用于 3D 输入)。
      • 'area':区域插值,用于下采样。
  5. align_corners:

    • 仅在 mode'linear', 'bilinear', 'bicubic''trilinear' 时使用。
    • 如果为 True,则输入和输出的角像素对齐。

返回值

调整大小后的张量。


示例代码

1. 将图像从 640x640 调整为 832x832
python 复制代码
import torch
import torch.nn.functional as F

# 创建一个随机图像张量,形状为 (batch_size=1, channels=3, height=640, width=640)
img = torch.randn(1, 3, 640, 640)

# 使用 F.interpolate 调整分辨率为 832x832
resized_img = F.interpolate(img, size=(832, 832), mode='bilinear', align_corners=False)

print("Original shape:", img.shape)
print("Resized shape:", resized_img.shape)
2. 使用比例调整图像大小
python 复制代码
# 使用 scale_factor=1.3 对图像尺寸放大 1.3 倍
scaled_img = F.interpolate(img, scale_factor=1.3, mode='bilinear', align_corners=False)

print("Scaled shape:", scaled_img.shape)
3. 下采样为一半大小
python 复制代码
# 使用 scale_factor=0.5 对图像尺寸缩小 50%
downsampled_img = F.interpolate(img, scale_factor=0.5, mode='area')

print("Downsampled shape:", downsampled_img.shape)

注意事项

  1. align_corners 的影响

    align_corners=True 时,插值会在输入和输出张量的角像素之间进行对齐;否则,计算比例时不对齐角像素。通常推荐 align_corners=False,避免形变或偏移。

  2. 选择插值方法

    • 双线性插值(bilinear)和双三次插值(bicubic)通常适用于图像重采样,生成更平滑的结果。
    • 最近邻插值(nearest)速度快,但结果不够平滑。
  3. 处理多通道输入
    F.interpolate 可直接处理多通道(如 RGB、IR 数据)的张量,不需要额外操作。

相关推荐
victory04312 小时前
SpiceMix enables integrative single-cell spatial modeling of cell identity 文章解读
人工智能·深度学习
AI街潜水的八角4 小时前
深度学习图像分类数据集—蘑菇识别分类
人工智能·深度学习·分类
蹦蹦跳跳真可爱5895 小时前
Python----循环神经网络(Transformer ----注意力机制)
人工智能·深度学习·nlp·transformer·循环神经网络
千宇宙航10 小时前
闲庭信步使用SV搭建图像测试平台:第三十一课——基于神经网络的手写数字识别
图像处理·人工智能·深度学习·神经网络·计算机视觉·fpga开发
onceco10 小时前
领域LLM九讲——第5讲 为什么选择OpenManus而不是QwenAgent(附LLM免费api邀请码)
人工智能·python·深度学习·语言模型·自然语言处理·自动化
天水幼麟11 小时前
动手学深度学习-学习笔记(总)
笔记·深度学习·学习
天水幼麟13 小时前
动手学深度学习-学习笔记【二】(基础知识)
笔记·深度学习·学习
强哥之神16 小时前
英伟达发布 Llama Nemotron Nano 4B:专为边缘 AI 和科研任务优化的高效开源推理模型
人工智能·深度学习·语言模型·架构·llm·transformer·边缘计算
陈敬雷-充电了么-CEO兼CTO18 小时前
大模型技术原理 - 基于Transformer的预训练语言模型
人工智能·深度学习·语言模型·自然语言处理·chatgpt·aigc·transformer
旷世奇才李先生19 小时前
Pillow 安装使用教程
深度学习·microsoft·pillow