基于paddlepaddle的FPS最远点采样

2023-12-20 02:28
文章标签 采样 fps paddlepaddle 最远

本文主要是介绍基于paddlepaddle的FPS最远点采样,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

什么是FPS最远点采样?

最远点采样(Farthest Point Sampling,FPS)是一种常用的采样算法,主要用于点云数据(如激光雷达点云数据、分子坐标等)的采样。

为了方便解释,定义一下待采样点到采样点的“距离”为待采样点到所有采样点的距离的最小值。

这种算法的核心思想是,一开始先从数据集中随机采样一个点,然后采样距离采样点最远的待采样点作为下一个采样点,以此类推,直到达到所需的采样点数量。通过这种方式,最远点采样能够保证对样本的均匀采样。

例如下图,红点都是采样点,白点都是待采样点,如果此时还没有达到所需的采样点数量,那么就会采样B点。因为A到采样点的距离为min(3,4)=3,B到采样点的距离为min(6,5)=5,C到采样点的距离为min(6,3)=3,在其中点B的距离是最远的。

怎么实现FPS最远点采样?

解释都在代码注释里。

import paddledef farthest_point_sample(xyz, npoint):"""Input:xyz: pointcloud data, [B, N, 3]B: batch 批次数N: 一批次点的数量3: 代表x,y,z轴三个通道npoint: number of samples 需要采样点的个数Return:centroids: sampled pointcloud index, [B, npoint]返回的是采样点的索引"""B, N, C = xyz.shape# 获取点云的 batch, 点数, 通道数# B*N = xzy所存储的所有的点# 可以形象地理解xyz为 B张二维表格里面存储的都是点坐标centroids = paddle.zeros([B, npoint])# centroids用来保存采样点的索引下标 初始全部为0# 可以形象地理解为一张二维表格 有B行 npoint列# 表里面每个单元格代表的意思是 B batch下 最远点的索引distance = paddle.ones([B, N])*1e10# 一开始初始化要大# 存储所有点到当前采样点的距离# 可以形象地理解为一张二维表格 有B行 N列# 表里面每个单元格代表的意思是 B batch下 第N个点距离采样点的距离farthest = paddle.randint(0, N, (B,))# 一开始先随机生成采样点# 用于存储当前batch批次中距离已采样点最远的点的索引。batch_indices = paddle.arange(B)# 一个从0到B-1的整数序列,代表批次的索引。for i in range(npoint):# 代表进行n次点的采样 for n 次centroids[:, i] = farthest# 更新表的第i列 用于记录每个batch下的第i个最远点的索引xyz_np = xyz.numpy()# 获取到所有点的坐标batch_indices_np = batch_indices.numpy().astype('int64')# 获取到batch批次的索引farthest_np = farthest.numpy().astype('int64')# 获取到不同批次的采样点的索引centroid = xyz_np[batch_indices_np, farthest_np, :]# 获取到不同批次下的采样点的坐标# shape = [b,1000 ,3]centroid = paddle.to_tensor(centroid).unsqueeze(1)# todo 笔记# shape = [b, 1 ,1000, 3]dist = paddle.sum((xyz - centroid) ** 2, -1)# todo 笔记# 计算所有点到采样点的距离 -1代表在最后一个维度进行相加mask = dist < distance# todo 笔记# mask 为tensor bool[……]# dist 保存的是待采样点到 前一个采样点的距离# distance 保存的是 待采样点到 其他采样点的距离(除了前一个采样点)# 有多个采样点时, 其余点到采样点的距离应该取最小值# 例如 A B 为采样点 C为其余点 AC距离为5 BC距离为3 则采用3 不用5distance_np = distance.numpy()dist_np = dist.numpy()mask_np = mask.numpy()distance_np[mask_np] = dist_np[mask_np]# todo 笔记# 只有mask_np 为True时才会 替换 也就是 dist更小时才会替换# 确保里面都是最小值distance = paddle.to_tensor(distance_np)farthest = paddle.argmax(distance, -1)# -1 代表在最后一个维度找最大值并返回索引return centroids

这篇关于基于paddlepaddle的FPS最远点采样的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/514502

相关文章

重复采样魔法:用更多样本击败单次尝试的最强模型

这篇文章探讨了通过增加生成样本的数量来扩展大型语言模型(LLMs)在推理任务中的表现。 研究发现,重复采样可以显著提高模型的覆盖率,特别是在具有自动验证工具的任务中。研究还发现,覆盖率与样本数量之间的关系可以用指数幂律建模,揭示了推理时间的扩展规律。尽管多数投票和奖励模型在样本数量增加时趋于饱和,但在没有自动验证工具的任务中,识别正确样本仍然是一个重要的研究方向。 总体而言,重复采样提供了一种

深度学习(十一)-PaddlePaddle

PaddlePaddle PaddlePaddle(Parallel Distributed Deep Learning,中文名飞桨) 是百度公司推出的开源、易学习、易使用的分布式深度学习平台 源于产业实践,在实际中有着优异表现 支持多种机器学习经典模型 优点 易用性。语法简洁,API的设计干净清晰 丰富的模型库。借助于其丰富的模型库,可以非常容易的复现一些经典方法 全中文说明文档

研究纹理采样器在像素级别的采样位置

问题 【纹理采样器】是一个基础的概念。假设有一个正方形面片,顶点的UV范围是0.0~1.0,那么在这个正方形面片上采样一张纹理时,会呈现出完整的纹理。 但我现在关注的问题是,在像素级别上,采样的位置是怎样的。具体来讲:对于UV值是(0.0,0.0)的点,它对应的采样位置是纹理最左上角像素的中心?还是纹理最左上角像素的左上角?即,下面左右哪个是正确的情况? 在宏观上,尤其是像素较多的时候,二者

爆改YOLOv8|利用yolov10的SCDown改进yolov8-下采样

1, 本文介绍 YOLOv10 的 SCDown 方法来优化 YOLOv8 的下采样过程。SCDown 通过点卷积调整通道维度,再通过深度卷积进行空间下采样,从而减少了计算成本和参数数量。这种方法不仅降低了延迟,还在保持下采样过程信息的同时提供了竞争性的性能。 关于SCDown 的详细介绍可以看论文:https://arxiv.org/pdf/2405.14458 本文将讲解如何将SCDow

优化采样参数提升大语言模型响应质量:深入分析温度、top_p、top_k和min_p的随机解码策略

当向大语言模型(LLM)提出查询时,模型会为其词汇表中的每个可能标记输出概率值。从这个概率分布中采样一个标记后,我们可以将该标记附加到输入提示中,使LLM能够继续输出下一个标记的概率。这个采样过程可以通过诸如 temperature 和 top_p 等参数进行精确控制。但是你是否曾深入思考过temperature和top_p参数的具体作用? 本文将详细解析并可视化定义LLM输出行为的

word2vec 两个模型,两个加速方法 负采样加速Skip-gram模型 层序Softmax加速CBOW模型 item2vec 双塔模型 (DSSM双塔模型)

推荐领域(DSSM双塔模型): https://www.cnblogs.com/wilson0068/p/12881258.html   word2vec  word2vec笔记和实现 理解 Word2Vec 之 Skip-Gram 模型 上面这两个链接能让你彻底明白word2vec,不要搞什么公式,看完也是不知所云,也没说到本质. 目前用的比较多的都是Skip-gram模型 Go

YoloV10改进策略:下采样改进|自研下采样模块(独家改进)|疯狂涨点|附结构图

文章目录 摘要自研下采样模块及其变种第一种改进方法 YoloV10官方测试结果改进方法测试结果总结 摘要 本文介绍我自研的下采样模块。本次改进的下采样模块是一种通用的改进方法,你可以用分类任务的主干网络中,也可以用在分割和超分的任务中。已经有粉丝用来改进ConvNext模型,取得了非常好的效果,配合一些其他的改进,发一篇CVPR、ECCV之类的顶会完全没有问题。 本次我将这个模

CUDAPCL 点云体素下采样

文章目录 一、简介二、实现代码三、实现效果参考资料 一、简介 体素下采样是指使用常规体素网格从输入点云创建均匀下采样的点云。它经常被用作许多点云处理任务的预处理步骤。该算法分为两步操作: (1)并行的将每个点分配到其所处的体素中。 (2)并行遍历所有体素,并求取每个体素中所有点的质心点。 二、实现代码 VoxelSample.cuh #ifndef VOXELS

Open3D 体素随机下采样

目录 一、概述 1.1原理 1.2实现步骤 1.3应用场景 二、代码实现 三、实现效果 3.1原始点云 3.2体素下采样后点云 Open3D点云算法汇总及实战案例汇总的目录地址: Open3D点云算法与点云深度学习案例汇总(长期更新)-CSDN博客 一、概述         体素随机下采样是一种常用的点云简化方法,通过将点云划分为立方体体素网格,并从每个体素中随机

matlab实现kaiser窗+时域采样序列(不管原信号拉伸成什么样子)是一样的,变到频谱后再采样就是一样的频域序列。

下图窗2的频谱在周期化的时候应该是2(w-k*pi/T)我直接对2w减得写错了 可见这两个kaiser窗频谱不一样,采样间隔为2T的窗,频谱压缩2倍,且以原采样频率的一半周期化。 但是这两个不同的kaiser窗在频域采样点的值使完全一致的。这和matlab模拟dft的过程吻合 也说明不管原信号拉伸成什么样子,只要时域采样序列是一样的,变到频谱后再采样就是一样的频域序列。 (与原信号的