pytorch 图像padding+特征图插值F.interpolate

padding函数的模式

torch.nn.functional.pad(input, pad, mode='constant/reflect/replicate')
或者:
torch.nn.functional.pad(input, pad, mode='constant', value=0)# 默认常值0填充

现在只有pad部分需要比较高的注意力,给出以下使用解释:

p3d = (1, 2, 3, 4, 5, 6)
# p3d = (左边填充数, 右边填充数, 上边填充数, 下边填充数, 前边填充数,后边填充数)

p2d = (1, 2, 3, 4)
# p2d = (左边填充数, 右边填充数, 上边填充数, 下边填充数)

常用的padding方法,对于图像分块不够的情况下padding(分别在图像的右侧和下侧进行填充)

import torch.nn as nn
import torch.nn.functional as F


if pad_input:
    # to pad the last 3 dimensions,
    # (W_left, W_right, H_top,H_bottom, C_front, C_back)
    x = F.pad(x, (0, self.patch_size[1] - W % self.patch_size[1],
                  0, self.patch_size[0] - H % self.patch_size[0],
                  0, 0))

插值(对tensor的后两个维度扩展)

TORCH.NN.FUNCTIONAL.INTERPOLATE

score_map = F.interpolate(dist_list.unsqueeze(1), size=x.size(2), mode='bilinear',
                                  align_corners=False).squeeze().numpy()

align_corners(默认False)

    import torch.nn.functional as F
    import torch

    a = torch.arange(4, dtype=torch.float32).reshape(1, 1, 2, 2)
    b = F.interpolate(a, size=(4, 4), mode='bilinear',align_corners=False)# b = F.interpolate(a, size=(4, 4), mode='nearest')
tensor([[[[0., 1.],
          [2., 3.]]]])
tensor([[[[0.0000, 0.2500, 0.7500, 1.0000],
          [0.5000, 0.7500, 1.2500, 1.5000],
          [1.5000, 1.7500, 2.2500, 2.5000],
          [2.0000, 2.2500, 2.7500, 3.0000]]]])    
    import torch.nn.functional as F
    import torch

    a = torch.arange(4, dtype=torch.float32).reshape(1, 1, 2, 2)
    b = F.interpolate(a, size=(4, 4), mode='bilinear',align_corners=True)
tensor([[[[0., 1.],
          [2., 3.]]]])
tensor([[[[0.0000, 0.3333, 0.6667, 1.0000],
          [0.6667, 1.0000, 1.3333, 1.6667],
          [1.3333, 1.6667, 2.0000, 2.3333],
          [2.0000, 2.3333, 2.6667, 3.0000]]]])

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
OpenCV中的resize函数和PyTorch中的F.interpolate函数都可以用来调整图像大小,但它们的使用方法和结果略有不同。 1. resize函数 resize函数可以直接调整图像的大小,并且可以选择不同的插值方法来处理图像的像素值。常用的插值方法有:INTER_NEAREST、INTER_LINEAR、INTER_CUBIC和INTER_LANCZOS4。 使用resize函数时,需要指定输出图像的大小和插值方法,例如: ```python import cv2 img = cv2.imread('image.jpg') resized_img = cv2.resize(img, (new_width, new_height), interpolation=cv2.INTER_LINEAR) ``` 2. F.interpolate函数 F.interpolate函数是PyTorch中针对张量的插值函数,可以用于调整图像大小。与resize函数不同的是,F.interpolate函数需要将图像转换成PyTorch的张量,然后再进行插值操作。 使用F.interpolate函数时,需要指定输出张量的大小和插值方法,例如: ```python import torch import torch.nn.functional as F img = cv2.imread('image.jpg') tensor_img = torch.from_numpy(img).permute(2, 0, 1).unsqueeze(0).float() resized_tensor_img = F.interpolate(tensor_img, size=(new_height, new_width), mode='bilinear', align_corners=True) resized_img = resized_tensor_img.squeeze().permute(1, 2, 0).numpy().astype('uint8') ``` 3. 区别 resize函数和F.interpolate函数的区别在于: - resize函数可以直接操作图像,而F.interpolate需要将图像转换成张量后再操作。 - resize函数可以选择不同的插值方法,而F.interpolate只能选择双线性插值或最近邻插值。 - F.interpolate函数可以在GPU上进行加速,而resize函数只能在CPU上运行。 因此,如果只需要调整图像大小,可以使用resize函数;如果需要在PyTorch中进行深度学习,可以使用F.interpolate函数。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值