【最远点采样FPS】点云采样方式(一) — 最远点采样

本文介绍了点云采样的FPS(最远点采样)方法,详细阐述了FPS的采样步骤,包括随机选择初始点、计算点间距离并选择最远点等,强调了该方法的高复杂度和耗时特性。同时,提供了Python实现源码,并链接到《python三维点云从基础到深度学习》专栏,供读者深入学习。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本文为博主原创文章,未经博主允许不得转载。
本文为专栏《python三维点云从基础到深度学习》系列文章,地址为“https://blog.csdn.net/suiyingy/article/details/124017716”。

        点云最远点采样FPS(Farthest Point Sampling)方法的优势是可以尽可能多地覆盖到全部点云,但是需要多次计算全部距离,因而属于复杂度较高的、耗时较多的采样方法。

1 FPS采样步骤

        FPS采样步骤为:
        (1)选择一个初始点:可以随机选择,也可以按照一定的规则来选取。如果随机选取那么每次得到的结果都是不一样的,反之每次得到的结果就是一致的。

        (2)计算所有点与(1)中点的距离,选择距离最大的值作为新的初始点。

        (3)重复前两步过程,知道选择的点数量满足要求。

        由于(2)中每次选择的距离都是最大的,所以迭代的过程距离最大值会逐渐减少。这也就是下面代码中mask选取的依据。如果把加这一个限制,那么点会被来回重复选到。

2 python源码

# -*- coding: utf-8 -*-
""
### 最远点采样 (FPS) 的 ONNX 实现 为了在 ONNX 中实现最远点采样(FPS),需要构建个自定义算子来执行该操作,因为 ONNX 自身并不直接提供 FPS 功能。这通常涉及以下几个方面的工作: - 定义个新的运算符用于表示最远点采样的逻辑。 - 使用 C++ 或 Python API 创建此运算符的具体实现。 - 将新创建的运算符集成到现有的 ONNX 模型中。 对于具体实现过程,在 Python 和 Open3D 上已经实现了 FPS 函数[^1],但是要将其转换成可以在 ONNX 运行环境中使用的版本,则需遵循如下步骤: #### 1. 构建自定义 ONNX 算子 首先,编写个符合 ONNX Operator 接口标准的新类 `FarthestPointSample` 来封装最远点采样的算法逻辑。这个类应该继承自 `onnx::OpKernelContext` 并重写其成员函数以完成实际的数据处理工作。 ```cpp #include "core/providers/cpu/tensor/farthest_point_sample.h" namespace onnxruntime { class FarthestPointSample final : public OpKernel { public: explicit FarthestPointSample(const OpKernelInfo& info); protected: Status Compute(OpKernelContext* context) const override; }; } // namespace onnxruntime ``` #### 2. 注册自定义算子至 ONNX Runtime 为了让 ONNX runtime 能够识别并调用上述定义好的 `FarthestPointSample` 类,还需要通过注册机制告知系统有关此类的信息。可以通过扩展 `.yaml` 文件的方式向模型添加新的节点类型描述;也可以直接修改源码中的静态初始化器来进行动态加载。 ```cpp using KernelDefBuilder = ::onnxruntime::kernel_registry::KernelDefBuilder; static constexpr char kNodeName[] = "FarthestPointSample"; REGISTER_KERNEL_BUILDER(Name(kNodeName).Device(DEVICE_CPU), FarthestPointSample); ``` #### 3. 修改现有网络结构图以便支持新功能 最后步就是调整原有的计算图拓扑关系,使得数据流能够经过新增加的操作单元。此时可能需要用到些辅助工具如 Netron 可视化编辑器帮助理解整个流程走向,并确保所有连接都是正确无误的。 以上就是在 ONNX 中实现最远点采样的基本思路和技术要点概述。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Coding的叶子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值