270 Commits

Author SHA1 Message Date
Nikhila Ravi
4cfac7c79c Add images for new tutorials
Summary: Added images for four tutorials to add to the README.

Reviewed By: gkioxari

Differential Revision: D24411993

fbshipit-source-id: 5f0b2256efb156b5956013c26b8ddb1631bd1c46
2020-10-20 09:14:11 -07:00
Jeremy Reizenstein
30e4e891db linter comment strictnesss
Summary: The linter has become stricter about the indenting of comments and docstrings. This was accompanied by a codemod. In a few places we can fix the problem nicer than the codemod has.

Reviewed By: gkioxari

Differential Revision: D24363880

fbshipit-source-id: 4cff3bbe3d2a834bc92a490469a2b24fa376e6ab
2020-10-18 02:38:59 -07:00
Nikhila Ravi
563d441b00 multigpu mesh rendering fixes
Summary:
Small fix and updated tests for multigpu rendering case.

This resolves the issue seen in: https://github.com/facebookresearch/pytorch3d/issues/401

Reviewed By: gkioxari

Differential Revision: D24314681

fbshipit-source-id: 84c5a5359844c77518b48044001daa9a86f3c43a
2020-10-16 09:01:52 -07:00
Jeremy Reizenstein
4d52f9fb8b matrix_to_quaternion corner case
Summary: Issue #119. The function `sqrt(max(x, 0))` is not convex and has infinite gradient at 0, but 0 is a subgradient at 0. Here we implement it in such a way as to give 0 as the gradient.

Reviewed By: gkioxari

Differential Revision: D24306294

fbshipit-source-id: 48d136faca083babad4d64970be7ea522dbe9e09
2020-10-15 03:21:40 -07:00
John Reese
2d39723610 apply black 20.8b1 formatting update
Summary:
allow-large-files

black_any_style

Reviewed By: zertosh

Differential Revision: D24325133

fbshipit-source-id: b4afe80d1e8b2bc993f4b8e3822c02964df47462
2020-10-14 20:22:09 -07:00
Albhox
11a9f5ea30 typos (#386)
Summary: Pull Request resolved: https://github.com/facebookresearch/pytorch3d/pull/386

Reviewed By: gkioxari

Differential Revision: D24220501

Pulled By: nikhilaravi

fbshipit-source-id: 5bb0014b46a89fde52c9aaccba0e3ba6d485430f
2020-10-12 09:52:18 -07:00
Jeremy Reizenstein
8a9d20151d Avoid contextlib.nullcontext for Python 3.6 compatibility
Summary: As mentioned in a comment on https://github.com/facebookresearch/pytorch3d/issues/77, we can't use this function in Python 3.6. It's easy to write our own version.

Reviewed By: gkioxari

Differential Revision: D24249915

fbshipit-source-id: 4c70a3efb03daa115041d082e616511297eab8fa
2020-10-12 09:47:44 -07:00
Nikhila Ravi
f5383a7e5a Fix texture atlas for objs which only have material properties
Summary:
Fix for GitHub issue #381.

The example mesh provided in the issue only had material properties but no texture image. The current implementation of texture atlassing generated an atlas using both the material properties and the texture image but only worked if there was a texture image and associated vertex uv coordinates. I have now modified the texture atlas creation so that it doesn't require an image and can work with materials which only have material properties.

Reviewed By: gkioxari

Differential Revision: D24153068

fbshipit-source-id: 63e9d325db09a84b336b83369d5342ce588a9932
2020-10-07 12:54:01 -07:00
Amitav Baruah
5d65a0cf8c Rename visualization to vis
Summary: Importing from pytorch3d.visualization is wordy, so shortened the path to the vis module and updated the relevant imports.

Reviewed By: nikhilaravi

Differential Revision: D24116527

fbshipit-source-id: e0e4da7d48c5afedec07482d7be43362b6822445
2020-10-06 15:55:05 -07:00
Georgia Gkioxari
e651a4299c add texture vertex sampling functionality to textures
Summary: Enhance every texture type with `faces_verts_textures_packed` that allows users to query the texture of each vertex in mesh

Reviewed By: nikhilaravi

Differential Revision: D24058778

fbshipit-source-id: 19d0e3a244fa96aae462c47bf52e07dfd3b7c6f0
2020-10-06 10:44:33 -07:00
Georgia Gkioxari
327bd2b976 extend sample_points_from_meshes with texture
Summary:
Enhanced `sample_points_from_meshes` with texture sampling

* This new feature is used to return textures corresponding to the sampled points in `sample_points_from_meshes`

Reviewed By: nikhilaravi

Differential Revision: D24031525

fbshipit-source-id: 8e5d8f784cc38aa391aa8e84e54423bd9fad7ad1
2020-10-06 09:17:58 -07:00
Amitav Baruah
5c9485c7be Add note explaining plotly visualizations
Summary: Add markdown note explaining why PyTorch3D has plotly visualizations, examples, and how to save these visualizations as an image.

Reviewed By: nikhilaravi

Differential Revision: D23976283

fbshipit-source-id: cbbaffd1f0ebe3466841e42fdb454d85773152cd
2020-10-01 16:49:19 -07:00
Amitav Baruah
a03fd7320f Add plotly visualization examples
Summary: Add examples of using the Plotly visualization functions to the corresponding tutorial notebooks.

Reviewed By: nikhilaravi

Differential Revision: D23879109

fbshipit-source-id: ea8c45aa6c828eb2f6ea2ae1c8846adc486f92e0
2020-10-01 16:49:19 -07:00
Amitav Baruah
8f1e9e1f06 Plotly figure for visualizing pointclouds
Summary:
Visualize a pointcloud in plotly.
- customize lighting and light position
- customizable axis arguments
- customizable height and width of plotly figure
- render batches in subplots or the same plot

Reviewed By: nikhilaravi

Differential Revision: D23872391

fbshipit-source-id: 9b1e1fd417500521be9d0eb85d71c77a538fa77c
2020-10-01 16:49:19 -07:00
Amitav Baruah
8b6310359f plotly figure for visualizing a mesh
Summary:
Visualize a mesh in a plotly figure.
- customize lighting and light position
- customizable axis arguments (x, y, z)
- customizable height and width of plotly figure
- render batches of meshes in subplots or in a singular plot

Reviewed By: nikhilaravi

Differential Revision: D22611960

fbshipit-source-id: 5dc5c55e599d5b0d9c38f22e156c662654099e11
2020-10-01 16:49:19 -07:00
Patrick Labatut
8219a52ccc Fix a few linting warnings
Summary: Fix a few linting warnings

Reviewed By: nikhilaravi

Differential Revision: D20720810

fbshipit-source-id: c5b6a25fdd7971cc8743b54bbe162464a874071d
2020-10-01 02:39:27 -07:00
Eduardo Henrique Arnold
4f8a2f1979 Fixing look_at_view_transform documentation, azim angle definition was incorrect (#251)
Summary:
…between the projection on the y=0 plane and reference vector (0,0,1).

Fixes https://github.com/facebookresearch/pytorch3d/issues/229

Pull Request resolved: https://github.com/facebookresearch/pytorch3d/pull/251

Reviewed By: gkioxari

Differential Revision: D23967073

Pulled By: nikhilaravi

fbshipit-source-id: fb6f10d4b7f5e319d17e28b4316837205b637f5e
2020-09-29 09:47:09 -07:00
generatedunixname89002005307016
d902a96ca2 suppress errors in vision - batch 1
Differential Revision: D23970214

fbshipit-source-id: b6a328f53178304b36556b5cf96584467a7d2ce4
2020-09-28 13:33:20 -07:00
Nikhila Ravi
e5ac38aa87 fix docs for FOVPerspectiveCamera
Summary: Small documentation fix for FOVPerspectiveCamera. The error pointed out in the GitHub issue was due to the docs referring to the OpenGL z parameterization from [-1, 1] whereas we use the [0, 1] range.

Reviewed By: gkioxari

Differential Revision: D23857312

fbshipit-source-id: 2d20677ec614c935e76f67e100a41a23df708d59
2020-09-23 17:28:15 -07:00
Nikhila Ravi
956d3a010c Support for moving the renderer to a new device
Summary:
Support for moving all the tensors of the renderer to another device by calling `renderer.to(new_device)`

Currently the `MeshRenderer`, `MeshRasterizer` and `SoftPhongShader` (and other shaders) are all of type `nn.Module` which already supports easily moving tensors of submodules (defined as class attributes) to a different device. However the class attributes of the rasterizer and shader (e.g. cameras, lights, materials), are of type `TensorProperties`, not nn.Module so we need to explicity create a `to` method to move these tensors to device. Note that the `TensorProperties` class already has a `to` method so we only need to call `cameras.to(device)` and don't need to worry about the internal tensors.

The other option is of course making these other classes (cameras, lights etc) also of type nn.Module.

Reviewed By: gkioxari

Differential Revision: D23885107

fbshipit-source-id: d71565c442181f739de4d797076ed5d00fb67f8e
2020-09-23 17:13:07 -07:00
andrijazz
b1eee579fd resouces filenames with spaces (#358)
Summary:
I'm constantly encountering 3D models with resources that have spaces in their filenames (especially on Windows) and therefore they can't be loaded in pytorch3d. Let me know what you think.

Thanks

Pull Request resolved: https://github.com/facebookresearch/pytorch3d/pull/358

Reviewed By: bottler

Differential Revision: D23798492

Pulled By: nikhilaravi

fbshipit-source-id: 4d85b7ee05339486d2e5ef53a531f8e6052251c5
2020-09-23 12:12:20 -07:00
Nikhila Ravi
93d3d8feda Tidy OBJ / MTL parsing
Summary: Tidy OBJ / MTL parsing: remove redundant calls to tokenize, factor out parsing and texture loading

Reviewed By: gkioxari

Differential Revision: D20720768

fbshipit-source-id: fb1713106d4ff99a4a9147afcc3da74ae013d8dc
2020-09-23 12:12:20 -07:00
Jeremy Reizenstein
f4f2977006 update xcode CI config to 9.4.1
Summary: This addresses #375. Change circleci mac version to 9.4.1 just like torchvision did in https://github.com/pytorch/vision/issues/2629 .

Reviewed By: gkioxari

Differential Revision: D23866112

fbshipit-source-id: c5019618bcb7da8f950123fee201beaad55fecab
2020-09-23 12:06:48 -07:00
Amitav Baruah
f34f4073f0 Add tutorial notebook for rendering densepose
Summary:
Add a notebook demonstrating how to use Pytorch3D to render a textured mesh with the DensePose textures and the SMPL model

{F336408690}

Reviewed By: nikhilaravi

Differential Revision: D23784314

fbshipit-source-id: c92f32fb9b9468eb7ec26bf58dcabb1f26d92e7b
2020-09-21 11:42:26 -07:00
Jeremy Reizenstein
ea0e762c36 Fix TexturesUV doc
Summary: Fix map size in the comment.

Reviewed By: gkioxari

Differential Revision: D23813431

fbshipit-source-id: e0777beadd7473014c1b79ad9f850d10f3549599
2020-09-21 11:39:35 -07:00
Jeremy Reizenstein
197f1d6217 save_ply binary
Summary:
Make save_ply save to binary instead of ascii. An option makes the previous functionality available. save_ply's API accepts a stream, but this is undocumented; that stream must now be a binary stream not a text stream.

Avoiding warnings about making tensors from immutable numpy arrays.

Possible performance improvement when reading binary files.

Fix reading zero-length binary lists.

Reviewed By: nikhilaravi

Differential Revision: D22333118

fbshipit-source-id: b423dfd3da46e047bead200255f47a7707306811
2020-09-21 05:16:31 -07:00
Nikhila Ravi
ebe2693b11 Support variable size radius for points in rasterizer
Summary:
Support variable size pointclouds in the renderer API to allow compatibility with Pulsar rasterizer.

If radius is provided as a float, it is converted to a tensor of shape (P). Otherwise radius is expected to be an (N, P_padded) dimensional tensor where P_padded is the max number of points in the batch (following the convention from pulsar: https://our.intern.facebook.com/intern/diffusion/FBS/browse/master/fbcode/frl/gemini/pulsar/pulsar/renderer.py?commit=ee0342850210e5df441e14fd97162675c70d147c&lines=50)

Reviewed By: jcjohnson, gkioxari

Differential Revision: D21429400

fbshipit-source-id: 65de7d9cd2472b27fc29f96160c33687e88098a2
2020-09-18 18:48:18 -07:00
z003yctd
e40c2167ae fix incorrect variable naming (#362)
Summary: Pull Request resolved: https://github.com/facebookresearch/pytorch3d/pull/362

Reviewed By: bottler

Differential Revision: D23712242

Pulled By: nikhilaravi

fbshipit-source-id: 1c4184c8482049991356be7dbc9755b0c2018a1d
2020-09-17 16:50:34 -07:00
OrHayat
de77e426eb typo in docstring (#322)
Summary:
fixed small typo in update_padded function docstring.

Pull Request resolved: https://github.com/facebookresearch/pytorch3d/pull/322

Reviewed By: gkioxari

Differential Revision: D23712324

Pulled By: nikhilaravi

fbshipit-source-id: fea3b68039644b236897c6f465cbb322c5c48085
2020-09-16 16:22:28 -07:00
Amitav Baruah
61121b9f2c Add example of rendering pointclouds with a background color.
Summary:
Add cells to the rendering_colored_points tutorial showing how to initialize a renderer and compositor that will render pointclouds with a background color.

{F333731292}
{F334136799}

Reviewed By: nikhilaravi

Differential Revision: D23632503

fbshipit-source-id: e9ce0178b41e74baf912bd82ca1db41b680fc68f
2020-09-14 10:39:08 -07:00
Amitav Baruah
872ff8c796 Add background color support to compositors
Summary: Support rendering different color backgrounds for pointclouds for both compositors

Reviewed By: nikhilaravi

Differential Revision: D23611043

fbshipit-source-id: ab029650d51349340372c5bd66700e6577d48851
2020-09-14 10:39:08 -07:00
David Novotny
dc40adfa24 Bugfix: Wrong default T in SfMCameras
Summary: Fixes a bug that initializes default SfMCameras with a default _R instead of default _T

Reviewed By: gkioxari

Differential Revision: D23654583

fbshipit-source-id: ccfb7235b2fb6df5a2e402b9fb4b194e97d78dc6
2020-09-11 15:32:25 -07:00
Amitav Baruah
f2eb34dc7a Correctly create reference image silhouette
Summary: Previously the tutorial code assumed that the reference image had a black background, resulting in an empty silhouette mask. Since the background is white, this change allows the model to find the correct silhouette mask.

Reviewed By: nikhilaravi, sbranson

Differential Revision: D23502202

fbshipit-source-id: c3a570f93efd480323f27cb081db0a9fb54be219
2020-09-10 12:55:32 -07:00
Amitav Baruah
eb517dd70b Fix look_at corner case
Summary: When the camera is vertically oriented, calculating the look_at x-axis (also known as the "right" vector) does not succeed, resulting in the x-axis being placed at the origin. Adds a check to correctly calculate the x-axis if this case occurs.

Reviewed By: nikhilaravi, sbranson

Differential Revision: D23511859

fbshipit-source-id: ee5145cdbecdbe2f7c7d288588bd0899480cb327
2020-09-10 12:53:08 -07:00
Steve Branson
f8ea5906c0 Fix softmax_rgb_blend() when mesh is outside zfar
Summary:
This fixes two small issues with blending.py:softmax_rgb_blend():
  1) zfar and znear attributes are propagated from the camera settings instead of just using default settings of znear=1.0 and zfar=100.0
  2) A check is added to prevent arithmetic overflow in softmax_rgb_blend()

This is a fix in response to https://github.com/facebookresearch/pytorch3d/issues/334
where meshes rendererd using a SoftPhongShader with faces_per_pixel=1 appear black.  This only occurs when the scale of the mesh is large (vertex values > 100, where 100 is the default value of zfar).  This fix allows the caller to increase the value of cameras.zfar to match the scale of her/his mesh.

Reviewed By: nikhilaravi

Differential Revision: D23517541

fbshipit-source-id: ab8631ce9e5f2149f140b67b13eff857771b8807
2020-09-09 13:22:25 -07:00
generatedunixname89002005307016
6eb158e548 suppress errors in vision/fair/pytorch3d
Differential Revision: D23521117

fbshipit-source-id: 8e11e91aaa2a91b7ca1fa4c00a3db86ab8648f7f
2020-09-03 18:17:49 -07:00
David Novotny
316b77782e Camera alignment
Summary:
adds `corresponding_cameras_alignment` function that estimates a similarity transformation between two sets of cameras.

The function is essential for computing camera errors in SfM pipelines.

```
Benchmark                                                   Avg Time(μs)      Peak Time(μs) Iterations
--------------------------------------------------------------------------------
CORRESPONDING_CAMERAS_ALIGNMENT_10_centers_False                32219           36211             16
CORRESPONDING_CAMERAS_ALIGNMENT_10_centers_True                 32429           36063             16
CORRESPONDING_CAMERAS_ALIGNMENT_10_extrinsics_False              5548            8782             91
CORRESPONDING_CAMERAS_ALIGNMENT_10_extrinsics_True               6153            9752             82
CORRESPONDING_CAMERAS_ALIGNMENT_100_centers_False               33344           40398             16
CORRESPONDING_CAMERAS_ALIGNMENT_100_centers_True                34528           37095             15
CORRESPONDING_CAMERAS_ALIGNMENT_100_extrinsics_False             5576            7187             90
CORRESPONDING_CAMERAS_ALIGNMENT_100_extrinsics_True              6256            9166             80
CORRESPONDING_CAMERAS_ALIGNMENT_1000_centers_False              32020           37247             16
CORRESPONDING_CAMERAS_ALIGNMENT_1000_centers_True               32776           37644             16
CORRESPONDING_CAMERAS_ALIGNMENT_1000_extrinsics_False            5336            8795             94
CORRESPONDING_CAMERAS_ALIGNMENT_1000_extrinsics_True             6266            9929             80
--------------------------------------------------------------------------------
```

Reviewed By: shapovalov

Differential Revision: D22946415

fbshipit-source-id: 8caae7ee365b304d8aa1f8133cf0dd92c35bc0dd
2020-09-03 13:27:14 -07:00
Adly Templeton
14f015d8bf Add pyre typeshed information for Tensor.ndim and nn.ConvTranspose2d
Summary: Adding some appropriate methods into pyre typeshed. Removing corresponding pyre-ignore and pyre-fixme messages.

Differential Revision: D22949138

fbshipit-source-id: add8acdd4611ab698954868832594d062cd58f88
2020-09-02 06:52:30 -07:00
Jeremy Reizenstein
701bbef4f3 version number for version 0.2.5
Reviewed By: jcjohnson

Differential Revision: D23244140

fbshipit-source-id: 8f95c817637162350b61b1b0fc3d2de66087250e
v0.2.5
2020-08-27 17:15:51 -07:00
Jeremy Reizenstein
7414904c90 Installation updates for next release.
Summary: We've made some build updates.

Reviewed By: jcjohnson

Differential Revision: D23244111

fbshipit-source-id: dba6e5dc3a9d7dcb2b62094f7f7b8b5abca190d9
2020-08-27 17:15:51 -07:00
Steve Branson
46c0e83461 Change default settings of clip_barycentric_coords
Summary: When raster_settings.clip_barycentric_coords is unspecified, clip_barycentric_coords is turned on if blur_radius is greater than 0.  This matches the behavior prior to D21705503 (cc70950f40).

Reviewed By: gkioxari

Differential Revision: D23375257

fbshipit-source-id: 4b87588aabb69d4d835d4dcceb11153628121d30
2020-08-27 16:44:12 -07:00
Nikhila Ravi
c25fd83694 small website updates
Summary: Small fixes to website rendering

Reviewed By: jcjohnson

Differential Revision: D23281746

fbshipit-source-id: c9dc8edd5e52f39d4e0e19f10ecc7e035b39feda
2020-08-26 09:21:43 -07:00
Jeremy Reizenstein
9aeb88b48e tutorial fixes. validate #cameras
Summary:
Update the installation cells to import torch.
Replace use of deprecated Textures in deform tutorial.
Correct the deform tutorial's idea of its own name.
Fix typo in batched part of render_textured_meshes which meant only one mesh was being rendered with a batch of cameras.
Add an error check in the rasterizer to make the error friendly from such a mistake elsewhere.

Reviewed By: gkioxari

Differential Revision: D23345462

fbshipit-source-id: 1d5bd25db052f7ef687b7168d7aee5cc4dce8952
2020-08-26 08:27:53 -07:00
Jeremy Reizenstein
32484500be tutorial fixes from #336. Wheels with cuda10.1.
Summary:
Add a document to explain how to run the tutorials.
Fix API of TexturesVertex in fit_textured_mesh.
Prepare cuda 10.1 wheels (not 10.2) for linux to be available on pypi - this matches what colab has.
Change the tutorials to use these new wheels.

Reviewed By: gkioxari

Differential Revision: D23324479

fbshipit-source-id: 60e92a3f46a2d878f811b7703638f8d1dae143d9
2020-08-25 13:11:10 -07:00
Jeremy Reizenstein
909dc83505 amalgamate meshes with texture into a single scene
Summary:
Add a join_scene method to all the textures to allow the join_mesh function to include textures. Rename the join_mesh function to join_meshes_as_scene.

For TexturesAtlas, we now interpolate if the user attempts to have the resolution vary across the batch. This doesn't look great if the resolution is already very low.

For TexturesUV, a rectangle packing function is required, this does something simple.

Reviewed By: gkioxari

Differential Revision: D23188773

fbshipit-source-id: c013db061a04076e13e90ccc168a7913e933a9c5
2020-08-25 11:28:40 -07:00
Jeremy Reizenstein
e25ccab3d9 align_corners and padding for TexturesUV
Summary:
Allow, and make default, align_corners=True for texture maps. Allow changing the padding_mode and set the default to be "border" which produces more logical results. Some new documentation.

The previous behavior corresponds to padding_mode="zeros" and align_corners=False.

Reviewed By: gkioxari

Differential Revision: D23268775

fbshipit-source-id: 58d6229baa591baa69705bcf97471c80ba3651de
2020-08-25 11:28:40 -07:00
Eduardo Henrique Arnold
d0cec028c7 Fix look_at_view_transform when object location is not (0,0,0) (#230)
Summary:
The look_at_view_transform did not give the correct results when the object location `at` was not (0,0,0).

The problem was on computing the cameras' location in world's coordinate `C`. It only took into account the camera position from spherical angles, but ignored the object location in the world's coordinate system. I simply modified the C tensor to take into account the object's location which is not necessarily in the origin.

I ran unit tests and all but 4 failed with the same error message: `RuntimeError: CUDA error: invalid device ordinal`. However the same happens before this patch, so I believe these errors are unrelated.

Pull Request resolved: https://github.com/facebookresearch/pytorch3d/pull/230

Reviewed By: gkioxari

Differential Revision: D23278126

Pulled By: nikhilaravi

fbshipit-source-id: c06e891bc46de8222325ee7b37aa43cde44648e8
2020-08-21 23:43:47 -07:00
Nikhila Ravi
778383eef7 Texture loading and rendering in ShapeNetCore and R2N2 data loaders
Summary:
- Add support for loading textures from ShapeNet Obj files as a texture atlas.
- Support textured rendering of shapenet models

Reviewed By: gkioxari

Differential Revision: D23141143

fbshipit-source-id: 26eb81758d4cdbd6d820b072b58f5c6c08cb90bc
2020-08-21 20:42:17 -07:00
Nikhila Ravi
90f6a005b0 Tutorials textures updates and fix bug in extending meshes with uv textures
Summary:
Found a bug in extending textures with vertex uv coordinates. This was due to the padded -> list conversion of vertex uv coordinates i.e.                 The number of vertices in the mesh and in verts_uvs can differ
e.g. if a vertex is shared between 3 faces, it can
have up to 3 different uv coordinates. Therefore we cannot convert directly from padded to list using _num_verts_per_mesh

Reviewed By: bottler

Differential Revision: D23233595

fbshipit-source-id: 0c66d15baae697ead0bdc384f74c27d4c6539fc9
2020-08-21 19:20:09 -07:00
Nikhila Ravi
d330765847 Website and docs updates
Summary:
- Added sbranson's fit mesh tutorial to the website
- Updated rendering docs with info about texturing and new shader types.

TODO:
- add pointcloud rendering tutorial to the website as well (https://github.com/facebookresearch/pytorch3d/blob/master/docs/tutorials/render_colored_points.ipynb)
- docs for camera
- update some tutorials which depended on the Textures from structures.

Reviewed By: gkioxari

Differential Revision: D23143977

fbshipit-source-id: 6843c9bf3ce11115c459c64da5b0ad778dc92177
2020-08-21 19:17:16 -07:00