1. 21 Jun, 2021 5 commits
    • Jeremy Reizenstein's avatar
      Fix save_ply with noncontiguous faces · 354a1808
      Jeremy Reizenstein authored
      Summary: As noted in #710, save_ply was failing with some values of the faces tensor. It was assuming the faces were contiguous in using view() to change them. Here we avoid doing that.
      
      Reviewed By: patricklabatut
      
      Differential Revision: D29159655
      
      fbshipit-source-id: 47214a7ce915bab8d81f109c2b97cde464fd57d8
      354a1808
    • David Novotny's avatar
      Conversion from OpenCV cameras · 8006842f
      David Novotny authored
      Summary: Implements a conversion function between OpenCV and PyTorch3D cameras.
      
      Reviewed By: patricklabatut
      
      Differential Revision: D28992470
      
      fbshipit-source-id: dbcc9f213ec293c2f6938261c704aea09aad3c90
      8006842f
    • David Novotny's avatar
      SE3 exponential and logarithm maps. · b2ac2655
      David Novotny authored
      Summary:
      Implements the SE3 logarithm and exponential maps.
      (this is a second part of the split of D23326429)
      
      Outputs of `bm_se3`:
      ```
      Benchmark         Avg Time(μs)      Peak Time(μs) Iterations
      --------------------------------------------------------------------------------
      SE3_EXP_1                738             885            678
      SE3_EXP_10               717             877            698
      SE3_EXP_100              718             847            697
      SE3_EXP_1000             729            1181            686
      --------------------------------------------------------------------------------
      
      Benchmark          Avg Time(μs)      Peak Time(μs) Iterations
      --------------------------------------------------------------------------------
      SE3_LOG_1               1451            2267            345
      SE3_LOG_10              2185            2453            229
      SE3_LOG_100             2217            2448            226
      SE3_LOG_1000            2455            2599            204
      --------------------------------------------------------------------------------
      ```
      
      Reviewed By: patricklabatut
      
      Differential Revision: D27852557
      
      fbshipit-source-id: e42ccc9cfffe780e9cad24129de15624ae818472
      b2ac2655
    • David Novotny's avatar
      SO3 improvements for stable gradients. · 9f14e82b
      David Novotny authored
      Summary:
      Improves so3 functions to make gradient computation stable:
      - Instead of `torch.acos`, uses `acos_linear_extrapolation` which has finite gradients of reasonable magnitude for all inputs.
      - Adds tests for the latter.
      
      The tests of the finiteness of the gradient in `test_so3_exp_singularity`, `test_so3_exp_singularity`, `test_so3_cos_bound` would fail if the `so3` functions would call `torch.acos` instead of `acos_linear_extrapolation`.
      
      Reviewed By: bottler
      
      Differential Revision: D23326429
      
      fbshipit-source-id: dc296abf2ae3ddfb3942c8146621491a9cb740ee
      9f14e82b
    • David Novotny's avatar
      Linearly extrapolated acos. · dd45123f
      David Novotny authored
      Summary:
      Implements a backprop-safe version of `torch.acos` that linearly extrapolates the function outside bounds.
      
      Below is a plot of the extrapolated acos for different bounds:
      {F611339485}
      
      Reviewed By: bottler, nikhilaravi
      
      Differential Revision: D27945714
      
      fbshipit-source-id: fa2e2385b56d6fe534338d5192447c4a3aec540c
      dd45123f
  2. 18 Jun, 2021 4 commits
  3. 17 Jun, 2021 1 commit
    • Patrick Labatut's avatar
      Increase code coverage of shader · a8610e9d
      Patrick Labatut authored
      Summary: Increase code coverage of shader and re-include them in code coverage test
      
      Reviewed By: nikhilaravi
      
      Differential Revision: D29097503
      
      fbshipit-source-id: 2791989ee1562cfa193f3addea0ce72d6840614a
      a8610e9d
  4. 15 Jun, 2021 1 commit
    • Nikhila Ravi's avatar
      Bug fix in rendering clipped meshes · c75ca04c
      Nikhila Ravi authored
      Summary:
      There was a bug when `z_clip_value` is not None but there are no faces which are actually visible in the image due to culling.  In `rasterize_meshes.py` a function `convert_clipped_rasterization_to_original_faces` is called to convert the clipped face indices etc back to the unclipped versions, but the case where there is no clipping was not handled correctly.
      
      Fixes Github Issue #632
      
      Reviewed By: bottler
      
      Differential Revision: D29116150
      
      fbshipit-source-id: fae82a0b4848c84b3ed7c7b04ef5c9848352cf5c
      c75ca04c
  5. 14 Jun, 2021 3 commits
    • Nikhila Ravi's avatar
      Lighting broadcasting bug fix · bc8361fa
      Nikhila Ravi authored
      Summary: Fixed multiple issues with shape broadcasting in lighting, shading and blending and updated the tests.
      
      Reviewed By: bottler
      
      Differential Revision: D28997941
      
      fbshipit-source-id: d3ef93f979344076b1d9098a86178b4da63844c8
      bc8361fa
    • Jeremy Reizenstein's avatar
      PyTorch 1.8 builds · 9de627e0
      Jeremy Reizenstein authored
      Summary: Nightly builds to support PyTorch 1.8.0 and PyTorch 1.8.1.
      
      Reviewed By: patricklabatut
      
      Differential Revision: D29098081
      
      fbshipit-source-id: fc6b36e919892ea41979a03e64a6fc8003528b78
      9de627e0
    • Patrick Labatut's avatar
      Increase code coverage of subdivide_meshes · 780e2315
      Patrick Labatut authored
      Summary: Increase code coverage of subdivide_meshes and re-include it in code coverage test
      
      Reviewed By: bottler
      
      Differential Revision: D29097476
      
      fbshipit-source-id: 3403ae38a90c4b53f24188eed11faae202a235b5
      780e2315
  6. 11 Jun, 2021 3 commits
    • Nikhila Ravi's avatar
      Culling to frustrum bug fix · a0f79318
      Nikhila Ravi authored
      Summary:
      When `z_clip_value = None` and faces are outside the view frustum the shape of one of the tensors in `clip.py` is incorrect.
      
      `faces_num_clipped_verts` should be (F,) but it was (F,3).  Added a new test to ensure this case is handled.
      
      Reviewed By: bottler
      
      Differential Revision: D29051282
      
      fbshipit-source-id: 5f4172ba4d4a75d928404dde9abf48aef18c68bd
      a0f79318
    • Nikhila Ravi's avatar
      textures dimension check · ef162539
      Nikhila Ravi authored
      Summary:
      When textures are set on `Meshes` we need to check if the dimensions actually match that of the verts/faces in the mesh. There was a github issue where someone tried to set the attribute after construction of the `Meshes` object and ran into an error when trying to sample textures.
      
      The desired usage is to initialize the class with the textures (not set an attribute afterwards) but in any case we need to check the dimensions match before sampling textures.
      
      Reviewed By: bottler
      
      Differential Revision: D29020249
      
      fbshipit-source-id: 9fb8a5368b83c9ec53652df92b96fc8b2613f591
      ef162539
    • Patrick Labatut's avatar
      Omit specific code from code coverage · 1cd14364
      Patrick Labatut authored
      Summary: Omit specific code from code coverage computation. This is done to make code coverage test pass again. Test coverage for shader.py and subdivide_meshes.py will be increased in later diffs to re-include them.
      
      Reviewed By: bottler
      
      Differential Revision: D29061105
      
      fbshipit-source-id: addac35a216c96de9f559e2d8fe42496adc85791
      1cd14364
  7. 10 Jun, 2021 1 commit
  8. 09 Jun, 2021 10 commits
    • Patrick Labatut's avatar
      Make Transform3d.to() not ignore dtype · 44508ed0
      Patrick Labatut authored
      Summary: Make Transform3d.to() not ignore a different dtype when device is the same and no copy is requested. Fix other methods where dtype is ignored.
      
      Reviewed By: nikhilaravi
      
      Differential Revision: D28981171
      
      fbshipit-source-id: 4528e6092f4a693aecbe8131ede985fca84e84cf
      44508ed0
    • Patrick Labatut's avatar
      Fix type annotations for device type · 626bf3fe
      Patrick Labatut authored
      Summary: Fix type annotations for device type
      
      Reviewed By: nikhilaravi
      
      Differential Revision: D28971179
      
      fbshipit-source-id: 410b673c76dfd65ac51b2d144f17ed86a04a3058
      626bf3fe
    • Patrick Labatut's avatar
      Tidy uses of torch.device in Volumes · 1f9661e1
      Patrick Labatut authored
      Summary:
      Tidy uses of `torch.device` in `Volumes`:
      - Allow `str` or `torch.device` in `Volumes.to()` method
      - Consistently use `torch.device` for internal type
      - Fix comparison of devices
      
      Reviewed By: nikhilaravi
      
      Differential Revision: D28970876
      
      fbshipit-source-id: c640cc22ced684a54cc450ac38a0f4b3435d47be
      1f9661e1
    • Patrick Labatut's avatar
      Tidy uses of torch.device in Pointclouds · 1db40ac5
      Patrick Labatut authored
      Summary:
      Tidy uses of `torch.device` in `Pointclouds`:
      - Allow `str` or `torch.device` in `Pointclouds.to()` method
      - Consistently use `torch.device` for internal type
      - Fix comparison of devices
      
      Reviewed By: nikhilaravi
      
      Differential Revision: D28970221
      
      fbshipit-source-id: 3ca7104d4c0d9b20b0cff4f00e3ce931c5f1528a
      1db40ac5
    • Patrick Labatut's avatar
      Tidy uses of torch.device in Meshes · 633d66f1
      Patrick Labatut authored
      Summary:
      Tidy uses of `torch.device` in `Meshes`:
      - Allow `str` or `torch.device` in `Meshes.to()` method
      - Consistently use `torch.device` for internal type
      - Fix comparison of devices
      
      Reviewed By: nikhilaravi
      
      Differential Revision: D28969461
      
      fbshipit-source-id: 16d3c1f5458954bb11fdf0efea88542e94dccd7a
      633d66f1
    • Patrick Labatut's avatar
      Tidy uses of torch.device in Transform3d · 13a0110b
      Patrick Labatut authored
      Summary:
      Tidy uses of `torch.device` in `Transforms3d`:
      - Allow `str` or `torch.device` in user-facing methods
      - Consistently use `torch.device` for internal types
      - Fix comparison of devices
      
      Reviewed By: nikhilaravi
      
      Differential Revision: D28929486
      
      fbshipit-source-id: bd1d6cc7ede3d8fd549fd3224a9b07eec53f8164
      13a0110b
    • Patrick Labatut's avatar
      Introduce device type and utility functions · 48faf8eb
      Patrick Labatut authored
      Summary: Introduce device type and utility functions in common types module
      
      Reviewed By: nikhilaravi
      
      Differential Revision: D28970930
      
      fbshipit-source-id: 191ec07390ed66a958c23eb2b43229312492e0b7
      48faf8eb
    • Patrick Labatut's avatar
      Add missing dtype parameter type annotations · 07da36d4
      Patrick Labatut authored
      Summary: Add missing dtype parameter type annotations
      
      Reviewed By: nikhilaravi
      
      Differential Revision: D28943370
      
      fbshipit-source-id: 2a411d78895f3f3aa9ab0e4807c17a13e7f25caf
      07da36d4
    • Patrick Labatut's avatar
      Improve volumes type annotations · 02650672
      Patrick Labatut authored
      Summary: Improve type annotations for volumes and remove a few pyre fixmes
      
      Reviewed By: nikhilaravi
      
      Differential Revision: D28943371
      
      fbshipit-source-id: ca2b7a50d72a392910e65cee5e564f34523414d2
      02650672
    • Nikhila Ravi's avatar
      Alpha channel to return the mask · a15c33a3
      Nikhila Ravi authored
      Summary: Updated the alpha channel in the `hard_rgb_blend` function to return the mask of the pixels which have overlapping mesh faces.
      
      Reviewed By: bottler
      
      Differential Revision: D29001604
      
      fbshipit-source-id: 22a2173d769f2d3ad34892d68ceb628f073bca22
      a15c33a3
  9. 08 Jun, 2021 5 commits
    • Pyre Bot Jr's avatar
      suppress errors in `fbcode/vision` - batch 2 · ac6c07fa
      Pyre Bot Jr authored
      Differential Revision: D28962863
      
      fbshipit-source-id: 7acc8e2f08ea7a94294647431561ff2cfd52a97d
      ac6c07fa
    • Jeremy Reizenstein's avatar
      NeRF training: avoid caching unused visualization data. · f00ef667
      Jeremy Reizenstein authored
      Summary: If we are not visualizing the training with visdom, then there are a couple of outputs of the coarse rendering step which are not small and are returned by the renderer but never used. We don't need to bother transferring them to the CPU.
      
      Reviewed By: nikhilaravi
      
      Differential Revision: D28939958
      
      fbshipit-source-id: 7e0d6681d6524f7fb57b6b20164580006120de80
      f00ef667
    • Jeremy Reizenstein's avatar
      cuda 11 problems with test_normal_consistency · 7204a4ca
      Jeremy Reizenstein authored
      Summary:
      One test hits problems with CUDA 11.1 and pytorch 1.8. This seems to be a known bug, so we just run that test on the cpu in the problematic cases.
      
      Note - the full test run is much slower with cuda 11.1 than 10.2, but this is known.
      
      Reviewed By: patricklabatut
      
      Differential Revision: D28938933
      
      fbshipit-source-id: cf8ed84cd10a0b52d8f4292edbef7bd4844fea65
      7204a4ca
    • Patrick Labatut's avatar
      Improve textures type annotations · c710d8c1
      Patrick Labatut authored
      Summary: Improve type annotations for textures and remove a few pyre fixmes
      
      Reviewed By: nikhilaravi
      
      Differential Revision: D28942630
      
      fbshipit-source-id: 422f2bdf07b435869461ca103d71473aa0c2b814
      c710d8c1
    • Patrick Labatut's avatar
      Remove explicit inheritance from object · d76c0072
      Patrick Labatut authored
      Summary:
      All classes implicitly inherit from `object` since Python 3, so remove unnecessary explicit inheritance.
      
      From the [official documentation](https://docs.python.org/3/library/functions.html#object):
      
      > `object` is a base for all classes.
      
      Reviewed By: nikhilaravi
      
      Differential Revision: D28942595
      
      fbshipit-source-id: 466c0d19d8a93a6263e7ad734c3e87160cfa6066
      d76c0072
  10. 07 Jun, 2021 1 commit
    • Patrick Labatut's avatar
      Remove extra pyre fixmes · f14c0236
      Patrick Labatut authored
      Summary: Remove extra pyre fixmes
      
      Reviewed By: bottler
      
      Differential Revision: D28929468
      
      fbshipit-source-id: 175b7986d49b56de7af063e97a9b0423570f9093
      f14c0236
  11. 04 Jun, 2021 2 commits
  12. 02 Jun, 2021 4 commits
    • Ben Ahlbrand's avatar
      fix: renderer.look_at_view_transform args docs updated (#693) · 7fd7de44
      Ben Ahlbrand authored
      Summary:
      Caught a silly typo in the docs, figured I'd send in a PR. Thanks for sharing your work!
      
      Pull Request resolved: https://github.com/facebookresearch/pytorch3d/pull/693
      
      Reviewed By: bottler
      
      Differential Revision: D28837851
      
      Pulled By: patricklabatut
      
      fbshipit-source-id: c326189007c3537429a8aa2a3b2850d60b74b16d
      7fd7de44
    • Jeremy Reizenstein's avatar
      cuda streams for color/density in NeRF · 280fed3c
      Jeremy Reizenstein authored
      Summary:
      Inside the implicit function, the color and density calculations are independent and time is saved by putting them on separate streams.
      
      (In fact, colors is slower than densities, and the raymarcher does some calculation with the densities before the colors. So theoretically we could go further and not join the streams together until the colors are actually needed. The code would be more complicated. But the profile suggests that the raymarcher is quick and so this wouldn't be expected to make a big difference.)
      
      In inference, this might increase memory usage, so it isn't an obvious win. That is why I have added a flag.
      
      Reviewed By: nikhilaravi
      
      Differential Revision: D28648549
      
      fbshipit-source-id: c087de80d8ccfce1dad3a13e71df2f305a36952e
      280fed3c
    • Jeremy Reizenstein's avatar
      Let harmonic embedding layer include input (NeRF) · f63e49d2
      Jeremy Reizenstein authored
      Summary: When harmonic embedding is used, we always cat its input onto its output before proceeding. Avoid an intermediate tensor by making the module do that for itself.
      
      Reviewed By: davnov134
      
      Differential Revision: D28185791
      
      fbshipit-source-id: 98d92c94a918dd42e16cdadcaac71dabbc7de5c3
      f63e49d2
    • Jeremy Reizenstein's avatar
      LinearWithRepeat layer for NeRF · ab73f8c3
      Jeremy Reizenstein authored
      Summary:
      Add custom layer to avoid repeating copied data for every ray position.
      
      This should also save time in the backward pass because there are fewer multiplies with the weights.
      
      Reviewed By: theschnitz
      
      Differential Revision: D28382412
      
      fbshipit-source-id: 1ba7356cd8520ebd598568ae503e47d31d3989eb
      ab73f8c3