• iterative farthest point sample (IFPS or FPS)


    目录

    1. 概念

    2. 图例说明

    3. 代码实现


    1. 概念

    迭代最远距离采样,在点云论文PointNet++和PF-Net中用于对点云数据下采样。

    (1)随机选择一个点作为已选择采样点;

    (2)计算未选择采样点集中每个点与已选择采样点集之间的最小距离作为到采样点集的距离;

    (3)将距离最大的那个点加入已选择采样点集,然后更新distance,一直循环迭代下去,直至获得了目标数量的采样点。

    2. 图例说明

    如下所示,5个点,如果采样3个点,则依次采样1,5,4. 其中distance是每个点到各自采样点的距离,dist是所有点和当前采样点的距离。

      

     

    3. 代码实现

    来自PF-Net 

    1. def farthest_point_sample(xyz, npoint, RAN=True):
    2. """
    3. 下采样,提取npoint个点作为骨架点
    4. Input:
    5. xyz: pointcloud data, [B, N, C]. eg. (8,512,3)
    6. npoint: number of samples. eg. 64
    7. Return:
    8. centroids: sampled pointcloud index, [B, npoint]
    9. """
    10. device = xyz.device
    11. B, N, C = xyz.shape
    12. centroid_idx = torch.zeros(B, npoint, dtype=torch.long).to(device) # (b,64). 全0。存放已选择采样点集的索引
    13. distance = torch.ones(B, N).to(device) * 1e10 # (b,512). 超大值。保存的是点云中每个点到已采样点集合中的最小值。
    14. if RAN: # 是否随机选择一个点作为已选择采样点
    15. farthest_idx = torch.randint(0, 1, (B,), dtype=torch.long).to(device) # (b,) 填充全0. 这里代码应该是写错了。
    16. else: # 不随机,直接填充全1
    17. farthest_idx = torch.randint(1, 2, (B,), dtype=torch.long).to(device) # (b,) 填充全1. 选择一个初始点作为已选择采样点
    18. batch_indices = torch.arange(B, dtype=torch.long).to(device) # (b,). val=[0,1,2,...]
    19. for i in range(npoint): # 画个图就能理解
    20. centroid_idx[:, i] = farthest_idx # (b,512). (b). 将距离最大的那个点的索引加入已选择采样点集
    21. centroid = xyz[batch_indices, farthest_idx, :].view(B, 1, 3) # 当前采样点集坐标. (b,3)->(b,1,3)
    22. dist = torch.sum((xyz - centroid) ** 2, -1) # 计算每个点和当前采样点之间的距离. xyz(b,512,3). centroid(b,1,3). (b,512)
    23. mask = dist < distance # (b,512). 所有的点和已选择采样点的距离,是否比之前的更近
    24. distance[mask] = dist[mask] # 更新为更近的distance. 存放所有点和各自采样点之间的距离
    25. farthest_idx = torch.max(distance, -1)[1] # (b,512)->(b,1). 即当前点云中找到距离采样点最远的索引
    26. return centroid_idx # (b,64)

  • 相关阅读:
    4.0体验站|我对OceanBase 4.0社区版的体验与看法
    从零开始学网站建设:从需求分析到上线发布
    word实用小技能(肝论文必备)
    LeetCode --- 1403. Minimum Subsequence in Non-Increasing Order 解题报告
    14:00面试,14:06就出来了,问的问题有点变态。。。
    拒绝无效记账,超实用的技巧帮你省钱
    Linux dts list python tool
    parallelStream并行流性能
    解决计算机视觉模型中的种族和性别偏见问题,Meta开源 FACET工具
    group by 分组【mysql数据库】
  • 原文地址:https://blog.csdn.net/jizhidexiaoming/article/details/128198099