1. 05 Nov, 2021 1 commit
  2. 26 Oct, 2021 2 commits
  3. 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
  4. 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
  5. 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
  6. 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
  7. 06 Oct, 2021 1 commit
  8. 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
  9. 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
  10. 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
  11. 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
  12. 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
  13. 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
  14. 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
  15. 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
  16. 09 Sep, 2021 1 commit
  17. 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
  18. 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
  19. 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
  20. 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
  21. 17 Aug, 2021 5 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
    • Jeremy Reizenstein's avatar
      cpu benchmarks for points to volumes · 46cf1970
      Jeremy Reizenstein authored
      Summary:
      Add a CPU version to the benchmarks.
      
      ```
      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: patricklabatut
      
      Differential Revision: D29522830
      
      fbshipit-source-id: 1e857db03613b0c6afcb68a58cdd7ba032e1a874
      46cf1970
    • Jeremy Reizenstein's avatar
      Points2vols doc fixes · 5491b465
      Jeremy Reizenstein authored
      Summary: Fixes to a couple of comments on points to volumes, make the mask work in round_points_to_volumes, and remove a duplicate rand calculation
      
      Reviewed By: nikhilaravi
      
      Differential Revision: D29522845
      
      fbshipit-source-id: 86770ba37ef3942b909baf63fd73eed1399635b6
      5491b465
    • Jeremy Reizenstein's avatar
      let build tests run in conda · ae1387b5
      Jeremy Reizenstein authored
      Summary: Much of the code is actually available during the conda tests, as long as we look in the right place. We enable some of them.
      
      Reviewed By: nikhilaravi
      
      Differential Revision: D30249357
      
      fbshipit-source-id: 01c57b6b8c04442237965f23eded594aeb90abfb
      ae1387b5
  22. 12 Aug, 2021 2 commits
    • Nikhila Ravi's avatar
      Ball Query · 103da633
      Nikhila Ravi authored
      Summary:
      Implementation of ball query from PointNet++.  This function is similar to KNN (find the neighbors in p2 for all points in p1). These are the key differences:
      -  It will return the **first** K neighbors within a specified radius as opposed to the **closest** K neighbors.
      - As all the points in p2 do not need to be considered to find the closest K, the algorithm is much faster than KNN when p2 has a large number of points.
      - The neighbors are not sorted
      - Due to the radius threshold it is not guaranteed that there will be K neighbors even if there are more than K points in p2.
      - The padding value for `idx` is -1 instead of 0.
      
      # Note:
      - Some of the code is very similar to KNN so it could be possible to modify the KNN forward kernels to support ball query.
      - Some users might want to use kNN with ball query - for this we could provide a wrapper function around the current `knn_points` which enables applying the radius threshold afterwards as an alternative. This could be called `ball_query_knn`.
      
      Reviewed By: jcjohnson
      
      Differential Revision: D30261362
      
      fbshipit-source-id: 66b6a7e0114beff7164daf7eba21546ff41ec450
      103da633
    • Jeremy Reizenstein's avatar
      Test website metadata · e5c58a8a
      Jeremy Reizenstein authored
      Summary: New test that notes and tutorials are listed in the website metadata, so that they will be included in the website build.
      
      Reviewed By: nikhilaravi
      
      Differential Revision: D30223799
      
      fbshipit-source-id: 2dca9730b54e68da2fd430a7b47cb7e18814d518
      e5c58a8a
  23. 09 Aug, 2021 1 commit
    • Nikhila Ravi's avatar
      Fix to allow cameras in the renderer forward pass · 80411783
      Nikhila Ravi authored
      Summary: Fix to resolve GitHub issue #796 - the cameras were being passed in the renderer forward pass instead of at initialization. The rasterizer was correctly using the cameras passed in the `kwargs` for the projection, but the `cameras` are still part of the `kwargs` for the `get_screen_to_ndc_transform` and `get_ndc_to_screen_transform` functions which is causing issues about duplicate arguments.
      
      Reviewed By: bottler
      
      Differential Revision: D30175679
      
      fbshipit-source-id: 547e88d8439456e728fa2772722df5fa0fe4584d
      80411783
  24. 02 Aug, 2021 1 commit
    • Georgia Gkioxari's avatar
      NDC/screen cameras API fix, compatibility with renderer · 0c32f094
      Georgia Gkioxari authored
      Summary:
      API fix for NDC/screen cameras and compatibility with PyTorch3D renderers.
      
      With this new fix:
      * Users can define cameras and `transform_points` under any coordinate system conventions. The transformation applies the camera K and RT to the input points, not regarding for PyTorch3D conventions. So this makes cameras completely independent from PyTorch3D renderer.
      
      * Cameras can be defined either in NDC space or screen space. For existing ones, FoV cameras are in NDC space. Perspective/Orthographic can be defined in NDC or screen space.
      
      * The interface with PyTorch3D renderers happens through `transform_points_ndc` which transforms points to the NDC space and assumes that input points are provided according to PyTorch3D conventions.
      
      * Similarly, `transform_points_screen` transforms points to screen space and again assumes that input points are under PyTorch3D conventions.
      
      * For Orthographic/Perspective cameras, if they are defined in screen space, the `get_ndc_camera_transform` allows points to be converted to NDC for use for the renderers.
      
      Reviewed By: nikhilaravi
      
      Differential Revision: D26932657
      
      fbshipit-source-id: 1a964e3e7caa54d10c792cf39c4d527ba2fb2e79
      0c32f094
  25. 19 Jul, 2021 2 commits
    • Jeremy Reizenstein's avatar
      restore build tests · 9e8d91eb
      Jeremy Reizenstein authored
      Summary: A bad env var check meant these tests were not being run. Fix that, and fix the copyright test for the new message format.
      
      Reviewed By: patricklabatut
      
      Differential Revision: D29734562
      
      fbshipit-source-id: a1a9bb68901b09c71c7b4ff81a04083febca8d50
      9e8d91eb
    • Alexey Sidnev's avatar
      Replace `torch.det()` with manual implementation for 3x3 matrix · bcee361d
      Alexey Sidnev authored
      Summary:
      # Background
      There is an unstable error during training (it can happen after several minutes or after several hours).
      The error is connected to `torch.det()` function in  `_check_valid_rotation_matrix()`.
      
      if I remove the function `torch.det()` in `_check_valid_rotation_matrix()` or remove the whole functions `_check_valid_rotation_matrix()` the error is disappeared (D29555876).
      
      # Solution
      Replace `torch.det()` with manual implementation for 3x3 matrix.
      
      Reviewed By: patricklabatut
      
      Differential Revision: D29655924
      
      fbshipit-source-id: 41bde1119274a705ab849751ece28873d2c45155
      bcee361d