本文经自动驾驶之心公众号授权转载,转载请联系出处。
一 ANN benchmark
链接:https://github.com/erikbern/ann-benchmarks
在高维空间中快速搜索最近的邻居是一个越来越重要的问题,尽管显然需要这样来推动优化,但很少有实证尝试以客观的方式比较方法。
该项目包含用于对所选度量的近似最近邻(ANN)搜索的各种实现进行基准测试的工具。已经预先生成了数据集(HDF5格式),并为每个算法准备了Docker容器,以及一个验证功能完整性的测试套件。
二 PCL
知名点云库 Point Cloud Library | The Point Cloud Library ,这个就不多说了,里面的功能非常丰富,支持多类点云处理算法。
三 ikdtree
链接:https://github.com/hku-mars/ikd-Tree
香港大学开源,ikd树是为机器人应用程序设计的增量k-d树。ikd树只使用新的到来点来增量更新k-d树,从而比现有的静态k-d树的计算时间低得多。除了逐点操作外,ikd树还支持一些功能,如逐box操作和下采样,这些功能在机器人应用中非常有用。
相关参考论文:
- ikd-Tree: An Incremental K-D Tree for robotic applications
- FAST-LIO2: Fast Direct LiDAR-Inertial Odometry
四 nanoflann
nanoflann只有头文件方便集成,nanoflann是一个仅限C++11头的库,用于构建具有不同拓扑结构的数据集的KD树:R2、R3(点云)、SO(2)和SO(3)(2D和3D旋转组)。不支持approximate NN。nanoflann不需要编译或安装,只需要在代码中#包含<nanoflan.hpp>。
五 libpointmatcher:
ETH 点云 icp 库,libpointmatcher用于实现点云对齐的迭代最近点(ICP)算法。它同时支持点对点和点对平面ICP。使用前者,它不仅可以解决刚性变换,还可以解决云之间的比例变化(即相似性变换)。
链接:https://libpointmatcher.readthedocs.io/en/latest/#developer
六 Open3D
英特尔实验室点云处理库:https://www.open3d.org/
Open3D是一个开源库,支持处理3D数据的软件的快速开发。Open3D前端公开了一组精心选择的C++和Python数据结构和算法。后端经过高度优化,并设置为并行化。它可以在不同的平台上进行设置,并以最小的工作量从源代码进行编译。代码干净、风格一致,并通过清晰的代码审查机制进行维护。Open3D已被用于许多已发表的研究项目,并积极部署在云中。里面也集成了各类最近邻匹配算法、ICP等配准算法。
七 Faiss
Meta 用于高效相似性搜索和密集向量聚类,链接:https://github.com/facebookresearch/faiss
Faiss包含几种相似性搜索方法。它假设实例被表示为向量,并由整数标识,并且向量可以与L2(欧几里得)距离或点积进行比较。与查询向量相似的向量是与查询向量具有最低L2距离或最高点积的向量。它还支持余弦相似性,因为这是归一化向量上的点积。
一些方法,如基于二进制矢量和紧凑量化码的方法,仅使用矢量的压缩表示,不需要保留原始矢量。这通常是以不太精确的搜索为代价的,但这些方法可以在单个服务器的主存中扩展到数十亿个向量。其他方法,如HNSW和NSG,在原始向量的顶部添加索引结构,以提高搜索效率。
GPU实现可以接受来自CPU或GPU存储器的输入。在具有GPU的服务器上,GPU索引可以用作CPU索引的插入式替换(例如,用GpuIndexFlatL2替换IndexFlatL2),并且自动处理到GPU存储器的副本/从GPU存储器的复制。然而,如果输入和输出都保持在GPU上,结果将更快。同时支持单GPU和多GPU使用。
八 ivox
基于LRU机制可DIY,链接:https://github.com/gaoxiang12/faster-lio
Faster LIO是一种用于激光雷达姿态跟踪和点云测绘的轻型激光雷达惯性里程计。它是在FastLIO2的基础上开发的,可提供约1.5-2倍的速度提升。对于固态激光雷达,它可以达到近1k-2k赫兹,对于典型的32线旋转激光雷达,可以达到超过100赫兹。
论文:https://github.com/gaoxiang12/faster-lio/blob/main/doc/faster-lio.pdf
九 nmslib
高效的相似性搜索库、用于评估通用非度量空间的 k-NN 方法的工具包。
链接:https://github.com/nmslib/nmslib
非度量空间库(NMSLIB)是一个高效的跨平台相似性搜索库,也是评估相似性搜索方法的工具包。核心库没有任何第三方依赖项。它最近越来越受欢迎。该项目的目标是创建一个有效和全面的工具包,用于在通用和非度量空间中进行搜索。尽管该库包含各种度量空间访问方法,但我们的主要关注点是通用和近似搜索方法,特别是非度量空间的方法。NMSLIB可能是第一个原则上支持非度量空间搜索的库。
NMSLIB是一个可扩展的库,这意味着可以添加新的搜索方法和距离函数。NMSLIB可以直接在C++和Python中使用(通过Python绑定)。此外,还可以构建一个查询服务器,该服务器可以从Java(或Apache Thrift(0.12版本)支持的其他语言)使用。Java有一个本机客户端,即它可以在许多平台上工作,而不需要安装C++库。