Pytorch上下采样函数--interpolate()
torch.nn.functional.interpolate實現(xiàn)插值和上采樣
上采樣:可以使你訓(xùn)練的圖片分辨率變成你想要的更大的分辨率
將輸入圖片input image進行rescale到一個想要的尺寸,而且計算每個點的像素點,使用如雙線性插值bilinear等插值方法對其余點進行插值。
torch.nn.functional.interpolate(input, size=None, scale_factor=None, mode='nearest', align_corners=None)
參數(shù):
input (Tensor):輸入張量
size (int or Tuple[int] or Tuple[int, int] or Tuple[int, int, int]) :輸出大小.
scale_factor (float or Tuple[float]) :指定輸出為輸入的多少倍數(shù)。如果輸入為tuple,其也要制定為tuple類型 ;? 根據(jù)給定的size或scale_factor參數(shù)來對輸入進行下/上采樣
mode (str) :?可使用的上采樣算法,有’nearest’, ‘linear’, ‘bilinear’, ‘bicubic’ , ‘trilinear’和’area’. 默認(rèn)使用’nearest;? 使用的插值算法取決于參數(shù)mode的設(shè)置
align_corners?(bool,?optional) :
幾何上,我們認(rèn)為輸入和輸出的像素是正方形,而不是點。如果設(shè)置為True,則輸入和輸出張量由其角像素的中心點對齊,從而保留角像素處的值。如果設(shè)置為False,則輸入和輸出張量由它們的角像素的角點對齊,插值使用邊界外值的邊值填充;當(dāng)scale_factor保持不變時,使該操作獨立于輸入大小。僅當(dāng)使用的算法為'linear',?'bilinear', 'bilinear'or?'trilinear'時可以使用。默認(rèn)設(shè)置為False
注意:
使用mode='bicubic'時,可能會導(dǎo)致overshoot問題,即它可以為圖像生成負值或大于255的值。如果你想在顯示圖像時減少overshoot問題,可以顯式地調(diào)用result.clamp(min=0,max=255)。
示例一:
import torch.nn.functional as tnfup2=tnf.interpolate(x, scale_factor=(2, 2), mode='nearest')解析:假設(shè)輸入x.shape()為 torch.Size([1, 64, 40, 40])
scale_factor=(2,2)表示分辨率長寬都乘以2--------->>>[80,80]
使用的是nearest上采樣的方法
最后經(jīng)過上采樣后:up2.shape()為torch.Size([1, 64, 80, 80])
示例二
import torch from torch import nn import torch.nn.functional as F input = torch.arange(1, 5, dtype=torch.float32).view(1, 1, 2, 2) print(input)返回:input.size()? 為torch.size([1,1,2,2])
tensor([[[[1., 2.],[3., 4.]]]]) x = F.interpolate(input, scale_factor=2, mode='nearest') print(x)返回:
tensor([[[[1., 1., 2., 2.],[1., 1., 2., 2.],[3., 3., 4., 4.],[3., 3., 4., 4.]]]])示例三(size使張量變成你想要的分辨率)
import torch.nn.functional as tnfprint(P4in.size()) #torch.Size([1, 128, 38, 53]) print(P5in.size()) #torch.Size([1, 256, 19, 27])P5in_P4m = tnf.interpolate(P5in, size=[P4in.size(2), P4in.size(3)], mode="nearest") # 上采樣解析:
size=[38,53]:? 代表將P5in的分辨率的張量[19,27 ]-------------->>>>>[38,53], 其余的維度不變
最后P5in_P4m.size() 為[1,256,38,53]
也提供了一些Upsample的方法:
torch.nn.functional.upsample(input, size=None, scale_factor=None, mode='nearest', align_corners=None)torch.nn.functional.upsample_nearest(input, size=None, scale_factor=None)torch.nn.functional.upsample_bilinear(input, size=None, scale_factor=None)參考博客:
Pytorch關(guān)于torch.nn.functional.interpolate的用法的示例展示_比比獸卡卡的博客-CSDN博客
pytorch torch.nn.functional實現(xiàn)插值和上采樣 - 慢行厚積 - 博客園
雙線性插值(Bilinear Interpolation) - 馬語者 - 博客園
torch.nn.functional.interpolate ‘bilinear‘ 圖像理解_符號看象限_Wangerer的博客-CSDN博客
總結(jié)
以上是生活随笔為你收集整理的Pytorch上下采样函数--interpolate()的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 使用malloc创建头结点的坑
- 下一篇: JQuery进阶学习