1. 21 Dec, 2021 4 commits
    • Nikhila Ravi's avatar
      Move Harmonic embedding to core pytorch3d · f9a26a22
      Nikhila Ravi authored
      Summary:
      Moved `HarmonicEmbedding` function in core PyTorch3D.
      In the next diff will update the NeRF project.
      
      Reviewed By: bottler
      
      Differential Revision: D32833808
      
      fbshipit-source-id: 0a12ccd1627c0ce024463c796544c91eb8d4d122
      f9a26a22
    • Nikhila Ravi's avatar
      Enable __getitem__ for Cameras to return an instance of Cameras · 28ccdb73
      Nikhila Ravi authored
      Summary:
      Added a custom `__getitem__` method to `CamerasBase` which returns an instance of the appropriate camera instead of the `TensorAccessor` class.
      
      Long term we should deprecate the `TensorAccessor` and the `__getitem__` method on `TensorProperties`
      
      FB: In the next diff I will update the uses of `select_cameras` in implicitron.
      
      Reviewed By: bottler
      
      Differential Revision: D33185885
      
      fbshipit-source-id: c31995d0eb126981e91ba61a6151d5404b263f67
      28ccdb73
    • Nikhila Ravi's avatar
      Join points as batch · 262c1bfc
      Nikhila Ravi authored
      Summary: Function to join a list of pointclouds as a batch similar to the corresponding function for Meshes.
      
      Reviewed By: bottler
      
      Differential Revision: D33145906
      
      fbshipit-source-id: 160639ebb5065e4fae1a1aa43117172719f3871b
      262c1bfc
    • Jeremy Reizenstein's avatar
      screen space docstrings fix · eb2bbf84
      Jeremy Reizenstein authored
      Summary: Fix some comments to match the recent change to transform_points_screen.
      
      Reviewed By: patricklabatut
      
      Differential Revision: D33243697
      
      fbshipit-source-id: dc8d182667a9413bca2c2e3657f97b2f7a47c795
      eb2bbf84
  2. 18 Dec, 2021 1 commit
    • Georgia Gkioxari's avatar
      small fix for iou3d · ccfb72cc
      Georgia Gkioxari authored
      Summary:
      A small numerical fix for IoU for 3D boxes, fixes GH #992
      
      * Adds a check for boxes with zero side areas (invalid boxes)
      * Fixes numerical issue when two boxes have coplanar sides
      
      Reviewed By: nikhilaravi
      
      Differential Revision: D33195691
      
      fbshipit-source-id: 8a34b4d1f1e5ec2edb6d54143930da44bdde0906
      ccfb72cc
  3. 07 Dec, 2021 3 commits
    • Jeremy Reizenstein's avatar
      new tests demonstrating pixel matching · 70acb3e4
      Jeremy Reizenstein authored
      Summary: Demonstrate current behavior of pixels with new tests of all renderers.
      
      Reviewed By: gkioxari
      
      Differential Revision: D32651141
      
      fbshipit-source-id: 3ca30b4274ed2699bc5e1a9c6437eb3f0b738cbf
      70acb3e4
    • Jeremy Reizenstein's avatar
      screen cameras lose -1 · bf3bc6f8
      Jeremy Reizenstein authored
      Summary:
      All the renderers in PyTorch3D (pointclouds including pulsar, meshes, raysampling) use align_corners=False style. NDC space goes between the edges of the outer pixels. For a non square image with W>H, the vertical NDC space goes from -1 to 1 and the horizontal from -W/H to W/H.
      
      However it was recently pointed out that functionality which deals with screen space inside the camera classes is inconsistent with this. It unintentionally uses align_corners=True. This fixes that.
      
      This would change behaviour of the following:
      - If you create a camera in screen coordinates, i.e. setting in_ndc=False, then anything you do with the camera which touches NDC space may be affected, including trying to use renderers. The transform_points_screen function will not be affected...
      - If you call the function “transform_points_screen” on a camera defined in NDC space results will be different. I have illustrated in the diff how to get the old results from the new results but this probably isn’t the right long-term solution..
      
      Reviewed By: gkioxari
      
      Differential Revision: D32536305
      
      fbshipit-source-id: 377325a9137282971dcb7ca11a6cba3fc700c9ce
      bf3bc6f8
    • Jeremy Reizenstein's avatar
      move benchmarks to separate directory · a0e2d2e3
      Jeremy Reizenstein authored
      Summary: Move benchmarks to a separate directory as tests/ is getting big.
      
      Reviewed By: nikhilaravi
      
      Differential Revision: D32885462
      
      fbshipit-source-id: a832662a494ee341ab77d95493c95b0af0a83f43
      a0e2d2e3
  4. 06 Dec, 2021 1 commit
  5. 05 Nov, 2021 1 commit
  6. 26 Oct, 2021 2 commits
  7. 16 Oct, 2021 1 commit
    • Jeremy Reizenstein's avatar
      defaulted grid_sizes in points2vols · 34b1b4ab
      Jeremy Reizenstein authored
      Summary: Fix #873, that grid_sizes defaults to the wrong dtype in points2volumes code, and mask doesn't have a proper default.
      
      Reviewed By: nikhilaravi
      
      Differential Revision: D31503545
      
      fbshipit-source-id: fa32a1a6074fc7ac7bdb362edfb5e5839866a472
      34b1b4ab
  8. 11 Oct, 2021 1 commit
    • Jeremy Reizenstein's avatar
      remove PyTorch 1.5 builds · 53d99671
      Jeremy Reizenstein authored
      Summary: PyTorch 1.6.0 came out on 28 Jul 2020. Stop builds for 1.5.0 and 1.5.1. Also update the news section of the README for recent releases.
      
      Reviewed By: nikhilaravi
      
      Differential Revision: D31442830
      
      fbshipit-source-id: 20bdd8a07090776d0461240e71c6536d874615f6
      53d99671
  9. 08 Oct, 2021 1 commit
    • Nikhila Ravi's avatar
      IOU box3d epsilon fix · 6dfa3269
      Nikhila Ravi authored
      Summary: The epsilon value is important for determining whether vertices are inside/outside a plane.
      
      Reviewed By: gkioxari
      
      Differential Revision: D31485247
      
      fbshipit-source-id: 5517575de7c02f1afa277d00e0190a81f44f5761
      6dfa3269
  10. 07 Oct, 2021 2 commits
    • Jeremy Reizenstein's avatar
      test tolerance loosenings · b26f4bc3
      Jeremy Reizenstein authored
      Summary: Increase some test tolerances so that they pass in more situations, and re-enable two tests.
      
      Reviewed By: nikhilaravi
      
      Differential Revision: D31379717
      
      fbshipit-source-id: 06a25470cc7b6d71cd639d9fd7df500d4b84c079
      b26f4bc3
    • Ruilong Li's avatar
      Fix camera conversion between opencv and pytorch3d · 8fa438cb
      Ruilong Li authored
      Summary:
      For non square image, the NDC space in pytorch3d is not square [-1, 1]. Instead, it is [-1, 1] for the smallest side, and [-u, u] for the largest side, where u > 1. This behavior is followed by the pytorch3d renderer.
      
      See the function `get_ndc_to_screen_transform` for a example.
      
      Without this fix, the rendering result is not correct using the converted pytorch3d-camera from a opencv-camera on non square images.
      
      This fix also helps the `transform_points_screen` function delivers consistent results with opencv projection for the converted pytorch3d-camera.
      
      Reviewed By: classner
      
      Differential Revision: D31366775
      
      fbshipit-source-id: 8858ae7b5cf5c0a4af5a2af40a1358b2fe4cf74b
      8fa438cb
  11. 06 Oct, 2021 1 commit
  12. 02 Oct, 2021 1 commit
    • Jeremy Reizenstein's avatar
      subsample pointclouds · 4281df19
      Jeremy Reizenstein authored
      Summary: New function to randomly subsample Pointclouds to a maximum size.
      
      Reviewed By: nikhilaravi
      
      Differential Revision: D30936533
      
      fbshipit-source-id: 789eb5004b6a233034ec1c500f20f2d507a303ff
      4281df19
  13. 01 Oct, 2021 3 commits
    • Jeremy Reizenstein's avatar
      Use C++/CUDA in points2vols · ee2b2feb
      Jeremy Reizenstein authored
      Summary:
      Move the core of add_points_to_volumes to the new C++/CUDA implementation. Add new flag to let the user stop this happening. Avoids copies. About a 30% speedup on the larger cases, up to 50% on the smaller cases.
      
      New timings
      ```
      Benchmark                                                               Avg Time(μs)      Peak Time(μs) Iterations
      --------------------------------------------------------------------------------
      ADD_POINTS_TO_VOLUMES_cpu_10_trilinear_[25, 25, 25]_1000                     4575           12591            110
      ADD_POINTS_TO_VOLUMES_cpu_10_trilinear_[25, 25, 25]_10000                   25468           29186             20
      ADD_POINTS_TO_VOLUMES_cpu_10_trilinear_[25, 25, 25]_100000                 202085          209897              3
      ADD_POINTS_TO_VOLUMES_cpu_10_trilinear_[101, 111, 121]_1000                 46059           48188             11
      ADD_POINTS_TO_VOLUMES_cpu_10_trilinear_[101, 111, 121]_10000                83759           95669              7
      ADD_POINTS_TO_VOLUMES_cpu_10_trilinear_[101, 111, 121]_100000              326056          339393              2
      ADD_POINTS_TO_VOLUMES_cpu_10_nearest_[25, 25, 25]_1000                       2379            4738            211
      ADD_POINTS_TO_VOLUMES_cpu_10_nearest_[25, 25, 25]_10000                     12100           63099             42
      ADD_POINTS_TO_VOLUMES_cpu_10_nearest_[25, 25, 25]_100000                    63323           63737              8
      ADD_POINTS_TO_VOLUMES_cpu_10_nearest_[101, 111, 121]_1000                   45216           45479             12
      ADD_POINTS_TO_VOLUMES_cpu_10_nearest_[101, 111, 121]_10000                  57205           58524              9
      ADD_POINTS_TO_VOLUMES_cpu_10_nearest_[101, 111, 121]_100000                139499          139926              4
      ADD_POINTS_TO_VOLUMES_cpu_100_trilinear_[25, 25, 25]_1000                   40129           40431             13
      ADD_POINTS_TO_VOLUMES_cpu_100_trilinear_[25, 25, 25]_10000                 204949          239293              3
      ADD_POINTS_TO_VOLUMES_cpu_100_trilinear_[25, 25, 25]_100000               1664541         1664541              1
      ADD_POINTS_TO_VOLUMES_cpu_100_trilinear_[101, 111, 121]_1000               391573          395108              2
      ADD_POINTS_TO_VOLUMES_cpu_100_trilinear_[101, 111, 121]_10000              674869          674869              1
      ADD_POINTS_TO_VOLUMES_cpu_100_trilinear_[101, 111, 121]_100000            2713632         2713632              1
      ADD_POINTS_TO_VOLUMES_cpu_100_nearest_[25, 25, 25]_1000                     12726           13506             40
      ADD_POINTS_TO_VOLUMES_cpu_100_nearest_[25, 25, 25]_10000                    73103           73299              7
      ADD_POINTS_TO_VOLUMES_cpu_100_nearest_[25, 25, 25]_100000                  598634          598634              1
      ADD_POINTS_TO_VOLUMES_cpu_100_nearest_[101, 111, 121]_1000                 398742          399256              2
      ADD_POINTS_TO_VOLUMES_cpu_100_nearest_[101, 111, 121]_10000                543129          543129              1
      ADD_POINTS_TO_VOLUMES_cpu_100_nearest_[101, 111, 121]_100000              1242956         1242956              1
      ADD_POINTS_TO_VOLUMES_cuda:0_10_trilinear_[25, 25, 25]_1000                  1814            8884            276
      ADD_POINTS_TO_VOLUMES_cuda:0_10_trilinear_[25, 25, 25]_10000                 1996            8851            251
      ADD_POINTS_TO_VOLUMES_cuda:0_10_trilinear_[25, 25, 25]_100000                4608           11529            109
      ADD_POINTS_TO_VOLUMES_cuda:0_10_trilinear_[101, 111, 121]_1000               5183           12508             97
      ADD_POINTS_TO_VOLUMES_cuda:0_10_trilinear_[101, 111, 121]_10000              7106           14077             71
      ADD_POINTS_TO_VOLUMES_cuda:0_10_trilinear_[101, 111, 121]_100000            25914           31818             20
      ADD_POINTS_TO_VOLUMES_cuda:0_10_nearest_[25, 25, 25]_1000                    1778            8823            282
      ADD_POINTS_TO_VOLUMES_cuda:0_10_nearest_[25, 25, 25]_10000                   1825            8613            274
      ADD_POINTS_TO_VOLUMES_cuda:0_10_nearest_[25, 25, 25]_100000                  3154           10161            159
      ADD_POINTS_TO_VOLUMES_cuda:0_10_nearest_[101, 111, 121]_1000                 4888            9404            103
      ADD_POINTS_TO_VOLUMES_cuda:0_10_nearest_[101, 111, 121]_10000                5194            9963             97
      ADD_POINTS_TO_VOLUMES_cuda:0_10_nearest_[101, 111, 121]_100000               8109           14933             62
      ADD_POINTS_TO_VOLUMES_cuda:0_100_trilinear_[25, 25, 25]_1000                 3320           10306            151
      ADD_POINTS_TO_VOLUMES_cuda:0_100_trilinear_[25, 25, 25]_10000                7003            8595             72
      ADD_POINTS_TO_VOLUMES_cuda:0_100_trilinear_[25, 25, 25]_100000              49140           52957             11
      ADD_POINTS_TO_VOLUMES_cuda:0_100_trilinear_[101, 111, 121]_1000             35890           36918             14
      ADD_POINTS_TO_VOLUMES_cuda:0_100_trilinear_[101, 111, 121]_10000            58890           59337              9
      ADD_POINTS_TO_VOLUMES_cuda:0_100_trilinear_[101, 111, 121]_100000          286878          287600              2
      ADD_POINTS_TO_VOLUMES_cuda:0_100_nearest_[25, 25, 25]_1000                   2484            8805            202
      ADD_POINTS_TO_VOLUMES_cuda:0_100_nearest_[25, 25, 25]_10000                  3967            9090            127
      ADD_POINTS_TO_VOLUMES_cuda:0_100_nearest_[25, 25, 25]_100000                19423           19799             26
      ADD_POINTS_TO_VOLUMES_cuda:0_100_nearest_[101, 111, 121]_1000               33228           33329             16
      ADD_POINTS_TO_VOLUMES_cuda:0_100_nearest_[101, 111, 121]_10000              37292           37370             14
      ADD_POINTS_TO_VOLUMES_cuda:0_100_nearest_[101, 111, 121]_100000             73550           74017              7
      --------------------------------------------------------------------------------
      ```
      Previous timings
      ```
      Benchmark                                                               Avg Time(μs)      Peak Time(μs) Iterations
      --------------------------------------------------------------------------------
      ADD_POINTS_TO_VOLUMES_cpu_10_trilinear_[25, 25, 25]_1000                    10100           46422             50
      ADD_POINTS_TO_VOLUMES_cpu_10_trilinear_[25, 25, 25]_10000                   28442           32100             18
      ADD_POINTS_TO_VOLUMES_cpu_10_trilinear_[25, 25, 25]_100000                 241127          254269              3
      ADD_POINTS_TO_VOLUMES_cpu_10_trilinear_[101, 111, 121]_1000                 54149           79480             10
      ADD_POINTS_TO_VOLUMES_cpu_10_trilinear_[101, 111, 121]_10000               125459          212734              4
      ADD_POINTS_TO_VOLUMES_cpu_10_trilinear_[101, 111, 121]_100000              512739          512739              1
      ADD_POINTS_TO_VOLUMES_cpu_10_nearest_[25, 25, 25]_1000                       2866           13365            175
      ADD_POINTS_TO_VOLUMES_cpu_10_nearest_[25, 25, 25]_10000                      7026           12604             72
      ADD_POINTS_TO_VOLUMES_cpu_10_nearest_[25, 25, 25]_100000                    48822           55607             11
      ADD_POINTS_TO_VOLUMES_cpu_10_nearest_[101, 111, 121]_1000                   38098           38576             14
      ADD_POINTS_TO_VOLUMES_cpu_10_nearest_[101, 111, 121]_10000                  48006           54120             11
      ADD_POINTS_TO_VOLUMES_cpu_10_nearest_[101, 111, 121]_100000                131563          138536              4
      ADD_POINTS_TO_VOLUMES_cpu_100_trilinear_[25, 25, 25]_1000                   64615           91735              8
      ADD_POINTS_TO_VOLUMES_cpu_100_trilinear_[25, 25, 25]_10000                 228815          246095              3
      ADD_POINTS_TO_VOLUMES_cpu_100_trilinear_[25, 25, 25]_100000               3086615         3086615              1
      ADD_POINTS_TO_VOLUMES_cpu_100_trilinear_[101, 111, 121]_1000               464298          465292              2
      ADD_POINTS_TO_VOLUMES_cpu_100_trilinear_[101, 111, 121]_10000             1053440         1053440              1
      ADD_POINTS_TO_VOLUMES_cpu_100_trilinear_[101, 111, 121]_100000            6736236         6736236              1
      ADD_POINTS_TO_VOLUMES_cpu_100_nearest_[25, 25, 25]_1000                     11940           12440             42
      ADD_POINTS_TO_VOLUMES_cpu_100_nearest_[25, 25, 25]_10000                    56641           58051              9
      ADD_POINTS_TO_VOLUMES_cpu_100_nearest_[25, 25, 25]_100000                  711492          711492              1
      ADD_POINTS_TO_VOLUMES_cpu_100_nearest_[101, 111, 121]_1000                 326437          329846              2
      ADD_POINTS_TO_VOLUMES_cpu_100_nearest_[101, 111, 121]_10000                418514          427911              2
      ADD_POINTS_TO_VOLUMES_cpu_100_nearest_[101, 111, 121]_100000              1524285         1524285              1
      ADD_POINTS_TO_VOLUMES_cuda:0_10_trilinear_[25, 25, 25]_1000                  5949           13602             85
      ADD_POINTS_TO_VOLUMES_cuda:0_10_trilinear_[25, 25, 25]_10000                 5817           13001             86
      ADD_POINTS_TO_VOLUMES_cuda:0_10_trilinear_[25, 25, 25]_100000               23833           25971             21
      ADD_POINTS_TO_VOLUMES_cuda:0_10_trilinear_[101, 111, 121]_1000               9029           16178             56
      ADD_POINTS_TO_VOLUMES_cuda:0_10_trilinear_[101, 111, 121]_10000             11595           18601             44
      ADD_POINTS_TO_VOLUMES_cuda:0_10_trilinear_[101, 111, 121]_100000            46986           47344             11
      ADD_POINTS_TO_VOLUMES_cuda:0_10_nearest_[25, 25, 25]_1000                    2554            9747            196
      ADD_POINTS_TO_VOLUMES_cuda:0_10_nearest_[25, 25, 25]_10000                   2676            9537            187
      ADD_POINTS_TO_VOLUMES_cuda:0_10_nearest_[25, 25, 25]_100000                  6567           14179             77
      ADD_POINTS_TO_VOLUMES_cuda:0_10_nearest_[101, 111, 121]_1000                 5840           12811             86
      ADD_POINTS_TO_VOLUMES_cuda:0_10_nearest_[101, 111, 121]_10000                6102           13128             82
      ADD_POINTS_TO_VOLUMES_cuda:0_10_nearest_[101, 111, 121]_100000              11945           11995             42
      ADD_POINTS_TO_VOLUMES_cuda:0_100_trilinear_[25, 25, 25]_1000                 7642           13671             66
      ADD_POINTS_TO_VOLUMES_cuda:0_100_trilinear_[25, 25, 25]_10000               25190           25260             20
      ADD_POINTS_TO_VOLUMES_cuda:0_100_trilinear_[25, 25, 25]_100000             212018          212134              3
      ADD_POINTS_TO_VOLUMES_cuda:0_100_trilinear_[101, 111, 121]_1000             40421           45692             13
      ADD_POINTS_TO_VOLUMES_cuda:0_100_trilinear_[101, 111, 121]_10000            92078           92132              6
      ADD_POINTS_TO_VOLUMES_cuda:0_100_trilinear_[101, 111, 121]_100000          457211          457229              2
      ADD_POINTS_TO_VOLUMES_cuda:0_100_nearest_[25, 25, 25]_1000                   3574           10377            140
      ADD_POINTS_TO_VOLUMES_cuda:0_100_nearest_[25, 25, 25]_10000                  7222           13023             70
      ADD_POINTS_TO_VOLUMES_cuda:0_100_nearest_[25, 25, 25]_100000                48127           48165             11
      ADD_POINTS_TO_VOLUMES_cuda:0_100_nearest_[101, 111, 121]_1000               34732           35295             15
      ADD_POINTS_TO_VOLUMES_cuda:0_100_nearest_[101, 111, 121]_10000              43050           51064             12
      ADD_POINTS_TO_VOLUMES_cuda:0_100_nearest_[101, 111, 121]_100000            106028          106058              5
      --------------------------------------------------------------------------------
      ```
      
      Reviewed By: nikhilaravi
      
      Differential Revision: D29548609
      
      fbshipit-source-id: 7026e832ea299145c3f6b55687f3c1601294f5c0
      ee2b2feb
    • Jeremy Reizenstein's avatar
      Cuda function for points2vols · 9ad98c87
      Jeremy Reizenstein authored
      Summary: Added CUDA implementation to match the new, still unused, C++ function for the core of points2vols.
      
      Reviewed By: nikhilaravi
      
      Differential Revision: D29548608
      
      fbshipit-source-id: 16ebb61787fcb4c70461f9215a86ad5f97aecb4e
      9ad98c87
    • Jeremy Reizenstein's avatar
      CPU function for points2vols · 0dfc6e0e
      Jeremy Reizenstein authored
      Summary: Single C++ function for the core of points2vols, not used anywhere yet. Added ability to control align_corners and the weight of each point, which may be useful later.
      
      Reviewed By: nikhilaravi
      
      Differential Revision: D29548607
      
      fbshipit-source-id: a5cda7ec2c14836624e7dfe744c4bbb3f3d3dfe2
      0dfc6e0e
  14. 30 Sep, 2021 3 commits
    • Jeremy Reizenstein's avatar
      save colors as uint8 in PLY · dd76b410
      Jeremy Reizenstein authored
      Summary: Allow saving colors as 8bit when writing .ply files.
      
      Reviewed By: patricklabatut, nikitos9000
      
      Differential Revision: D30905312
      
      fbshipit-source-id: 44500982c9ed6d6ee901e04f9623e22792a0e7f7
      dd76b410
    • Nikhila Ravi's avatar
      (new) CUDA IoU for 3D boxes · ff8d4762
      Nikhila Ravi authored
      Summary: CUDA implementation of 3D bounding box overlap calculation.
      
      Reviewed By: gkioxari
      
      Differential Revision: D31157919
      
      fbshipit-source-id: 5dc89805d01fef2d6779f00a33226131e39c43ed
      ff8d4762
    • Nikhila Ravi's avatar
      C++ IoU for 3D Boxes · 53266ec9
      Nikhila Ravi authored
      Summary: C++ Implementation of algorithm to compute 3D bounding boxes for batches of bboxes of shape (N, 8, 3) and (M, 8, 3).
      
      Reviewed By: gkioxari
      
      Differential Revision: D30905190
      
      fbshipit-source-id: 02e2cf025cd4fa3ff706ce5cf9b82c0fb5443f96
      53266ec9
  15. 29 Sep, 2021 1 commit
    • Nikhila Ravi's avatar
      IoU for 3D boxes · 2293f1fe
      Nikhila Ravi authored
      Summary:
      I have implemented an exact solution for 3D IoU of oriented 3D boxes.
      
      This file includes:
      * box3d_overlap: which computes the exact IoU of box1 and box2
      * box3d_overlap_sampling: which computes an approximate IoU of box1 and box2 by sampling points within the boxes
      
      Note that both implementations currently do not support batching.
      
      Our exact IoU implementation is based on the fact that the intersecting shape of the two 3D boxes will be formed by segments of the surface of the boxes. Our algorithm computes these segments by reasoning whether triangles of one box are within the second box and vice versa. We deal with intersecting triangles by clipping them.
      
      Reviewed By: gkioxari
      
      Differential Revision: D30667497
      
      fbshipit-source-id: 2f747f410f90b7f854eeaf3036794bc3ac982917
      2293f1fe
  16. 23 Sep, 2021 1 commit
    • Jeremy Reizenstein's avatar
      deterministic rasterization · 860b742a
      Jeremy Reizenstein authored
      Summary: Attempt to fix #659, an observation that the rasterizer is nondeterministic, by resolving tied faces by picking those with lower index.
      
      Reviewed By: nikhilaravi, patricklabatut
      
      Differential Revision: D30699039
      
      fbshipit-source-id: 39ed797eb7e9ce7370ae71259ad6b757f9449923
      860b742a
  17. 15 Sep, 2021 3 commits
    • Nikhila Ravi's avatar
      Farthest point sampling CUDA · bd04ffaf
      Nikhila Ravi authored
      Summary:
      CUDA implementation of farthest point sampling algorithm.
      
      ## Visual comparison
      
      Compared to random sampling, farthest point sampling gives better coverage of the shape.
      
      {F658631262}
      
      ## Reduction
      
      Parallelized block reduction to find the max value at each iteration happens as follows:
      
      1. First split the points into two equal sized parts (e.g. for a list with 8 values):
      `[20, 27, 6, 8 | 11, 10, 2, 33]`
      2. Use half of the thread (4 threads) to compare pairs of elements from each half (e.g elements [0, 4], [1, 5] etc) and store the result in the first half of the list:
      `[20, 27, 6, 33 | 11, 10, 2, 33]`
      Now we no longer care about the second part but again divide the first part into two
      `[20, 27 | 6, 33| -, -, -, -]`
      Now we can use 2 threads to compare the 4 elements
      4. Finally we have gotten down to a single pair
      `[20 | 33 | -, - | -, -, -, -]`
      Use 1 thread to compare the remaining two elements
      5. The max will now be at thread id = 0
      `[33 | - | -, - | -, -, -, -]`
      The reduction will give the farthest point for the selected batch index at this iteration.
      
      Reviewed By: bottler, jcjohnson
      
      Differential Revision: D30401803
      
      fbshipit-source-id: 525bd5ae27c4b13b501812cfe62306bb003827d2
      bd04ffaf
    • Nikhila Ravi's avatar
      Farthest point sampling C++ · d9f7611c
      Nikhila Ravi authored
      Summary: C++ implementation of iterative farthest point sampling.
      
      Reviewed By: jcjohnson
      
      Differential Revision: D30349887
      
      fbshipit-source-id: d25990f857752633859fe00283e182858a870269
      d9f7611c
    • Nikhila Ravi's avatar
      Farthest point sampling python naive · 3b7d78c7
      Nikhila Ravi authored
      Summary:
      This is a naive python implementation of the iterative farthest point sampling algorithm along with associated simple tests. The C++/CUDA implementations will follow in subsequent diffs.
      
      The algorithm is used to subsample a pointcloud with better coverage of the space of the pointcloud.
      
      The function has not been added to `__init__.py`. I will add this after the full C++/CUDA implementations.
      
      Reviewed By: jcjohnson
      
      Differential Revision: D30285716
      
      fbshipit-source-id: 33f4181041fc652776406bcfd67800a6f0c3dd58
      3b7d78c7
  18. 13 Sep, 2021 1 commit
    • Jeremy Reizenstein's avatar
      join_scene fix for TexturesUV · a0d76a70
      Jeremy Reizenstein authored
      Summary: Fix issue #826. This is a correction to the joining of TexturesUV into a single scene.
      
      Reviewed By: nikhilaravi
      
      Differential Revision: D30767092
      
      fbshipit-source-id: 03ba6a1d2f22e569d1b3641cd13ddbb8dcb87ec7
      a0d76a70
  19. 10 Sep, 2021 1 commit
    • Shangchen Han's avatar
      make so3_log_map torch script compatible · 46f727cb
      Shangchen Han authored
      Summary:
      * HAT_INV_SKEW_SYMMETRIC_TOL was a global variable and torch script gives an error when compiling that function. Move it to the function scope.
      * torch script gives error when compiling acos_linear_extrapolation because bound is a union of tuple and float. The tuple version is kept in this diff.
      
      Reviewed By: patricklabatut
      
      Differential Revision: D30614916
      
      fbshipit-source-id: 34258d200dc6a09fbf8917cac84ba8a269c00aef
      46f727cb
  20. 09 Sep, 2021 1 commit
  21. 02 Sep, 2021 1 commit
    • Jeremy Reizenstein's avatar
      update test_build for robustness · f2c44e35
      Jeremy Reizenstein authored
      Summary: Change cyclic deps test to be independent of test discovery order. Also let it work without plotly.
      
      Reviewed By: nikhilaravi
      
      Differential Revision: D30669614
      
      fbshipit-source-id: 2eadf3f8b56b6096c5466ce53b4f8ac6df27b964
      f2c44e35
  22. 01 Sep, 2021 1 commit
    • Nikhila Ravi's avatar
      (bug) Fix exception when creating a TextureAtlas · fc156b50
      Nikhila Ravi authored
      Summary: Fixes GitHub issue #751. The vectorized implementation of bilinear interpolation didn't properly handle the edge cases in the same way as the `grid_sample` method in PyTorch.
      
      Reviewed By: bottler
      
      Differential Revision: D30684208
      
      fbshipit-source-id: edf241ecbd72d46b94ad340a4e601e26c83db88e
      fc156b50
  23. 31 Aug, 2021 2 commits
    • Jeremy Reizenstein's avatar
      (breaking) image_size-agnostic GridRaySampler · 1b8d86a1
      Jeremy Reizenstein authored
      Summary:
      As suggested in #802. By not persisting the _xy_grid buffer, we can allow (in some cases) a model with one image_size to be loaded from a saved model which was trained at a different resolution.
      
      Also avoid persisting _frequencies in HarmonicEmbedding for similar reasons.
      
      BC-break: This will cause load_state_dict, in strict mode, to complain if you try to load an old model with the new code.
      
      Reviewed By: patricklabatut
      
      Differential Revision: D30349234
      
      fbshipit-source-id: d6061d1e51c9f79a78d61a9f732c9a5dfadbbb47
      1b8d86a1
    • Jeremy Reizenstein's avatar
      Use sample_pdf from PyTorch3D in NeRF · 12514463
      Jeremy Reizenstein authored
      Summary:
      Use PyTorch3D's new faster sample_pdf function instead of local Python implementation.
      
      Also clarify deps for the Python implementation.
      
      Reviewed By: gkioxari
      
      Differential Revision: D30512109
      
      fbshipit-source-id: 84cfdc00313fada37a6b29837de96f6a4646434f
      12514463
  24. 23 Aug, 2021 1 commit
    • Jeremy Reizenstein's avatar
      check for cyclic deps · 77fa5987
      Jeremy Reizenstein authored
      Summary: New test that each subpackage of pytorch3d imports cleanly.
      
      Reviewed By: patricklabatut
      
      Differential Revision: D30001632
      
      fbshipit-source-id: ca8dcac94491fc22f33602b3bbef481cba927094
      77fa5987
  25. 17 Aug, 2021 2 commits
    • Jeremy Reizenstein's avatar
      sample_pdf CUDA and C++ implementations. · 1ea2b727
      Jeremy Reizenstein authored
      Summary: Implement the sample_pdf function from the NeRF project as compiled operators.. The binary search (in searchsorted) is replaced with a low tech linear search, but this is not a problem for the envisaged numbers of bins.
      
      Reviewed By: gkioxari
      
      Differential Revision: D26312535
      
      fbshipit-source-id: df1c3119cd63d944380ed1b2657b6ad81d743e49
      1ea2b727
    • Jeremy Reizenstein's avatar
      Move sample_pdf into PyTorch3D · 7d7d00f2
      Jeremy Reizenstein authored
      Summary: Copy the sample_pdf operation from the NeRF project in to PyTorch3D, in preparation for optimizing it.
      
      Reviewed By: gkioxari
      
      Differential Revision: D27117930
      
      fbshipit-source-id: 20286b007f589a4c4d53ed818c4bc5f2abd22833
      7d7d00f2