torch.nn.functional.interpolate¶
- torch.nn.functional.interpolate(input, size=None, scale_factor=None, mode='nearest', align_corners=None, recompute_scale_factor=None, antialias=False)[source][source]¶
對輸入進行下采樣/上取樣。
張量透過給定的
size或scale_factor進行插值插值演算法由
mode決定。目前支援時間、空間和體三維取樣,即期望的輸入形狀為 3 維、4 維或 5 維。
輸入維度的解釋形式為:mini-batch x channels x [可選深度] x [可選高度] x 寬度。
可用的縮放模式有:nearest、linear(僅 3D)、bilinear、bicubic(僅 4D)、trilinear(僅 5D)、area、nearest-exact
- 引數
input (Tensor) – 輸入張量
size (int 或 Tuple[int] 或 Tuple[int, int] 或 Tuple[int, int, int]) – 輸出空間尺寸。
scale_factor (float 或 Tuple[float]) – 空間尺寸的乘數。如果 scale_factor 是一個 tuple,其長度必須與空間維度的數量匹配;即 input.dim() - 2。
mode (str) – 上取樣使用的演算法:
'nearest'|'linear'|'bilinear'|'bicubic'|'trilinear'|'area'|'nearest-exact'。預設值:'nearest'align_corners (bool, 可選) – 從幾何學角度來看,我們將輸入和輸出的畫素視為正方形而不是點。如果設定為
True,則輸入和輸出張量按其角畫素的中心點對齊,保留角畫素的值。如果設定為False,則輸入和輸出張量按其角畫素的角點對齊,插值使用邊緣值填充處理邊界外的值,使得當scale_factor保持不變時,此操作與輸入大小無關。這僅在mode為'linear'、'bilinear'、'bicubic'或'trilinear'時有效。預設值:Falserecompute_scale_factor (bool, 可選) – 重新計算插值計算中使用的 scale_factor。如果 recompute_scale_factor 為
True,則必須傳入 scale_factor,並且 scale_factor 用於計算輸出 size。計算出的輸出 size 將用於推斷插值的新縮放比例。請注意,當 scale_factor 是浮點數時,由於舍入和精度問題,它可能與重新計算的 scale_factor 不同。如果 recompute_scale_factor 為False,則直接使用 size 或 scale_factor 進行插值。預設值:None。antialias (bool, 可選) – 應用抗鋸齒的標誌。預設值:
False。將抗鋸齒選項與align_corners=False一起使用時,插值結果將與 Pillow 的下采樣操作結果一致。支援的模式:'bilinear'、'bicubic'。
- 返回型別
注意
當使用
mode='bicubic'時,可能會導致過沖,換句話說,對於影像而言,可能會產生負值或大於 255 的值。如果在顯示影像時希望減少過沖,請顯式呼叫result.clamp(min=0, max=255)。注意
模式
mode='nearest-exact'與 Scikit-Image 和 PIL 的最近鄰插值演算法一致,並修復了mode='nearest'的已知問題。引入此模式是為了保持向後相容性。模式mode='nearest'與 OpenCV 中有 bug 的INTER_NEAREST插值演算法一致。注意
在使用模式
['linear','bilinear','bicubic','trilinear','area']時,CUDA 上 dtype 為float16的上取樣操作的梯度可能不準確。更多詳細資訊,請參考 issue#104157 中的討論。注意
在 CUDA 裝置上給定張量時,此操作可能會產生非確定性梯度。更多資訊請參閱可復現性。