分批處理
在深度學習中,每一步最佳化都會根據多個輸入範例進行作業以達成強健訓練。因此,有效的批次處理至關重要。對於影像輸入,批次處理很簡單;N 個影像會調整為相同的高度和寬度,然後堆疊為形狀為 N x 3 x H x W
的四維張量。對於網格,批次處理並不容易。
網格批次處理模式
假設你要建立一個批次,其中包含兩個網格,其中 mesh1 = (v1: V1 x 3, f1: F1 x 3)
包含 V1
個頂點和 F1
個面,而 mesh2 = (v2: V2 x 3, f2: F2 x 3)
有 V2 (!= V1)
個頂點和 F2 (!= F1)
個面。 Meshes 資料結構提供三種不同的方式來批次處理異質網格。如果 meshes = Meshes(verts = [v1, v2], faces = [f1, f2])
是資料結構的一個實例,那麼
- 清單:將批次中的範例作為張量清單返回。特別是,
meshes.verts_list()
返回頂點清單[v1, v2]
。同樣地,meshes.faces_list()
返回面清單[f1, f2]
。 - 填充:填充表示會藉由填充額外值來建立一個張量。特別是,
meshes.verts_padded()
返回形狀為2 x max(V1, V2) x 3
的張量,並使用0
填充額外頂點。同樣地,meshes.faces_padded()
返回形狀為2 x max(F1, F2) x 3
的張量,並使用-1
填充額外面。 - 封裝:封裝表示會連結批次中的範例成為一個張量。特別是,
meshes.verts_packed()
返回形狀為(V1 + V2) x 3
的張量。同樣地,meshes.faces_packed()
返回形狀為(F1 + F2) x 3
用於面的張量。在封裝模式中,會計算輔助變數,以便在封裝與填充或清單模式之間進行有效轉換。