pytorch进行上采样的种类实例
1、其中再语义分割比较常用的上采样:
其实现方法为:
defupconv2x2(in_channels,out_channels,mode='transpose'): ifmode=='transpose': #这个上采用需要设置其输入通道,输出通道.其中kernel_size、stride #大小要跟对应下采样设置的值一样大小。这样才可恢复到相同的wh。这里时反卷积操作。 returnnn.ConvTranspose2d( in_channels, out_channels, kernel_size=2, stride=2) else: #out_channelsisalwaysgoingtobethesame #asin_channels #这里不会改变通道数,其中scale_factor是上采用的放大因子,其是相对于当前的 #输入大小的倍数 returnnn.Sequential( nn.Upsample(mode='bilinear',scale_factor=2,align_corners=True)) #这里的代码是在这里设置多一个卷积,这样子就起到了可以修改其输出通道的功能了。 #相当于功能跟ConvTranspose2d()差不多,只是上采样的方法不同 conv1x1((in_channels,out_channels)) defconv1x1(in_channels,out_channels,groups=1): returnnn.Sequential(nn.Conv2d( in_channels, out_channels, kernel_size=1, groups=groups, stride=1), nn.BatchNorm2d(out_channels))
另一种上采样的方法是,参考代码:segnet_pytorch:
#Stage5 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) #Stage5d #这个是进行最大值上采样的函数,其是根据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]]]]) maxPool2dtensor([[[[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进行上采样的种类实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。