1. 13 Jul, 2020 1 commit
    • Justin Johnson's avatar
      CUDA kernel for interpolate_face_attributes · 26d2cc24
      Justin Johnson authored
      Summary: When rendering meshes with Phong shading, interpolate_face_attributes was taking up a nontrivial fraction of the overall shading time. This diff replaces our Python implementation of this function with a CUDA implementation.
      
      Reviewed By: nikhilaravi
      
      Differential Revision: D21610763
      
      fbshipit-source-id: 2bb362a28f698541812aeab539047264b125ebb8
      26d2cc24
  2. 23 Apr, 2020 1 commit
    • Roman Shapovalov's avatar
      Not normalising control points by X.std() · 54b482bd
      Roman Shapovalov authored
      Summary:
      davnov134 found that the algorithm crashes if X is an axis-aligned plane. This is because I implemented scaling control points by `X.std()` as a poor man’s version of PCA whitening.
      I checked that it does not bring consistent improvements, so let’s get rid of it.
      
      The algorithm still results in slightly higher errors on the axis aligned planes but at least it does not crash. As a next step, I will experiment with detecting a planar case and using 3-point barycentric coordinates rather than 4-points.
      
      Reviewed By: davnov134
      
      Differential Revision: D21179968
      
      fbshipit-source-id: 1f002fce5541934486b51808be0e910324977222
      54b482bd
  3. 17 Apr, 2020 1 commit
    • David Novotny's avatar
      Pointcloud normals estimation. · 365945b1
      David Novotny authored
      Summary: Estimates normals of a point cloud.
      
      Reviewed By: gkioxari
      
      Differential Revision: D20860182
      
      fbshipit-source-id: 652ec2743fa645e02c01ffa37c2971bf27b89cef
      365945b1
  4. 16 Apr, 2020 2 commits
    • David Novotny's avatar
      ICP - point-to-point version · 8abbe22f
      David Novotny authored
      Summary:
      The iterative closest point algorithm - point-to-point version.
      
      Output of `bm_iterative_closest_point`:
      Argument key: `batch_size dim n_points_X n_points_Y use_pointclouds`
      
      ```
      Benchmark                                         Avg Time(μs)      Peak Time(μs) Iterations
      --------------------------------------------------------------------------------
      IterativeClosestPoint_1_3_100_100_False              107569          111323              5
      IterativeClosestPoint_1_3_100_1000_False             118972          122306              5
      IterativeClosestPoint_1_3_1000_100_False             108576          110978              5
      IterativeClosestPoint_1_3_1000_1000_False            331836          333515              2
      IterativeClosestPoint_1_20_100_100_False             134387          137842              4
      IterativeClosestPoint_1_20_100_1000_False            149218          153405              4
      IterativeClosestPoint_1_20_1000_100_False            414248          416595              2
      IterativeClosestPoint_1_20_1000_1000_False           374318          374662              2
      IterativeClosestPoint_10_3_100_100_False             539852          539852              1
      IterativeClosestPoint_10_3_100_1000_False            752784          752784              1
      IterativeClosestPoint_10_3_1000_100_False           1070700         1070700              1
      IterativeClosestPoint_10_3_1000_1000_False          1164020         1164020              1
      IterativeClosestPoint_10_20_100_100_False            374548          377337              2
      IterativeClosestPoint_10_20_100_1000_False           472764          476685              2
      IterativeClosestPoint_10_20_1000_100_False          1457175         1457175              1
      IterativeClosestPoint_10_20_1000_1000_False         2195820         2195820              1
      IterativeClosestPoint_1_3_100_100_True               110084          115824              5
      IterativeClosestPoint_1_3_100_1000_True              142728          147696              4
      IterativeClosestPoint_1_3_1000_100_True              212966          213966              3
      IterativeClosestPoint_1_3_1000_1000_True             369130          375114              2
      IterativeClosestPoint_10_3_100_100_True              354615          355179              2
      IterativeClosestPoint_10_3_100_1000_True             451815          452704              2
      IterativeClosestPoint_10_3_1000_100_True             511833          511833              1
      IterativeClosestPoint_10_3_1000_1000_True            798453          798453              1
      --------------------------------------------------------------------------------
      ```
      
      Reviewed By: shapovalov, gkioxari
      
      Differential Revision: D19909952
      
      fbshipit-source-id: f77fadc88fb7c53999909d594114b182ee2a3def
      8abbe22f
    • Nikhila Ravi's avatar
      remove nearest_neighbors · 3794f675
      Nikhila Ravi authored
      Summary: knn is more general and faster than the nearest_neighbor code, so remove the latter.
      
      Reviewed By: gkioxari
      
      Differential Revision: D20816424
      
      fbshipit-source-id: 75d6c44d17180752d0c9859814bbdf7892558158
      3794f675
  5. 15 Apr, 2020 1 commit
    • Georgia Gkioxari's avatar
      knn autograd · b2b0c5a4
      Georgia Gkioxari authored
      Summary:
      Adds knn backward to return `grad_pts1` and `grad_pts2`. Adds `knn_gather` to return the nearest neighbors in pts2.
      
      The BM tests include backward pass and are ran on an M40.
      ```
      Benchmark                               Avg Time(μs)      Peak Time(μs) Iterations
      --------------------------------------------------------------------------------
      KNN_SQUARE_32_256_128_3_24_cpu              39558           43485             13
      KNN_SQUARE_32_256_128_3_24_cuda:0            1080            1404            463
      KNN_SQUARE_32_256_512_3_24_cpu              81950           85781              7
      KNN_SQUARE_32_256_512_3_24_cuda:0            1519            1641            330
      --------------------------------------------------------------------------------
      
      Benchmark                               Avg Time(μs)      Peak Time(μs) Iterations
      --------------------------------------------------------------------------------
      KNN_RAGGED_32_256_128_3_24_cpu              13798           14650             37
      KNN_RAGGED_32_256_128_3_24_cuda:0            1576            1713            318
      KNN_RAGGED_32_256_512_3_24_cpu              31255           32210             16
      KNN_RAGGED_32_256_512_3_24_cuda:0            2024            2162            248
      --------------------------------------------------------------------------------
      ```
      
      Reviewed By: jcjohnson
      
      Differential Revision: D20945556
      
      fbshipit-source-id: a16f616029c6b5f8c2afceb5f2bc12c5c20d2f3c
      b2b0c5a4
  6. 02 Apr, 2020 1 commit
    • David Novotny's avatar
      Umeyama · e5b1d6d3
      David Novotny authored
      Summary:
      Umeyama estimates a rigid motion between two sets of corresponding points.
      
      Benchmark output for `bm_points_alignment`
      
      ```
      Arguments key: [<allow_reflection>_<batch_size>_<dim>_<estimate_scale>_<n_points>_<use_pointclouds>]
      Benchmark                                                        Avg Time(μs)      Peak Time(μs) Iterations
      --------------------------------------------------------------------------------
      CorrespodingPointsAlignment_True_1_3_True_100_False                   7382            9833             68
      CorrespodingPointsAlignment_True_1_3_True_10000_False                 8183           10500             62
      CorrespodingPointsAlignment_True_1_3_False_100_False                  7301            9263             69
      CorrespodingPointsAlignment_True_1_3_False_10000_False                7945            9746             64
      CorrespodingPointsAlignment_True_1_20_True_100_False                 13706           41623             37
      CorrespodingPointsAlignment_True_1_20_True_10000_False               11044           33766             46
      CorrespodingPointsAlignment_True_1_20_False_100_False                 9908           28791             51
      CorrespodingPointsAlignment_True_1_20_False_10000_False               9523           18680             53
      CorrespodingPointsAlignment_True_10_3_True_100_False                 29585           32026             17
      CorrespodingPointsAlignment_True_10_3_True_10000_False               29626           36324             18
      CorrespodingPointsAlignment_True_10_3_False_100_False                26013           29253             20
      CorrespodingPointsAlignment_True_10_3_False_10000_False              25000           33820             20
      CorrespodingPointsAlignment_True_10_20_True_100_False                40955           41592             13
      CorrespodingPointsAlignment_True_10_20_True_10000_False              42087           42393             12
      CorrespodingPointsAlignment_True_10_20_False_100_False               39863           40381             13
      CorrespodingPointsAlignment_True_10_20_False_10000_False             40813           41699             13
      CorrespodingPointsAlignment_True_100_3_True_100_False               183146          194745              3
      CorrespodingPointsAlignment_True_100_3_True_10000_False             213789          231466              3
      CorrespodingPointsAlignment_True_100_3_False_100_False              177805          180796              3
      CorrespodingPointsAlignment_True_100_3_False_10000_False            184963          185695              3
      CorrespodingPointsAlignment_True_100_20_True_100_False              347181          347325              2
      CorrespodingPointsAlignment_True_100_20_True_10000_False            363259          363613              2
      CorrespodingPointsAlignment_True_100_20_False_100_False             351769          352496              2
      CorrespodingPointsAlignment_True_100_20_False_10000_False           375629          379818              2
      CorrespodingPointsAlignment_False_1_3_True_100_False                 11155           13770             45
      CorrespodingPointsAlignment_False_1_3_True_10000_False               10743           13938             47
      CorrespodingPointsAlignment_False_1_3_False_100_False                 9578           11511             53
      CorrespodingPointsAlignment_False_1_3_False_10000_False               9549           11984             53
      CorrespodingPointsAlignment_False_1_20_True_100_False                13809           14183             37
      CorrespodingPointsAlignment_False_1_20_True_10000_False              14084           15082             36
      CorrespodingPointsAlignment_False_1_20_False_100_False               12765           14177             40
      CorrespodingPointsAlignment_False_1_20_False_10000_False             12811           13096             40
      CorrespodingPointsAlignment_False_10_3_True_100_False                28823           39384             18
      CorrespodingPointsAlignment_False_10_3_True_10000_False              27135           27525             19
      CorrespodingPointsAlignment_False_10_3_False_100_False               26236           28980             20
      CorrespodingPointsAlignment_False_10_3_False_10000_False             42324           45123             12
      CorrespodingPointsAlignment_False_10_20_True_100_False              723902          723902              1
      CorrespodingPointsAlignment_False_10_20_True_10000_False            220007          252886              3
      CorrespodingPointsAlignment_False_10_20_False_100_False              55593           71636              9
      CorrespodingPointsAlignment_False_10_20_False_10000_False            44419           71861             12
      CorrespodingPointsAlignment_False_100_3_True_100_False              184768          185199              3
      CorrespodingPointsAlignment_False_100_3_True_10000_False            198657          213868              3
      CorrespodingPointsAlignment_False_100_3_False_100_False             224598          309645              3
      CorrespodingPointsAlignment_False_100_3_False_10000_False           197863          202002              3
      CorrespodingPointsAlignment_False_100_20_True_100_False             293484          309459              2
      CorrespodingPointsAlignment_False_100_20_True_10000_False           327253          366644              2
      CorrespodingPointsAlignment_False_100_20_False_100_False            420793          422194              2
      CorrespodingPointsAlignment_False_100_20_False_10000_False          462634          485542              2
      CorrespodingPointsAlignment_True_1_3_True_100_True                    7664            9909             66
      CorrespodingPointsAlignment_True_1_3_True_10000_True                  7190            8366             70
      CorrespodingPointsAlignment_True_1_3_False_100_True                   6549            8316             77
      CorrespodingPointsAlignment_True_1_3_False_10000_True                 6534            7710             77
      CorrespodingPointsAlignment_True_10_3_True_100_True                  29052           32940             18
      CorrespodingPointsAlignment_True_10_3_True_10000_True                30526           33453             17
      CorrespodingPointsAlignment_True_10_3_False_100_True                 28708           32993             18
      CorrespodingPointsAlignment_True_10_3_False_10000_True               30630           35973             17
      CorrespodingPointsAlignment_True_100_3_True_100_True                264909          320820              3
      CorrespodingPointsAlignment_True_100_3_True_10000_True              310902          322604              2
      CorrespodingPointsAlignment_True_100_3_False_100_True               246832          250634              3
      CorrespodingPointsAlignment_True_100_3_False_10000_True             276006          289061              2
      CorrespodingPointsAlignment_False_1_3_True_100_True                  11421           13757             44
      CorrespodingPointsAlignment_False_1_3_True_10000_True                11199           12532             45
      CorrespodingPointsAlignment_False_1_3_False_100_True                 11474           15841             44
      CorrespodingPointsAlignment_False_1_3_False_10000_True               10384           13188             49
      CorrespodingPointsAlignment_False_10_3_True_100_True                 36599           47340             14
      CorrespodingPointsAlignment_False_10_3_True_10000_True               40702           50754             13
      CorrespodingPointsAlignment_False_10_3_False_100_True                41277           52149             13
      CorrespodingPointsAlignment_False_10_3_False_10000_True              34286           37091             15
      CorrespodingPointsAlignment_False_100_3_True_100_True               254991          258578              2
      CorrespodingPointsAlignment_False_100_3_True_10000_True             257999          261285              2
      CorrespodingPointsAlignment_False_100_3_False_100_True              247511          248693              3
      CorrespodingPointsAlignment_False_100_3_False_10000_True            251807          263865              3
      ```
      
      Reviewed By: gkioxari
      
      Differential Revision: D19808389
      
      fbshipit-source-id: 83305a58627d2fc5dcaf3c3015132d8148f28c29
      e5b1d6d3
  7. 29 Mar, 2020 1 commit
    • Patrick Labatut's avatar
      Address black + isort fbsource linter warnings · d57daa6f
      Patrick Labatut authored
      Summary: Address black + isort fbsource linter warnings from D20558374 (previous diff)
      
      Reviewed By: nikhilaravi
      
      Differential Revision: D20558373
      
      fbshipit-source-id: d3607de4a01fb24c0d5269634563a7914bddf1c8
      d57daa6f
  8. 20 Feb, 2020 1 commit
    • Georgia Gkioxari's avatar
      face areas backward · a3baa367
      Georgia Gkioxari authored
      Summary:
      Added backward for mesh face areas & normals. Exposed it as a layer. Replaced the computation with the new op in Meshes and in Sample Points.
      
      Current issue: Circular imports. I moved the import of the op in meshes inside the function scope.
      
      Reviewed By: jcjohnson
      
      Differential Revision: D19920082
      
      fbshipit-source-id: d213226d5e1d19a0c8452f4d32771d07e8b91c0a
      a3baa367
  9. 19 Feb, 2020 1 commit
    • Georgia Gkioxari's avatar
      cpp support for packed to padded · 60f3c4e7
      Georgia Gkioxari authored
      Summary:
      Cpu implementation for packed to padded and added gradients
      ```
      Benchmark                                     Avg Time(μs)      Peak Time(μs) Iterations
      --------------------------------------------------------------------------------
      PACKED_TO_PADDED_2_100_300_1_cpu                    138             221           3625
      PACKED_TO_PADDED_2_100_300_1_cuda:0                 184             261           2716
      PACKED_TO_PADDED_2_100_300_16_cpu                   555             726            901
      PACKED_TO_PADDED_2_100_300_16_cuda:0                179             260           2794
      PACKED_TO_PADDED_2_100_3000_1_cpu                   396             519           1262
      PACKED_TO_PADDED_2_100_3000_1_cuda:0                181             274           2764
      PACKED_TO_PADDED_2_100_3000_16_cpu                 4517            5003            111
      PACKED_TO_PADDED_2_100_3000_16_cuda:0               224             397           2235
      PACKED_TO_PADDED_2_1000_300_1_cpu                   138             212           3616
      PACKED_TO_PADDED_2_1000_300_1_cuda:0                180             282           2775
      PACKED_TO_PADDED_2_1000_300_16_cpu                  565             711            885
      PACKED_TO_PADDED_2_1000_300_16_cuda:0               179             264           2797
      PACKED_TO_PADDED_2_1000_3000_1_cpu                  389             494           1287
      PACKED_TO_PADDED_2_1000_3000_1_cuda:0               180             271           2777
      PACKED_TO_PADDED_2_1000_3000_16_cpu                4522            5170            111
      PACKED_TO_PADDED_2_1000_3000_16_cuda:0              216             286           2313
      PACKED_TO_PADDED_10_100_300_1_cpu                   251             345           1995
      PACKED_TO_PADDED_10_100_300_1_cuda:0                178             262           2806
      PACKED_TO_PADDED_10_100_300_16_cpu                 2354            2750            213
      PACKED_TO_PADDED_10_100_300_16_cuda:0               178             291           2814
      PACKED_TO_PADDED_10_100_3000_1_cpu                 1519            1786            330
      PACKED_TO_PADDED_10_100_3000_1_cuda:0               179             237           2791
      PACKED_TO_PADDED_10_100_3000_16_cpu               24705           25879             21
      PACKED_TO_PADDED_10_100_3000_16_cuda:0              228             316           2191
      PACKED_TO_PADDED_10_1000_300_1_cpu                  261             432           1919
      PACKED_TO_PADDED_10_1000_300_1_cuda:0               181             261           2756
      PACKED_TO_PADDED_10_1000_300_16_cpu                2349            2770            213
      PACKED_TO_PADDED_10_1000_300_16_cuda:0              180             256           2782
      PACKED_TO_PADDED_10_1000_3000_1_cpu                1613            1929            310
      PACKED_TO_PADDED_10_1000_3000_1_cuda:0              183             253           2739
      PACKED_TO_PADDED_10_1000_3000_16_cpu              22041           23653             23
      PACKED_TO_PADDED_10_1000_3000_16_cuda:0             220             343           2270
      PACKED_TO_PADDED_32_100_300_1_cpu                   555             750            901
      PACKED_TO_PADDED_32_100_300_1_cuda:0                188             282           2661
      PACKED_TO_PADDED_32_100_300_16_cpu                 7550            8131             67
      PACKED_TO_PADDED_32_100_300_16_cuda:0               181             272           2770
      PACKED_TO_PADDED_32_100_3000_1_cpu                 4574            6327            110
      PACKED_TO_PADDED_32_100_3000_1_cuda:0               173             254           2884
      PACKED_TO_PADDED_32_100_3000_16_cpu               70366           72563              8
      PACKED_TO_PADDED_32_100_3000_16_cuda:0              349             654           1433
      PACKED_TO_PADDED_32_1000_300_1_cpu                  612             728            818
      PACKED_TO_PADDED_32_1000_300_1_cuda:0               189             295           2647
      PACKED_TO_PADDED_32_1000_300_16_cpu                7699            8254             65
      PACKED_TO_PADDED_32_1000_300_16_cuda:0              189             311           2646
      PACKED_TO_PADDED_32_1000_3000_1_cpu                5105            5261             98
      PACKED_TO_PADDED_32_1000_3000_1_cuda:0              191             260           2625
      PACKED_TO_PADDED_32_1000_3000_16_cpu              87073           92708              6
      PACKED_TO_PADDED_32_1000_3000_16_cuda:0             344             425           1455
      --------------------------------------------------------------------------------
      
      Benchmark                                           Avg Time(μs)      Peak Time(μs) Iterations
      --------------------------------------------------------------------------------
      PACKED_TO_PADDED_TORCH_2_100_300_1_cpu                    492             627           1016
      PACKED_TO_PADDED_TORCH_2_100_300_1_cuda:0                 768             975            652
      PACKED_TO_PADDED_TORCH_2_100_300_16_cpu                   659             804            760
      PACKED_TO_PADDED_TORCH_2_100_300_16_cuda:0                781             918            641
      PACKED_TO_PADDED_TORCH_2_100_3000_1_cpu                   624             734            802
      PACKED_TO_PADDED_TORCH_2_100_3000_1_cuda:0                778             929            643
      PACKED_TO_PADDED_TORCH_2_100_3000_16_cpu                 2609            2850            192
      PACKED_TO_PADDED_TORCH_2_100_3000_16_cuda:0               758             901            660
      PACKED_TO_PADDED_TORCH_2_1000_300_1_cpu                   467             612           1072
      PACKED_TO_PADDED_TORCH_2_1000_300_1_cuda:0                772             905            648
      PACKED_TO_PADDED_TORCH_2_1000_300_16_cpu                  689             839            726
      PACKED_TO_PADDED_TORCH_2_1000_300_16_cuda:0               789            1143            635
      PACKED_TO_PADDED_TORCH_2_1000_3000_1_cpu                  629             735            795
      PACKED_TO_PADDED_TORCH_2_1000_3000_1_cuda:0               812             916            616
      PACKED_TO_PADDED_TORCH_2_1000_3000_16_cpu                2716            3117            185
      PACKED_TO_PADDED_TORCH_2_1000_3000_16_cuda:0              844            1288            593
      PACKED_TO_PADDED_TORCH_10_100_300_1_cpu                  2387            2557            210
      PACKED_TO_PADDED_TORCH_10_100_300_1_cuda:0               4112            4993            122
      PACKED_TO_PADDED_TORCH_10_100_300_16_cpu                 3385            4254            148
      PACKED_TO_PADDED_TORCH_10_100_300_16_cuda:0              3959            4902            127
      PACKED_TO_PADDED_TORCH_10_100_3000_1_cpu                 2918            3105            172
      PACKED_TO_PADDED_TORCH_10_100_3000_1_cuda:0              4054            4450            124
      PACKED_TO_PADDED_TORCH_10_100_3000_16_cpu               12748           13623             40
      PACKED_TO_PADDED_TORCH_10_100_3000_16_cuda:0             4023            4395            125
      PACKED_TO_PADDED_TORCH_10_1000_300_1_cpu                 2258            2492            222
      PACKED_TO_PADDED_TORCH_10_1000_300_1_cuda:0              3997            4312            126
      PACKED_TO_PADDED_TORCH_10_1000_300_16_cpu                3404            3597            147
      PACKED_TO_PADDED_TORCH_10_1000_300_16_cuda:0             3877            4227            129
      PACKED_TO_PADDED_TORCH_10_1000_3000_1_cpu                2789            3054            180
      PACKED_TO_PADDED_TORCH_10_1000_3000_1_cuda:0             3821            4402            131
      PACKED_TO_PADDED_TORCH_10_1000_3000_16_cpu              11967           12963             42
      PACKED_TO_PADDED_TORCH_10_1000_3000_16_cuda:0            3729            4290            135
      PACKED_TO_PADDED_TORCH_32_100_300_1_cpu                  6933            8152             73
      PACKED_TO_PADDED_TORCH_32_100_300_1_cuda:0              11856           12287             43
      PACKED_TO_PADDED_TORCH_32_100_300_16_cpu                 9895           11205             51
      PACKED_TO_PADDED_TORCH_32_100_300_16_cuda:0             12354           13596             41
      PACKED_TO_PADDED_TORCH_32_100_3000_1_cpu                 9516           10128             53
      PACKED_TO_PADDED_TORCH_32_100_3000_1_cuda:0             12917           13597             39
      PACKED_TO_PADDED_TORCH_32_100_3000_16_cpu               41209           43783             13
      PACKED_TO_PADDED_TORCH_32_100_3000_16_cuda:0            12210           13288             41
      PACKED_TO_PADDED_TORCH_32_1000_300_1_cpu                 7179            7689             70
      PACKED_TO_PADDED_TORCH_32_1000_300_1_cuda:0             11896           12381             43
      PACKED_TO_PADDED_TORCH_32_1000_300_16_cpu               10127           15494             50
      PACKED_TO_PADDED_TORCH_32_1000_300_16_cuda:0            12034           12817             42
      PACKED_TO_PADDED_TORCH_32_1000_3000_1_cpu                8743           10251             58
      PACKED_TO_PADDED_TORCH_32_1000_3000_1_cuda:0            12023           12908             42
      PACKED_TO_PADDED_TORCH_32_1000_3000_16_cpu              39071           41777             13
      PACKED_TO_PADDED_TORCH_32_1000_3000_16_cuda:0           11999           13690             42
      --------------------------------------------------------------------------------
      ```
      
      Reviewed By: bottler, nikhilaravi, jcjohnson
      
      Differential Revision: D19870575
      
      fbshipit-source-id: 23a2477b73373c411899633386c87ab034c3702a
      60f3c4e7
  10. 23 Jan, 2020 1 commit