mirror of
https://github.com/facebookresearch/pytorch3d.git
synced 2025-08-02 11:52:50 +08:00
suppress errors in vision
- batch 1
Summary: This diff is auto-generated to upgrade the Pyre version and suppress errors in vision. The upgrade will affect Pyre local configurations in the following directories: ``` vision/ale/search vision/fair/fvcore vision/fair/pytorch3d vision/ocr/rosetta_hash vision/vogue/personalization ``` Differential Revision: D21688454 fbshipit-source-id: 1f3c3fee42b6da2e162fd0932742ab8c5c96aa45
This commit is contained in:
parent
d689baac5e
commit
ae68a54f67
@ -51,6 +51,7 @@ def make_mesh_texture_atlas(
|
|||||||
|
|
||||||
# Initialize the per face texture map to a white color.
|
# Initialize the per face texture map to a white color.
|
||||||
# TODO: allow customization of this base color?
|
# TODO: allow customization of this base color?
|
||||||
|
# pyre-fixme[16]: `Tensor` has no attribute `new_ones`.
|
||||||
atlas = faces_verts_uvs.new_ones(size=(F, R, R, 3))
|
atlas = faces_verts_uvs.new_ones(size=(F, R, R, 3))
|
||||||
|
|
||||||
# Check for empty materials.
|
# Check for empty materials.
|
||||||
@ -63,10 +64,13 @@ def make_mesh_texture_atlas(
|
|||||||
# will be ignored and a repeating pattern is formed.
|
# will be ignored and a repeating pattern is formed.
|
||||||
# Shapenet data uses this format see:
|
# Shapenet data uses this format see:
|
||||||
# https://shapenet.org/qaforum/index.php?qa=15&qa_1=why-is-the-texture-coordinate-in-the-obj-file-not-in-the-range # noqa: B950
|
# https://shapenet.org/qaforum/index.php?qa=15&qa_1=why-is-the-texture-coordinate-in-the-obj-file-not-in-the-range # noqa: B950
|
||||||
|
# pyre-fixme[16]: `ByteTensor` has no attribute `any`.
|
||||||
if (faces_verts_uvs > 1).any() or (faces_verts_uvs < 0).any():
|
if (faces_verts_uvs > 1).any() or (faces_verts_uvs < 0).any():
|
||||||
msg = "Texture UV coordinates outside the range [0, 1]. \
|
msg = "Texture UV coordinates outside the range [0, 1]. \
|
||||||
The integer part will be ignored to form a repeating pattern."
|
The integer part will be ignored to form a repeating pattern."
|
||||||
warnings.warn(msg)
|
warnings.warn(msg)
|
||||||
|
# pyre-fixme[9]: faces_verts_uvs has type `Tensor`; used as `int`.
|
||||||
|
# pyre-fixme[6]: Expected `int` for 1st param but got `Tensor`.
|
||||||
faces_verts_uvs = faces_verts_uvs % 1
|
faces_verts_uvs = faces_verts_uvs % 1
|
||||||
elif texture_wrap == "clamp":
|
elif texture_wrap == "clamp":
|
||||||
# Clamp uv coordinates to the [0, 1] range.
|
# Clamp uv coordinates to the [0, 1] range.
|
||||||
@ -257,6 +261,7 @@ def make_material_atlas(
|
|||||||
# Meshgrid returns (row, column) i.e (Y, X)
|
# Meshgrid returns (row, column) i.e (Y, X)
|
||||||
# Change order to (X, Y) to make the grid.
|
# Change order to (X, Y) to make the grid.
|
||||||
Y, X = torch.meshgrid(rng, rng)
|
Y, X = torch.meshgrid(rng, rng)
|
||||||
|
# pyre-fixme[28]: Unexpected keyword argument `axis`.
|
||||||
grid = torch.stack([X, Y], axis=-1) # (R, R, 2)
|
grid = torch.stack([X, Y], axis=-1) # (R, R, 2)
|
||||||
|
|
||||||
# Grid cells below the diagonal: x + y < R.
|
# Grid cells below the diagonal: x + y < R.
|
||||||
@ -269,6 +274,7 @@ def make_material_atlas(
|
|||||||
# w0, w1
|
# w0, w1
|
||||||
bary[below_diag, slc] = ((grid[below_diag] + 1.0 / 3.0) / R).T
|
bary[below_diag, slc] = ((grid[below_diag] + 1.0 / 3.0) / R).T
|
||||||
# w0, w1 for above diagonal grid cells.
|
# w0, w1 for above diagonal grid cells.
|
||||||
|
# pyre-fixme[16]: `float` has no attribute `T`.
|
||||||
bary[~below_diag, slc] = (((R - 1.0 - grid[~below_diag]) + 2.0 / 3.0) / R).T
|
bary[~below_diag, slc] = (((R - 1.0 - grid[~below_diag]) + 2.0 / 3.0) / R).T
|
||||||
# w2 = 1. - w0 - w1
|
# w2 = 1. - w0 - w1
|
||||||
bary[..., -1] = 1 - bary[..., :2].sum(dim=-1)
|
bary[..., -1] = 1 - bary[..., :2].sum(dim=-1)
|
||||||
|
@ -213,6 +213,8 @@ def load_obj(
|
|||||||
"""
|
"""
|
||||||
data_dir = "./"
|
data_dir = "./"
|
||||||
if isinstance(f_obj, (str, bytes, os.PathLike)):
|
if isinstance(f_obj, (str, bytes, os.PathLike)):
|
||||||
|
# pyre-fixme[6]: Expected `_PathLike[Variable[typing.AnyStr <: [str,
|
||||||
|
# bytes]]]` for 1st param but got `Union[_PathLike[typing.Any], bytes, str]`.
|
||||||
data_dir = os.path.dirname(f_obj)
|
data_dir = os.path.dirname(f_obj)
|
||||||
f_obj, new_f = _open_file(f_obj)
|
f_obj, new_f = _open_file(f_obj)
|
||||||
try:
|
try:
|
||||||
@ -453,6 +455,8 @@ def _load(
|
|||||||
material_colors, texture_images, texture_atlas = None, None, None
|
material_colors, texture_images, texture_atlas = None, None, None
|
||||||
if load_textures:
|
if load_textures:
|
||||||
if (len(material_names) > 0) and (f_mtl is not None):
|
if (len(material_names) > 0) and (f_mtl is not None):
|
||||||
|
# pyre-fixme[6]: Expected `Union[_PathLike[typing.Any], bytes, str]` for
|
||||||
|
# 1st param but got `Optional[str]`.
|
||||||
if os.path.isfile(f_mtl):
|
if os.path.isfile(f_mtl):
|
||||||
# Texture mode uv wrap
|
# Texture mode uv wrap
|
||||||
material_colors, texture_images = load_mtl(
|
material_colors, texture_images = load_mtl(
|
||||||
|
@ -30,6 +30,8 @@ def _read_image(file_name: str, format=None):
|
|||||||
if format not in ["RGB", "BGR"]:
|
if format not in ["RGB", "BGR"]:
|
||||||
raise ValueError("format can only be one of [RGB, BGR]; got %s", format)
|
raise ValueError("format can only be one of [RGB, BGR]; got %s", format)
|
||||||
with PathManager.open(file_name, "rb") as f:
|
with PathManager.open(file_name, "rb") as f:
|
||||||
|
# pyre-fixme[6]: Expected `Union[str, typing.BinaryIO]` for 1st param but
|
||||||
|
# got `Union[typing.IO[bytes], typing.IO[str]]`.
|
||||||
image = Image.open(f)
|
image = Image.open(f)
|
||||||
if format is not None:
|
if format is not None:
|
||||||
# PIL only supports RGB. First convert to RGB and flip channels
|
# PIL only supports RGB. First convert to RGB and flip channels
|
||||||
|
@ -41,6 +41,7 @@ def _handle_pointcloud_input(
|
|||||||
lengths = points.num_points_per_cloud()
|
lengths = points.num_points_per_cloud()
|
||||||
normals = points.normals_padded() # either a tensor or None
|
normals = points.normals_padded() # either a tensor or None
|
||||||
elif torch.is_tensor(points):
|
elif torch.is_tensor(points):
|
||||||
|
# pyre-fixme[16]: `Tensor` has no attribute `ndim`.
|
||||||
if points.ndim != 3:
|
if points.ndim != 3:
|
||||||
raise ValueError("Expected points to be of shape (N, P, D)")
|
raise ValueError("Expected points to be of shape (N, P, D)")
|
||||||
X = points
|
X = points
|
||||||
@ -173,6 +174,7 @@ def chamfer_distance(
|
|||||||
)
|
)
|
||||||
|
|
||||||
if is_x_heterogeneous:
|
if is_x_heterogeneous:
|
||||||
|
# pyre-fixme[16]: `int` has no attribute `__setitem__`.
|
||||||
cham_norm_x[x_mask] = 0.0
|
cham_norm_x[x_mask] = 0.0
|
||||||
if is_y_heterogeneous:
|
if is_y_heterogeneous:
|
||||||
cham_norm_y[y_mask] = 0.0
|
cham_norm_y[y_mask] = 0.0
|
||||||
|
@ -65,6 +65,7 @@ class _PointFaceDistance(Function):
|
|||||||
return grad_points, None, grad_tris, None, None
|
return grad_points, None, grad_tris, None, None
|
||||||
|
|
||||||
|
|
||||||
|
# pyre-fixme[16]: `_PointFaceDistance` has no attribute `apply`.
|
||||||
point_face_distance = _PointFaceDistance.apply
|
point_face_distance = _PointFaceDistance.apply
|
||||||
|
|
||||||
|
|
||||||
@ -115,6 +116,7 @@ class _FacePointDistance(Function):
|
|||||||
return grad_points, None, grad_tris, None, None
|
return grad_points, None, grad_tris, None, None
|
||||||
|
|
||||||
|
|
||||||
|
# pyre-fixme[16]: `_FacePointDistance` has no attribute `apply`.
|
||||||
face_point_distance = _FacePointDistance.apply
|
face_point_distance = _FacePointDistance.apply
|
||||||
|
|
||||||
|
|
||||||
@ -165,6 +167,7 @@ class _PointEdgeDistance(Function):
|
|||||||
return grad_points, None, grad_segms, None, None
|
return grad_points, None, grad_segms, None, None
|
||||||
|
|
||||||
|
|
||||||
|
# pyre-fixme[16]: `_PointEdgeDistance` has no attribute `apply`.
|
||||||
point_edge_distance = _PointEdgeDistance.apply
|
point_edge_distance = _PointEdgeDistance.apply
|
||||||
|
|
||||||
|
|
||||||
@ -215,6 +218,7 @@ class _EdgePointDistance(Function):
|
|||||||
return grad_points, None, grad_segms, None, None
|
return grad_points, None, grad_segms, None, None
|
||||||
|
|
||||||
|
|
||||||
|
# pyre-fixme[16]: `_EdgePointDistance` has no attribute `apply`.
|
||||||
edge_point_distance = _EdgePointDistance.apply
|
edge_point_distance = _EdgePointDistance.apply
|
||||||
|
|
||||||
|
|
||||||
|
@ -229,6 +229,7 @@ def cubify(voxels, thresh, device=None, align: str = "topleft") -> Meshes:
|
|||||||
idlenum = idleverts.cumsum(1)
|
idlenum = idleverts.cumsum(1)
|
||||||
|
|
||||||
verts_list = [
|
verts_list = [
|
||||||
|
# pyre-fixme[16]: `Tensor` has no attribute `index_select`.
|
||||||
grid_verts.index_select(0, (idleverts[n] == 0).nonzero(as_tuple=False)[:, 0])
|
grid_verts.index_select(0, (idleverts[n] == 0).nonzero(as_tuple=False)[:, 0])
|
||||||
for n in range(N)
|
for n in range(N)
|
||||||
]
|
]
|
||||||
|
@ -35,6 +35,7 @@ class GraphConv(nn.Module):
|
|||||||
if init == "normal":
|
if init == "normal":
|
||||||
nn.init.normal_(self.w0.weight, mean=0, std=0.01)
|
nn.init.normal_(self.w0.weight, mean=0, std=0.01)
|
||||||
nn.init.normal_(self.w1.weight, mean=0, std=0.01)
|
nn.init.normal_(self.w1.weight, mean=0, std=0.01)
|
||||||
|
# pyre-fixme[16]: Optional type has no attribute `data`.
|
||||||
self.w0.bias.data.zero_()
|
self.w0.bias.data.zero_()
|
||||||
self.w1.bias.data.zero_()
|
self.w1.bias.data.zero_()
|
||||||
elif init == "zero":
|
elif init == "zero":
|
||||||
@ -115,6 +116,7 @@ def gather_scatter_python(input, edges, directed: bool = False):
|
|||||||
idx0 = edges[:, 0].view(num_edges, 1).expand(num_edges, input_feature_dim)
|
idx0 = edges[:, 0].view(num_edges, 1).expand(num_edges, input_feature_dim)
|
||||||
idx1 = edges[:, 1].view(num_edges, 1).expand(num_edges, input_feature_dim)
|
idx1 = edges[:, 1].view(num_edges, 1).expand(num_edges, input_feature_dim)
|
||||||
|
|
||||||
|
# pyre-fixme[16]: `Tensor` has no attribute `scatter_add`.
|
||||||
output = output.scatter_add(0, idx0, input.gather(0, idx1))
|
output = output.scatter_add(0, idx0, input.gather(0, idx1))
|
||||||
if not directed:
|
if not directed:
|
||||||
output = output.scatter_add(0, idx1, input.gather(0, idx0))
|
output = output.scatter_add(0, idx1, input.gather(0, idx0))
|
||||||
@ -167,4 +169,5 @@ class GatherScatter(Function):
|
|||||||
return grad_input, grad_edges, grad_directed
|
return grad_input, grad_edges, grad_directed
|
||||||
|
|
||||||
|
|
||||||
|
# pyre-fixme[16]: `GatherScatter` has no attribute `apply`.
|
||||||
gather_scatter = GatherScatter.apply
|
gather_scatter = GatherScatter.apply
|
||||||
|
@ -157,6 +157,7 @@ def knn_points(
|
|||||||
if lengths2 is None:
|
if lengths2 is None:
|
||||||
lengths2 = torch.full((p1.shape[0],), P2, dtype=torch.int64, device=p1.device)
|
lengths2 = torch.full((p1.shape[0],), P2, dtype=torch.int64, device=p1.device)
|
||||||
|
|
||||||
|
# pyre-fixme[16]: `_knn_points` has no attribute `apply`.
|
||||||
p1_dists, p1_idx = _knn_points.apply(p1, p2, lengths1, lengths2, K, version)
|
p1_dists, p1_idx = _knn_points.apply(p1, p2, lengths1, lengths2, K, version)
|
||||||
|
|
||||||
p2_nn = None
|
p2_nn = None
|
||||||
|
@ -59,4 +59,5 @@ class _MeshFaceAreasNormals(Function):
|
|||||||
return grad_verts, None
|
return grad_verts, None
|
||||||
|
|
||||||
|
|
||||||
|
# pyre-fixme[16]: `_MeshFaceAreasNormals` has no attribute `apply`.
|
||||||
mesh_face_areas_normals = _MeshFaceAreasNormals.apply
|
mesh_face_areas_normals = _MeshFaceAreasNormals.apply
|
||||||
|
@ -120,4 +120,6 @@ def _rand_barycentric_coords(
|
|||||||
w0 = 1.0 - u_sqrt
|
w0 = 1.0 - u_sqrt
|
||||||
w1 = u_sqrt * (1.0 - v)
|
w1 = u_sqrt * (1.0 - v)
|
||||||
w2 = u_sqrt * v
|
w2 = u_sqrt * v
|
||||||
|
# pyre-fixme[7]: Expected `Tuple[torch.Tensor, torch.Tensor, torch.Tensor]` but
|
||||||
|
# got `Tuple[float, typing.Any, typing.Any]`.
|
||||||
return w0, w1, w2
|
return w0, w1, w2
|
||||||
|
@ -96,6 +96,7 @@ def vert_align(
|
|||||||
.view(-1, 1)
|
.view(-1, 1)
|
||||||
.expand(-1, feats_sampled.shape[-1])
|
.expand(-1, feats_sampled.shape[-1])
|
||||||
)
|
)
|
||||||
|
# pyre-fixme[16]: `Tensor` has no attribute `gather`.
|
||||||
feats_sampled = feats_sampled.gather(0, idx) # (sum(V), C)
|
feats_sampled = feats_sampled.gather(0, idx) # (sum(V), C)
|
||||||
|
|
||||||
return feats_sampled
|
return feats_sampled
|
||||||
|
@ -150,7 +150,10 @@ def softmax_rgb_blend(
|
|||||||
# TODO: there may still be some instability in the exponent calculation.
|
# TODO: there may still be some instability in the exponent calculation.
|
||||||
|
|
||||||
z_inv = (zfar - fragments.zbuf) / (zfar - znear) * mask
|
z_inv = (zfar - fragments.zbuf) / (zfar - znear) * mask
|
||||||
|
# pyre-fixme[16]: `Tuple` has no attribute `values`.
|
||||||
|
# pyre-fixme[6]: Expected `Tensor` for 1st param but got `float`.
|
||||||
z_inv_max = torch.max(z_inv, dim=-1).values[..., None]
|
z_inv_max = torch.max(z_inv, dim=-1).values[..., None]
|
||||||
|
# pyre-fixme[6]: Expected `Tensor` for 1st param but got `float`.
|
||||||
weights_num = prob_map * torch.exp((z_inv - z_inv_max) / blend_params.gamma)
|
weights_num = prob_map * torch.exp((z_inv - z_inv_max) / blend_params.gamma)
|
||||||
|
|
||||||
# Normalize weights.
|
# Normalize weights.
|
||||||
|
@ -95,6 +95,7 @@ def alpha_composite(pointsidx, alphas, pt_clds, blend_params=None) -> torch.Tens
|
|||||||
Combined features: Tensor of shape (N, C, image_size, image_size)
|
Combined features: Tensor of shape (N, C, image_size, image_size)
|
||||||
giving the accumulated features at each point.
|
giving the accumulated features at each point.
|
||||||
"""
|
"""
|
||||||
|
# pyre-fixme[16]: `_CompositeAlphaPoints` has no attribute `apply`.
|
||||||
return _CompositeAlphaPoints.apply(pt_clds, alphas, pointsidx)
|
return _CompositeAlphaPoints.apply(pt_clds, alphas, pointsidx)
|
||||||
|
|
||||||
|
|
||||||
@ -173,6 +174,7 @@ def norm_weighted_sum(pointsidx, alphas, pt_clds, blend_params=None) -> torch.Te
|
|||||||
Combined features: Tensor of shape (N, C, image_size, image_size)
|
Combined features: Tensor of shape (N, C, image_size, image_size)
|
||||||
giving the accumulated features at each point.
|
giving the accumulated features at each point.
|
||||||
"""
|
"""
|
||||||
|
# pyre-fixme[16]: `_CompositeNormWeightedSumPoints` has no attribute `apply`.
|
||||||
return _CompositeNormWeightedSumPoints.apply(pt_clds, alphas, pointsidx)
|
return _CompositeNormWeightedSumPoints.apply(pt_clds, alphas, pointsidx)
|
||||||
|
|
||||||
|
|
||||||
@ -244,4 +246,5 @@ def weighted_sum(pointsidx, alphas, pt_clds, blend_params=None) -> torch.Tensor:
|
|||||||
Combined features: Tensor of shape (N, C, image_size, image_size)
|
Combined features: Tensor of shape (N, C, image_size, image_size)
|
||||||
giving the accumulated features at each point.
|
giving the accumulated features at each point.
|
||||||
"""
|
"""
|
||||||
|
# pyre-fixme[16]: `_CompositeWeightedSumPoints` has no attribute `apply`.
|
||||||
return _CompositeWeightedSumPoints.apply(pt_clds, alphas, pointsidx)
|
return _CompositeWeightedSumPoints.apply(pt_clds, alphas, pointsidx)
|
||||||
|
@ -183,6 +183,7 @@ class DirectionalLights(TensorProperties):
|
|||||||
direction=direction,
|
direction=direction,
|
||||||
)
|
)
|
||||||
_validate_light_properties(self)
|
_validate_light_properties(self)
|
||||||
|
# pyre-fixme[16]: `DirectionalLights` has no attribute `direction`.
|
||||||
if self.direction.shape[-1] != 3:
|
if self.direction.shape[-1] != 3:
|
||||||
msg = "Expected direction to have shape (N, 3); got %r"
|
msg = "Expected direction to have shape (N, 3); got %r"
|
||||||
raise ValueError(msg % repr(self.direction.shape))
|
raise ValueError(msg % repr(self.direction.shape))
|
||||||
@ -196,14 +197,20 @@ class DirectionalLights(TensorProperties):
|
|||||||
# the same for directional and point lights. The call sites should not
|
# the same for directional and point lights. The call sites should not
|
||||||
# need to know the light type.
|
# need to know the light type.
|
||||||
return diffuse(
|
return diffuse(
|
||||||
normals=normals, color=self.diffuse_color, direction=self.direction
|
normals=normals,
|
||||||
|
# pyre-fixme[16]: `DirectionalLights` has no attribute `diffuse_color`.
|
||||||
|
color=self.diffuse_color,
|
||||||
|
# pyre-fixme[16]: `DirectionalLights` has no attribute `direction`.
|
||||||
|
direction=self.direction,
|
||||||
)
|
)
|
||||||
|
|
||||||
def specular(self, normals, points, camera_position, shininess) -> torch.Tensor:
|
def specular(self, normals, points, camera_position, shininess) -> torch.Tensor:
|
||||||
return specular(
|
return specular(
|
||||||
points=points,
|
points=points,
|
||||||
normals=normals,
|
normals=normals,
|
||||||
|
# pyre-fixme[16]: `DirectionalLights` has no attribute `specular_color`.
|
||||||
color=self.specular_color,
|
color=self.specular_color,
|
||||||
|
# pyre-fixme[16]: `DirectionalLights` has no attribute `direction`.
|
||||||
direction=self.direction,
|
direction=self.direction,
|
||||||
camera_position=camera_position,
|
camera_position=camera_position,
|
||||||
shininess=shininess,
|
shininess=shininess,
|
||||||
@ -242,6 +249,7 @@ class PointLights(TensorProperties):
|
|||||||
location=location,
|
location=location,
|
||||||
)
|
)
|
||||||
_validate_light_properties(self)
|
_validate_light_properties(self)
|
||||||
|
# pyre-fixme[16]: `PointLights` has no attribute `location`.
|
||||||
if self.location.shape[-1] != 3:
|
if self.location.shape[-1] != 3:
|
||||||
msg = "Expected location to have shape (N, 3); got %r"
|
msg = "Expected location to have shape (N, 3); got %r"
|
||||||
raise ValueError(msg % repr(self.location.shape))
|
raise ValueError(msg % repr(self.location.shape))
|
||||||
@ -251,14 +259,18 @@ class PointLights(TensorProperties):
|
|||||||
return super().clone(other)
|
return super().clone(other)
|
||||||
|
|
||||||
def diffuse(self, normals, points) -> torch.Tensor:
|
def diffuse(self, normals, points) -> torch.Tensor:
|
||||||
|
# pyre-fixme[16]: `PointLights` has no attribute `location`.
|
||||||
direction = self.location - points
|
direction = self.location - points
|
||||||
|
# pyre-fixme[16]: `PointLights` has no attribute `diffuse_color`.
|
||||||
return diffuse(normals=normals, color=self.diffuse_color, direction=direction)
|
return diffuse(normals=normals, color=self.diffuse_color, direction=direction)
|
||||||
|
|
||||||
def specular(self, normals, points, camera_position, shininess) -> torch.Tensor:
|
def specular(self, normals, points, camera_position, shininess) -> torch.Tensor:
|
||||||
|
# pyre-fixme[16]: `PointLights` has no attribute `location`.
|
||||||
direction = self.location - points
|
direction = self.location - points
|
||||||
return specular(
|
return specular(
|
||||||
points=points,
|
points=points,
|
||||||
normals=normals,
|
normals=normals,
|
||||||
|
# pyre-fixme[16]: `PointLights` has no attribute `specular_color`.
|
||||||
color=self.specular_color,
|
color=self.specular_color,
|
||||||
direction=direction,
|
direction=direction,
|
||||||
camera_position=camera_position,
|
camera_position=camera_position,
|
||||||
|
@ -132,6 +132,7 @@ def rasterize_meshes(
|
|||||||
if max_faces_per_bin is None:
|
if max_faces_per_bin is None:
|
||||||
max_faces_per_bin = int(max(10000, verts_packed.shape[0] / 5))
|
max_faces_per_bin = int(max(10000, verts_packed.shape[0] / 5))
|
||||||
|
|
||||||
|
# pyre-fixme[16]: `_RasterizeFaceVerts` has no attribute `apply`.
|
||||||
return _RasterizeFaceVerts.apply(
|
return _RasterizeFaceVerts.apply(
|
||||||
face_verts,
|
face_verts,
|
||||||
mesh_to_face_first_idx,
|
mesh_to_face_first_idx,
|
||||||
@ -184,6 +185,7 @@ class _RasterizeFaceVerts(torch.autograd.Function):
|
|||||||
perspective_correct: bool = False,
|
perspective_correct: bool = False,
|
||||||
cull_backfaces: bool = False,
|
cull_backfaces: bool = False,
|
||||||
):
|
):
|
||||||
|
# pyre-fixme[16]: Module `pytorch3d` has no attribute `_C`.
|
||||||
pix_to_face, zbuf, barycentric_coords, dists = _C.rasterize_meshes(
|
pix_to_face, zbuf, barycentric_coords, dists = _C.rasterize_meshes(
|
||||||
face_verts,
|
face_verts,
|
||||||
mesh_to_face_first_idx,
|
mesh_to_face_first_idx,
|
||||||
@ -283,6 +285,7 @@ def rasterize_meshes_python(
|
|||||||
)
|
)
|
||||||
|
|
||||||
# Calculate all face bounding boxes.
|
# Calculate all face bounding boxes.
|
||||||
|
# pyre-fixme[16]: `Tuple` has no attribute `values`.
|
||||||
x_mins = torch.min(faces_verts[:, :, 0], dim=1, keepdim=True).values
|
x_mins = torch.min(faces_verts[:, :, 0], dim=1, keepdim=True).values
|
||||||
x_maxs = torch.max(faces_verts[:, :, 0], dim=1, keepdim=True).values
|
x_maxs = torch.max(faces_verts[:, :, 0], dim=1, keepdim=True).values
|
||||||
y_mins = torch.min(faces_verts[:, :, 1], dim=1, keepdim=True).values
|
y_mins = torch.min(faces_verts[:, :, 1], dim=1, keepdim=True).values
|
||||||
|
@ -63,6 +63,7 @@ def interpolate_face_attributes(
|
|||||||
pix_to_face = pix_to_face.clone()
|
pix_to_face = pix_to_face.clone()
|
||||||
pix_to_face[mask] = 0
|
pix_to_face[mask] = 0
|
||||||
idx = pix_to_face.view(N * H * W * K, 1, 1).expand(N * H * W * K, 3, D)
|
idx = pix_to_face.view(N * H * W * K, 1, 1).expand(N * H * W * K, 3, D)
|
||||||
|
# pyre-fixme[16]: `Tensor` has no attribute `gather`.
|
||||||
pixel_face_vals = face_attributes.gather(0, idx).view(N, H, W, K, 3, D)
|
pixel_face_vals = face_attributes.gather(0, idx).view(N, H, W, K, 3, D)
|
||||||
pixel_vals = (barycentric_coords[..., None] * pixel_face_vals).sum(dim=-2)
|
pixel_vals = (barycentric_coords[..., None] * pixel_face_vals).sum(dim=-2)
|
||||||
pixel_vals[mask] = 0 # Replace masked values in output.
|
pixel_vals[mask] = 0 # Replace masked values in output.
|
||||||
|
@ -89,6 +89,7 @@ def rasterize_points(
|
|||||||
|
|
||||||
if bin_size != 0:
|
if bin_size != 0:
|
||||||
# There is a limit on the number of points per bin in the cuda kernel.
|
# There is a limit on the number of points per bin in the cuda kernel.
|
||||||
|
# pyre-fixme[6]: Expected `int` for 1st param but got `Union[int, None, int]`.
|
||||||
points_per_bin = 1 + (image_size - 1) // bin_size
|
points_per_bin = 1 + (image_size - 1) // bin_size
|
||||||
if points_per_bin >= kMaxPointsPerBin:
|
if points_per_bin >= kMaxPointsPerBin:
|
||||||
raise ValueError(
|
raise ValueError(
|
||||||
@ -101,6 +102,7 @@ def rasterize_points(
|
|||||||
|
|
||||||
# Function.apply cannot take keyword args, so we handle defaults in this
|
# Function.apply cannot take keyword args, so we handle defaults in this
|
||||||
# wrapper and call apply with positional args only
|
# wrapper and call apply with positional args only
|
||||||
|
# pyre-fixme[16]: `_RasterizePoints` has no attribute `apply`.
|
||||||
return _RasterizePoints.apply(
|
return _RasterizePoints.apply(
|
||||||
points_packed,
|
points_packed,
|
||||||
cloud_to_packed_first_idx,
|
cloud_to_packed_first_idx,
|
||||||
@ -138,6 +140,7 @@ class _RasterizePoints(torch.autograd.Function):
|
|||||||
bin_size,
|
bin_size,
|
||||||
max_points_per_bin,
|
max_points_per_bin,
|
||||||
)
|
)
|
||||||
|
# pyre-fixme[16]: Module `pytorch3d` has no attribute `_C`.
|
||||||
idx, zbuf, dists = _C.rasterize_points(*args)
|
idx, zbuf, dists = _C.rasterize_points(*args)
|
||||||
ctx.save_for_backward(points, idx)
|
ctx.save_for_backward(points, idx)
|
||||||
ctx.mark_non_differentiable(idx)
|
ctx.mark_non_differentiable(idx)
|
||||||
|
@ -820,6 +820,7 @@ class Meshes(object):
|
|||||||
|
|
||||||
# NOTE: this is already applying the area weighting as the magnitude
|
# NOTE: this is already applying the area weighting as the magnitude
|
||||||
# of the cross product is 2 x area of the triangle.
|
# of the cross product is 2 x area of the triangle.
|
||||||
|
# pyre-fixme[16]: `Tensor` has no attribute `index_add`.
|
||||||
verts_normals = verts_normals.index_add(
|
verts_normals = verts_normals.index_add(
|
||||||
0,
|
0,
|
||||||
faces_packed[:, 1],
|
faces_packed[:, 1],
|
||||||
@ -1392,6 +1393,7 @@ def join_meshes_as_batch(meshes: List[Meshes], include_textures: bool = True):
|
|||||||
# Meshes objects can be iterated and produce single Meshes. We avoid
|
# Meshes objects can be iterated and produce single Meshes. We avoid
|
||||||
# letting join_meshes_as_batch(mesh1, mesh2) silently do the wrong thing.
|
# letting join_meshes_as_batch(mesh1, mesh2) silently do the wrong thing.
|
||||||
raise ValueError("Wrong first argument to join_meshes_as_batch.")
|
raise ValueError("Wrong first argument to join_meshes_as_batch.")
|
||||||
|
# pyre-fixme[10]: Name `mesh` is used but not defined.
|
||||||
verts = [v for mesh in meshes for v in mesh.verts_list()]
|
verts = [v for mesh in meshes for v in mesh.verts_list()]
|
||||||
faces = [f for mesh in meshes for f in mesh.faces_list()]
|
faces = [f for mesh in meshes for f in mesh.faces_list()]
|
||||||
if len(meshes) == 0 or not include_textures:
|
if len(meshes) == 0 or not include_textures:
|
||||||
|
@ -63,6 +63,7 @@ def _extend_tensor(input_tensor: torch.Tensor, N: int) -> torch.Tensor:
|
|||||||
input_tensor: torch.Tensor with ndim > 2 representing a batched input.
|
input_tensor: torch.Tensor with ndim > 2 representing a batched input.
|
||||||
N: number of times to extend each element of the batch.
|
N: number of times to extend each element of the batch.
|
||||||
"""
|
"""
|
||||||
|
# pyre-fixme[16]: `Tensor` has no attribute `ndim`.
|
||||||
if input_tensor.ndim < 2:
|
if input_tensor.ndim < 2:
|
||||||
raise ValueError("Input tensor must have ndimensions >= 2.")
|
raise ValueError("Input tensor must have ndimensions >= 2.")
|
||||||
B = input_tensor.shape[0]
|
B = input_tensor.shape[0]
|
||||||
@ -98,6 +99,7 @@ class Textures(object):
|
|||||||
and the packed/list representations are computed on the fly and
|
and the packed/list representations are computed on the fly and
|
||||||
not cached.
|
not cached.
|
||||||
"""
|
"""
|
||||||
|
# pyre-fixme[16]: `Tensor` has no attribute `ndim`.
|
||||||
if faces_uvs is not None and faces_uvs.ndim != 3:
|
if faces_uvs is not None and faces_uvs.ndim != 3:
|
||||||
msg = "Expected faces_uvs to be of shape (N, F, 3); got %r"
|
msg = "Expected faces_uvs to be of shape (N, F, 3); got %r"
|
||||||
raise ValueError(msg % repr(faces_uvs.shape))
|
raise ValueError(msg % repr(faces_uvs.shape))
|
||||||
@ -108,8 +110,10 @@ class Textures(object):
|
|||||||
msg = "Expected verts_rgb to be of shape (N, V, 3); got %r"
|
msg = "Expected verts_rgb to be of shape (N, V, 3); got %r"
|
||||||
raise ValueError(msg % repr(verts_rgb.shape))
|
raise ValueError(msg % repr(verts_rgb.shape))
|
||||||
if maps is not None:
|
if maps is not None:
|
||||||
|
# pyre-fixme[16]: `List` has no attribute `ndim`.
|
||||||
if torch.is_tensor(maps) and maps.ndim != 4:
|
if torch.is_tensor(maps) and maps.ndim != 4:
|
||||||
msg = "Expected maps to be of shape (N, H, W, 3); got %r"
|
msg = "Expected maps to be of shape (N, H, W, 3); got %r"
|
||||||
|
# pyre-fixme[16]: `List` has no attribute `shape`.
|
||||||
raise ValueError(msg % repr(maps.shape))
|
raise ValueError(msg % repr(maps.shape))
|
||||||
elif isinstance(maps, list):
|
elif isinstance(maps, list):
|
||||||
maps = _pad_texture_maps(maps)
|
maps = _pad_texture_maps(maps)
|
||||||
@ -155,20 +159,27 @@ class Textures(object):
|
|||||||
return other
|
return other
|
||||||
|
|
||||||
def faces_uvs_padded(self) -> torch.Tensor:
|
def faces_uvs_padded(self) -> torch.Tensor:
|
||||||
|
# pyre-fixme[7]: Expected `Tensor` but got `Optional[torch.Tensor]`.
|
||||||
return self._faces_uvs_padded
|
return self._faces_uvs_padded
|
||||||
|
|
||||||
def faces_uvs_list(self) -> Union[List[torch.Tensor], None]:
|
def faces_uvs_list(self) -> Union[List[torch.Tensor], None]:
|
||||||
if self._faces_uvs_padded is None:
|
if self._faces_uvs_padded is None:
|
||||||
return None
|
return None
|
||||||
return padded_to_list(
|
return padded_to_list(
|
||||||
self._faces_uvs_padded, split_size=self._num_faces_per_mesh
|
# pyre-fixme[6]: Expected `Tensor` for 1st param but got
|
||||||
|
# `Optional[torch.Tensor]`.
|
||||||
|
self._faces_uvs_padded,
|
||||||
|
split_size=self._num_faces_per_mesh,
|
||||||
)
|
)
|
||||||
|
|
||||||
def faces_uvs_packed(self) -> Union[torch.Tensor, None]:
|
def faces_uvs_packed(self) -> Union[torch.Tensor, None]:
|
||||||
if self._faces_uvs_padded is None:
|
if self._faces_uvs_padded is None:
|
||||||
return None
|
return None
|
||||||
return padded_to_packed(
|
return padded_to_packed(
|
||||||
self._faces_uvs_padded, split_size=self._num_faces_per_mesh
|
# pyre-fixme[6]: Expected `Tensor` for 1st param but got
|
||||||
|
# `Optional[torch.Tensor]`.
|
||||||
|
self._faces_uvs_padded,
|
||||||
|
split_size=self._num_faces_per_mesh,
|
||||||
)
|
)
|
||||||
|
|
||||||
def verts_uvs_padded(self) -> Union[torch.Tensor, None]:
|
def verts_uvs_padded(self) -> Union[torch.Tensor, None]:
|
||||||
@ -182,6 +193,8 @@ class Textures(object):
|
|||||||
# each face so the num_verts_uvs_per_mesh
|
# each face so the num_verts_uvs_per_mesh
|
||||||
# may be different from num_verts_per_mesh.
|
# may be different from num_verts_per_mesh.
|
||||||
# Therefore don't use any split_size.
|
# Therefore don't use any split_size.
|
||||||
|
# pyre-fixme[6]: Expected `Tensor` for 1st param but got
|
||||||
|
# `Optional[torch.Tensor]`.
|
||||||
return padded_to_list(self._verts_uvs_padded)
|
return padded_to_list(self._verts_uvs_padded)
|
||||||
|
|
||||||
def verts_uvs_packed(self) -> Union[torch.Tensor, None]:
|
def verts_uvs_packed(self) -> Union[torch.Tensor, None]:
|
||||||
@ -192,6 +205,8 @@ class Textures(object):
|
|||||||
# each face so the num_verts_uvs_per_mesh
|
# each face so the num_verts_uvs_per_mesh
|
||||||
# may be different from num_verts_per_mesh.
|
# may be different from num_verts_per_mesh.
|
||||||
# Therefore don't use any split_size.
|
# Therefore don't use any split_size.
|
||||||
|
# pyre-fixme[6]: Expected `Tensor` for 1st param but got
|
||||||
|
# `Optional[torch.Tensor]`.
|
||||||
return padded_to_packed(self._verts_uvs_padded)
|
return padded_to_packed(self._verts_uvs_padded)
|
||||||
|
|
||||||
def verts_rgb_padded(self) -> Union[torch.Tensor, None]:
|
def verts_rgb_padded(self) -> Union[torch.Tensor, None]:
|
||||||
@ -201,18 +216,26 @@ class Textures(object):
|
|||||||
if self._verts_rgb_padded is None:
|
if self._verts_rgb_padded is None:
|
||||||
return None
|
return None
|
||||||
return padded_to_list(
|
return padded_to_list(
|
||||||
self._verts_rgb_padded, split_size=self._num_verts_per_mesh
|
# pyre-fixme[6]: Expected `Tensor` for 1st param but got
|
||||||
|
# `Optional[torch.Tensor]`.
|
||||||
|
self._verts_rgb_padded,
|
||||||
|
split_size=self._num_verts_per_mesh,
|
||||||
)
|
)
|
||||||
|
|
||||||
def verts_rgb_packed(self) -> Union[torch.Tensor, None]:
|
def verts_rgb_packed(self) -> Union[torch.Tensor, None]:
|
||||||
if self._verts_rgb_padded is None:
|
if self._verts_rgb_padded is None:
|
||||||
return None
|
return None
|
||||||
return padded_to_packed(
|
return padded_to_packed(
|
||||||
self._verts_rgb_padded, split_size=self._num_verts_per_mesh
|
# pyre-fixme[6]: Expected `Tensor` for 1st param but got
|
||||||
|
# `Optional[torch.Tensor]`.
|
||||||
|
self._verts_rgb_padded,
|
||||||
|
split_size=self._num_verts_per_mesh,
|
||||||
)
|
)
|
||||||
|
|
||||||
# Currently only the padded maps are used.
|
# Currently only the padded maps are used.
|
||||||
def maps_padded(self) -> Union[torch.Tensor, None]:
|
def maps_padded(self) -> Union[torch.Tensor, None]:
|
||||||
|
# pyre-fixme[7]: Expected `Optional[torch.Tensor]` but got `Union[None,
|
||||||
|
# List[typing.Any], torch.Tensor]`.
|
||||||
return self._maps_padded
|
return self._maps_padded
|
||||||
|
|
||||||
def extend(self, N: int) -> "Textures":
|
def extend(self, N: int) -> "Textures":
|
||||||
@ -234,13 +257,21 @@ class Textures(object):
|
|||||||
v is not None
|
v is not None
|
||||||
for v in [self._faces_uvs_padded, self._verts_uvs_padded, self._maps_padded]
|
for v in [self._faces_uvs_padded, self._verts_uvs_padded, self._maps_padded]
|
||||||
):
|
):
|
||||||
|
# pyre-fixme[6]: Expected `Tensor` for 1st param but got
|
||||||
|
# `Optional[torch.Tensor]`.
|
||||||
new_verts_uvs = _extend_tensor(self._verts_uvs_padded, N)
|
new_verts_uvs = _extend_tensor(self._verts_uvs_padded, N)
|
||||||
|
# pyre-fixme[6]: Expected `Tensor` for 1st param but got
|
||||||
|
# `Optional[torch.Tensor]`.
|
||||||
new_faces_uvs = _extend_tensor(self._faces_uvs_padded, N)
|
new_faces_uvs = _extend_tensor(self._faces_uvs_padded, N)
|
||||||
|
# pyre-fixme[6]: Expected `Tensor` for 1st param but got `Union[None,
|
||||||
|
# List[typing.Any], torch.Tensor]`.
|
||||||
new_maps = _extend_tensor(self._maps_padded, N)
|
new_maps = _extend_tensor(self._maps_padded, N)
|
||||||
return self.__class__(
|
return self.__class__(
|
||||||
verts_uvs=new_verts_uvs, faces_uvs=new_faces_uvs, maps=new_maps
|
verts_uvs=new_verts_uvs, faces_uvs=new_faces_uvs, maps=new_maps
|
||||||
)
|
)
|
||||||
elif self._verts_rgb_padded is not None:
|
elif self._verts_rgb_padded is not None:
|
||||||
|
# pyre-fixme[6]: Expected `Tensor` for 1st param but got
|
||||||
|
# `Optional[torch.Tensor]`.
|
||||||
new_verts_rgb = _extend_tensor(self._verts_rgb_padded, N)
|
new_verts_rgb = _extend_tensor(self._verts_rgb_padded, N)
|
||||||
return self.__class__(verts_rgb=new_verts_rgb)
|
return self.__class__(verts_rgb=new_verts_rgb)
|
||||||
else:
|
else:
|
||||||
|
@ -48,6 +48,7 @@ def list_to_padded(
|
|||||||
)
|
)
|
||||||
for i, y in enumerate(x):
|
for i, y in enumerate(x):
|
||||||
if len(y) > 0:
|
if len(y) > 0:
|
||||||
|
# pyre-fixme[16]: `Tensor` has no attribute `ndim`.
|
||||||
if y.ndim != 2:
|
if y.ndim != 2:
|
||||||
raise ValueError("Supports only 2-dimensional tensor items")
|
raise ValueError("Supports only 2-dimensional tensor items")
|
||||||
x_padded[i, : y.shape[0], : y.shape[1]] = y
|
x_padded[i, : y.shape[0], : y.shape[1]] = y
|
||||||
@ -69,6 +70,7 @@ def padded_to_list(x: torch.Tensor, split_size: Union[list, tuple, None] = None)
|
|||||||
Returns:
|
Returns:
|
||||||
x_list: a list of tensors
|
x_list: a list of tensors
|
||||||
"""
|
"""
|
||||||
|
# pyre-fixme[16]: `Tensor` has no attribute `ndim`.
|
||||||
if x.ndim != 3:
|
if x.ndim != 3:
|
||||||
raise ValueError("Supports only 3-dimensional input tensors")
|
raise ValueError("Supports only 3-dimensional input tensors")
|
||||||
x_list = list(x.unbind(0))
|
x_list = list(x.unbind(0))
|
||||||
@ -145,6 +147,7 @@ def packed_to_list(x: torch.Tensor, split_size: Union[list, int]):
|
|||||||
Returns:
|
Returns:
|
||||||
x_list: A list of Tensors
|
x_list: A list of Tensors
|
||||||
"""
|
"""
|
||||||
|
# pyre-fixme[16]: `Tensor` has no attribute `split`.
|
||||||
return x.split(split_size, dim=0)
|
return x.split(split_size, dim=0)
|
||||||
|
|
||||||
|
|
||||||
@ -174,6 +177,7 @@ def padded_to_packed(
|
|||||||
Returns:
|
Returns:
|
||||||
x_packed: a packed tensor.
|
x_packed: a packed tensor.
|
||||||
"""
|
"""
|
||||||
|
# pyre-fixme[16]: `Tensor` has no attribute `ndim`.
|
||||||
if x.ndim != 3:
|
if x.ndim != 3:
|
||||||
raise ValueError("Supports only 3-dimensional input tensors")
|
raise ValueError("Supports only 3-dimensional input tensors")
|
||||||
|
|
||||||
@ -189,15 +193,19 @@ def padded_to_packed(
|
|||||||
|
|
||||||
# Convert to packed using pad value
|
# Convert to packed using pad value
|
||||||
if pad_value is not None:
|
if pad_value is not None:
|
||||||
|
# pyre-fixme[16]: `ByteTensor` has no attribute `any`.
|
||||||
mask = x_packed.ne(pad_value).any(-1)
|
mask = x_packed.ne(pad_value).any(-1)
|
||||||
x_packed = x_packed[mask]
|
x_packed = x_packed[mask]
|
||||||
return x_packed
|
return x_packed
|
||||||
|
|
||||||
# Convert to packed using split sizes
|
# Convert to packed using split sizes
|
||||||
|
# pyre-fixme[6]: Expected `Sized` for 1st param but got `Union[None,
|
||||||
|
# List[typing.Any], typing.Tuple[typing.Any, ...]]`.
|
||||||
N = len(split_size)
|
N = len(split_size)
|
||||||
if x.shape[0] != N:
|
if x.shape[0] != N:
|
||||||
raise ValueError("Split size must be of same length as inputs first dimension")
|
raise ValueError("Split size must be of same length as inputs first dimension")
|
||||||
|
|
||||||
|
# pyre-fixme[16]: `None` has no attribute `__iter__`.
|
||||||
if not all(isinstance(i, int) for i in split_size):
|
if not all(isinstance(i, int) for i in split_size):
|
||||||
raise ValueError(
|
raise ValueError(
|
||||||
"Support only 1-dimensional unbinded tensor. \
|
"Support only 1-dimensional unbinded tensor. \
|
||||||
@ -207,6 +215,8 @@ def padded_to_packed(
|
|||||||
padded_to_packed_idx = torch.cat(
|
padded_to_packed_idx = torch.cat(
|
||||||
[
|
[
|
||||||
torch.arange(v, dtype=torch.int64, device=x.device) + i * M
|
torch.arange(v, dtype=torch.int64, device=x.device) + i * M
|
||||||
|
# pyre-fixme[6]: Expected `Iterable[Variable[_T]]` for 1st param but got
|
||||||
|
# `Union[None, List[typing.Any], typing.Tuple[typing.Any, ...]]`.
|
||||||
for (i, v) in enumerate(split_size)
|
for (i, v) in enumerate(split_size)
|
||||||
],
|
],
|
||||||
dim=0,
|
dim=0,
|
||||||
|
@ -77,6 +77,7 @@ def so3_rotation_angle(R, eps: float = 1e-4, cos_angle: bool = False):
|
|||||||
if cos_angle:
|
if cos_angle:
|
||||||
return phi
|
return phi
|
||||||
else:
|
else:
|
||||||
|
# pyre-fixme[16]: `float` has no attribute `acos`.
|
||||||
return phi.acos()
|
return phi.acos()
|
||||||
|
|
||||||
|
|
||||||
@ -118,6 +119,7 @@ def so3_exponential_map(log_rot, eps: float = 0.0001):
|
|||||||
skews = hat(log_rot)
|
skews = hat(log_rot)
|
||||||
|
|
||||||
R = (
|
R = (
|
||||||
|
# pyre-fixme[16]: `float` has no attribute `__getitem__`.
|
||||||
fac1[:, None, None] * skews
|
fac1[:, None, None] * skews
|
||||||
+ fac2[:, None, None] * torch.bmm(skews, skews)
|
+ fac2[:, None, None] * torch.bmm(skews, skews)
|
||||||
+ torch.eye(3, dtype=log_rot.dtype, device=log_rot.device)[None]
|
+ torch.eye(3, dtype=log_rot.dtype, device=log_rot.device)[None]
|
||||||
|
@ -155,6 +155,7 @@ class Transform3d:
|
|||||||
if matrix is None:
|
if matrix is None:
|
||||||
self._matrix = torch.eye(4, dtype=dtype, device=device).view(1, 4, 4)
|
self._matrix = torch.eye(4, dtype=dtype, device=device).view(1, 4, 4)
|
||||||
else:
|
else:
|
||||||
|
# pyre-fixme[16]: `Tensor` has no attribute `ndim`.
|
||||||
if matrix.ndim not in (2, 3):
|
if matrix.ndim not in (2, 3):
|
||||||
raise ValueError('"matrix" has to be a 2- or a 3-dimensional tensor.')
|
raise ValueError('"matrix" has to be a 2- or a 3-dimensional tensor.')
|
||||||
if matrix.shape[-2] != 4 or matrix.shape[-1] != 4:
|
if matrix.shape[-2] != 4 or matrix.shape[-1] != 4:
|
||||||
|
Loading…
x
Reference in New Issue
Block a user