当前位置: 首页 > 编程笔记 >

pytorch进行上采样的种类实例

施自怡
2023-03-14
本文向大家介绍pytorch进行上采样的种类实例,包括了pytorch进行上采样的种类实例的使用技巧和注意事项,需要的朋友参考一下

1、其中再语义分割比较常用的上采样:

其实现方法为:

def upconv2x2(in_channels, out_channels, mode='transpose'):
 if mode == 'transpose':
  # 这个上采用需要设置其输入通道,输出通道.其中kernel_size、stride
  # 大小要跟对应下采样设置的值一样大小。这样才可恢复到相同的wh。这里时反卷积操作。
  return nn.ConvTranspose2d(
   in_channels,
   out_channels,
   kernel_size=2,
   stride=2)
 else:
  # out_channels is always going to be the same
  # as in_channels
  # 这里不会改变通道数,其中scale_factor是上采用的放大因子,其是相对于当前的
  # 输入大小的倍数
  return nn.Sequential(
   nn.Upsample(mode='bilinear', scale_factor=2, align_corners=True))
  # 这里的代码是在这里设置多一个卷积,这样子就起到了可以修改其输出通道的功能了。
  # 相当于功能跟ConvTranspose2d()差不多,只是上采样的方法不同
  conv1x1((in_channels, out_channels))
 
 
def conv1x1(in_channels, out_channels, groups=1):
 return nn.Sequential(nn.Conv2d(
  in_channels,
  out_channels,
  kernel_size=1,
  groups=groups,
  stride=1),
 nn.BatchNorm2d(out_channels))

另一种上采样的方法是,参考代码:segnet_pytorch:

  # Stage 5
  x51 = F.relu(self.bn51(self.conv51(x4p)))
  x52 = F.relu(self.bn52(self.conv52(x51)))
  x53 = F.relu(self.bn53(self.conv53(x52)))
  #这个id5记录的是池化操作时最大值的index,其要设置参数return_indices为True
  x5p, id5 = F.max_pool2d(x53,kernel_size=2, stride=2,return_indices=True)
 
 
  # Stage 5d
  #这个是进行最大值上采样的函数,其是根据id5来把值放到什么位置,其它位置没有值的地方
  补0
  x5d = F.max_unpool2d(x5p, id5, kernel_size=2, stride=2)
  x53d = F.relu(self.bn53d(self.conv53d(x5d)))
  x52d = F.relu(self.bn52d(self.conv52d(x53d)))
  x51d = F.relu(self.bn51d(self.conv51d(x52d)))

测试例子:

#测试上采样
m=nn.MaxPool2d((3,3),stride=(1,1),return_indices=True)
upm=nn.MaxUnpool2d((3,3),stride=(1,1))
data4=torch.randn(1,1,3,3)
output5,indices=m(data4)
output6=upm(output5,indices)
 
print('\ndata4:',data4,
  '\nmaxPool2d',output5,
  '\nindices:',indices,
  '\noutput6:',output6)

其输出为:

data4: tensor([[[[ 2.3151, -1.0391, 0.1074],
   [ 1.9360, 0.2524, 2.3735],
   [-0.1151, 0.4684, -1.8800]]]]) 
maxPool2d tensor([[[[2.3735]]]]) 
indices: tensor([[[[5]]]]) 
output6: tensor([[[[0.0000, 0.0000, 0.0000],
   [0.0000, 0.0000, 2.3735],
   [0.0000, 0.0000, 0.0000]]]])

以上这篇pytorch进行上采样的种类实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持小牛知识库。

 类似资料:
  • 在使用Pytorch的DataLoader实用程序时,在sampler中,的用途是什么?在中有一个参数。

  • 本文向大家介绍pytorch中的上采样以及各种反操作,求逆操作详解,包括了pytorch中的上采样以及各种反操作,求逆操作详解的使用技巧和注意事项,需要的朋友参考一下 import torch.nn.functional as F import torch.nn as nn F.upsample(input, size=None, scale_factor=None,mode='nearest',

  • 在分布式跟踪中,数据量可能非常高,因此采样可能很重要(您通常不需要导出所有spans以获得正在发生的情况)。Spring Cloud Sleuth具有Sampler策略,您可以实现该策略来控制采样算法。采样器不会停止生成跨度(相关)ids,但是它们确实阻止了附加和导出的标签和事件。默认情况下,您将获得一个策略,如果跨度已经处于活动状态,则会继续跟踪,但新策略始终被标记为不可导出。如果您的所有应用程

  • 本文向大家介绍在keras里实现自定义上采样层,包括了在keras里实现自定义上采样层的使用技巧和注意事项,需要的朋友参考一下 Keras里的UpSampling2D层不是中的双线性内插,而是简单的重复图像。这点和pytorch不一样,pytorch默认使用的是双线性内插。 同样:这里仍然使用的是keras而不是tf.keras. keras里UpSampling2D的部分定义说明如下: 可以看出

  • 问题内容: 我试图像这样在Android上获取麦克风的振幅水平: 不幸的是,这总是一直返回0。 看来要执行此操作,我必须真正开始录制。那是对的吗? 如果是这样,我是否需要记录500毫秒,获取振幅,停止记录并重复? 最后,我必须记录到文件吗?我不需要保存此音频文件,自上次调用当前现场麦克风输入以来,我是否只能获取当前幅度或最高幅度而不进行记录? 任何帮助表示赞赏,谢谢。 问题答案: 是的,您必须先调

  • 本文向大家介绍Python对数据进行插值和下采样的方法,包括了Python对数据进行插值和下采样的方法的使用技巧和注意事项,需要的朋友参考一下 使用Python进行插值非常方便,可以直接使用scipy中的interpolate 其中y_bspline就是从1024插值得到的4096的数据 但是,scipy中好像并没有进行下采样的函数,嗯..难道是因为太过简单了么,不过好像用一个循环就可以完成,但如