mirror of
https://github.com/facebookresearch/pytorch3d.git
synced 2025-08-02 03:42:50 +08:00
apply black 20.8b1 formatting update
Summary: allow-large-files black_any_style Reviewed By: zertosh Differential Revision: D24325133 fbshipit-source-id: b4afe80d1e8b2bc993f4b8e3822c02964df47462
This commit is contained in:
parent
11a9f5ea30
commit
2d39723610
@ -53,7 +53,7 @@ def _compute_alphas(x, c_world):
|
||||
|
||||
|
||||
def _build_M(y, alphas, weight):
|
||||
""" Returns the matrix defining the reprojection equations.
|
||||
"""Returns the matrix defining the reprojection equations.
|
||||
Args:
|
||||
y: projected points in camera coordinates of size B x N x 2
|
||||
alphas: barycentric coordinates of size B x N x 4
|
||||
@ -90,7 +90,7 @@ def _build_M(y, alphas, weight):
|
||||
|
||||
|
||||
def _null_space(m, kernel_dim):
|
||||
""" Finds the null space (kernel) basis of the matrix
|
||||
"""Finds the null space (kernel) basis of the matrix
|
||||
Args:
|
||||
m: the batch of input matrices, B x N x 12
|
||||
kernel_dim: number of dimensions to approximate the kernel
|
||||
@ -106,7 +106,7 @@ def _null_space(m, kernel_dim):
|
||||
|
||||
|
||||
def _reproj_error(y_hat, y, weight, eps=1e-9):
|
||||
""" Projects estimated 3D points and computes the reprojection error
|
||||
"""Projects estimated 3D points and computes the reprojection error
|
||||
Args:
|
||||
y_hat: a batch of predicted 2D points in homogeneous coordinates
|
||||
y: a batch of ground-truth 2D points
|
||||
@ -121,7 +121,7 @@ def _reproj_error(y_hat, y, weight, eps=1e-9):
|
||||
|
||||
|
||||
def _algebraic_error(x_w_rotated, x_cam, weight):
|
||||
""" Computes the residual of Umeyama in 3D.
|
||||
"""Computes the residual of Umeyama in 3D.
|
||||
Args:
|
||||
x_w_rotated: The given 3D points rotated with the predicted camera.
|
||||
x_cam: the lifted 2D points y
|
||||
@ -135,7 +135,7 @@ def _algebraic_error(x_w_rotated, x_cam, weight):
|
||||
|
||||
|
||||
def _compute_norm_sign_scaling_factor(c_cam, alphas, x_world, y, weight, eps=1e-9):
|
||||
""" Given a solution, adjusts the scale and flip
|
||||
"""Given a solution, adjusts the scale and flip
|
||||
Args:
|
||||
c_cam: control points in camera coordinates
|
||||
alphas: barycentric coordinates of the points
|
||||
@ -167,7 +167,7 @@ def _compute_norm_sign_scaling_factor(c_cam, alphas, x_world, y, weight, eps=1e-
|
||||
|
||||
|
||||
def _gen_pairs(input, dim=-2, reducer=lambda a, b: ((a - b) ** 2).sum(dim=-1)):
|
||||
""" Generates all pairs of different rows and then applies the reducer
|
||||
"""Generates all pairs of different rows and then applies the reducer
|
||||
Args:
|
||||
input: a tensor
|
||||
dim: a dimension to generate pairs across
|
||||
@ -184,7 +184,7 @@ def _gen_pairs(input, dim=-2, reducer=lambda a, b: ((a - b) ** 2).sum(dim=-1)):
|
||||
|
||||
|
||||
def _kernel_vec_distances(v):
|
||||
""" Computes the coefficients for linearisation of the quadratic system
|
||||
"""Computes the coefficients for linearisation of the quadratic system
|
||||
to match all pairwise distances between 4 control points (dim=1).
|
||||
The last dimension corresponds to the coefficients for quadratic terms
|
||||
Bij = Bi * Bj, where Bi and Bj correspond to kernel vectors.
|
||||
@ -208,7 +208,7 @@ def _kernel_vec_distances(v):
|
||||
|
||||
|
||||
def _solve_lstsq_subcols(rhs, lhs, lhs_col_idx):
|
||||
""" Solves an over-determined linear system for selected LHS columns.
|
||||
"""Solves an over-determined linear system for selected LHS columns.
|
||||
A batched version of `torch.lstsq`.
|
||||
Args:
|
||||
rhs: right-hand side vectors
|
||||
@ -226,7 +226,7 @@ def _binary_sign(t):
|
||||
|
||||
|
||||
def _find_null_space_coords_1(kernel_dsts, cw_dst, eps=1e-9):
|
||||
""" Solves case 1 from the paper [1]; solve for 4 coefficients:
|
||||
"""Solves case 1 from the paper [1]; solve for 4 coefficients:
|
||||
[B11 B22 B33 B44 B12 B13 B14 B23 B24 B34]
|
||||
^ ^ ^ ^
|
||||
Args:
|
||||
@ -246,7 +246,7 @@ def _find_null_space_coords_1(kernel_dsts, cw_dst, eps=1e-9):
|
||||
|
||||
|
||||
def _find_null_space_coords_2(kernel_dsts, cw_dst):
|
||||
""" Solves case 2 from the paper; solve for 3 coefficients:
|
||||
"""Solves case 2 from the paper; solve for 3 coefficients:
|
||||
[B11 B22 B33 B44 B12 B13 B14 B23 B24 B34]
|
||||
^ ^ ^
|
||||
Args:
|
||||
@ -270,7 +270,7 @@ def _find_null_space_coords_2(kernel_dsts, cw_dst):
|
||||
|
||||
|
||||
def _find_null_space_coords_3(kernel_dsts, cw_dst, eps=1e-9):
|
||||
""" Solves case 3 from the paper; solve for 5 coefficients:
|
||||
"""Solves case 3 from the paper; solve for 5 coefficients:
|
||||
[B11 B22 B33 B44 B12 B13 B14 B23 B24 B34]
|
||||
^ ^ ^ ^ ^
|
||||
Args:
|
||||
|
@ -94,7 +94,7 @@ def convert_pointclouds_to_tensor(pcl: Union[torch.Tensor, "Pointclouds"]):
|
||||
|
||||
|
||||
def is_pointclouds(pcl: Union[torch.Tensor, "Pointclouds"]):
|
||||
""" Checks whether the input `pcl` is an instance of `Pointclouds`
|
||||
"""Checks whether the input `pcl` is an instance of `Pointclouds`
|
||||
by checking the existence of `points_padded` and `num_points_per_cloud`
|
||||
functions.
|
||||
"""
|
||||
|
@ -346,7 +346,7 @@ class SoftSilhouetteShader(nn.Module):
|
||||
self.blend_params = blend_params if blend_params is not None else BlendParams()
|
||||
|
||||
def forward(self, fragments, meshes, **kwargs) -> torch.Tensor:
|
||||
""""
|
||||
""" "
|
||||
Only want to render the silhouette so RGB values can be ones.
|
||||
There is no need for lighting or texturing
|
||||
"""
|
||||
|
@ -282,24 +282,24 @@ def Textures(
|
||||
verts_rgb: Optional[torch.Tensor] = None,
|
||||
) -> TexturesBase:
|
||||
"""
|
||||
Textures class has been DEPRECATED.
|
||||
Preserving Textures as a function for backwards compatibility.
|
||||
Textures class has been DEPRECATED.
|
||||
Preserving Textures as a function for backwards compatibility.
|
||||
|
||||
Args:
|
||||
maps: texture map per mesh. This can either be a list of maps
|
||||
[(H, W, 3)] or a padded tensor of shape (N, H, W, 3).
|
||||
faces_uvs: (N, F, 3) tensor giving the index into verts_uvs for each
|
||||
vertex in the face. Padding value is assumed to be -1.
|
||||
verts_uvs: (N, V, 2) tensor giving the uv coordinate per vertex.
|
||||
verts_rgb: (N, V, 3) tensor giving the rgb color per vertex. Padding
|
||||
value is assumed to be -1.
|
||||
Args:
|
||||
maps: texture map per mesh. This can either be a list of maps
|
||||
[(H, W, 3)] or a padded tensor of shape (N, H, W, 3).
|
||||
faces_uvs: (N, F, 3) tensor giving the index into verts_uvs for each
|
||||
vertex in the face. Padding value is assumed to be -1.
|
||||
verts_uvs: (N, V, 2) tensor giving the uv coordinate per vertex.
|
||||
verts_rgb: (N, V, 3) tensor giving the rgb color per vertex. Padding
|
||||
value is assumed to be -1.
|
||||
|
||||
|
||||
Returns:
|
||||
a Textures class which is an instance of TexturesBase e.g. TexturesUV,
|
||||
TexturesAtlas, TexturesVertex
|
||||
Returns:
|
||||
a Textures class which is an instance of TexturesBase e.g. TexturesUV,
|
||||
TexturesAtlas, TexturesVertex
|
||||
|
||||
"""
|
||||
"""
|
||||
|
||||
warnings.warn(
|
||||
"""Textures class is deprecated,
|
||||
|
@ -78,68 +78,68 @@ def _try_place_rectangle(
|
||||
occupied: List[Tuple[int, int]],
|
||||
) -> bool:
|
||||
"""
|
||||
Try to place rect within the current bounding box.
|
||||
Part of the implementation of pack_rectangles.
|
||||
Try to place rect within the current bounding box.
|
||||
Part of the implementation of pack_rectangles.
|
||||
|
||||
Note that the arguments `placed_so_far` and `occupied` are modified.
|
||||
Note that the arguments `placed_so_far` and `occupied` are modified.
|
||||
|
||||
Args:
|
||||
rect: rectangle to place
|
||||
placed_so_far: the locations decided upon so far - a list of
|
||||
(x, y, whether flipped). The nth element is the
|
||||
location of the nth rectangle if it has been decided.
|
||||
(modified in place)
|
||||
occupied: the nodes of the graph of extents of rightmost placed
|
||||
rectangles - (modified in place)
|
||||
Args:
|
||||
rect: rectangle to place
|
||||
placed_so_far: the locations decided upon so far - a list of
|
||||
(x, y, whether flipped). The nth element is the
|
||||
location of the nth rectangle if it has been decided.
|
||||
(modified in place)
|
||||
occupied: the nodes of the graph of extents of rightmost placed
|
||||
rectangles - (modified in place)
|
||||
|
||||
Returns:
|
||||
True on success.
|
||||
Returns:
|
||||
True on success.
|
||||
|
||||
Example:
|
||||
(We always have placed the first rectangle horizontally and other
|
||||
rectangles above it.)
|
||||
Let's say the placed boxes 1-4 are layed out like this.
|
||||
The coordinates of the points marked X are stored in occupied.
|
||||
It is to the right of the X's that we seek to place rect.
|
||||
Example:
|
||||
(We always have placed the first rectangle horizontally and other
|
||||
rectangles above it.)
|
||||
Let's say the placed boxes 1-4 are layed out like this.
|
||||
The coordinates of the points marked X are stored in occupied.
|
||||
It is to the right of the X's that we seek to place rect.
|
||||
|
||||
+-----------------------X
|
||||
|2 |
|
||||
| +---X
|
||||
| |4 |
|
||||
| | |
|
||||
| +---+X
|
||||
| |3 |
|
||||
| | |
|
||||
+-----------------------+----+------X
|
||||
y |1 |
|
||||
^ | --->x |
|
||||
| +-----------------------------------+
|
||||
+-----------------------X
|
||||
|2 |
|
||||
| +---X
|
||||
| |4 |
|
||||
| | |
|
||||
| +---+X
|
||||
| |3 |
|
||||
| | |
|
||||
+-----------------------+----+------X
|
||||
y |1 |
|
||||
^ | --->x |
|
||||
| +-----------------------------------+
|
||||
|
||||
We want to place this rectangle.
|
||||
We want to place this rectangle.
|
||||
|
||||
+-+
|
||||
|5|
|
||||
| |
|
||||
| | = rect
|
||||
| |
|
||||
| |
|
||||
| |
|
||||
+-+
|
||||
+-+
|
||||
|5|
|
||||
| |
|
||||
| | = rect
|
||||
| |
|
||||
| |
|
||||
| |
|
||||
+-+
|
||||
|
||||
The call will succeed, returning True, leaving us with
|
||||
The call will succeed, returning True, leaving us with
|
||||
|
||||
+-----------------------X
|
||||
|2 | +-X
|
||||
| +---+|5|
|
||||
| |4 || |
|
||||
| | || |
|
||||
| +---++ |
|
||||
| |3 | |
|
||||
| | | |
|
||||
+-----------------------+----+-+----X
|
||||
|1 |
|
||||
| |
|
||||
+-----------------------------------+ .
|
||||
+-----------------------X
|
||||
|2 | +-X
|
||||
| +---+|5|
|
||||
| |4 || |
|
||||
| | || |
|
||||
| +---++ |
|
||||
| |3 | |
|
||||
| | | |
|
||||
+-----------------------+----+-+----X
|
||||
|1 |
|
||||
| |
|
||||
+-----------------------------------+ .
|
||||
|
||||
"""
|
||||
total_width = occupied[0][0]
|
||||
|
@ -9,177 +9,177 @@ from . import utils as struct_utils
|
||||
|
||||
class Meshes(object):
|
||||
"""
|
||||
This class provides functions for working with batches of triangulated
|
||||
meshes with varying numbers of faces and vertices, and converting between
|
||||
representations.
|
||||
This class provides functions for working with batches of triangulated
|
||||
meshes with varying numbers of faces and vertices, and converting between
|
||||
representations.
|
||||
|
||||
Within Meshes, there are three different representations of the faces and
|
||||
verts data:
|
||||
Within Meshes, there are three different representations of the faces and
|
||||
verts data:
|
||||
|
||||
List
|
||||
- only used for input as a starting point to convert to other representations.
|
||||
Padded
|
||||
- has specific batch dimension.
|
||||
Packed
|
||||
- no batch dimension.
|
||||
- has auxillary variables used to index into the padded representation.
|
||||
List
|
||||
- only used for input as a starting point to convert to other representations.
|
||||
Padded
|
||||
- has specific batch dimension.
|
||||
Packed
|
||||
- no batch dimension.
|
||||
- has auxillary variables used to index into the padded representation.
|
||||
|
||||
Example:
|
||||
Example:
|
||||
|
||||
Input list of verts V_n = [[V_1], [V_2], ... , [V_N]]
|
||||
where V_1, ... , V_N are the number of verts in each mesh and N is the
|
||||
numer of meshes.
|
||||
Input list of verts V_n = [[V_1], [V_2], ... , [V_N]]
|
||||
where V_1, ... , V_N are the number of verts in each mesh and N is the
|
||||
numer of meshes.
|
||||
|
||||
Input list of faces F_n = [[F_1], [F_2], ... , [F_N]]
|
||||
where F_1, ... , F_N are the number of faces in each mesh.
|
||||
Input list of faces F_n = [[F_1], [F_2], ... , [F_N]]
|
||||
where F_1, ... , F_N are the number of faces in each mesh.
|
||||
|
||||
# SPHINX IGNORE
|
||||
List | Padded | Packed
|
||||
---------------------------|-------------------------|------------------------
|
||||
[[V_1], ... , [V_N]] | size = (N, max(V_n), 3) | size = (sum(V_n), 3)
|
||||
| |
|
||||
Example for verts: | |
|
||||
| |
|
||||
V_1 = 3, V_2 = 4, V_3 = 5 | size = (3, 5, 3) | size = (12, 3)
|
||||
| |
|
||||
List([ | tensor([ | tensor([
|
||||
[ | [ | [0.1, 0.3, 0.5],
|
||||
[0.1, 0.3, 0.5], | [0.1, 0.3, 0.5], | [0.5, 0.2, 0.1],
|
||||
[0.5, 0.2, 0.1], | [0.5, 0.2, 0.1], | [0.6, 0.8, 0.7],
|
||||
[0.6, 0.8, 0.7], | [0.6, 0.8, 0.7], | [0.1, 0.3, 0.3],
|
||||
], | [0, 0, 0], | [0.6, 0.7, 0.8],
|
||||
[ | [0, 0, 0], | [0.2, 0.3, 0.4],
|
||||
[0.1, 0.3, 0.3], | ], | [0.1, 0.5, 0.3],
|
||||
[0.6, 0.7, 0.8], | [ | [0.7, 0.3, 0.6],
|
||||
[0.2, 0.3, 0.4], | [0.1, 0.3, 0.3], | [0.2, 0.4, 0.8],
|
||||
[0.1, 0.5, 0.3], | [0.6, 0.7, 0.8], | [0.9, 0.5, 0.2],
|
||||
], | [0.2, 0.3, 0.4], | [0.2, 0.3, 0.4],
|
||||
[ | [0.1, 0.5, 0.3], | [0.9, 0.3, 0.8],
|
||||
[0.7, 0.3, 0.6], | [0, 0, 0], | ])
|
||||
[0.2, 0.4, 0.8], | ], |
|
||||
[0.9, 0.5, 0.2], | [ |
|
||||
[0.2, 0.3, 0.4], | [0.7, 0.3, 0.6], |
|
||||
[0.9, 0.3, 0.8], | [0.2, 0.4, 0.8], |
|
||||
] | [0.9, 0.5, 0.2], |
|
||||
]) | [0.2, 0.3, 0.4], |
|
||||
| [0.9, 0.3, 0.8], |
|
||||
| ] |
|
||||
| ]) |
|
||||
Example for faces: | |
|
||||
| |
|
||||
F_1 = 1, F_2 = 2, F_3 = 7 | size = (3, 7, 3) | size = (10, 3)
|
||||
| |
|
||||
List([ | tensor([ | tensor([
|
||||
[ | [ | [ 0, 1, 2],
|
||||
[0, 1, 2], | [0, 1, 2], | [ 3, 4, 5],
|
||||
], | [-1, -1, -1], | [ 4, 5, 6],
|
||||
[ | [-1, -1, -1] | [ 8, 9, 7],
|
||||
[0, 1, 2], | [-1, -1, -1] | [ 7, 8, 10],
|
||||
[1, 2, 3], | [-1, -1, -1] | [ 9, 10, 8],
|
||||
], | [-1, -1, -1], | [11, 10, 9],
|
||||
[ | [-1, -1, -1], | [11, 7, 8],
|
||||
[1, 2, 0], | ], | [11, 10, 8],
|
||||
[0, 1, 3], | [ | [11, 9, 8],
|
||||
[2, 3, 1], | [0, 1, 2], | ])
|
||||
[4, 3, 2], | [1, 2, 3], |
|
||||
[4, 0, 1], | [-1, -1, -1], |
|
||||
[4, 3, 1], | [-1, -1, -1], |
|
||||
[4, 2, 1], | [-1, -1, -1], |
|
||||
], | [-1, -1, -1], |
|
||||
]) | [-1, -1, -1], |
|
||||
| ], |
|
||||
| [ |
|
||||
| [1, 2, 0], |
|
||||
| [0, 1, 3], |
|
||||
| [2, 3, 1], |
|
||||
| [4, 3, 2], |
|
||||
| [4, 0, 1], |
|
||||
| [4, 3, 1], |
|
||||
| [4, 2, 1], |
|
||||
| ] |
|
||||
| ]) |
|
||||
-----------------------------------------------------------------------------
|
||||
# SPHINX IGNORE
|
||||
List | Padded | Packed
|
||||
---------------------------|-------------------------|------------------------
|
||||
[[V_1], ... , [V_N]] | size = (N, max(V_n), 3) | size = (sum(V_n), 3)
|
||||
| |
|
||||
Example for verts: | |
|
||||
| |
|
||||
V_1 = 3, V_2 = 4, V_3 = 5 | size = (3, 5, 3) | size = (12, 3)
|
||||
| |
|
||||
List([ | tensor([ | tensor([
|
||||
[ | [ | [0.1, 0.3, 0.5],
|
||||
[0.1, 0.3, 0.5], | [0.1, 0.3, 0.5], | [0.5, 0.2, 0.1],
|
||||
[0.5, 0.2, 0.1], | [0.5, 0.2, 0.1], | [0.6, 0.8, 0.7],
|
||||
[0.6, 0.8, 0.7], | [0.6, 0.8, 0.7], | [0.1, 0.3, 0.3],
|
||||
], | [0, 0, 0], | [0.6, 0.7, 0.8],
|
||||
[ | [0, 0, 0], | [0.2, 0.3, 0.4],
|
||||
[0.1, 0.3, 0.3], | ], | [0.1, 0.5, 0.3],
|
||||
[0.6, 0.7, 0.8], | [ | [0.7, 0.3, 0.6],
|
||||
[0.2, 0.3, 0.4], | [0.1, 0.3, 0.3], | [0.2, 0.4, 0.8],
|
||||
[0.1, 0.5, 0.3], | [0.6, 0.7, 0.8], | [0.9, 0.5, 0.2],
|
||||
], | [0.2, 0.3, 0.4], | [0.2, 0.3, 0.4],
|
||||
[ | [0.1, 0.5, 0.3], | [0.9, 0.3, 0.8],
|
||||
[0.7, 0.3, 0.6], | [0, 0, 0], | ])
|
||||
[0.2, 0.4, 0.8], | ], |
|
||||
[0.9, 0.5, 0.2], | [ |
|
||||
[0.2, 0.3, 0.4], | [0.7, 0.3, 0.6], |
|
||||
[0.9, 0.3, 0.8], | [0.2, 0.4, 0.8], |
|
||||
] | [0.9, 0.5, 0.2], |
|
||||
]) | [0.2, 0.3, 0.4], |
|
||||
| [0.9, 0.3, 0.8], |
|
||||
| ] |
|
||||
| ]) |
|
||||
Example for faces: | |
|
||||
| |
|
||||
F_1 = 1, F_2 = 2, F_3 = 7 | size = (3, 7, 3) | size = (10, 3)
|
||||
| |
|
||||
List([ | tensor([ | tensor([
|
||||
[ | [ | [ 0, 1, 2],
|
||||
[0, 1, 2], | [0, 1, 2], | [ 3, 4, 5],
|
||||
], | [-1, -1, -1], | [ 4, 5, 6],
|
||||
[ | [-1, -1, -1] | [ 8, 9, 7],
|
||||
[0, 1, 2], | [-1, -1, -1] | [ 7, 8, 10],
|
||||
[1, 2, 3], | [-1, -1, -1] | [ 9, 10, 8],
|
||||
], | [-1, -1, -1], | [11, 10, 9],
|
||||
[ | [-1, -1, -1], | [11, 7, 8],
|
||||
[1, 2, 0], | ], | [11, 10, 8],
|
||||
[0, 1, 3], | [ | [11, 9, 8],
|
||||
[2, 3, 1], | [0, 1, 2], | ])
|
||||
[4, 3, 2], | [1, 2, 3], |
|
||||
[4, 0, 1], | [-1, -1, -1], |
|
||||
[4, 3, 1], | [-1, -1, -1], |
|
||||
[4, 2, 1], | [-1, -1, -1], |
|
||||
], | [-1, -1, -1], |
|
||||
]) | [-1, -1, -1], |
|
||||
| ], |
|
||||
| [ |
|
||||
| [1, 2, 0], |
|
||||
| [0, 1, 3], |
|
||||
| [2, 3, 1], |
|
||||
| [4, 3, 2], |
|
||||
| [4, 0, 1], |
|
||||
| [4, 3, 1], |
|
||||
| [4, 2, 1], |
|
||||
| ] |
|
||||
| ]) |
|
||||
-----------------------------------------------------------------------------
|
||||
|
||||
Auxillary variables for packed representation
|
||||
Auxillary variables for packed representation
|
||||
|
||||
Name | Size | Example from above
|
||||
-------------------------------|---------------------|-----------------------
|
||||
| |
|
||||
verts_packed_to_mesh_idx | size = (sum(V_n)) | tensor([
|
||||
| | 0, 0, 0, 1, 1, 1,
|
||||
| | 1, 2, 2, 2, 2, 2
|
||||
| | )]
|
||||
| | size = (12)
|
||||
| |
|
||||
mesh_to_verts_packed_first_idx | size = (N) | tensor([0, 3, 7])
|
||||
| | size = (3)
|
||||
| |
|
||||
num_verts_per_mesh | size = (N) | tensor([3, 4, 5])
|
||||
| | size = (3)
|
||||
| |
|
||||
faces_packed_to_mesh_idx | size = (sum(F_n)) | tensor([
|
||||
| | 0, 1, 1, 2, 2, 2,
|
||||
| | 2, 2, 2, 2
|
||||
| | )]
|
||||
| | size = (10)
|
||||
| |
|
||||
mesh_to_faces_packed_first_idx | size = (N) | tensor([0, 1, 3])
|
||||
| | size = (3)
|
||||
| |
|
||||
num_faces_per_mesh | size = (N) | tensor([1, 2, 7])
|
||||
| | size = (3)
|
||||
| |
|
||||
verts_padded_to_packed_idx | size = (sum(V_n)) | tensor([
|
||||
| | 0, 1, 2, 5, 6, 7,
|
||||
| | 8, 10, 11, 12, 13,
|
||||
| | 14
|
||||
| | )]
|
||||
| | size = (12)
|
||||
-----------------------------------------------------------------------------
|
||||
# SPHINX IGNORE
|
||||
Name | Size | Example from above
|
||||
-------------------------------|---------------------|-----------------------
|
||||
| |
|
||||
verts_packed_to_mesh_idx | size = (sum(V_n)) | tensor([
|
||||
| | 0, 0, 0, 1, 1, 1,
|
||||
| | 1, 2, 2, 2, 2, 2
|
||||
| | )]
|
||||
| | size = (12)
|
||||
| |
|
||||
mesh_to_verts_packed_first_idx | size = (N) | tensor([0, 3, 7])
|
||||
| | size = (3)
|
||||
| |
|
||||
num_verts_per_mesh | size = (N) | tensor([3, 4, 5])
|
||||
| | size = (3)
|
||||
| |
|
||||
faces_packed_to_mesh_idx | size = (sum(F_n)) | tensor([
|
||||
| | 0, 1, 1, 2, 2, 2,
|
||||
| | 2, 2, 2, 2
|
||||
| | )]
|
||||
| | size = (10)
|
||||
| |
|
||||
mesh_to_faces_packed_first_idx | size = (N) | tensor([0, 1, 3])
|
||||
| | size = (3)
|
||||
| |
|
||||
num_faces_per_mesh | size = (N) | tensor([1, 2, 7])
|
||||
| | size = (3)
|
||||
| |
|
||||
verts_padded_to_packed_idx | size = (sum(V_n)) | tensor([
|
||||
| | 0, 1, 2, 5, 6, 7,
|
||||
| | 8, 10, 11, 12, 13,
|
||||
| | 14
|
||||
| | )]
|
||||
| | size = (12)
|
||||
-----------------------------------------------------------------------------
|
||||
# SPHINX IGNORE
|
||||
|
||||
From the faces, edges are computed and have packed and padded
|
||||
representations with auxillary variables.
|
||||
From the faces, edges are computed and have packed and padded
|
||||
representations with auxillary variables.
|
||||
|
||||
E_n = [[E_1], ... , [E_N]]
|
||||
where E_1, ... , E_N are the number of unique edges in each mesh.
|
||||
Total number of unique edges = sum(E_n)
|
||||
E_n = [[E_1], ... , [E_N]]
|
||||
where E_1, ... , E_N are the number of unique edges in each mesh.
|
||||
Total number of unique edges = sum(E_n)
|
||||
|
||||
# SPHINX IGNORE
|
||||
Name | Size | Example from above
|
||||
-------------------------------|-------------------------|----------------------
|
||||
| |
|
||||
edges_packed | size = (sum(E_n), 2) | tensor([
|
||||
| | [0, 1],
|
||||
| | [0, 2],
|
||||
| | [1, 2],
|
||||
| | ...
|
||||
| | [10, 11],
|
||||
| | )]
|
||||
| | size = (18, 2)
|
||||
| |
|
||||
num_edges_per_mesh | size = (N) | tensor([3, 5, 10])
|
||||
| | size = (3)
|
||||
| |
|
||||
edges_packed_to_mesh_idx | size = (sum(E_n)) | tensor([
|
||||
| | 0, 0, 0,
|
||||
| | . . .
|
||||
| | 2, 2, 2
|
||||
| | ])
|
||||
| | size = (18)
|
||||
| |
|
||||
faces_packed_to_edges_packed | size = (sum(F_n), 3) | tensor([
|
||||
| | [2, 1, 0],
|
||||
| | [5, 4, 3],
|
||||
| | . . .
|
||||
| | [12, 14, 16],
|
||||
| | ])
|
||||
| | size = (10, 3)
|
||||
| |
|
||||
mesh_to_edges_packed_first_idx | size = (N) | tensor([0, 3, 8])
|
||||
| | size = (3)
|
||||
----------------------------------------------------------------------------
|
||||
# SPHINX IGNORE
|
||||
# SPHINX IGNORE
|
||||
Name | Size | Example from above
|
||||
-------------------------------|-------------------------|----------------------
|
||||
| |
|
||||
edges_packed | size = (sum(E_n), 2) | tensor([
|
||||
| | [0, 1],
|
||||
| | [0, 2],
|
||||
| | [1, 2],
|
||||
| | ...
|
||||
| | [10, 11],
|
||||
| | )]
|
||||
| | size = (18, 2)
|
||||
| |
|
||||
num_edges_per_mesh | size = (N) | tensor([3, 5, 10])
|
||||
| | size = (3)
|
||||
| |
|
||||
edges_packed_to_mesh_idx | size = (sum(E_n)) | tensor([
|
||||
| | 0, 0, 0,
|
||||
| | . . .
|
||||
| | 2, 2, 2
|
||||
| | ])
|
||||
| | size = (18)
|
||||
| |
|
||||
faces_packed_to_edges_packed | size = (sum(F_n), 3) | tensor([
|
||||
| | [2, 1, 0],
|
||||
| | [5, 4, 3],
|
||||
| | . . .
|
||||
| | [12, 14, 16],
|
||||
| | ])
|
||||
| | size = (10, 3)
|
||||
| |
|
||||
mesh_to_edges_packed_first_idx | size = (N) | tensor([0, 3, 8])
|
||||
| | size = (3)
|
||||
----------------------------------------------------------------------------
|
||||
# SPHINX IGNORE
|
||||
"""
|
||||
|
||||
_INTERNAL_TENSORS = [
|
||||
|
@ -8,85 +8,85 @@ from . import utils as struct_utils
|
||||
|
||||
class Pointclouds(object):
|
||||
"""
|
||||
This class provides functions for working with batches of 3d point clouds,
|
||||
and converting between representations.
|
||||
This class provides functions for working with batches of 3d point clouds,
|
||||
and converting between representations.
|
||||
|
||||
Within Pointclouds, there are three different representations of the data.
|
||||
Within Pointclouds, there are three different representations of the data.
|
||||
|
||||
List
|
||||
- only used for input as a starting point to convert to other representations.
|
||||
Padded
|
||||
- has specific batch dimension.
|
||||
Packed
|
||||
- no batch dimension.
|
||||
- has auxillary variables used to index into the padded representation.
|
||||
List
|
||||
- only used for input as a starting point to convert to other representations.
|
||||
Padded
|
||||
- has specific batch dimension.
|
||||
Packed
|
||||
- no batch dimension.
|
||||
- has auxillary variables used to index into the padded representation.
|
||||
|
||||
Example
|
||||
Example
|
||||
|
||||
Input list of points = [[P_1], [P_2], ... , [P_N]]
|
||||
where P_1, ... , P_N are the number of points in each cloud and N is the
|
||||
number of clouds.
|
||||
Input list of points = [[P_1], [P_2], ... , [P_N]]
|
||||
where P_1, ... , P_N are the number of points in each cloud and N is the
|
||||
number of clouds.
|
||||
|
||||
# SPHINX IGNORE
|
||||
List | Padded | Packed
|
||||
---------------------------|-------------------------|------------------------
|
||||
[[P_1], ... , [P_N]] | size = (N, max(P_n), 3) | size = (sum(P_n), 3)
|
||||
| |
|
||||
Example for locations | |
|
||||
or colors: | |
|
||||
| |
|
||||
P_1 = 3, P_2 = 4, P_3 = 5 | size = (3, 5, 3) | size = (12, 3)
|
||||
| |
|
||||
List([ | tensor([ | tensor([
|
||||
[ | [ | [0.1, 0.3, 0.5],
|
||||
[0.1, 0.3, 0.5], | [0.1, 0.3, 0.5], | [0.5, 0.2, 0.1],
|
||||
[0.5, 0.2, 0.1], | [0.5, 0.2, 0.1], | [0.6, 0.8, 0.7],
|
||||
[0.6, 0.8, 0.7] | [0.6, 0.8, 0.7], | [0.1, 0.3, 0.3],
|
||||
], | [0, 0, 0], | [0.6, 0.7, 0.8],
|
||||
[ | [0, 0, 0] | [0.2, 0.3, 0.4],
|
||||
[0.1, 0.3, 0.3], | ], | [0.1, 0.5, 0.3],
|
||||
[0.6, 0.7, 0.8], | [ | [0.7, 0.3, 0.6],
|
||||
[0.2, 0.3, 0.4], | [0.1, 0.3, 0.3], | [0.2, 0.4, 0.8],
|
||||
[0.1, 0.5, 0.3] | [0.6, 0.7, 0.8], | [0.9, 0.5, 0.2],
|
||||
], | [0.2, 0.3, 0.4], | [0.2, 0.3, 0.4],
|
||||
[ | [0.1, 0.5, 0.3], | [0.9, 0.3, 0.8],
|
||||
[0.7, 0.3, 0.6], | [0, 0, 0] | ])
|
||||
[0.2, 0.4, 0.8], | ], |
|
||||
[0.9, 0.5, 0.2], | [ |
|
||||
[0.2, 0.3, 0.4], | [0.7, 0.3, 0.6], |
|
||||
[0.9, 0.3, 0.8], | [0.2, 0.4, 0.8], |
|
||||
] | [0.9, 0.5, 0.2], |
|
||||
]) | [0.2, 0.3, 0.4], |
|
||||
| [0.9, 0.3, 0.8] |
|
||||
| ] |
|
||||
| ]) |
|
||||
-----------------------------------------------------------------------------
|
||||
# SPHINX IGNORE
|
||||
List | Padded | Packed
|
||||
---------------------------|-------------------------|------------------------
|
||||
[[P_1], ... , [P_N]] | size = (N, max(P_n), 3) | size = (sum(P_n), 3)
|
||||
| |
|
||||
Example for locations | |
|
||||
or colors: | |
|
||||
| |
|
||||
P_1 = 3, P_2 = 4, P_3 = 5 | size = (3, 5, 3) | size = (12, 3)
|
||||
| |
|
||||
List([ | tensor([ | tensor([
|
||||
[ | [ | [0.1, 0.3, 0.5],
|
||||
[0.1, 0.3, 0.5], | [0.1, 0.3, 0.5], | [0.5, 0.2, 0.1],
|
||||
[0.5, 0.2, 0.1], | [0.5, 0.2, 0.1], | [0.6, 0.8, 0.7],
|
||||
[0.6, 0.8, 0.7] | [0.6, 0.8, 0.7], | [0.1, 0.3, 0.3],
|
||||
], | [0, 0, 0], | [0.6, 0.7, 0.8],
|
||||
[ | [0, 0, 0] | [0.2, 0.3, 0.4],
|
||||
[0.1, 0.3, 0.3], | ], | [0.1, 0.5, 0.3],
|
||||
[0.6, 0.7, 0.8], | [ | [0.7, 0.3, 0.6],
|
||||
[0.2, 0.3, 0.4], | [0.1, 0.3, 0.3], | [0.2, 0.4, 0.8],
|
||||
[0.1, 0.5, 0.3] | [0.6, 0.7, 0.8], | [0.9, 0.5, 0.2],
|
||||
], | [0.2, 0.3, 0.4], | [0.2, 0.3, 0.4],
|
||||
[ | [0.1, 0.5, 0.3], | [0.9, 0.3, 0.8],
|
||||
[0.7, 0.3, 0.6], | [0, 0, 0] | ])
|
||||
[0.2, 0.4, 0.8], | ], |
|
||||
[0.9, 0.5, 0.2], | [ |
|
||||
[0.2, 0.3, 0.4], | [0.7, 0.3, 0.6], |
|
||||
[0.9, 0.3, 0.8], | [0.2, 0.4, 0.8], |
|
||||
] | [0.9, 0.5, 0.2], |
|
||||
]) | [0.2, 0.3, 0.4], |
|
||||
| [0.9, 0.3, 0.8] |
|
||||
| ] |
|
||||
| ]) |
|
||||
-----------------------------------------------------------------------------
|
||||
|
||||
Auxillary variables for packed representation
|
||||
Auxillary variables for packed representation
|
||||
|
||||
Name | Size | Example from above
|
||||
-------------------------------|---------------------|-----------------------
|
||||
| |
|
||||
packed_to_cloud_idx | size = (sum(P_n)) | tensor([
|
||||
| | 0, 0, 0, 1, 1, 1,
|
||||
| | 1, 2, 2, 2, 2, 2
|
||||
| | )]
|
||||
| | size = (12)
|
||||
| |
|
||||
cloud_to_packed_first_idx | size = (N) | tensor([0, 3, 7])
|
||||
| | size = (3)
|
||||
| |
|
||||
num_points_per_cloud | size = (N) | tensor([3, 4, 5])
|
||||
| | size = (3)
|
||||
| |
|
||||
padded_to_packed_idx | size = (sum(P_n)) | tensor([
|
||||
| | 0, 1, 2, 5, 6, 7,
|
||||
| | 8, 10, 11, 12, 13,
|
||||
| | 14
|
||||
| | )]
|
||||
| | size = (12)
|
||||
-----------------------------------------------------------------------------
|
||||
# SPHINX IGNORE
|
||||
Name | Size | Example from above
|
||||
-------------------------------|---------------------|-----------------------
|
||||
| |
|
||||
packed_to_cloud_idx | size = (sum(P_n)) | tensor([
|
||||
| | 0, 0, 0, 1, 1, 1,
|
||||
| | 1, 2, 2, 2, 2, 2
|
||||
| | )]
|
||||
| | size = (12)
|
||||
| |
|
||||
cloud_to_packed_first_idx | size = (N) | tensor([0, 3, 7])
|
||||
| | size = (3)
|
||||
| |
|
||||
num_points_per_cloud | size = (N) | tensor([3, 4, 5])
|
||||
| | size = (3)
|
||||
| |
|
||||
padded_to_packed_idx | size = (sum(P_n)) | tensor([
|
||||
| | 0, 1, 2, 5, 6, 7,
|
||||
| | 8, 10, 11, 12, 13,
|
||||
| | 14
|
||||
| | )]
|
||||
| | size = (12)
|
||||
-----------------------------------------------------------------------------
|
||||
# SPHINX IGNORE
|
||||
"""
|
||||
|
||||
_INTERNAL_TENSORS = [
|
||||
|
@ -410,8 +410,8 @@ class TestBlending(TestCaseMixin, unittest.TestCase):
|
||||
|
||||
def test_blend_params(self):
|
||||
"""Test color parameter of BlendParams().
|
||||
Assert passed value overrides default value.
|
||||
"""
|
||||
Assert passed value overrides default value.
|
||||
"""
|
||||
bp_default = BlendParams()
|
||||
bp_new = BlendParams(background_color=(0.5, 0.5, 0.5))
|
||||
self.assertEqual(bp_new.background_color, (0.5, 0.5, 0.5))
|
||||
|
Loading…
x
Reference in New Issue
Block a user