基于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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/286705.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Spring】11 EnvironmentAware 接口

文章目录 1. 简介2. 作用3. 使用3.1 创建并实现接口3.2 配置 Bean 信息3.3 创建启动类3.4 启动 4. 应用场景总结 Spring 框架为开发者提供了丰富的扩展点&#xff0c;其中之一就是 Bean 生命周期中的回调接口。本文将着重介绍一个与环境&#xff08;Environment&#xff09;相关…

JVM调优排错专题

JVM调优排错专题 1 打开MAT报错 1 打开MAT报错 下载了linux版本的 MAT 软件&#xff0c;1.15.0版本。 下载地址&#xff1a;https://eclipse.dev/mat/downloads.php 运行时报错了。 错误截图 报错日志 wittasus:/usr/develop/mat$ ./MemoryAnalyzer Unrecognized option:…

如何实现TAB切换时按钮变换样式

实现TAB切换时按钮变换样式的方法 当鼠标移动到TAB标签按钮时&#xff0c;按钮样式发生改变(红底白色加粗字体)&#xff0c;当点击按钮切换显示内容后&#xff0c;按钮样式发生改变(黄底黑色加粗字体) 选中按钮“作业批阅结果”&#xff0c;右键>>编辑按钮形状>>编…

黑盒测试中关键截图如何打点

黑盒测试中关键截图如何打点Android黑盒测试过程中如何进行有效的打点是我们经常遇到的问题&#xff0c;我们一般会在脚本内部进行数据打点&#xff0c;也可以使用其他进程录屏或截图。那我们如何选取合适的方式进行打点记录呢&#xff1f;下图是对常用打点方式的统计&#xff…

嵌入式软件测试(黑盒测试)---三年嵌入式软件测试的理解

文章内容为本人这三年来在嵌入式软件测试&#xff08;黑盒&#xff09;上的一些积累吧&#xff0c;说起来也挺快的&#xff0c;毕业三年的时间就这样过去了&#xff0c;在两家公司工作过&#xff08;现在这家是第二家&#xff09;&#xff0c;这几年的测试项目基本都是围绕着嵌…

AI抠图软件哪个好用?推荐这三款抠图工具给你

AI抠图软件哪个好用&#xff1f;你是否听说过AI抠图这个操作呢&#xff1f;简单来说&#xff0c;抠图就是一种对图像进行处理的技术&#xff0c;它的目的是将图片中的某些区域去除或者替换。比如&#xff0c;如果你有一张背景很杂乱的图片&#xff0c;你想把背景去掉&#xff0…

Ubuntu中基础命令使用

前言 以下指令测试来自于Ubuntu18.04 如果有说的不对的&#xff0c;欢迎指正与补充 以下指令为我学习嵌入式开发中使用过最多的指令 目录 前言 1 ls 首先我们进入到Linux操作系统中 2 touch创建一个文件 3 pwd查看当前路径 4 创建目录 5 删除文件 6 cd 目录跳转 0…

基于Java SSM框架实现停车场车位管理系统项目【项目源码】计算机毕业设计

基于java的SSM框架实现停车场车位管理系统演示 JSP技术 JSP技术本身是一种脚本语言&#xff0c;但它的功能是十分强大的&#xff0c;因为它可以使用所有的JAVA类。当它与JavaBeans 类进行结合时&#xff0c;它可以使显示逻辑和内容分开&#xff0c;这就极大的方便了运动员的需…

全链路压力测试:解析其主要特点

随着信息技术的飞速发展和云计算的普及&#xff0c;全链路压力测试作为一种关键的质量保障手段&#xff0c;在软件开发和系统部署中扮演着至关重要的角色。全链路压力测试以模拟真实生产环境的压力和负载&#xff0c;对整个业务流程进行全面测试&#xff0c;具有以下主要特点&a…

使用RedisCacheWriter#clean在线异步地批量扫描匹配删除缓存数据-spring-data-redis

1.背景 生产环境&#xff0c;某云的某个业务Redis实例&#xff0c;触发内存使用率&#xff0c;连续 3 次 平均值 > 85 %告警。 运维同学告知&#xff0c;看看需要怎么优化或者升级配置&#xff1f;分享了其实例RDB的内存剖析链接。 通过内存剖析详情发现&#xff0c;存在某…

【数据分享】2019-2023年我国地级市逐年新房房价数据(免费获取/Excel/Shp格式)

房价是一个城市发展程度的重要体现&#xff0c;一个城市的房价越高通常代表这个城市越发达&#xff0c;对于人口的吸引力越大&#xff01;因此&#xff0c;房价数据是我们在各项城市研究中都非常常用的数据&#xff01;之前我们分享了2019—2023年我国地级市逐月的新房房价数据…

超实用的Web兼容性测试经验总结,建议Mark

在日常工作中&#xff0c;我们经常碰到网页不兼容的问题。我们之所以要做兼容性测试&#xff0c;目的在于保证待测试项目在不同的操作系统平台上正常运行。 主要包括待测试项目能在同一操作系统平台的不同版本上正常运行&#xff1b;待测试项目能与相关的其他软件或系统的“和…