一、回忆Farthest Point Sampling算法过程(建议详细看完)

我们选取一个点云,我们假设整个点集为一共有n个点,来进行算法的讲解。

  1. 随机在整个点集中选取一个点作为起始点,并且放入集合中,其中集合B为我们采样后的点集。
  2. 计算剩余n-1个点到的距离,并且选择距离最大的点,假设为,并将这个点写入集合
  3. 计算剩余n-2个点距离集合B中的点的距离,并选取最小的距离值假设为,其中假设点为,再计算n-2个点距离集合B中点的距离,并选取最小的距离值假设为,其中假设点为,随后选取中比较大的值,假设>。则将,放入点集
  4. 重复上面的第三步,直到选出我们需要的采样点个数时,终止运行。

建议、建议、建议:网上有很多博客已经写好这个算法,建议大家将算法原理对应代码过程,理解算法中的原理。

python:大家可以看一下这个博客中的代码实现:

链接转载,感谢博主

二、重点:我们今天的重点,深度学习中FPS采样算法流程以及代码实现

其实,你会发现深度学习中运行FPS速度很快,但是我们按照算法流程编写代码运行以后,速度非常的慢,这是由于我们写的算法是每个点之间的计算,但是深度学习中是矩阵的运算,而且在GPU上运行,所以速度比较快。

下面图解,可能有些抽象,大家对照代码理解。

首先,我们可以整体看一下这个过程:

其次,我们简述FPS内部过程:定义一些常量(对照代码看名称)

第一次循环:

第二次循环:

进行512次循环,即可得到采样点的index,维度为(64,512)。

主要是每次更新distance矩阵的值,然后求最远点,将最远点的index保存到centroids中。保证dist

以下代码为完整FPS的过程:

def farthest_point_sample(xyz, npoint, RAN=True):"""Input:xyz: pointcloud data, [B, N, C]npoint: number of samplesReturn:centroids: sampled pointcloud index, [B, npoint]"""device = xyz.deviceB, N, C = xyz.shapecentroids = torch.zeros(B, npoint, dtype=torch.long).to(device)   #用来储存采样index
#[64,512]distance = torch.ones(B, N).to(device) * 1e10      #用来储存距离
#[64,2048]if RAN:farthest = torch.randint(0, 1, (B,), dtype=torch.long).to(device)   #表示上一次抽样的到点 [64]else:farthest = torch.randint(1, 2, (B,), dtype=torch.long).to(device)batch_indices = torch.arange(B, dtype=torch.long).to(device)  #一个1-B的整数 [64]for i in range(npoint):centroids[:, i] = farthest  centroid = xyz[batch_indices, farthest, :].view(B, 1, 3)  #找出上一次采样的点
#[64,1,3]dist = torch.sum((xyz - centroid) ** 2, -1)#[64,2048]mask = dist < distance  #更新每次最小距离distance[mask] = dist[mask]farthest = torch.max(distance, -1)[1]  #求取最大距离 [64]print(farthest)return centroids

以下代码将FPS抽取出来的点云的index,转化为点云:

def index_points(points, idx):"""Input:points: input points data, [B, N, C]idx: sample index data, [B, S]Return:new_points:, indexed points data, [B, S, C]"""device = points.deviceB = points.shape[0]view_shape = list(idx.shape)view_shape[1:] = [1] * (len(view_shape) - 1)repeat_shape = list(idx.shape)repeat_shape[0] = 1batch_indices = torch.arange(B, dtype=torch.long).to(device).view(view_shape).repeat(repeat_shape)new_points = points[batch_indices, idx, :]return new_points

运行结果显示:可以从2048个点-->采样到512个点。

图解点云深度学习中FPS(Farthest Point Sampling)--最远点采样算法相关推荐

  1. FPS(Farthest Point Sampling)——最远点采样

    1.算法流程 假设点个数为N,N = {P1,P2,-,Pn},经过采样后点的集合为S,初始时S = {},采样c个点 <1> 在N个点中随机选择1个点Pk1,放入S,S = {Pk1} ...

  2. 重读经典(点云深度学习开山之作):《Deep learning on point clouds for 3D scene understanding》(持续更新中)

    本文介绍的是 PointNet 作者的博士论文:3D场景理解中的点云深度学习.从上图可以看到,整个博士论文主要贡献有两块:一是点云深度学习的网络架构(PointNet 和 PointNet++):二是 ...

  3. (图解)一步一步使用CPP实现深度学习中的卷积

    (图解)一步一步使用CPP实现深度学习中的卷积 导语 卷积操作在深度学习中的重要性,想必大家都很清楚了.接下来将通过图解的方式,使用cpp一步一步从简单到复杂来实现卷积操作. 符号约定 F为输入; w ...

  4. 国防科技大学发布最新「3D点云深度学习」综述论文

    点击上方"深度学习技术前沿",选择"星标"公众号 资源干货,第一时间送达 3D点云学习( Point Clouds)作为近年来的研究热点之一,受到了广泛关注,每 ...

  5. 分割点云数据_3D点云深度学习综述:三维形状分类、目标检测与跟踪、点云分割等...

    3D点云学习( Point Clouds)作为近年来的研究热点之一,受到了广泛关注,每年在各大会议上都有大量的相关文章发表.当前,点云上的深度学习变得越来越流行,人们提出了许多方法来解决这一领域的不同 ...

  6. 综述 | 国防科技大学发布最新「3D点云深度学习」综述论文

    点上方蓝字计算机视觉联盟获取更多干货 在右上方 ··· 设为星标 ★,与你不见不散 编辑:Sophia 计算机视觉联盟  报道  | 公众号 CVLianMeng 转载于 :专知 [人工智能资源(书籍 ...

  7. TPAMI三维点云深度学习技术综述

    点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 作者丨单博 来源丨 笑傲算法江湖 点击进入->3D视觉工坊学习交流群 国防科大 IEEE TPA ...

  8. 【论文翻译】点云深度学习综述 -- Deep Learning for 3D Point Clouds: A Survey

    论文链接:Deep Learning for 3D Point Clouds: A Survey 文章目录 摘要 1. 介绍 2. 三维形状分类 2.1 基于投影的网络 2.1.1 多视图表示 2.1 ...

  9. 【论文阅读】基于PointNet++点云深度学习的背包激光扫描数据的树种分类

    摘要 要调查森林资源,必须确定树种.然而,使用通过光探测和测距 (LiDAR) 收集的树木的 3D 点云来识别树种是一项挑战.PointNet++是一种点云深度学习网络,可以有效地对3D对象进行分类. ...

最新文章

  1. 如何手工删除AD RMS SCP?
  2. LMDB中的mmap、Copy On Write、MVCC深入理解——讲得非常好,常来看看!
  3. Struts2的文件目录
  4. pytorch微调bert_香侬读 | RoBERT: 没错,我就是能更强——更大数据规模和仔细调参下的最优BERT
  5. 版本控制系统 之一 概念、分类、常见版本控制系统(CVS、SVN、BitKeeper、Git 等)
  6. 实现自己的轻量级http调用工具
  7. 使用composer下载依赖包下载失败的解决方法
  8. 02 | 日志系统:一条SQL更新语句是如何执行的? 笔记(转)
  9. Spring容器的底层实现
  10. Java 内部类、局部内部类、静态内部类使用
  11. c++ 写x64汇编 5参数_第9篇-C/C++ x86_64的函数栈
  12. Android 对话框用法
  13. 【2019牛客多校第七场:H】Pair(数位dp)
  14. Linux上Meson安装及使用
  15. HTTP协议原理详解
  16. matlab将声音和噪声叠加,如何用matlab产生一个多次叠加的含高斯噪声的正
  17. 后现代婚礼机器人显神通_看机器人“各显神通”
  18. 论文阅读《Fast-MVSNet: Sparse-to-Dense Multi-View StereoWith Learned Propagation and Gauss-Newton Refine》
  19. 城市空中交通和无人系统的空中交通管制评估
  20. 小米2023届秋招校招内推

热门文章

  1. Unity三消类【水果乐园】消消乐游戏素材+源码
  2. 第10周-自选阅读项目
  3. C# 给窗口添加边框
  4. 磨金石教育摄影技能干货分享|优秀摄影欣赏—足球经典名画
  5. 计算机教育cscd,计算机教育杂志
  6. 计算机毕业设计ssm+vue 的医院体检预约小程序
  7. ***日本某官方Game
  8. 微信小程序:wxml中增加wxs脚本实现手机号/身份证等隐私信息显示
  9. BZOJ1654 奶牛舞会+tarjan算法(入门题目)+判断图中有几个环
  10. 晚上吃外卖适合点什么