一、复现仓库

论文中文名 code paper 备注
SpinNet:学习 3D 点云配准的通用表面描述符 (CVPR 2021) SpinNet: Learning a General Surface Descriptor for 3D Point Cloud Registration (CVPR 2021) https://arxiv.org/abs/2011.12149
* Geometric Transformer用于快速、稳健点云配准的几何变换器 Geometric Transformer for Fast and Robust Point Cloud Registration https://arxiv.org/abs/2202.06688 已训练
PointDSC:使用深度空间一致性的稳健点云配准 PointDSC: Robust Point Cloud Registration using Deep Spatial Consistency https://arxiv.org/abs/2103.05465
学习多视图3D点云配准 Learning Multiview 3D Point Cloud Registration https://arxiv.org/abs/2001.05119
* D3Feat:密集检测和 3D 局部特征描述的联合学习 D3Feat: Joint Learning of Dense Detection and Description of 3D Local Features https://arxiv.org/abs/2003.03164 环境配成功,仓库训练集链接失效
* FCGF:全卷积几何特征 Fully Convolutional Geometric Features, ICCV, 2019 https://node1.chrischoy.org/data/publications/fcgf/fcgf.pdf 已训练、可视化
* PREDATOR:低重叠的 3D 点云配准 PREDATOR: Registration of 3D Point Clouds with Low Overlap (CVPR 2021, Oral) https://arxiv.org/abs/2011.13005 已训练
* DGCNN:用于点云学习的动态图 CNN Dynamic Graph CNN for Learning on Point Clouds https://arxiv.org/abs/1801.07829 已训练
* 3DMatch 3DMatch Toolbox https://arxiv.org/abs/1603.08182 由于cuda版本不兼容,无法训练,过程已知晓
Lepard:学习刚性和可变形场景中的部分点云匹配 Lepard: Learning Partial point cloud matching in Rigid and Deformable scenes https://arxiv.org/abs/2111.12591 已训练、可视化
RoCNet:使用深度学习对点云进行 3D 稳健配准 https://arxiv.org/abs/2303.07963
PointNetLK:使用 PointNet 进行点云注册 PointNetLK: Robust & Efficient Point Cloud Registration using PointNet https://openaccess.thecvf.com/content_CVPR_2019/papers/Aoki_PointNetLK_Robust__Efficient_Point_Cloud_Registration_Using_PointNet_CVPR_2019_paper.pdf
PointSIFT:用于 3D 点云语义分割的类似 SIFT 的网络模块 PointSIFT: A SIFT-like Network Module for 3D Point Cloud Semantic Segmentation https://arxiv.org/abs/1807.00652
EP2P-Loc:用于大规模视觉定位的端到端 3D 点到 2D 像素定位 (ICCV 2023) EP2P-Loc: End-to-End 3D Point to 2D Pixel Localization for Large-Scale Visual Localization (ICCV 2023)
* RoReg:具有定向描述符和局部旋转的成对点云配准 RoReg: Pairwise Point Cloud Registration with Oriented Descriptors and Local Rotations https://ieeexplore.ieee.org/document/10044259 已训练、可视化
SGHR :具有可靠位姿图初始化和历史重新加权的鲁棒多视图点云配准 Robust Multiview Point Cloud Registration with Reliable Pose Graph Initialization and History Reweighting https://arxiv.org/abs/2304.00467
WSDesc:用于点云配准的弱监督 3D 局部描述符学习 WSDesc: Weakly Supervised 3D Local Descriptor Learning for Point Cloud Registration https://arxiv.org/abs/2108.02740
3D 点云的端到端学习局部多视图描述符 End-to-End Learning Local Multi-view Descriptors for 3D Point Clouds https://arxiv.org/abs/2003.05855
REGTR:与 Transformer 的端到端点云对应 REGTR: End-to-end Point Cloud Correspondences with Transformers https://openaccess.thecvf.com/content/CVPR2022/papers/Yew_REGTR_End-to-End_Point_Cloud_Correspondences_With_Transformers_CVPR_2022_paper.pdf 以训练、可视化
用于点云匹配的旋转不变变压器 Rotation-Invariant Transformer for Point Cloud Matching (CVPR 2023) https://arxiv.org/abs/2303.08231
IMFNet:用于点云配准的可解释多模态融合 IMFNet: Interpretable Multimodal Fusion for Point Cloud Registration, 2022
SpinNet:学习 3D 点云配准的通用表面描述符 SpinNet: Learning a General Surface Descriptor for 3D Point Cloud Registration (CVPR 2021) https://arxiv.org/abs/2011.12149
YOHO:您只需假设一次:使用旋转等变描述符进行点云配准 You Only Hypothesize Once: Point Cloud Registration with Rotation-equivariant Descriptors https://arxiv.org/abs/2109.00182 已训练
KPConv:点云的灵活可变形卷积 点云的灵活可变形卷积 https://arxiv.org/abs/1904.08889

核心流程

特征检测——提取关键点

  1. Harris 3D:这是点云中的三维扩展,基于角点检测的算法。它寻找点云中的角点,这些点在多个方向上都有显著的弯曲。
  2. SIFT-3D:SIFT(尺度不变特征变换)算法的三维扩展,用于检测点云中的关键点。它可用于匹配不同视角的点云。
  3. ISS(Intrinsic Shape Signature):ISS算法基于曲率估计,寻找点云中的稳定关键点。它可以有效地检测不同尺度和方向上的关键点。
  4. SHOT(Signature of Histograms of Orientations):SHOT算法计算每个关键点周围的法线方向直方图,并用于描述点云的局部形状。
  5. ISS+RIFT:这是ISS(Intrinsic Shape Signature)关键点检测与RIFT(Rotation Invariant Feature Transform)描述子相结合的方法,用于增强关键点的描述性能。
  6. 3D Harris:类似于Harris 3D,这个算法基于点云中的角点,但可能采用不同的角点检测策略。
  7. USIP:一种无监督稳定兴趣点检测器,可以在任意变换下从 3D 点云中检测高度可重复且精确定位的关键点,而无需任何地面实况训练数据

特征描述——特征描述子

  1. FPFH(Fast Point Feature Histograms):FPFH算法结合了点云中每个点的直方图信息,用于描述点云的局部特征。它考虑了点的相对位置和法线信息。
  2. PFH(Point Feature Histograms):PFH算法扩展了FPFH,更细致地描述点云的局部形状,考虑了点之间的配准信息。
  3. SHOT:SHOT不仅用于关键点检测,还可用于描述点云的局部结构。它考虑了点云中每个点的法线和相对位置。
  4. 3D Shape Context:这是一种描述子算法,使用点云中的形状上下文来表示关键点的局部特征。
  5. Spin Image:Spin Image是一种描述子算法,它将点云中的二维直方图用于描述关键点的局部结构,通常用于点云配准任务。
  6. Unique Shape Context:这是一种改进的形状上下文算法,用于描述点云中的关键点。它考虑点云中关键点的拓扑和几何信息。
  7. 4D-FPFH:4D-FPFH(Four-Dimensional Fast Point Feature Histograms)是FPFH的扩展,考虑了关键点的四维直方图来描述点云的局部特征。
  8. Super3D:Super3D是一种用于描述点云中关键点的多尺度算法,通过考虑点云的多个层次来提高描述子的性能。

特征匹配——关键点匹配

变换估计

RANSAC 详解

最后计算得出的理论模型与测试值的误差最小。最小二乘法的思想。通过计算最小均方差关于参数a、b的偏导数为零时的值。事实上,在很多情况下,最小二乘法都是线性回归的代名词。

遗憾的是,最小二乘法只适合与误差较小的情况。试想一下这种情况,假使需要从一个噪音较大的数据集中提取模型(比方说只有20%的数据时符合模型的)时,最小二乘法就显得力不从心了。

RANSAC算法的输入是一组观测数据(往往含有较大的噪声或无效点),一个用于解释观测数据的参数化模型以及一些可信的参数。RANSAC通过反复选择数据中的一组随机子集来达成目标。被选取的子集被假设为局内点,并用下述方法进行验证:

  • 有一个模型适应于假设的局内点,即所有的未知参数都能从假设的局内点计算得出。
  • 用1中得到的模型去测试所有的其它数据,如果某个点适用于估计的模型,认为它也是局内点。
  • 如果有足够多的点被归类为假设的局内点,那么估计的模型就足够合理。
  • 然后,用所有假设的局内点去重新估计模型(譬如使用最小二乘法),因为它仅仅被初始的假设局内点估计过。
  • 最后,通过估计局内点与模型的错误率来评估模型。
  • 上述过程被重复执行固定的次数,每次产生的模型要么因为局内点太少而被舍弃,要么因为比现有的模型更好而被选用。

3DMatch论文解析

数据集介绍:https://blog.csdn.net/zhulf0804/article/details/110259055

论文介绍:https://xgyopen.github.io/2019/03/20/2019-03-20-imv-pointcloud-3dmatch-paper/

内容 描述
Marvin官网 普林斯顿大学维护的深度学习框架。C++,仅依赖CUDA 7.5和cuDNN 5.1
论文《一种改进的点云局部几何特征匹配方法_史魁洋》
使用深度学习进行点云匹配(一) 第1个示例(Demo: Align Two Point Clouds with 3DMatch)
使用深度学习进行点云匹配(二) 第2个示例(Converting 3D Data to TDF Voxel Grids)
使用深度学习进行点云匹配(三) 第3个示例(Training 3DMatch from RGB-D Reconstructions)
使用深度学习进行点云匹配(四) 更换数据跑第1个示例(Demo: Align Two Point Clouds with 3DMatch)
使用深度学习进行点云匹配(五) TDF的具体含义、如何训练3DMatch描述子
利用深度学习进行点云匹配(六) 孪生网络,第3个示例(Training 3DMatch from RGB-D Reconstructions)
KNN算法与Kd树
刚体变换
RANSAC算法详解
回环检测
三维重建中的表面模型构建—TSDF算法
下面是其他的链接
机器人视觉 移动机器人 VS-SLAM ORB-SLAM2 深度学习目标检测 yolov3 行为检测 opencv PCL 机器学习 无人驾驶
一文教你读懂3D目标检测
open3d文档 包含点云处理、KD树

PointNet & PointNet++论文解析

知乎论文介绍:https://zhuanlan.zhihu.com/p/369059467

https://xgyopen.github.io/2019/04/01/2019-04-01-imv-pointcloud-pointnet-paper/

内容 描述
原始论文:PointNet PointNet主页
代码:pointnet Py2.7、TF1.0.1、Ubuntu14.04(CUDA8.0、cuDNN5.1)
CVPR2017口头报告视频 PointNet
原始论文:PointNet++ PointNet++主页
代码:pointnet++ Py2.7/Py3、TF1.2、Ubuntu14.04
原始论文:Frustum PointNets Frustum PointNets主页
对于 train.py

默认参数,实现的是点云分类

  1. 在sys.path中添加当前目录(provider.py)、/models目录(pointnet_cls.py)、/utils目录(tf_util.py

  2. 新建/log目录,将pointnet_cls.py、train.py拷贝一份副本至此文件夹做备份,并生成log_train.txt

  3. 载入/data中的训练集、测试集(/data/modelnet40_ply_hdf5_2048/train_files.txt、/data/modelnet40_ply_hdf5_2048/test_files.txt)

  4. 主体代码(PointNet分类网络):
    架构:输入B×N×3,输出B×40,T-Net+分类器
    损失:两部分构成(classify_loss + mat_diff_loss * reg_weight)

  5. train_one_epoch()函数的思路

    • 读取数据:训练集有5个文件(每个文件中有2048个数据),每个epoch打乱读取这5个文件的顺序,只取每个文件的data键**(2048, 2048, 3)-数据、label键(2048, 1)**-标签

    • 截取data的前NUM_POINT(取1024)个点**(2048, 1024, 3)**

    • 打乱data**(2048, 1024, 3)、label(2048,)**中2048个数据的顺序,并将label展平

    • 算出每个batch的数量num_batches**(64=2048//32)**

    • 对每个batch的数据batch_data

      (32, 1024, 3)

      通过旋转(rotation)、抖动(jittering)做数据增强

      • 旋转:对batch_data中的每个数据**(1024, 3)**旋转不同的3×3矩阵(对应Ry)
      • 抖动:
        360°

FCGF论文阅读笔记

https://blog.csdn.net/weixin_43977640/article/details/112642898

https://cloud.tencent.com/developer/article/1756250

PointNetLK网络结构由两个部分组成:特征提取网络和LK配准网络。特征提取网络是一个PointNet网络,用于从输入的三维点云中提取特征。LK配准网络是一个多层感知器(MLP),用于从特征中估计变换矩阵。具体来说,特征提取网络由几个全连接层和几个局部特征提取层组成,其中局部特征提取层使用类似于PointNet的架构。LK配准网络由几个全连接层组成,其中最后一层输出一个4x4的变换矩阵。整个网络的输入是两个三维点云,输出是一个变换矩阵,用于将源点云中的点映射到目标点云中的对应点。

卷积之1*1 卷积(残差网络)、2D/3D卷积、转置卷积数学推导、应用实例

https://cloud.tencent.com/developer/article/2289817?areaId=106001

Open3D

官方教程

http://www.open3d.org/docs/

中文教程

https://blog.csdn.net/io569417668/category_10028098.html