mirror of
https://github.com/facebookresearch/pytorch3d.git
synced 2025-08-02 11:52: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):
|
def _build_M(y, alphas, weight):
|
||||||
""" Returns the matrix defining the reprojection equations.
|
"""Returns the matrix defining the reprojection equations.
|
||||||
Args:
|
Args:
|
||||||
y: projected points in camera coordinates of size B x N x 2
|
y: projected points in camera coordinates of size B x N x 2
|
||||||
alphas: barycentric coordinates of size B x N x 4
|
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):
|
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:
|
Args:
|
||||||
m: the batch of input matrices, B x N x 12
|
m: the batch of input matrices, B x N x 12
|
||||||
kernel_dim: number of dimensions to approximate the kernel
|
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):
|
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:
|
Args:
|
||||||
y_hat: a batch of predicted 2D points in homogeneous coordinates
|
y_hat: a batch of predicted 2D points in homogeneous coordinates
|
||||||
y: a batch of ground-truth 2D points
|
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):
|
def _algebraic_error(x_w_rotated, x_cam, weight):
|
||||||
""" Computes the residual of Umeyama in 3D.
|
"""Computes the residual of Umeyama in 3D.
|
||||||
Args:
|
Args:
|
||||||
x_w_rotated: The given 3D points rotated with the predicted camera.
|
x_w_rotated: The given 3D points rotated with the predicted camera.
|
||||||
x_cam: the lifted 2D points y
|
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):
|
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:
|
Args:
|
||||||
c_cam: control points in camera coordinates
|
c_cam: control points in camera coordinates
|
||||||
alphas: barycentric coordinates of the points
|
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)):
|
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:
|
Args:
|
||||||
input: a tensor
|
input: a tensor
|
||||||
dim: a dimension to generate pairs across
|
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):
|
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).
|
to match all pairwise distances between 4 control points (dim=1).
|
||||||
The last dimension corresponds to the coefficients for quadratic terms
|
The last dimension corresponds to the coefficients for quadratic terms
|
||||||
Bij = Bi * Bj, where Bi and Bj correspond to kernel vectors.
|
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):
|
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`.
|
A batched version of `torch.lstsq`.
|
||||||
Args:
|
Args:
|
||||||
rhs: right-hand side vectors
|
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):
|
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]
|
[B11 B22 B33 B44 B12 B13 B14 B23 B24 B34]
|
||||||
^ ^ ^ ^
|
^ ^ ^ ^
|
||||||
Args:
|
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):
|
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]
|
[B11 B22 B33 B44 B12 B13 B14 B23 B24 B34]
|
||||||
^ ^ ^
|
^ ^ ^
|
||||||
Args:
|
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):
|
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]
|
[B11 B22 B33 B44 B12 B13 B14 B23 B24 B34]
|
||||||
^ ^ ^ ^ ^
|
^ ^ ^ ^ ^
|
||||||
Args:
|
Args:
|
||||||
|
@ -94,7 +94,7 @@ def convert_pointclouds_to_tensor(pcl: Union[torch.Tensor, "Pointclouds"]):
|
|||||||
|
|
||||||
|
|
||||||
def is_pointclouds(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`
|
by checking the existence of `points_padded` and `num_points_per_cloud`
|
||||||
functions.
|
functions.
|
||||||
"""
|
"""
|
||||||
|
@ -346,7 +346,7 @@ class SoftSilhouetteShader(nn.Module):
|
|||||||
self.blend_params = blend_params if blend_params is not None else BlendParams()
|
self.blend_params = blend_params if blend_params is not None else BlendParams()
|
||||||
|
|
||||||
def forward(self, fragments, meshes, **kwargs) -> torch.Tensor:
|
def forward(self, fragments, meshes, **kwargs) -> torch.Tensor:
|
||||||
""""
|
""" "
|
||||||
Only want to render the silhouette so RGB values can be ones.
|
Only want to render the silhouette so RGB values can be ones.
|
||||||
There is no need for lighting or texturing
|
There is no need for lighting or texturing
|
||||||
"""
|
"""
|
||||||
|
@ -282,24 +282,24 @@ def Textures(
|
|||||||
verts_rgb: Optional[torch.Tensor] = None,
|
verts_rgb: Optional[torch.Tensor] = None,
|
||||||
) -> TexturesBase:
|
) -> TexturesBase:
|
||||||
"""
|
"""
|
||||||
Textures class has been DEPRECATED.
|
Textures class has been DEPRECATED.
|
||||||
Preserving Textures as a function for backwards compatibility.
|
Preserving Textures as a function for backwards compatibility.
|
||||||
|
|
||||||
Args:
|
Args:
|
||||||
maps: texture map per mesh. This can either be a list of maps
|
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).
|
[(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
|
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.
|
vertex in the face. Padding value is assumed to be -1.
|
||||||
verts_uvs: (N, V, 2) tensor giving the uv coordinate per vertex.
|
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
|
verts_rgb: (N, V, 3) tensor giving the rgb color per vertex. Padding
|
||||||
value is assumed to be -1.
|
value is assumed to be -1.
|
||||||
|
|
||||||
|
|
||||||
Returns:
|
Returns:
|
||||||
a Textures class which is an instance of TexturesBase e.g. TexturesUV,
|
a Textures class which is an instance of TexturesBase e.g. TexturesUV,
|
||||||
TexturesAtlas, TexturesVertex
|
TexturesAtlas, TexturesVertex
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
warnings.warn(
|
warnings.warn(
|
||||||
"""Textures class is deprecated,
|
"""Textures class is deprecated,
|
||||||
|
@ -78,68 +78,68 @@ def _try_place_rectangle(
|
|||||||
occupied: List[Tuple[int, int]],
|
occupied: List[Tuple[int, int]],
|
||||||
) -> bool:
|
) -> bool:
|
||||||
"""
|
"""
|
||||||
Try to place rect within the current bounding box.
|
Try to place rect within the current bounding box.
|
||||||
Part of the implementation of pack_rectangles.
|
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:
|
Args:
|
||||||
rect: rectangle to place
|
rect: rectangle to place
|
||||||
placed_so_far: the locations decided upon so far - a list of
|
placed_so_far: the locations decided upon so far - a list of
|
||||||
(x, y, whether flipped). The nth element is the
|
(x, y, whether flipped). The nth element is the
|
||||||
location of the nth rectangle if it has been decided.
|
location of the nth rectangle if it has been decided.
|
||||||
(modified in place)
|
(modified in place)
|
||||||
occupied: the nodes of the graph of extents of rightmost placed
|
occupied: the nodes of the graph of extents of rightmost placed
|
||||||
rectangles - (modified in place)
|
rectangles - (modified in place)
|
||||||
|
|
||||||
Returns:
|
Returns:
|
||||||
True on success.
|
True on success.
|
||||||
|
|
||||||
Example:
|
Example:
|
||||||
(We always have placed the first rectangle horizontally and other
|
(We always have placed the first rectangle horizontally and other
|
||||||
rectangles above it.)
|
rectangles above it.)
|
||||||
Let's say the placed boxes 1-4 are layed out like this.
|
Let's say the placed boxes 1-4 are layed out like this.
|
||||||
The coordinates of the points marked X are stored in occupied.
|
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.
|
It is to the right of the X's that we seek to place rect.
|
||||||
|
|
||||||
+-----------------------X
|
+-----------------------X
|
||||||
|2 |
|
|2 |
|
||||||
| +---X
|
| +---X
|
||||||
| |4 |
|
| |4 |
|
||||||
| | |
|
| | |
|
||||||
| +---+X
|
| +---+X
|
||||||
| |3 |
|
| |3 |
|
||||||
| | |
|
| | |
|
||||||
+-----------------------+----+------X
|
+-----------------------+----+------X
|
||||||
y |1 |
|
y |1 |
|
||||||
^ | --->x |
|
^ | --->x |
|
||||||
| +-----------------------------------+
|
| +-----------------------------------+
|
||||||
|
|
||||||
We want to place this rectangle.
|
We want to place this rectangle.
|
||||||
|
|
||||||
+-+
|
+-+
|
||||||
|5|
|
|5|
|
||||||
| |
|
| |
|
||||||
| | = rect
|
| | = rect
|
||||||
| |
|
| |
|
||||||
| |
|
| |
|
||||||
| |
|
| |
|
||||||
+-+
|
+-+
|
||||||
|
|
||||||
The call will succeed, returning True, leaving us with
|
The call will succeed, returning True, leaving us with
|
||||||
|
|
||||||
+-----------------------X
|
+-----------------------X
|
||||||
|2 | +-X
|
|2 | +-X
|
||||||
| +---+|5|
|
| +---+|5|
|
||||||
| |4 || |
|
| |4 || |
|
||||||
| | || |
|
| | || |
|
||||||
| +---++ |
|
| +---++ |
|
||||||
| |3 | |
|
| |3 | |
|
||||||
| | | |
|
| | | |
|
||||||
+-----------------------+----+-+----X
|
+-----------------------+----+-+----X
|
||||||
|1 |
|
|1 |
|
||||||
| |
|
| |
|
||||||
+-----------------------------------+ .
|
+-----------------------------------+ .
|
||||||
|
|
||||||
"""
|
"""
|
||||||
total_width = occupied[0][0]
|
total_width = occupied[0][0]
|
||||||
|
@ -9,177 +9,177 @@ from . import utils as struct_utils
|
|||||||
|
|
||||||
class Meshes(object):
|
class Meshes(object):
|
||||||
"""
|
"""
|
||||||
This class provides functions for working with batches of triangulated
|
This class provides functions for working with batches of triangulated
|
||||||
meshes with varying numbers of faces and vertices, and converting between
|
meshes with varying numbers of faces and vertices, and converting between
|
||||||
representations.
|
representations.
|
||||||
|
|
||||||
Within Meshes, there are three different representations of the faces and
|
Within Meshes, there are three different representations of the faces and
|
||||||
verts data:
|
verts data:
|
||||||
|
|
||||||
List
|
List
|
||||||
- only used for input as a starting point to convert to other representations.
|
- only used for input as a starting point to convert to other representations.
|
||||||
Padded
|
Padded
|
||||||
- has specific batch dimension.
|
- has specific batch dimension.
|
||||||
Packed
|
Packed
|
||||||
- no batch dimension.
|
- no batch dimension.
|
||||||
- has auxillary variables used to index into the padded representation.
|
- has auxillary variables used to index into the padded representation.
|
||||||
|
|
||||||
Example:
|
Example:
|
||||||
|
|
||||||
Input list of verts V_n = [[V_1], [V_2], ... , [V_N]]
|
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
|
where V_1, ... , V_N are the number of verts in each mesh and N is the
|
||||||
numer of meshes.
|
numer of meshes.
|
||||||
|
|
||||||
Input list of faces F_n = [[F_1], [F_2], ... , [F_N]]
|
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.
|
where F_1, ... , F_N are the number of faces in each mesh.
|
||||||
|
|
||||||
# SPHINX IGNORE
|
# SPHINX IGNORE
|
||||||
List | Padded | Packed
|
List | Padded | Packed
|
||||||
---------------------------|-------------------------|------------------------
|
---------------------------|-------------------------|------------------------
|
||||||
[[V_1], ... , [V_N]] | size = (N, max(V_n), 3) | size = (sum(V_n), 3)
|
[[V_1], ... , [V_N]] | size = (N, max(V_n), 3) | size = (sum(V_n), 3)
|
||||||
| |
|
| |
|
||||||
Example for verts: | |
|
Example for verts: | |
|
||||||
| |
|
| |
|
||||||
V_1 = 3, V_2 = 4, V_3 = 5 | size = (3, 5, 3) | size = (12, 3)
|
V_1 = 3, V_2 = 4, V_3 = 5 | size = (3, 5, 3) | size = (12, 3)
|
||||||
| |
|
| |
|
||||||
List([ | tensor([ | tensor([
|
List([ | tensor([ | tensor([
|
||||||
[ | [ | [0.1, 0.3, 0.5],
|
[ | [ | [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.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.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.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.6, 0.7, 0.8],
|
||||||
[ | [0, 0, 0], | [0.2, 0.3, 0.4],
|
[ | [0, 0, 0], | [0.2, 0.3, 0.4],
|
||||||
[0.1, 0.3, 0.3], | ], | [0.1, 0.5, 0.3],
|
[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.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.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.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.2, 0.3, 0.4], | [0.2, 0.3, 0.4],
|
||||||
[ | [0.1, 0.5, 0.3], | [0.9, 0.3, 0.8],
|
[ | [0.1, 0.5, 0.3], | [0.9, 0.3, 0.8],
|
||||||
[0.7, 0.3, 0.6], | [0, 0, 0], | ])
|
[0.7, 0.3, 0.6], | [0, 0, 0], | ])
|
||||||
[0.2, 0.4, 0.8], | ], |
|
[0.2, 0.4, 0.8], | ], |
|
||||||
[0.9, 0.5, 0.2], | [ |
|
[0.9, 0.5, 0.2], | [ |
|
||||||
[0.2, 0.3, 0.4], | [0.7, 0.3, 0.6], |
|
[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.3, 0.8], | [0.2, 0.4, 0.8], |
|
||||||
] | [0.9, 0.5, 0.2], |
|
] | [0.9, 0.5, 0.2], |
|
||||||
]) | [0.2, 0.3, 0.4], |
|
]) | [0.2, 0.3, 0.4], |
|
||||||
| [0.9, 0.3, 0.8], |
|
| [0.9, 0.3, 0.8], |
|
||||||
| ] |
|
| ] |
|
||||||
| ]) |
|
| ]) |
|
||||||
Example for faces: | |
|
Example for faces: | |
|
||||||
| |
|
| |
|
||||||
F_1 = 1, F_2 = 2, F_3 = 7 | size = (3, 7, 3) | size = (10, 3)
|
F_1 = 1, F_2 = 2, F_3 = 7 | size = (3, 7, 3) | size = (10, 3)
|
||||||
| |
|
| |
|
||||||
List([ | tensor([ | tensor([
|
List([ | tensor([ | tensor([
|
||||||
[ | [ | [ 0, 1, 2],
|
[ | [ | [ 0, 1, 2],
|
||||||
[0, 1, 2], | [0, 1, 2], | [ 3, 4, 5],
|
[0, 1, 2], | [0, 1, 2], | [ 3, 4, 5],
|
||||||
], | [-1, -1, -1], | [ 4, 5, 6],
|
], | [-1, -1, -1], | [ 4, 5, 6],
|
||||||
[ | [-1, -1, -1] | [ 8, 9, 7],
|
[ | [-1, -1, -1] | [ 8, 9, 7],
|
||||||
[0, 1, 2], | [-1, -1, -1] | [ 7, 8, 10],
|
[0, 1, 2], | [-1, -1, -1] | [ 7, 8, 10],
|
||||||
[1, 2, 3], | [-1, -1, -1] | [ 9, 10, 8],
|
[1, 2, 3], | [-1, -1, -1] | [ 9, 10, 8],
|
||||||
], | [-1, -1, -1], | [11, 10, 9],
|
], | [-1, -1, -1], | [11, 10, 9],
|
||||||
[ | [-1, -1, -1], | [11, 7, 8],
|
[ | [-1, -1, -1], | [11, 7, 8],
|
||||||
[1, 2, 0], | ], | [11, 10, 8],
|
[1, 2, 0], | ], | [11, 10, 8],
|
||||||
[0, 1, 3], | [ | [11, 9, 8],
|
[0, 1, 3], | [ | [11, 9, 8],
|
||||||
[2, 3, 1], | [0, 1, 2], | ])
|
[2, 3, 1], | [0, 1, 2], | ])
|
||||||
[4, 3, 2], | [1, 2, 3], |
|
[4, 3, 2], | [1, 2, 3], |
|
||||||
[4, 0, 1], | [-1, -1, -1], |
|
[4, 0, 1], | [-1, -1, -1], |
|
||||||
[4, 3, 1], | [-1, -1, -1], |
|
[4, 3, 1], | [-1, -1, -1], |
|
||||||
[4, 2, 1], | [-1, -1, -1], |
|
[4, 2, 1], | [-1, -1, -1], |
|
||||||
], | [-1, -1, -1], |
|
], | [-1, -1, -1], |
|
||||||
]) | [-1, -1, -1], |
|
]) | [-1, -1, -1], |
|
||||||
| ], |
|
| ], |
|
||||||
| [ |
|
| [ |
|
||||||
| [1, 2, 0], |
|
| [1, 2, 0], |
|
||||||
| [0, 1, 3], |
|
| [0, 1, 3], |
|
||||||
| [2, 3, 1], |
|
| [2, 3, 1], |
|
||||||
| [4, 3, 2], |
|
| [4, 3, 2], |
|
||||||
| [4, 0, 1], |
|
| [4, 0, 1], |
|
||||||
| [4, 3, 1], |
|
| [4, 3, 1], |
|
||||||
| [4, 2, 1], |
|
| [4, 2, 1], |
|
||||||
| ] |
|
| ] |
|
||||||
| ]) |
|
| ]) |
|
||||||
-----------------------------------------------------------------------------
|
-----------------------------------------------------------------------------
|
||||||
|
|
||||||
Auxillary variables for packed representation
|
Auxillary variables for packed representation
|
||||||
|
|
||||||
Name | Size | Example from above
|
Name | Size | Example from above
|
||||||
-------------------------------|---------------------|-----------------------
|
-------------------------------|---------------------|-----------------------
|
||||||
| |
|
| |
|
||||||
verts_packed_to_mesh_idx | size = (sum(V_n)) | tensor([
|
verts_packed_to_mesh_idx | size = (sum(V_n)) | tensor([
|
||||||
| | 0, 0, 0, 1, 1, 1,
|
| | 0, 0, 0, 1, 1, 1,
|
||||||
| | 1, 2, 2, 2, 2, 2
|
| | 1, 2, 2, 2, 2, 2
|
||||||
| | )]
|
| | )]
|
||||||
| | size = (12)
|
| | size = (12)
|
||||||
| |
|
| |
|
||||||
mesh_to_verts_packed_first_idx | size = (N) | tensor([0, 3, 7])
|
mesh_to_verts_packed_first_idx | size = (N) | tensor([0, 3, 7])
|
||||||
| | size = (3)
|
| | size = (3)
|
||||||
| |
|
| |
|
||||||
num_verts_per_mesh | size = (N) | tensor([3, 4, 5])
|
num_verts_per_mesh | size = (N) | tensor([3, 4, 5])
|
||||||
| | size = (3)
|
| | size = (3)
|
||||||
| |
|
| |
|
||||||
faces_packed_to_mesh_idx | size = (sum(F_n)) | tensor([
|
faces_packed_to_mesh_idx | size = (sum(F_n)) | tensor([
|
||||||
| | 0, 1, 1, 2, 2, 2,
|
| | 0, 1, 1, 2, 2, 2,
|
||||||
| | 2, 2, 2, 2
|
| | 2, 2, 2, 2
|
||||||
| | )]
|
| | )]
|
||||||
| | size = (10)
|
| | size = (10)
|
||||||
| |
|
| |
|
||||||
mesh_to_faces_packed_first_idx | size = (N) | tensor([0, 1, 3])
|
mesh_to_faces_packed_first_idx | size = (N) | tensor([0, 1, 3])
|
||||||
| | size = (3)
|
| | size = (3)
|
||||||
| |
|
| |
|
||||||
num_faces_per_mesh | size = (N) | tensor([1, 2, 7])
|
num_faces_per_mesh | size = (N) | tensor([1, 2, 7])
|
||||||
| | size = (3)
|
| | size = (3)
|
||||||
| |
|
| |
|
||||||
verts_padded_to_packed_idx | size = (sum(V_n)) | tensor([
|
verts_padded_to_packed_idx | size = (sum(V_n)) | tensor([
|
||||||
| | 0, 1, 2, 5, 6, 7,
|
| | 0, 1, 2, 5, 6, 7,
|
||||||
| | 8, 10, 11, 12, 13,
|
| | 8, 10, 11, 12, 13,
|
||||||
| | 14
|
| | 14
|
||||||
| | )]
|
| | )]
|
||||||
| | size = (12)
|
| | size = (12)
|
||||||
-----------------------------------------------------------------------------
|
-----------------------------------------------------------------------------
|
||||||
# SPHINX IGNORE
|
# SPHINX IGNORE
|
||||||
|
|
||||||
From the faces, edges are computed and have packed and padded
|
From the faces, edges are computed and have packed and padded
|
||||||
representations with auxillary variables.
|
representations with auxillary variables.
|
||||||
|
|
||||||
E_n = [[E_1], ... , [E_N]]
|
E_n = [[E_1], ... , [E_N]]
|
||||||
where E_1, ... , E_N are the number of unique edges in each mesh.
|
where E_1, ... , E_N are the number of unique edges in each mesh.
|
||||||
Total number of unique edges = sum(E_n)
|
Total number of unique edges = sum(E_n)
|
||||||
|
|
||||||
# SPHINX IGNORE
|
# SPHINX IGNORE
|
||||||
Name | Size | Example from above
|
Name | Size | Example from above
|
||||||
-------------------------------|-------------------------|----------------------
|
-------------------------------|-------------------------|----------------------
|
||||||
| |
|
| |
|
||||||
edges_packed | size = (sum(E_n), 2) | tensor([
|
edges_packed | size = (sum(E_n), 2) | tensor([
|
||||||
| | [0, 1],
|
| | [0, 1],
|
||||||
| | [0, 2],
|
| | [0, 2],
|
||||||
| | [1, 2],
|
| | [1, 2],
|
||||||
| | ...
|
| | ...
|
||||||
| | [10, 11],
|
| | [10, 11],
|
||||||
| | )]
|
| | )]
|
||||||
| | size = (18, 2)
|
| | size = (18, 2)
|
||||||
| |
|
| |
|
||||||
num_edges_per_mesh | size = (N) | tensor([3, 5, 10])
|
num_edges_per_mesh | size = (N) | tensor([3, 5, 10])
|
||||||
| | size = (3)
|
| | size = (3)
|
||||||
| |
|
| |
|
||||||
edges_packed_to_mesh_idx | size = (sum(E_n)) | tensor([
|
edges_packed_to_mesh_idx | size = (sum(E_n)) | tensor([
|
||||||
| | 0, 0, 0,
|
| | 0, 0, 0,
|
||||||
| | . . .
|
| | . . .
|
||||||
| | 2, 2, 2
|
| | 2, 2, 2
|
||||||
| | ])
|
| | ])
|
||||||
| | size = (18)
|
| | size = (18)
|
||||||
| |
|
| |
|
||||||
faces_packed_to_edges_packed | size = (sum(F_n), 3) | tensor([
|
faces_packed_to_edges_packed | size = (sum(F_n), 3) | tensor([
|
||||||
| | [2, 1, 0],
|
| | [2, 1, 0],
|
||||||
| | [5, 4, 3],
|
| | [5, 4, 3],
|
||||||
| | . . .
|
| | . . .
|
||||||
| | [12, 14, 16],
|
| | [12, 14, 16],
|
||||||
| | ])
|
| | ])
|
||||||
| | size = (10, 3)
|
| | size = (10, 3)
|
||||||
| |
|
| |
|
||||||
mesh_to_edges_packed_first_idx | size = (N) | tensor([0, 3, 8])
|
mesh_to_edges_packed_first_idx | size = (N) | tensor([0, 3, 8])
|
||||||
| | size = (3)
|
| | size = (3)
|
||||||
----------------------------------------------------------------------------
|
----------------------------------------------------------------------------
|
||||||
# SPHINX IGNORE
|
# SPHINX IGNORE
|
||||||
"""
|
"""
|
||||||
|
|
||||||
_INTERNAL_TENSORS = [
|
_INTERNAL_TENSORS = [
|
||||||
|
@ -8,85 +8,85 @@ from . import utils as struct_utils
|
|||||||
|
|
||||||
class Pointclouds(object):
|
class Pointclouds(object):
|
||||||
"""
|
"""
|
||||||
This class provides functions for working with batches of 3d point clouds,
|
This class provides functions for working with batches of 3d point clouds,
|
||||||
and converting between representations.
|
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
|
List
|
||||||
- only used for input as a starting point to convert to other representations.
|
- only used for input as a starting point to convert to other representations.
|
||||||
Padded
|
Padded
|
||||||
- has specific batch dimension.
|
- has specific batch dimension.
|
||||||
Packed
|
Packed
|
||||||
- no batch dimension.
|
- no batch dimension.
|
||||||
- has auxillary variables used to index into the padded representation.
|
- has auxillary variables used to index into the padded representation.
|
||||||
|
|
||||||
Example
|
Example
|
||||||
|
|
||||||
Input list of points = [[P_1], [P_2], ... , [P_N]]
|
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
|
where P_1, ... , P_N are the number of points in each cloud and N is the
|
||||||
number of clouds.
|
number of clouds.
|
||||||
|
|
||||||
# SPHINX IGNORE
|
# SPHINX IGNORE
|
||||||
List | Padded | Packed
|
List | Padded | Packed
|
||||||
---------------------------|-------------------------|------------------------
|
---------------------------|-------------------------|------------------------
|
||||||
[[P_1], ... , [P_N]] | size = (N, max(P_n), 3) | size = (sum(P_n), 3)
|
[[P_1], ... , [P_N]] | size = (N, max(P_n), 3) | size = (sum(P_n), 3)
|
||||||
| |
|
| |
|
||||||
Example for locations | |
|
Example for locations | |
|
||||||
or colors: | |
|
or colors: | |
|
||||||
| |
|
| |
|
||||||
P_1 = 3, P_2 = 4, P_3 = 5 | size = (3, 5, 3) | size = (12, 3)
|
P_1 = 3, P_2 = 4, P_3 = 5 | size = (3, 5, 3) | size = (12, 3)
|
||||||
| |
|
| |
|
||||||
List([ | tensor([ | tensor([
|
List([ | tensor([ | tensor([
|
||||||
[ | [ | [0.1, 0.3, 0.5],
|
[ | [ | [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.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.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.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.6, 0.7, 0.8],
|
||||||
[ | [0, 0, 0] | [0.2, 0.3, 0.4],
|
[ | [0, 0, 0] | [0.2, 0.3, 0.4],
|
||||||
[0.1, 0.3, 0.3], | ], | [0.1, 0.5, 0.3],
|
[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.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.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.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.2, 0.3, 0.4], | [0.2, 0.3, 0.4],
|
||||||
[ | [0.1, 0.5, 0.3], | [0.9, 0.3, 0.8],
|
[ | [0.1, 0.5, 0.3], | [0.9, 0.3, 0.8],
|
||||||
[0.7, 0.3, 0.6], | [0, 0, 0] | ])
|
[0.7, 0.3, 0.6], | [0, 0, 0] | ])
|
||||||
[0.2, 0.4, 0.8], | ], |
|
[0.2, 0.4, 0.8], | ], |
|
||||||
[0.9, 0.5, 0.2], | [ |
|
[0.9, 0.5, 0.2], | [ |
|
||||||
[0.2, 0.3, 0.4], | [0.7, 0.3, 0.6], |
|
[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.3, 0.8], | [0.2, 0.4, 0.8], |
|
||||||
] | [0.9, 0.5, 0.2], |
|
] | [0.9, 0.5, 0.2], |
|
||||||
]) | [0.2, 0.3, 0.4], |
|
]) | [0.2, 0.3, 0.4], |
|
||||||
| [0.9, 0.3, 0.8] |
|
| [0.9, 0.3, 0.8] |
|
||||||
| ] |
|
| ] |
|
||||||
| ]) |
|
| ]) |
|
||||||
-----------------------------------------------------------------------------
|
-----------------------------------------------------------------------------
|
||||||
|
|
||||||
Auxillary variables for packed representation
|
Auxillary variables for packed representation
|
||||||
|
|
||||||
Name | Size | Example from above
|
Name | Size | Example from above
|
||||||
-------------------------------|---------------------|-----------------------
|
-------------------------------|---------------------|-----------------------
|
||||||
| |
|
| |
|
||||||
packed_to_cloud_idx | size = (sum(P_n)) | tensor([
|
packed_to_cloud_idx | size = (sum(P_n)) | tensor([
|
||||||
| | 0, 0, 0, 1, 1, 1,
|
| | 0, 0, 0, 1, 1, 1,
|
||||||
| | 1, 2, 2, 2, 2, 2
|
| | 1, 2, 2, 2, 2, 2
|
||||||
| | )]
|
| | )]
|
||||||
| | size = (12)
|
| | size = (12)
|
||||||
| |
|
| |
|
||||||
cloud_to_packed_first_idx | size = (N) | tensor([0, 3, 7])
|
cloud_to_packed_first_idx | size = (N) | tensor([0, 3, 7])
|
||||||
| | size = (3)
|
| | size = (3)
|
||||||
| |
|
| |
|
||||||
num_points_per_cloud | size = (N) | tensor([3, 4, 5])
|
num_points_per_cloud | size = (N) | tensor([3, 4, 5])
|
||||||
| | size = (3)
|
| | size = (3)
|
||||||
| |
|
| |
|
||||||
padded_to_packed_idx | size = (sum(P_n)) | tensor([
|
padded_to_packed_idx | size = (sum(P_n)) | tensor([
|
||||||
| | 0, 1, 2, 5, 6, 7,
|
| | 0, 1, 2, 5, 6, 7,
|
||||||
| | 8, 10, 11, 12, 13,
|
| | 8, 10, 11, 12, 13,
|
||||||
| | 14
|
| | 14
|
||||||
| | )]
|
| | )]
|
||||||
| | size = (12)
|
| | size = (12)
|
||||||
-----------------------------------------------------------------------------
|
-----------------------------------------------------------------------------
|
||||||
# SPHINX IGNORE
|
# SPHINX IGNORE
|
||||||
"""
|
"""
|
||||||
|
|
||||||
_INTERNAL_TENSORS = [
|
_INTERNAL_TENSORS = [
|
||||||
|
@ -410,8 +410,8 @@ class TestBlending(TestCaseMixin, unittest.TestCase):
|
|||||||
|
|
||||||
def test_blend_params(self):
|
def test_blend_params(self):
|
||||||
"""Test color parameter of BlendParams().
|
"""Test color parameter of BlendParams().
|
||||||
Assert passed value overrides default value.
|
Assert passed value overrides default value.
|
||||||
"""
|
"""
|
||||||
bp_default = BlendParams()
|
bp_default = BlendParams()
|
||||||
bp_new = BlendParams(background_color=(0.5, 0.5, 0.5))
|
bp_new = BlendParams(background_color=(0.5, 0.5, 0.5))
|
||||||
self.assertEqual(bp_new.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