欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Pytorch上下采樣函數(shù)之F.interpolate數(shù)組采樣操作詳解

 更新時(shí)間:2022年04月06日 10:56:43   作者:視覺(jué)萌新、  
最近用到了上采樣下采樣操作,pytorch中使用interpolate可以很輕松的完成,下面這篇文章主要給大家介紹了關(guān)于Pytorch上下采樣函數(shù)之F.interpolate數(shù)組采樣操作的相關(guān)資料,需要的朋友可以參考下

什么是上采樣

上采樣,在深度學(xué)習(xí)框架中,可以簡(jiǎn)單的理解為任何可以讓你的圖像變成更高分辨率的技術(shù)。 最簡(jiǎn)單的方式是重采樣和插值:將輸入圖片input image進(jìn)行rescale到一個(gè)想要的尺寸,而且計(jì)算每個(gè)點(diǎn)的像素點(diǎn),使用如雙線性插值bilinear等插值方法對(duì)其余點(diǎn)進(jìn)行插值。

Unpooling是在CNN中常用的來(lái)表示max pooling的逆操作。這是從2013年紐約大學(xué)Matthew D. Zeiler和Rob Fergus發(fā)表的《Visualizing and Understanding Convolutional Networks》中引用的:因?yàn)閙ax pooling不可逆,因此使用近似的方式來(lái)反轉(zhuǎn)得到max pooling操作之前的原始情況;

F.interpolate——數(shù)組采樣操作

torch.nn.functional.interpolate(input, size=None, scale_factor=None, mode='nearest', align_corners=None, recompute_scale_factor=None)

功能:利用插值方法,對(duì)輸入的張量數(shù)組進(jìn)行上\下采樣操作,換句話說(shuō)就是科學(xué)合理地改變數(shù)組的尺寸大小,盡量保持?jǐn)?shù)據(jù)完整。

輸入:

  • input(Tensor):需要進(jìn)行采樣處理的數(shù)組。
  • size(int或序列):輸出空間的大小
  • scale_factor(float或序列):空間大小的乘數(shù)
  • mode(str):用于采樣的算法。'nearest'| 'linear'| 'bilinear'| 'bicubic'| 'trilinear'| 'area'。默認(rèn):'nearest'
  • align_corners(bool):在幾何上,我們將輸入和輸出的像素視為正方形而不是點(diǎn)。如果設(shè)置為True,則輸入和輸出張量按其角像素的中心點(diǎn)對(duì)齊,保留角像素處的值。如果設(shè)置為False,則輸入和輸出張量通過(guò)其角像素的角點(diǎn)對(duì)齊,并且插值使用邊緣值填充用于邊界外值,使此操作在保持不變時(shí)獨(dú)立于輸入大小scale_factor。
  • recompute_scale_facto(bool):重新計(jì)算用于插值計(jì)算的 scale_factor。當(dāng)scale_factor作為參數(shù)傳遞時(shí),它用于計(jì)算output_size。如果recompute_scale_factor的False或沒(méi)有指定,傳入的scale_factor將在插值計(jì)算中使用。否則,將根據(jù)用于插值計(jì)算的輸出和輸入大小計(jì)算新的scale_factor(即,如果計(jì)算的output_size顯式傳入,則計(jì)算將相同 )。注意當(dāng)scale_factor 是浮點(diǎn)數(shù),由于舍入和精度問(wèn)題,重新計(jì)算的 scale_factor 可能與傳入的不同。

注意:

  • 輸入的張量數(shù)組里面的數(shù)據(jù)類型必須是float。
  • 輸入的數(shù)組維數(shù)只能是3、4或5,分別對(duì)應(yīng)于時(shí)間、空間、體積采樣。
  • 不對(duì)輸入數(shù)組的前兩個(gè)維度(批次和通道)采樣,從第三個(gè)維度往后開始采樣處理。
  • 輸入的維度形式為:批量(batch_size)×通道(channel)×[可選深度]×[可選高度]×寬度(前兩個(gè)維度具有特殊的含義,不進(jìn)行采樣處理)
  • size與scale_factor兩個(gè)參數(shù)只能定義一個(gè),即兩種采樣模式只能用一個(gè)。要么讓數(shù)組放大成特定大小、要么給定特定系數(shù),來(lái)等比放大數(shù)組。
  • 如果size或者scale_factor輸入序列,則必須匹配輸入的大小。如果輸入四維,則它們的序列長(zhǎng)度必須是2,如果輸入是五維,則它們的序列長(zhǎng)度必須是3。
  • 如果size輸入整數(shù)x,則相當(dāng)于把3、4維度放大成(x,x)大小(輸入以四維為例,下面同理)。
  • 如果scale_factor輸入整數(shù)x,則相當(dāng)于把3、4維度都等比放大x倍。
  • mode是’linear’時(shí)輸入必須是3維的;是’bicubic’時(shí)輸入必須是4維的;是’trilinear’時(shí)輸入必須是5維的
  • 如果align_corners被賦值,則mode必須是'linear','bilinear','bicubic'或'trilinear'中的一個(gè)。
  • 插值方法不同,結(jié)果就不一樣,需要結(jié)合具體任務(wù),選擇合適的插值方法。

補(bǔ)充:

一圖看懂a(chǎn)lign_corners=True與False的區(qū)別,從4×4上采樣成8×8。一個(gè)是按四角的像素點(diǎn)中心對(duì)齊,另一個(gè)是按四角的像素角點(diǎn)對(duì)齊。

圖片轉(zhuǎn)自:https://discuss.pytorch.org/t/what-we-should-use-align-corners-false/22663/9

代碼案例

一般用法

import torch.nn.functional as F
import torch

a=torch.arange(12,dtype=torch.float32).reshape(1,2,2,3)
b=F.interpolate(a,size=(4,4),mode='bilinear')
# 這里的(4,4)指的是將后兩個(gè)維度放縮成4*4的大小
print(a)
print(b)
print('原數(shù)組尺寸:',a.shape)
print('size采樣尺寸:',b.shape)

輸出結(jié)果,一二維度大小不會(huì)發(fā)生變化

# 原數(shù)組
tensor([[[[ 0.,  1.,  2.],
          [ 3.,  4.,  5.]],

         [[ 6.,  7.,  8.],
          [ 9., 10., 11.]]]])
# 采樣后的數(shù)組
tensor([[[[ 0.0000,  0.6250,  1.3750,  2.0000],
          [ 0.7500,  1.3750,  2.1250,  2.7500],
          [ 2.2500,  2.8750,  3.6250,  4.2500],
          [ 3.0000,  3.6250,  4.3750,  5.0000]],

         [[ 6.0000,  6.6250,  7.3750,  8.0000],
          [ 6.7500,  7.3750,  8.1250,  8.7500],
          [ 8.2500,  8.8750,  9.6250, 10.2500],
          [ 9.0000,  9.6250, 10.3750, 11.0000]]]])
原數(shù)組尺寸: torch.Size([1, 2, 2, 3])
size采樣尺寸: torch.Size([1, 2, 4, 4])
# 規(guī)定三四維度放縮成4*4大小

size與scale_factor的區(qū)別:輸入序列時(shí)

import torch.nn.functional as F
import torch

a=torch.arange(4*512*14*14,dtype=torch.float32).reshape(4,512,14,14)
b=F.interpolate(a,size=(28,56),mode='bilinear')
c=F.interpolate(a,scale_factor=(4,8),mode='bilinear')
print('原數(shù)組尺寸:',a.shape)
print('size采樣尺寸:',b.shape)
print('scale_factor采樣尺寸:',c.shape)

輸出結(jié)果

原數(shù)組尺寸: torch.Size([4, 512, 14, 14])
size采樣尺寸: torch.Size([4, 512, 28, 56])
# 第三維度放大成28,第四維度放大成56
scale_factor采樣尺寸: torch.Size([4, 512, 56, 112])
# 第三維度放大4倍,第四維度放8倍

size與scale_factor的區(qū)別:輸入整數(shù)時(shí)

import torch.nn.functional as F
import torch

a=torch.arange(4*512*14*14,dtype=torch.float32).reshape(4,512,14,14)
b=F.interpolate(a,size=28,mode='bilinear')
c=F.interpolate(a,scale_factor=4,mode='bilinear')
print('原數(shù)組尺寸:',a.shape)
print('size采樣尺寸:',b.shape)
print('scale_factor采樣尺寸:',c.shape)

輸出結(jié)果

原數(shù)組尺寸: torch.Size([4, 512, 14, 14])
size采樣尺寸: torch.Size([4, 512, 28, 28])
# 三四維度數(shù)組被放大成28*28
scale_factor采樣尺寸: torch.Size([4, 512, 56, 56])
# 三四維度數(shù)組被放大了4倍

align_corners=True與False的區(qū)別

import torch.nn.functional as F
import torch

a=torch.arange(18,dtype=torch.float32).reshape(1,2,3,3)
b=F.interpolate(a,size=(4,4),mode='bicubic',align_corners=True)
c=F.interpolate(a,size=(4,4),mode='bicubic',align_corners=False)

print(a)
print(b)
print(c)

輸出結(jié)果,具體效果會(huì)因mode插值方法而異

tensor([[[[ 0.,  1.,  2.],
          [ 3.,  4.,  5.],
          [ 6.,  7.,  8.]],

         [[ 9., 10., 11.],
          [12., 13., 14.],
          [15., 16., 17.]]]])
# align_corners=True
tensor([[[[ 0.0000,  0.5741,  1.4259,  2.0000],
          [ 1.7222,  2.2963,  3.1481,  3.7222],
          [ 4.2778,  4.8519,  5.7037,  6.2778],
          [ 6.0000,  6.5741,  7.4259,  8.0000]],

         [[ 9.0000,  9.5741, 10.4259, 11.0000],
          [10.7222, 11.2963, 12.1481, 12.7222],
          [13.2778, 13.8519, 14.7037, 15.2778],
          [15.0000, 15.5741, 16.4259, 17.0000]]]])
# align_corners=False
tensor([[[[-0.2871,  0.3145,  1.2549,  1.8564],
          [ 1.5176,  2.1191,  3.0596,  3.6611],
          [ 4.3389,  4.9404,  5.8809,  6.4824],
          [ 6.1436,  6.7451,  7.6855,  8.2871]],

         [[ 8.7129,  9.3145, 10.2549, 10.8564],
          [10.5176, 11.1191, 12.0596, 12.6611],
          [13.3389, 13.9404, 14.8809, 15.4824],
          [15.1436, 15.7451, 16.6855, 17.2871]]]])

擴(kuò)展:

在計(jì)算機(jī)視覺(jué)中,interpolate函數(shù)常用于圖像的放大(即上采樣操作)。比如在細(xì)粒度識(shí)別領(lǐng)域中,注意力圖有時(shí)候會(huì)對(duì)特征圖進(jìn)行裁剪操作,將有用的部分裁剪出來(lái),裁剪后的圖像往往尺寸小于原始特征圖,這時(shí)候如果強(qiáng)制轉(zhuǎn)換成原始圖像大小,往往是無(wú)效的,會(huì)丟掉部分有用的信息。所以這時(shí)候就需要用到interpolate函數(shù)對(duì)其進(jìn)行上采樣操作,在保證圖像信息不丟失的情況下,放大圖像,從而放大圖像的細(xì)節(jié),有利于進(jìn)一步的特征提取工作。

官方文檔
torch.nn.functional.interpolate:https://pytorch.org/docs/stable/generated/torch.nn.functional.interpolate.html?highlight=interpolate#torch.nn.functional.interpolate

總結(jié)

到此這篇關(guān)于Pytorch上下采樣函數(shù)之F.interpolate數(shù)組采樣操作的文章就介紹到這了,更多相關(guān)Pytorch F.interpolate數(shù)組采樣內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python貪吃蛇游戲編寫代碼

    Python貪吃蛇游戲編寫代碼

    這篇文章主要為大家詳細(xì)介紹了Python貪吃蛇游戲的編寫代碼,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-04-04
  • 詳解Python中的正則表達(dá)式

    詳解Python中的正則表達(dá)式

    正則表達(dá)式是一個(gè)特殊的字符序列,它能幫助你方便的檢查一個(gè)字符串是否與某種模式匹配。本文給大家?guī)?lái)了python中的正則表達(dá)式,感興趣的朋友一起看看吧
    2018-07-07
  • python 將字符串完成特定的向右移動(dòng)方法

    python 將字符串完成特定的向右移動(dòng)方法

    今天小編就為大家分享一篇python 將字符串完成特定的向右移動(dòng)方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-06-06
  • LyScript獲取上一條與下一條匯編指令的方法詳解

    LyScript獲取上一條與下一條匯編指令的方法詳解

    LyScript 插件默認(rèn)并沒(méi)有提供上一條與下一條匯編指令的獲取功能,當(dāng)然你可以使用LyScriptTools工具包直接調(diào)用內(nèi)置命令得到,本文就為大家詳細(xì)講講如何實(shí)現(xiàn)
    2022-07-07
  • python進(jìn)階教程之異常處理

    python進(jìn)階教程之異常處理

    這篇文章主要介紹了python進(jìn)階教程之異常處理,在項(xiàng)目開發(fā)中,異常處理是不可或缺的,需要的朋友可以參考下
    2014-08-08
  • 利用numba讓python速度提升百倍

    利用numba讓python速度提升百倍

    這篇文章主要介紹了利用numba讓python速度提升百倍,python由于它動(dòng)態(tài)解釋性語(yǔ)言的特性,numba是一款可以將python函數(shù)編譯為機(jī)器代碼的JIT編譯器,下面針對(duì)numba相關(guān)內(nèi)容展開,需要的小伙伴可以參考一下
    2022-03-03
  • Python編程語(yǔ)言的35個(gè)與眾不同之處(語(yǔ)言特征和使用技巧)

    Python編程語(yǔ)言的35個(gè)與眾不同之處(語(yǔ)言特征和使用技巧)

    這篇文章主要介紹了Python編程語(yǔ)言的35個(gè)與眾不同之處,Python編程語(yǔ)言的語(yǔ)言特征和使用技巧,需要的朋友可以參考下
    2014-07-07
  • 畫pytorch模型圖,以及參數(shù)計(jì)算的方法

    畫pytorch模型圖,以及參數(shù)計(jì)算的方法

    今天小編就為大家分享一篇畫pytorch模型圖,以及參數(shù)計(jì)算的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-08-08
  • 關(guān)于Tensorflow 模型持久化詳解

    關(guān)于Tensorflow 模型持久化詳解

    今天小編就為大家分享一篇關(guān)于Tensorflow 模型持久化詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-02-02
  • 使用keras實(shí)現(xiàn)Precise, Recall, F1-socre方式

    使用keras實(shí)現(xiàn)Precise, Recall, F1-socre方式

    這篇文章主要介紹了使用keras實(shí)現(xiàn)Precise, Recall, F1-socre方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-06-06

最新評(píng)論