kaolin.metrics.pointcloud

API

kaolin.metrics.pointcloud.chamfer_distance(p1, p2, w1=1.0, w2=1.0)

Computes the chamfer distance between two pointclouds

Parameters:
  • p1 (torch.Tensor) – pointclouds of shape (B, N, 3)
  • p2 (torch.Tensor) – pointclouds of shape (B, M, 3)
  • w1 (float) – weighting of forward direction. Default: 1.
  • w2 (float) – weighting of backward direction. Default: 1.
Returns:

chamfer distance between two pointclouds p1 and p2 of shape (B)

Return type:

(torch.Tensor)

Example

>>> p1 = torch.tensor([[[8.8977, 4.1709, 1.2839],
...                     [8.5640, 7.7767, 9.4214]],
...                    [[0.5431, 6.4495, 11.4914],
...                     [3.2126, 8.0865, 3.1018]]], device='cuda', dtype=torch.float)
>>> p2 = torch.tensor([[[6.9340, 6.1152, 3.4435],
...                     [0.1032, 9.8181, 11.3350]],
...                    [[11.4006, 2.2154, 7.9589],
...                     [4.2586, 1.4133, 7.2606]]], device='cuda', dtype=torch.float)
>>> chamfer_distance(p1, p2)
tensor([ 72.5838, 151.0809], device='cuda:0')
kaolin.metrics.pointcloud.f_score(gt_points, pred_points, radius=0.01, eps=1e-08)

Computes the f-score of two sets of points, with a hit defined by two point existing within a defined radius of each other

Parameters:
  • gt_points (torch.Tensor) – ground truth pointclouds of shape (B, N, 3)
  • pred_points (torch.Tensor) – predicted points pointclouds of shape (B, M, 3)
  • radius (float) – radius from a point to define a hit Default: 0.01
  • eps (float) – epsilon used to calculate f score.
Returns:

computed f-score tensor of shape (B), which has the same dtype as input pred_points.

Return type:

(torch.Tensor)

Example

>>> p1 = torch.tensor([[[8.8977, 4.1709, 1.2839],
...                     [8.5640, 7.7767, 9.4214]],
...                    [[0.5431, 6.4495, 11.4914],
...                     [3.2126, 8.0865, 3.1018]]], device='cuda', dtype=torch.float)
>>> p2 = torch.tensor([[[9.4863, 4.2249, 0.1712],
...                     [8.1783, 8.5310, 8.5119]],
...                    [[-0.0020699, 6.4429, 12.3],
...                     [3.8386, 8.3585, 4.7662]]], device='cuda', dtype=torch.float)
>>> f_score(p1, p2, radius=1)
tensor([0.5000, 0.0000], device='cuda:0')
>>> f_score(p1, p2, radius=1.5)
tensor([1.0000, 0.5000], device='cuda:0')
kaolin.metrics.pointcloud.sided_distance(p1, p2)

For every point in p1 find the indices and euclidean distances of the closest point in p2.

Parameters:
Returns:

the indices and distances from points in p1 to the corresponding closest points in p2, both have shape of (B, N)

Return type:

(torch.Tensor, torch.Tensor)

Example

>>> p1 = torch.tensor([[[5.9336, 4.9742, 8.1047]],
...                    [[4.1939, 3.3612, 9.5407]]], device='cuda', dtype=torch.float)
>>> p2 = torch.tensor([[[1.6998, 0.7719, 2.9987],
...                     [0.1812, 8.9342, 10.0285]],
...                    [[10.0184, 0.3928, 5.2545],
...                     [4.2934, 11.2127, 4.5247]]], device='cuda', dtype=torch.float)
>>> distance, idx = sided_distance(p1, p2)
>>> distance
tensor([[52.4727],
        [61.1077]], device='cuda:0')
>>> idx
tensor([[1],
        [0]], device='cuda:0')