如何调整 PyTorch 张量的大小?

Posted

技术标签:

【中文标题】如何调整 PyTorch 张量的大小?【英文标题】:How to resize a PyTorch tensor? 【发布时间】:2020-02-28 18:45:17 【问题描述】:

我有一个大小为 (5, 1, 44, 44)(批次、通道、高度、宽度)的 PyTorch 张量,我想将其“调整大小”为 (5, 1, 224, 224)

我该怎么做?我应该使用哪些功能?

【问题讨论】:

你想如何调整它的大小?通过用0s 填充?通过放大图像? 【参考方案1】:

您似乎正在寻找interpolatenn.functional 中的一个函数):

import torch.nn.functional as nnf

x = torch.rand(5, 1, 44, 44)
out = nnf.interpolate(x, size=(224, 224), mode='bicubic', align_corners=False)

如果你真的关心插值的准确性,你应该看看ResizeRight:一个 pytorch/numpy 包,它可以在调整图像大小时准确处理各种“边缘情况”。这在直接合并不同尺度的特征时会起作用:不准确的插值可能会导致错位。

【讨论】:

关于双三次插值的警告是,结果的范围可能比输入的范围更宽。如果这比你可以使用双线性更重要【参考方案2】:

TorchVision transforms.functional.resize() 功能正是您要找的:

import torchvision.transforms.functional as F

t = torch.randn([5, 1, 44, 44])
t_resized = F.resize(t, 224)

如果您希望使用双线性以外的其他插值模式,可以使用 interpolation 参数指定。

【讨论】:

以上是关于如何调整 PyTorch 张量的大小?的主要内容,如果未能解决你的问题,请参考以下文章

Pytorch 几何:张量大小有问题

如何在pytorch中连接两个不同尺寸的张量

如何检查不同张量pytorch中的张量值是不是?

在 Keras 中,如何任意调整一维张量的大小?

PyTorch 张量广播

Pytorch 展开和折叠:如何将这个图像张量重新组合在一起?