1. 25 Jan, 2023 1 commit
    • David Novotny's avatar
      Fixes for RayBundle plotting · 9dc28f5d
      David Novotny authored
      Summary:
      Fixes some issues with RayBundle plotting:
      - allows plotting raybundles on gpu
      - view -> reshape since we do not require contiguous raybundle tensors as input
      
      Reviewed By: bottler, shapovalov
      
      Differential Revision: D42665923
      
      fbshipit-source-id: e9c6c7810428365dca4cb5ec80ef15ff28644163
      9dc28f5d
  2. 24 Jan, 2023 1 commit
    • Jeremy Reizenstein's avatar
      doc rgbd point cloud · a12612a4
      Jeremy Reizenstein authored
      Summary: docstring and shape fix
      
      Reviewed By: shapovalov
      
      Differential Revision: D42609661
      
      fbshipit-source-id: fd50234872ad61b5452821eeb89d51344f70c957
      a12612a4
  3. 17 Jan, 2023 1 commit
    • Jeremy Reizenstein's avatar
      test fixes · dcced4fa
      Jeremy Reizenstein authored
      Reviewed By: shapovalov
      
      Differential Revision: D42545069
      
      fbshipit-source-id: e25fb4049dcebd715df43bab3ce813ecb5f85abe
      dcced4fa
  4. 16 Jan, 2023 1 commit
    • Jeremy Reizenstein's avatar
      camera iteration #1408 · 84851c83
      Jeremy Reizenstein authored
      Summary: Use IndexError so that a camera object is an iterable
      
      Reviewed By: shapovalov
      
      Differential Revision: D42312021
      
      fbshipit-source-id: 67c417d5f1398e8b30a6944468eda057b4ceb444
      84851c83
  5. 12 Jan, 2023 1 commit
    • Jeremy Reizenstein's avatar
      lints · d71105f5
      Jeremy Reizenstein authored
      Summary: lint fixes
      
      Reviewed By: davidsonic
      
      Differential Revision: D42451530
      
      fbshipit-source-id: 120bdd58fc074a713895df15df4e9efa9ea0a420
      d71105f5
  6. 13 Dec, 2022 1 commit
    • Jeremy Reizenstein's avatar
      fix saved glb length · b7a31623
      Jeremy Reizenstein authored
      Summary: Make GLB files report their own length correctly. They were off by 28.
      
      Reviewed By: davidsonic
      
      Differential Revision: D41838340
      
      fbshipit-source-id: 9cd66e8337c142298d5ae1d7c27e51fd812d5c7b
      b7a31623
  7. 05 Dec, 2022 1 commit
    • Jiali Duan's avatar
      Write meshes to GLB · cc2840eb
      Jiali Duan authored
      Summary: Write the amalgamated mesh from the Mesh module to glb. In this version, the json header and the binary data specified by the buffer are merged into glb. The image texture attributes are added.
      
      Reviewed By: bottler
      
      Differential Revision: D41489778
      
      fbshipit-source-id: 3af0e9a8f9e9098e73737a254177802e0fb6bd3c
      cc2840eb
  8. 24 Nov, 2022 1 commit
    • Jeremy Reizenstein's avatar
      make x_enabled compulsory · 60ab1cdb
      Jeremy Reizenstein authored
      Summary: Optional[some_configurable] won't autogenerate the enabled flag
      
      Reviewed By: shapovalov
      
      Differential Revision: D41522104
      
      fbshipit-source-id: 555ff6b343faf6f18aad2f92fbb7c341f5e991c6
      60ab1cdb
  9. 16 Nov, 2022 1 commit
    • Jiali Duan's avatar
      Marching Cubes cuda extension · 8b829183
      Jiali Duan authored
      Summary:
      Torch CUDA extension for Marching Cubes
      - MC involving 3 steps:
        - 1st forward pass to collect vertices and occupied state for each voxel
        - Compute compactVoxelArray to skip non-empty voxels
        - 2nd pass to genereate interpolated vertex positions and faces by marching through the grid
      - In contrast to existing MC:
         - Bind each interpolated vertex with a global edge_id to address floating-point precision
         - Added deduplication process to remove redundant vertices and faces
      
      Benchmarks (ms):
      
      | N / V(^3)      | python          | C++             |   CUDA   | Speedup |
      | 2 / 20          |    12176873  |       24338     |     4363   | 2790x/5x|
      | 1 / 100          |     -             |    3070511     |   27126   |    113x    |
      | 2 / 100          |     -             |    5968934     |   53129   |    112x    |
      | 1 / 256          |     -             |  61278092     | 430900   |    142x    |
      | 2 / 256          |     -             |125687930     | 856941   |    146x   |
      
      Reviewed By: kjchalup
      
      Differential Revision: D39644248
      
      fbshipit-source-id: d679c0c79d67b98b235d12296f383d760a00042a
      8b829183
  10. 07 Nov, 2022 1 commit
    • Roman Shapovalov's avatar
      MC rasterize supports heterogeneous bundle; refactoring of bundle-to-padded · f3c1e083
      Roman Shapovalov authored
      Summary:
      Rasterize MC was not adapted to heterogeneous bundles.
      
      There are some caveats though:
      1) on CO3D, we get up to 18 points per image, which is too few for a reasonable visualisation (see below);
      2) rasterising for a batch of 100 is slow.
      
      I also moved the unpacking code close to the bundle to be able to reuse it.
      
      {F789678778}
      
      Reviewed By: bottler, davnov134
      
      Differential Revision: D41008600
      
      fbshipit-source-id: 9f10f1f9f9a174cf8c534b9b9859587d69832b71
      f3c1e083
  11. 03 Nov, 2022 1 commit
  12. 02 Nov, 2022 1 commit
    • David Novotny's avatar
      CO3Dv2 multi-category extension · e4a32981
      David Novotny authored
      Summary:
      Allows loading of multiple categories.
      Multiple categories are provided in a comma-separated list of category names.
      
      Reviewed By: bottler, shapovalov
      
      Differential Revision: D40803297
      
      fbshipit-source-id: 863938be3aa6ffefe9e563aede4a2e9e66aeeaa8
      e4a32981
  13. 23 Oct, 2022 1 commit
  14. 20 Oct, 2022 1 commit
  15. 18 Oct, 2022 1 commit
    • Jeremy Reizenstein's avatar
      different learning rate for different parts · fe5bdb2f
      Jeremy Reizenstein authored
      Summary:
      Adds the ability to have different learning rates for different parts of the model. The trainable parts of the implicitron have a new member
      
             param_groups: dictionary where keys are names of individual parameters,
                  or module’s members and values are the parameter group where the
                  parameter/member will be sorted to. "self" key is used to denote the
                  parameter group at the module level. Possible keys, including the "self" key
                  do not have to be defined. By default all parameters are put into "default"
                  parameter group and have the learning rate defined in the optimizer,
                  it can be overriden at the:
                      - module level with “self” key, all the parameters and child
                          module s parameters will be put to that parameter group
                      - member level, which is the same as if the `param_groups` in that
                          member has key=“self” and value equal to that parameter group.
                          This is useful if members do not have `param_groups`, for
                          example torch.nn.Linear.
                      - parameter level, parameter with the same name as the key
                          will be put to that parameter group.
      
      And in the optimizer factory, parameters and their learning rates are recursively gathered.
      
      Reviewed By: shapovalov
      
      Differential Revision: D40145802
      
      fbshipit-source-id: 631c02b8d79ee1c0eb4c31e6e42dbd3d2882078a
      fe5bdb2f
  16. 13 Oct, 2022 2 commits
    • Jeremy Reizenstein's avatar
      fix to get_default_args(instance) · 4d9215b3
      Jeremy Reizenstein authored
      Summary:
      Small config system fix. Allows get_default_args to work on an instance which has been created with a dict (instead of a DictConfig) as an args field. E.g.
      
      ```
      gm = GenericModel(
              raysampler_AdaptiveRaySampler_args={"scene_extent": 4.0}
          )
          OmegaConf.structured(gm1)
      ```
      
      Reviewed By: shapovalov
      
      Differential Revision: D40341047
      
      fbshipit-source-id: 587d0e8262e271df442a80858949a48e5d6db3df
      4d9215b3
    • Darijan Gudelj's avatar
      Elementwise decoder · 76cddd90
      Darijan Gudelj authored
      Summary: Tensorf does relu or softmax after the density grid. This diff adds the ability to replicate that.
      
      Reviewed By: bottler
      
      Differential Revision: D40023228
      
      fbshipit-source-id: 9f19868cd68460af98ab6e61c7f708158c26dc08
      76cddd90
  17. 12 Oct, 2022 1 commit
    • Darijan Gudelj's avatar
      volume cropping · f55d37f0
      Darijan Gudelj authored
      Summary:
      TensoRF at step 2000 does volume croping and resizing.
      At those steps it calculates part of the voxel grid which has density big enough to have objects and resizes the grid to fit that object.
      Change is done on 3 levels:
      - implicit function subscribes to epochs and at specific epochs finds the bounding box of the object and calls resizing of the color and density voxel grids to fit it
      - VoxelGrid module calls cropping of the underlaying voxel grid and resizing to fit previous size it also adjusts its extends and translation to match wanted size
      - Each voxel grid has its own way of cropping the underlaying data
      
      Reviewed By: kjchalup
      
      Differential Revision: D39854548
      
      fbshipit-source-id: 5435b6e599aef1eaab980f5421d3369ee4829c50
      f55d37f0
  18. 10 Oct, 2022 1 commit
    • Darijan Gudelj's avatar
      scaffold · 56d3465b
      Darijan Gudelj authored
      Summary: Forward method is sped up using the scaffold, a low resolution voxel grid which is used to filter out the points in empty space. These points will be predicted as having 0 density and (0, 0, 0) color. The points which were not evaluated as empty space will be passed through the steps outlined above.
      
      Reviewed By: kjchalup
      
      Differential Revision: D39579671
      
      fbshipit-source-id: 8eab8bb43ef77c2a73557efdb725e99a6c60d415
      56d3465b
  19. 09 Oct, 2022 1 commit
    • Jeremy Reizenstein's avatar
      Co3Dv2 point cloud fix · 95a2acf7
      Jeremy Reizenstein authored
      Summary: Avoid certain hardcoded paths in co3dv2 data
      
      Reviewed By: davnov134
      
      Differential Revision: D40209309
      
      fbshipit-source-id: 0e83a15baa47d5bd07d2d23c6048cb4522c1ccba
      95a2acf7
  20. 06 Oct, 2022 3 commits
    • Jiali Duan's avatar
      Marching Cubes C++ torch extension · 0d8608b9
      Jiali Duan authored
      Summary:
      Torch C++ extension for Marching Cubes
      
      - Add torch C++ extension for marching cubes. Observe a speed up of ~255x-324x speed up (over varying batch sizes and spatial resolutions)
      
      - Add C++ impl in existing unit-tests.
      
      (Note: this ignores all push blocking failures!)
      
      Reviewed By: kjchalup
      
      Differential Revision: D39590638
      
      fbshipit-source-id: e44d2852a24c2c398e5ea9db20f0dfaa1817e457
      0d8608b9
    • Jiali Duan's avatar
      Python marching cubes improvements · 850efdf7
      Jiali Duan authored
      Summary: Overhaul of marching_cubes_naive for better performance and to avoid relying on unstable hashing. In particular, instead of hashing vertex positions, we index each interpolated vertex with its corresponding edge in the 3d grid.
      
      Reviewed By: kjchalup
      
      Differential Revision: D39419642
      
      fbshipit-source-id: b5fede3525c545d1d374198928dfb216262f0ec0
      850efdf7
    • Gavin Peng's avatar
      Multithread CPU naive mesh rasterization · 6471893f
      Gavin Peng authored
      Summary:
      Threaded the for loop:
      ```
      for (int yi = 0; yi < H; ++yi) {...}
      ```
      in function `RasterizeMeshesNaiveCpu()`.
      Chunk size is approx equal.
      
      Reviewed By: bottler
      
      Differential Revision: D40063604
      
      fbshipit-source-id: 09150269405538119b0f1b029892179501421e68
      6471893f
  21. 03 Oct, 2022 2 commits
    • Darijan Gudelj's avatar
      Enable mixed frame raysampling · c311a4cb
      Darijan Gudelj authored
      Summary:
      Changed ray_sampler and metrics to be able to use mixed frame raysampling.
      
      Ray_sampler now has a new member which it passes to the pytorch3d raysampler.
      If the raybundle is heterogeneous metrics now samples images by padding xys first. This reduces memory consumption.
      
      Reviewed By: bottler, kjchalup
      
      Differential Revision: D39542221
      
      fbshipit-source-id: a6fec23838d3049ae5c2fd2e1f641c46c7c927e3
      c311a4cb
    • Darijan Gudelj's avatar
      ImplicitronRayBundle · ad8907d3
      Darijan Gudelj authored
      Summary: new implicitronRayBundle with added cameraIDs and camera counts. Added to enable a single raybundle inside Implicitron and easier extension in the future. Since RayBundle is named tuple and RayBundleHeterogeneous is dataclass and RayBundleHeterogeneous cannot inherit RayBundle. So if there was no ImplicitronRayBundle every function that uses RayBundle now would have to use Union[RayBundle, RaybundleHeterogeneous] which is confusing and unecessary complicated.
      
      Reviewed By: bottler, kjchalup
      
      Differential Revision: D39262999
      
      fbshipit-source-id: ece160e32f6c88c3977e408e966789bf8307af59
      ad8907d3
  22. 30 Sep, 2022 1 commit
    • Darijan Gudelj's avatar
      Heterogeneous raysampling -> RayBundleHeterogeneous · 6ae863f3
      Darijan Gudelj authored
      Summary:
      Added heterogeneous raysampling to pytorch3d raysampler, different cameras are sampled different number of times.
      
       It now returns RayBundle if heterogeneous raysampling is off and new RayBundleHeterogeneous (with added fields `camera_ids` and `camera_counts`).  Heterogeneous raysampling is on if `n_rays_total` is not None.
      
      Reviewed By: bottler
      
      Differential Revision: D39542222
      
      fbshipit-source-id: d3d88d822ec7696e856007c088dc36a1cfa8c625
      6ae863f3
  23. 29 Sep, 2022 2 commits
    • Roman Shapovalov's avatar
      Extending the API of Transform3d with SE(3) log · 9a0f9ae5
      Roman Shapovalov authored
      Summary:
      This is quite a thin wrapper – not sure we need it. The motivation is that `Transform3d` is not as matrix-centric now, it can be converted to SE(3) logarithm equally easily.
      
      It simplifies things like averaging cameras and getting axis-angle of camera rotation (previously, one would need to call `se3_log_map(cameras.get_world_to_camera_transform().get_matrix())`), now one fewer thing to call / discover.
      
      Reviewed By: bottler
      
      Differential Revision: D39928000
      
      fbshipit-source-id: 85248d5b8af136618f1d08791af5297ea5179d19
      9a0f9ae5
    • Roman Shapovalov's avatar
      Fix returning a proper rotation in levelling; supporting batches and default centroid · 74bbd6fd
      Roman Shapovalov authored
      Summary:
      `get_rotation_to_best_fit_xy` is useful to expose externally, however there was a bug (which we probably did not care about for our use case): it could return a rotation matrix with det(R) == −1.
      The diff fixes that, and also makes centroid optional (it can be computed from points).
      
      Reviewed By: bottler
      
      Differential Revision: D39926791
      
      fbshipit-source-id: 5120c7892815b829f3ddcc23e93d4a5ec0ca0013
      74bbd6fd
  24. 28 Sep, 2022 1 commit
    • Darijan Gudelj's avatar
      Add rescaling to voxel grids · 5005f091
      Darijan Gudelj authored
      Summary: Any module can be subscribed to step updates from the training loop. Once the training loop publishes a step the voxel grid changes its dimensions. During the construction of VoxelGridModule and its parameters it does not know which is the resolution that will be loaded from checkpoint, so before the checkpoint loading a hook runs which changes the VoxelGridModule's parameters to match shapes of the loaded checkpoint.
      
      Reviewed By: bottler
      
      Differential Revision: D39026775
      
      fbshipit-source-id: 0d359ea5c8d2eda11d773d79c7513c83585d5f17
      5005f091
  25. 22 Sep, 2022 5 commits
    • Jeremy Reizenstein's avatar
      Fix camera clone() with torch.save · efea540b
      Jeremy Reizenstein authored
      Summary:
      User reported that cloned cameras fail to save. The error with latest PyTorch is
      
      ```
      pickle.PicklingError: Can't pickle ~T_destination: attribute lookup T_destination on torch.nn.modules.module failed
      ```
      
      This fixes it.
      
      Reviewed By: btgraham
      
      Differential Revision: D39692258
      
      fbshipit-source-id: 75bbf3b8dfa0023dc28bf7d4cc253ca96e46a64d
      efea540b
    • Michaël Ramamonjisoa's avatar
      Adding a Checkerboard mesh utility to Pytorch3d · ce3fce49
      Michaël Ramamonjisoa authored
      Summary: Adding a checkerboard mesh utility to Pytorch3d.
      
      Reviewed By: bottler
      
      Differential Revision: D39718916
      
      fbshipit-source-id: d43cd30e566b5db068bae6eed0388057634428c8
      ce3fce49
    • Darijan Gudelj's avatar
      packed_to_padded now accepts all sizes · f34da3d3
      Darijan Gudelj authored
      Summary:
      We need to make packing/unpacking in 2 places for mixed frame raysampling (metrics and raysampler) but those tensors that need to be unpacked/packed have more than two dimensions.
      I could have reshaped and stored dimensions but this seems to just complicate code there with something which packed_to_padded should support.
      I could have made a separate function for implicitron but it would confusing to have two different padded_to_packed functions inside pytorch3d codebase one of which does packing for (b, max) and (b, max, f) and the other for (b, max, …)
      
      Reviewed By: bottler
      
      Differential Revision: D39729026
      
      fbshipit-source-id: 2bdebf290dcc6c316b7fe1aeee49bbb5255e508c
      f34da3d3
    • Jeremy Reizenstein's avatar
      make expand_args_fields optional · d6a197be
      Jeremy Reizenstein authored
      Summary: Call expand_args_field when instantiating an object.
      
      Reviewed By: shapovalov
      
      Differential Revision: D39541931
      
      fbshipit-source-id: de8e1038927ff0112463394412d5d8c26c4a1e17
      d6a197be
    • Darijan Gudelj's avatar
      arbitrary shape input to voxel_grids · db3c12ab
      Darijan Gudelj authored
      Summary: Add the ability to process arbitrary point shapes `[n_grids, ..., 3]` instead of  only `[n_grids, n_points, 3]`.
      
      Reviewed By: bottler
      
      Differential Revision: D39574373
      
      fbshipit-source-id: 0a9ecafe9ea58cd8f909644de43a1185ecf934f4
      db3c12ab
  26. 21 Sep, 2022 1 commit
    • Michaël Ramamonjisoa's avatar
      include TexturesUV in IO.save_mesh(x.obj) · 6ae6ff9c
      Michaël Ramamonjisoa authored
      Summary:
      Added export of UV textures to IO.save_mesh in Pytorch3d
      MeshObjFormat now passes verts_uv, faces_uv, and texture_map as input to save_obj
      
      TODO: check if TexturesUV.verts_uv_list or TexturesUV.verts_uv_padded() should be passed to save_obj
      
      IO.save_mesh(obj_file, meshes, decimal_places=2) should be IO().save_mesh(obj_file, meshes, decimal_places=2)
      
      Reviewed By: bottler
      
      Differential Revision: D39617441
      
      fbshipit-source-id: 4628b7f26f70e38c65f235852b990c8edb0ded23
      6ae6ff9c
  27. 15 Sep, 2022 1 commit
    • Jeremy Reizenstein's avatar
      small fixes to config · da7fe285
      Jeremy Reizenstein authored
      Summary:
      - indicate location of OmegaConf.structured failures
      - split the data gathering from enable_get_default_args to ease experimenting with it.
      - comment fixes.
      - nicer error when a_class_type has weird type.
      
      Reviewed By: kjchalup
      
      Differential Revision: D39434447
      
      fbshipit-source-id: b80c7941547ca450e848038ef5be95b7ebbe8f3e
      da7fe285
  28. 06 Sep, 2022 2 commits
    • David Novotny's avatar
      Bugfixes in render_flyaround · f6d43eaa
      David Novotny authored
      Summary: Fixes bugs in render_flyaround
      
      Reviewed By: bottler
      
      Differential Revision: D39271932
      
      fbshipit-source-id: 07e6c9ee07ba91feb437b725af0a8942fd98db0b
      f6d43eaa
    • David Novotny's avatar
      Rename and move render_flyaround into core implicitron · c79c954d
      David Novotny authored
      Summary:
      Move the flyaround rendering function into core implicitron.
      The unblocks an example in the facebookresearch/co3d repo.
      
      Reviewed By: bottler
      
      Differential Revision: D39257801
      
      fbshipit-source-id: 6841a88a43d4aa364dd86ba83ca2d4c3cf0435a4
      c79c954d
  29. 05 Sep, 2022 1 commit
    • Darijan Gudelj's avatar
      raybundle input to ImplicitFunctions -> api unification · 72c3a0eb
      Darijan Gudelj authored
      Summary: Currently some implicit functions in implicitron take a raybundle, others take ray_points_world. raybundle is what they really need. However, the raybundle is going to become a bit more flexible later, as it will contain different numbers of rays for each camera.
      
      Reviewed By: bottler
      
      Differential Revision: D39173751
      
      fbshipit-source-id: ebc038e426d22e831e67a18ba64655d8a61e1eb9
      72c3a0eb
  30. 31 Aug, 2022 1 commit
    • Jiali Duan's avatar
      Update Rasterizer and add end2end fisheye integration test · d19e6243
      Jiali Duan authored
      Summary:
      1) Update rasterizer/point rasterizer to accommodate fisheyecamera. Specifically, transform_points is in placement of explicit transform compositions.
      
      2) In rasterizer unittests, update corresponding tests for rasterizer and point_rasterizer. Address comments to test fisheye against perspective camera when distortions are turned off.
      
      3) Address comments to add end2end test for fisheyecameras. In test_render_meshes, fisheyecameras are added to camera enuerations whenever possible.
      
      4) Test renderings with fisheyecameras of different params on cow mesh.
      
      5) Use compositions for linear cameras whenever possible.
      
      Reviewed By: kjchalup
      
      Differential Revision: D38932736
      
      fbshipit-source-id: 5b7074fc001f2390f4cf43c7267a8b37fd987547
      d19e6243