torch.nn.functional.affine_grid¶
- torch.nn.functional.affine_grid(theta, size, align_corners=None)[原始碼][原始碼]¶
給定一批仿射矩陣
theta,生成 2D 或 3D 流場(取樣網格)。注意
此函式通常與
grid_sample()結合使用,以構建 空間變換網路 (Spatial Transformer Networks)。- 引數
theta (Tensor) – 輸入的仿射矩陣批次,其形狀對於 2D 為 (),對於 3D 為 ()
size (torch.Size) – 目標輸出影像尺寸。對於 2D 為 (),對於 3D 為 ) 示例: torch.Size((32, 3, 24, 24))
align_corners (bool, optional) – 如果為
True,則將-1和1視為角畫素的中心,而非影像的角點。更完整的描述請參考grid_sample()。由affine_grid()生成的網格應與此選項的相同設定一起傳遞給grid_sample()。預設值:False
- 返回值
大小為 () 的輸出 Tensor
- 返回值型別
output (Tensor)
警告
當
align_corners = True時,網格位置取決於畫素尺寸相對於輸入影像尺寸的大小,因此對於不同解析度(即經過上取樣或下采樣)的相同輸入,grid_sample()取樣到的位置將不同。直到 1.2.0 版本,預設行為是align_corners = True。自此之後,預設行為已更改為align_corners = False,以便與interpolate()的預設行為保持一致。警告
當
align_corners = True時,對 1D 資料進行 2D 仿射變換以及對 2D 資料進行 3D 仿射變換(即當一個空間維度尺寸為 1 時)是未明確定義的,並非預期用例。當align_corners = False時則沒有此問題。直到 1.2.0 版本,沿尺寸為 1 的維度上的所有網格點都被任意視為位於-1處。從 1.3.0 版本開始,在align_corners = True的設定下,沿尺寸為 1 的維度上的所有網格點都被視為位於0處(即輸入影像的中心)。