1. 13 Apr, 2022 2 commits
    • Tim Hatch's avatar
      apply import merging for fbcode/vision/fair (2 of 2) · 34bbb3ad
      Tim Hatch authored
      Summary:
      Applies new import merging and sorting from µsort v1.0.
      
      When merging imports, µsort will make a best-effort to move associated
      comments to match merged elements, but there are known limitations due to
      the diynamic nature of Python and developer tooling. These changes should
      not produce any dangerous runtime changes, but may require touch-ups to
      satisfy linters and other tooling.
      
      Note that µsort uses case-insensitive, lexicographical sorting, which
      results in a different ordering compared to isort. This provides a more
      consistent sorting order, matching the case-insensitive order used when
      sorting import statements by module name, and ensures that "frog", "FROG",
      and "Frog" always sort next to each other.
      
      For details on µsort's sorting and merging semantics, see the user guide:
      https://usort.readthedocs.io/en/stable/guide.html#sorting
      
      Reviewed By: bottler
      
      Differential Revision: D35553814
      
      fbshipit-source-id: be49bdb6a4c25264ff8d4db3a601f18736d17be1
      34bbb3ad
    • Jeremy Reizenstein's avatar
      make points2volumes feature rescaling optional · 78fd5af1
      Jeremy Reizenstein authored
      Summary: Add option to not rescale the features, giving more control. https://github.com/facebookresearch/pytorch3d/issues/1137
      
      Reviewed By: nikhilaravi
      
      Differential Revision: D35219577
      
      fbshipit-source-id: cbbb643b91b71bc908cedc6dac0f63f6d1355c85
      78fd5af1
  2. 11 Apr, 2022 5 commits
    • Krzysztof Chalupka's avatar
      Submesh 4/n: TexturesVertex submeshing · 22f86072
      Krzysztof Chalupka authored
      Summary: Add submeshing capability for meshes with TexturesVertex.
      
      Reviewed By: bottler
      
      Differential Revision: D35448534
      
      fbshipit-source-id: 6d16a31a5bfb24ce122cf3c300a7616bc58353d1
      22f86072
    • Krzysztof Chalupka's avatar
      Submesh 3/n: Add submeshing functionality · 050f650a
      Krzysztof Chalupka authored
      Summary:
      Copypasting the docstring:
      ```
              Split a mesh into submeshes, defined by face indices of the original Meshes object.
      
              Args:
                face_indices:
                  Let the original mesh have verts_list() of length N.
                  Can be either
                    - List of length N. The n-th element is a list of length num_submeshes_n
                      (empty lists are allowed). Each element of the n-th sublist is a LongTensor
                      of length num_faces.
                    - List of length N. The n-th element is a possibly empty padded LongTensor of
                      shape (num_submeshes_n, max_num_faces).
      
              Returns:
                Meshes object with selected submeshes. The submesh tensors are cloned.
      
              Currently submeshing only works with no textures or with the TexturesVertex texture.
      
              Example:
      
              Take a Meshes object `cubes` with 4 meshes, each a translated cube. Then:
                  * len(cubes) is 4, len(cubes.verts_list()) is 4, len(cubes.faces_list()) is 4,
                  * [cube_verts.size for cube_verts in cubes.verts_list()] is [8, 8, 8, 8],
                  * [cube_faces.size for cube_faces in cubes.faces_list()] if [6, 6, 6, 6],
      
              Now let front_facet, top_and_bottom, all_facets be LongTensors of
              sizes (2), (4), and (12), each picking up a number of facets of a cube by specifying
              the appropriate triangular faces.
      
              Then let `subcubes = cubes.submeshes([[front_facet, top_and_bottom], [], [all_facets], []])`.
                  * len(subcubes) is 3.
                  * subcubes[0] is the front facet of the cube contained in cubes[0].
                  * subcubes[1] is a mesh containing the (disconnected) top and bottom facets of cubes[0].
                  * subcubes[2] is a clone of cubes[2].
                  * There are no submeshes of cubes[1] and cubes[3] in subcubes.
                  * subcubes[0] and subcubes[1] are not watertight. subcubes[2] is.
      ```
      
      Reviewed By: bottler
      
      Differential Revision: D35440657
      
      fbshipit-source-id: 8a6d2d300ce226b5b9eb440688528b5e795195a1
      050f650a
    • Krzysztof Chalupka's avatar
      Submesh 2/n: to_sorted · 8596fcac
      Krzysztof Chalupka authored
      Summary:
      Sort a mesh's vertices in alphabetical order, and resort the face coords accordingly. Textured meshes are not supported yet, but will be added down the stack.
      
      This, togehter with mesh equality, can be used to compare two meshes in a way invariant to vertex permutations, as shown in the unit tests.
      
      We do not want the submeshing mechanism to guarantee any particular vertex order, leaving that up to the implementation, so we need this function for testing.
      
      Reviewed By: bottler
      
      Differential Revision: D35440656
      
      fbshipit-source-id: 5a4dd921fdb00625a33da08b5fea79e20ac6402c
      8596fcac
    • Krzysztof Chalupka's avatar
      Submesh 1/n: Implement mesh equality · 7f097b06
      Krzysztof Chalupka authored
      Summary: Adding a mesh equality operator. Two Meshes objects m1, m2 are equal iff their vertex lists, face lists, and normals lists are equal. Textures meshes are not supported yet, but will be added for vertex textures down the stack.
      
      Reviewed By: bottler, nikhilaravi
      
      Differential Revision: D35440655
      
      fbshipit-source-id: 69974a59c091416afdb2892896859a189f5ebf3a
      7f097b06
    • Krzysztof Chalupka's avatar
      Submesh 0/n: Default to empty Meshes · aab95575
      Krzysztof Chalupka authored
      Summary:
      The default behavior of Meshes (with verts=None, faces=None) throws an exception:
      ```
      meshes = Meshes()
      > ValueError: Verts and Faces must be either a list or a tensor with shape (batch_size, N, 3) where N is either the maximum number of verts or faces respectively.
      ```
      
      Instead, let's default to an empty mesh, following e.g. PyTorch:
      ```
      empty_tensor = torch.FloatTensor()
      > torch.tensor([])
      ```
      
      this change is backwards-compatible (you can still init with verts=[], faces=[]).
      
      Reviewed By: bottler, nikhilaravi
      
      Differential Revision: D35443453
      
      fbshipit-source-id: d638a8fef49a089bf0da6dd2201727b94ceb21ec
      aab95575
  3. 10 Apr, 2022 1 commit
    • Georgia Gkioxari's avatar
      add L1 support for KNN & Chamfer · 67fff956
      Georgia Gkioxari authored
      Summary:
      Added L1 norm for KNN and chamfer op
      * The norm is now specified with a variable `norm` which can only be 1 or 2
      
      Reviewed By: bottler
      
      Differential Revision: D35419637
      
      fbshipit-source-id: 77813fec650b30c28342af90d5ed02c89133e136
      67fff956
  4. 06 Apr, 2022 2 commits
  5. 04 Apr, 2022 4 commits
    • Jeremy Reizenstein's avatar
      store original declared types in Configurable · 3b8a33e9
      Jeremy Reizenstein authored
      Summary: Aid reflection by adding the original declared types of replaced members of a configurable as values in _processed_members.
      
      Reviewed By: davnov134
      
      Differential Revision: D35358422
      
      fbshipit-source-id: 80ef3266144c51c1c2105f349e0dd3464e230429
      3b8a33e9
    • Jeremy Reizenstein's avatar
      logging · 199309fc
      Jeremy Reizenstein authored
      Summary: Use logging instead of printing in the internals of implicitron.
      
      Reviewed By: davnov134
      
      Differential Revision: D35247581
      
      fbshipit-source-id: be5ddad5efe1409adbae0575d35ade6112b3be63
      199309fc
    • Jeremy Reizenstein's avatar
      avoid visdom import in tests · 6473aa31
      Jeremy Reizenstein authored
      Summary: This might make the implicitron tests work better on RE.
      
      Reviewed By: davnov134
      
      Differential Revision: D35283131
      
      fbshipit-source-id: 4dda9684f632ab6e9cebcbf1e6e4a8243ec00c85
      6473aa31
    • Jeremy Reizenstein's avatar
      fix Optional[List] in Configurable · 2802fd93
      Jeremy Reizenstein authored
      Summary: Optional[not_a_type] was causing errors.
      
      Reviewed By: davnov134
      
      Differential Revision: D35355530
      
      fbshipit-source-id: e9b52cfd6347ffae0fe688ef30523a4092ccf9fd
      2802fd93
  6. 31 Mar, 2022 1 commit
  7. 29 Mar, 2022 4 commits
    • Roman Shapovalov's avatar
      get_default_args for callables respects non-class type annotations and Optionals · a54ad2b9
      Roman Shapovalov authored
      Summary: as subj
      
      Reviewed By: davnov134
      
      Differential Revision: D35194863
      
      fbshipit-source-id: c8e8f234083d4f0f93dca8d93e090ca0e1e1972d
      a54ad2b9
    • janEbert's avatar
      Fix dtype propagation (#1141) · b602edcc
      janEbert authored
      Summary:
      Previously, dtypes were not propagated correctly in composed transforms, resulting in errors when different dtypes were mixed. Even specifying a dtype in the constructor does not fix this. Neither does specifying the dtype for each composition function invocation (e.g. as a `kwarg` in `rotate_axis_angle`).
      
      With the change, I also had to modify the default dtype of `RotateAxisAngle`, which was `torch.float64`; it is now `torch.float32` like for all other transforms. This was required because the fix in propagation broke some tests due to dtype mismatches.
      
      This change in default dtype in turn broke two tests due to precision changes (calculations that were previously done in `torch.float64` were now done in `torch.float32`), so I changed the precision tolerances to be less strict. I chose the lowest power of ten that passed the tests here.
      
      Pull Request resolved: https://github.com/facebookresearch/pytorch3d/pull/1141
      
      Reviewed By: patricklabatut
      
      Differential Revision: D35192970
      
      Pulled By: bottler
      
      fbshipit-source-id: ba0293e8b3595dfc94b3cf8048e50b7a5e5ed7cf
      b602edcc
    • Jeremy Reizenstein's avatar
      Optional ReplaceableBase · 21262e38
      Jeremy Reizenstein authored
      Summary: Allow things like `renderer:Optional[BaseRenderer]` in configurables.
      
      Reviewed By: davnov134
      
      Differential Revision: D35118339
      
      fbshipit-source-id: 1219321b2817ed4b26fe924c6d6f73887095c985
      21262e38
    • Jeremy Reizenstein's avatar
      test_build for implicitron · e332f9ff
      Jeremy Reizenstein authored
      Summary: To ensure that tests outside implicitron/ don't use implicitron, split the test for recursive includes in to two. License header checking is not needed here any more.
      
      Reviewed By: shapovalov
      
      Differential Revision: D35077830
      
      fbshipit-source-id: 2ebe7436a6dcc5d21a116434f6ddd08705dfab34
      e332f9ff
  8. 25 Mar, 2022 2 commits
    • Jeremy Reizenstein's avatar
      Reinforce test skipping · 97894fb3
      Jeremy Reizenstein authored
      Summary: Attempt to solve an internal issue
      
      Reviewed By: shapovalov
      
      Differential Revision: D35143263
      
      fbshipit-source-id: b4fd9ee441d85f0a3ee08f2f1e7febd1c1ccbe86
      97894fb3
    • Roman Shapovalov's avatar
      Return a typed structured config from default_args for callables · 645a47d0
      Roman Shapovalov authored
      Summary:
      Before the fix, running get_default_args(C: Callable) returns an unstructured DictConfig which causes Enums to be handled incorrectly. This is a fix.
      
      WIP update: Currently tests still fail whenever a function signature contains an untyped argument: This needs to be somehow fixed.
      
      Reviewed By: bottler
      
      Differential Revision: D34932124
      
      fbshipit-source-id: ecdc45c738633cfea5caa7480ba4f790ece931e8
      645a47d0
  9. 24 Mar, 2022 2 commits
    • Roman Shapovalov's avatar
      Using the new dataset idx API everywhere. · e2622d79
      Roman Shapovalov authored
      Summary: Using the API from D35012121 everywhere.
      
      Reviewed By: bottler
      
      Differential Revision: D35045870
      
      fbshipit-source-id: dab112b5e04160334859bbe8fa2366344b6e0f70
      e2622d79
    • Roman Shapovalov's avatar
      API for accessing frames in order in Implicitron dataset. · c0bb49b5
      Roman Shapovalov authored
      Summary: We often want to iterate over frames in the sequence in temporal order. This diff provides the API to do that. `seq_to_idx` should probably be considered to have `protected` visibility.
      
      Reviewed By: davnov134
      
      Differential Revision: D35012121
      
      fbshipit-source-id: 41896672ec35cd62f3ed4be3aa119efd33adada1
      c0bb49b5
  10. 21 Mar, 2022 1 commit
  11. 16 Mar, 2022 1 commit
    • Jeremy Reizenstein's avatar
      PLY with uint face data (#1104) · 9b5a3ffa
      Jeremy Reizenstein authored
      Summary: Fix assumption that face indices are signed in the PLY file, as reported in #1104.
      
      Reviewed By: nikhilaravi
      
      Differential Revision: D34892598
      
      fbshipit-source-id: a8b23bfac1357bdc11bbbf752098319142239804
      9b5a3ffa
  12. 09 Mar, 2022 2 commits
  13. 28 Feb, 2022 1 commit
  14. 25 Feb, 2022 2 commits
    • Winnie Lin's avatar
      add min_triangle_area argument to IsInsideTriangle · 471b1268
      Winnie Lin authored
      Summary:
      1. changed IsInsideTriangle in geometry_utils to take in min_triangle_area parameter instead of hardcoded value
      2. updated point_mesh_cpu.cpp and point_mesh_cuda.[h/cu] to adapt to changes in geometry_utils function signatures
      3. updated point_mesh_distance.py and test_point_mesh_distance.py to modify _C. calls
      
      Reviewed By: bottler
      
      Differential Revision: D34459764
      
      fbshipit-source-id: 0549e78713c6d68f03d85fb597a13dd88e09b686
      471b1268
    • Jeremy Reizenstein's avatar
      PyTorch 1.7 compatibility · 4d043fc9
      Jeremy Reizenstein authored
      Summary: Small changes discovered based on circleCI failures.
      
      Reviewed By: patricklabatut
      
      Differential Revision: D34426807
      
      fbshipit-source-id: 819860f34b2f367dd24057ca7490284204180a13
      4d043fc9
  15. 21 Feb, 2022 3 commits
    • Georgia Gkioxari's avatar
      small numerical fix to point_mesh · ee71c7c4
      Georgia Gkioxari authored
      Summary: Small fix by adjusting the area `eps` to account for really small faces when computing point to face distances
      
      Reviewed By: bottler
      
      Differential Revision: D34331336
      
      fbshipit-source-id: 51c4888ea46fefa4e31d5b0bb494a9f9d77813cd
      ee71c7c4
    • Georgia Gkioxari's avatar
      lower eps · 3de41223
      Georgia Gkioxari authored
      Summary: Lower the epsilon value in the IoU3D calculation to fix small numerical issue from GH#1082
      
      Reviewed By: bottler
      
      Differential Revision: D34371597
      
      fbshipit-source-id: 12443fa359b7755ef4ae60e9adf83734a1a295ae
      3de41223
    • Jeremy Reizenstein's avatar
      points2vols test fix · feb5d363
      Jeremy Reizenstein authored
      Summary: Fix tests which depended on output tensors being identical to input ones, which now fail in main PyTorch branch because of some change in autograd. The functions still work in-place.
      
      Reviewed By: patricklabatut
      
      Differential Revision: D34375817
      
      fbshipit-source-id: 295ae195f75eab6c7abab412c997470d8de8add1
      feb5d363
  16. 18 Feb, 2022 1 commit
  17. 15 Feb, 2022 1 commit
  18. 14 Feb, 2022 1 commit
    • Jeremy Reizenstein's avatar
      move LinearWithRepeat to pytorch3d · 2a1de3b6
      Jeremy Reizenstein authored
      Summary: Move this simple layer from the NeRF project into pytorch3d.
      
      Reviewed By: shapovalov
      
      Differential Revision: D34126972
      
      fbshipit-source-id: a9c6d6c3c1b662c1b844ea5d1b982007d4df83e6
      2a1de3b6
  19. 10 Feb, 2022 1 commit
  20. 09 Feb, 2022 1 commit
  21. 24 Jan, 2022 2 commits
    • Jeremy Reizenstein's avatar
      use workaround for points_normals · c2862ff4
      Jeremy Reizenstein authored
      Summary:
      Use existing workaround for batched 3x3 symeig because it is faster than torch.symeig.
      
      Added benchmark showing speedup. True = workaround.
      ```
      Benchmark                Avg Time(μs)      Peak Time(μs) Iterations
      --------------------------------------------------------------------------------
      normals_True_3000            16237           17233             31
      normals_True_6000            33028           33391             16
      normals_False_3000        18623069        18623069              1
      normals_False_6000        36535475        36535475              1
      ```
      
      Should help https://github.com/facebookresearch/pytorch3d/issues/988
      
      Reviewed By: nikhilaravi
      
      Differential Revision: D33660585
      
      fbshipit-source-id: d1162b277f5d61ed67e367057a61f25e03888dce
      c2862ff4
    • Jeremy Reizenstein's avatar
      avoid deprecated raysamplers · 67778cae
      Jeremy Reizenstein authored
      Summary: Migrate away from NDCGridRaysampler and GridRaysampler to their more flexible replacements.
      
      Reviewed By: patricklabatut
      
      Differential Revision: D33281584
      
      fbshipit-source-id: 65f8702e700a32d38f7cd6bda3924bb1707a0633
      67778cae