目录

1. 概念

2. 图例说明

3. 代码实现


1. 概念

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

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

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

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

2. 图例说明

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

3. 代码实现

来自PF-Net

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

iterative farthest point sample (IFPS or FPS)相关推荐

  1. 计算机视觉知识点整理:PointNet++之最远点采样(farthest point sample, FPS)代码理解

    # farthest_point_sample函数完成最远点采样: # 从一个输入点云中按照所需要的点的个数npoint采样出足够多的点, # 并且点与点之间的距离要足够远. # 返回结果是npoin ...

  2. PF-Net基于深度学习的点云补全网络

    目录 1. 论文和代码 2. 论文阅读笔记 2.1 目的和框架 2.2 IFPS 下采样 3. 源码解读 3.1 载入数据 3.1.1 归一化操作 3.2 数据前处理 3.3 网络输入输出 3.3.1 ...

  3. CUDA sample volumeRender

    CUDA sample volumeRender 如果出现错误,记得判定一下OpenGL是不是在集成显卡上生成的,如果是则把集成显卡禁用掉就行了. 1.thread.block.grid https: ...

  4. 最远点采样(Farthest Point Sampling)

    简介 以下我们将最远点采样(Farthest Point Sampling)简记为FPS.这种采样方法我觉得非常有趣.个人觉得比随机采样得到的数据能够表现更多的"轮廓性",其次用的 ...

  5. 点云网络的论文理解(四)-点云网络的优化 PointNet++: Deep Hierarchical Feature Learning on Point Sets in a Metric Space

    目录 0.Abstract 0.1逐句翻译 0.2总结 1.Introduction 1.1逐句翻译 1.2总结 2.Problem Statement 2.1翻译 2.2总结 3.Method 3. ...

  6. PointNet++理解(PointNet++实现第2步)

    PointNet++实现第2步--PointNet++理解 一.PointNet的局限性(PointNet++出现的原因) 对每一个点映射到高维空间,再通过max结合.由于其网络直接暴力地将所有的点最 ...

  7. 基于PyTorch实现PointNet++

    PointNet++完整代码链接: https://github.com/zhulf0804/Pointnet2.PyTorch 关于点云的深度学习表示 PointNet / PointNet++是基 ...

  8. Pointet++ Tutorial

    目录 .0 前言 .1 Contributions .2 Solutions 2.1  Set Abstraction(SA) .3 Structure of Network 3.1 Sample l ...

  9. 『OPEN3D』1.1 点云处理 python篇

    目录 1.open3d中的点云IO 2.点云的可视化 3 点云voxel下采样 4. 顶点法线估计 5.最小外界矩 6. 凸包计算 7. 点云距离计算 8. DBSCAN clustering聚类 9 ...

最新文章

  1. boost--文件、目录操作
  2. Android studio中2种build.gradle文件介绍
  3. python常见的特异点
  4. 假如有人把支付宝所有存储服务器炸了,我们在里边的钱是不是都丢了?
  5. golang包管理解决之道——go modules初探
  6. 学习多媒体开发的正确姿势?陈功:看书 啃代码 搞插件
  7. 内地计算机科技学校,23所内地顶尖高校盘点!计算机学科哪家强?
  8. MacOS安装pip失败,提示:SyntaxError: invalid syntax
  9. springboot指定属性返回_SpringBoot中必须掌握的45个注解
  10. linux 列表看多个文件数量,查看linux默认能最多开启多少个文件数量
  11. iOS--控制器加载自定义view的xib
  12. 想拿高工资?那些年Java面试官常问的知识点项目实战
  13. java pattern详解_JAVA正则表达式:Pattern类与Matcher类详解
  14. UE4之Import源码解析
  15. 使用验证控件出现错误:要“jquery”ScriptResourceMapping。请添加一个名为 jquery (区分大小写)的 ScriptResourceMapping。”的解决办法。...
  16. silverlight打开和保存文件
  17. c语言五子棋设计报告及源代码,课程设计模板C语言之五子棋附源代码.pdf
  18. Consider defining a bean of type `xxx` in your configuration问题解决
  19. pyqt5 时间控件设为当前日期
  20. 采油区域java_[APIO2009]采油区域

热门文章

  1. Web Services模式——第一部分:基本数据类型
  2. [CKA]考试之K8s 版本升级
  3. boot2docker v19.03.5
  4. ubuntu黑屏无法进入系统
  5. javascript测试三种字符串替换方式效率
  6. 一文了解Linux磁盘缓存机制
  7. 【IT安全】全球最大银行卡暗网交易市场将关闭
  8. # AES加密原理-详解
  9. nas安装emby_FreeNAS下安装配置Emby个人媒体服务器
  10. 命令行操纵oracle数据库大全